TUTORIELS 
Une barre d'outils en CSS et Javascript (2/2)
Utiliser les spécifications CSS2 pour réaliser une barre d'outils web réaliste, et Javascript pour y associer des fonctionnalités d'édition de texte.  (20 février 2002)
 

Dans ce second volet de notre tutoriel, nous allons décrire les fonctions Javascript qui associeront à l'évenement onClick, pour chaque bouton pressé, les comportements correspondants (mise en gras du texte sélectionné, mise en italique du texte sélectionné, transformation en lien hypertexte du lien sélectionné.

Les deux premiers comportements peuvent être réunis en une seule fonction Javascript que nous appellerons format, et dont voici le code:

function format(f) {
  var str = document.selection.createRange().text;
  document.formulaire.texte.focus();
  var sel = document.selection.createRange();
  sel.text = "<" + f + ">" + str + "</" + f + ">";
  return;
}


Cette fonction utilise:
- l'élément document (la page web);
- les sous-éléments selection (et sa méthode createRange() qui va permettre de récupérer le texte sélectionné) et formulaire (le nom de notre formulaire, défini par: <FORM name="formulaire"...>);
- Les sous-sous éléments text (sous-élément de selection.createRange()) et texte (sous-élement de formulaire, représentant le nom de l'objet de formulaire "champ multiligne" défini par <TEXTAREA name="texte"...>); A ce dernier élément on applique la méthode focus() pour caractériser que la sélection doit être prise en compte en son sein.
Il reste alors à modifier le texte de la sélection pour y inclure, avant et après, les balises <b> et </b> ou <i> et </i> suivant le bouton pressé. On passera donc "b" ou "i" en paramètre de la fonction format().

Quant au comportement associé au troisième bouton, il est programmé comme suit:

function lien() {
  var str = document.selection.createRange().text;
  document.formulaire.texte.focus();
  var lien = prompt("URL:","http://");
  if (lien != null) {
    var sel = document.selection.createRange();
    sel.text = "<a href=\"" + lien + "\">" + str + "</a>";
  }
  return;
}

Là encore, on isole le texte sélectionné au sein de l'objet "champ mutiligne" de notre formulaire, puis on demande, par une alerte Javascript (fontion prompt()) à l'internaute de saisir une URL. Si celle-ci est effectivement saisie, alors on modifie le texte de la sélection pour y inclure les balises <a href="URL saisie"> et </a>.

En résumé, pour obtenir le résultat suivant (rappel du premier volet):

Nous écrirons, outre le fichier CSS définit dans la premier volet, et que nous appellerons barreoutils.css, et le fichier Javascript qui contient les deux fonctions détaillées ci-dessus, fichier que nous appellerons barreoutils.js:

<html>
<head>
<link rel="stylesheet" type="text/css" href="barreoutils.css">
<script language="Javascript" src="barreoutils.js"></script>
</head>
<body>
<form name="formulaire">
  <center>
    <table cellpadding="0" cellspacing="0" border="2">
      <tr>
        <td>
          <div id="outils">
<img class="out" src="/exemples/css_barreoutils/bold.gif"
          width="16" height="16" align="middle"
          onMouseOver="this.className='over';" onMouseOut="this.className='out';"
          onClick="format('b');">
<img class="out" src="/exemples/css_barreoutils/italic.gif"
          width="16" height="16" align="middle"
          onMouseOver="this.className='over';" onMouseOut="this.className='out';"
          onClick="format('i');">
<img class="out" src="/exemples/css_barreoutils/link.gif"
          width="32" height="16" align="middle"
          onMouseOver="this.className='over';" onMouseOut="this.className='out';"
          onClick="lien();">
          </div>
          <textarea cols="30" rows="6" name="texte"></textarea>
        </td>
      </tr>
    </table>
  </center>
</form>
</body>
</html>

On peut étendre le principe énoncé ici en rajoutant d'autres boutons permettant d'inclure d'autres balises, jusqu'à réaliser un éditeur HTML complet. A vos claviers...


Les meilleures astuces CSS sur le JDN :
- Comment appliquer les CSS d'une page web au contenu d'une iframe ?
- Comment centrer horizontalement une DIV dans une autre en CSS ?
- Comment créer un arrière-plan (backgroud) CSS extensible et adaptable ?
- Comment définir les cellpadding et cellspacing en CSS ?
- Comment modifier l'image d'un bouton input en CSS ?
- Comment rendre l'arrière-plan d'un élément semi-transparent en conservant le texte de cet élément opaque en CSS ?
- Internet Explorer supporte-t-il l'attribut CSS border-radius

 
[ Jérôme MorlonJDNet
 
Accueil | Haut de page