page d'accueil

Un éditeur html wysiwyg (6)

Note: les exemples de cette page ne fonctionnent toujours qu'avec Microsoft Internet Explorer 5.5 minimum (sans parler du fait que je ne teste que sous IE6).

Ordre du jour

Contrôle de la mise en forme

En lisant un peu plus attentivement l'article Creating Editable Web Pages in Internet Explorer 5.5, je repère un paragraphe intitulé «Determining Whether an Element Is Editable» qui comme son titre l'indique explique comment déterminer si un élément est modifiable.

Apparament, il est préférable d'utiliser la propriété «isContentEditable» plutôt que la valeur de l'attribut «contentEditable» pour savoir si le texte sélectionné est modifiable ou non. Après quelques essais et un petit effort de réflexion, je parviens à modifier correctement la fonction «doCommand()» pour ne rien faire lorsque le texte n'est pas modifiable.

Comme ça au moins il n'est plus possible de s'amuser à modifier le reste de la page. Par contre, s'il y a plusieurs zones de texte wysiwyg, la barre d'outils de l'une permettra de modifier le texte de l'autre, mais c'est quand même pas catastrophique.

Plus ennuyeux, je ne peux pas utiliser le bouton [Copier] pour récupérer un morceau de texte sélectionné dans le reste de la page, mais ça, ça peut s'arranger :

Modification des liens

Par rapport à la boite de dialogue standard, mon système d'insertion de liens pose deux problèmes. Le premier dont j'étais au courant est qu'il n'est pas possible de modifier un lien. En faisant des tests, je viens également de m'apercevoir qu'il est possible de créer un lien sans avoir sélectionné de texte. Le lien est bien inséré, mais il n'est ensuite pas utilisable puisqu'il n'y a rien à cliquer !

Une solution simple serait d'interdire de définir un lien lorsqu'il n'y a pas de texte sélectionné, comme le fait le système standard. Cependant, d'après MSDN, «oSelection = document.selection.createRange();» me renvoie un objet «TextRange» correspondant au texte sélectionné. Et cet objet dispose d'une méthode expand() qui permet d'étendre la sélection d'un caractère, d'un mot ou d'une phrase. Par conséquent, en utilisant «oSelection.expand("word");» ça devrait automatiquement sélectionner le mot en cours (comme si on avait double cliqué dessus).

Encore quelques essais de nombreux tâtonnements et voilà:

En ce qui concerne la modification d'un lien, la propriété tagName de l'objet renvoyé par la méthode parentElement() permet de déterminer s'il s'agit d'une balise de type lien. Encore plus beau, ça marche que le lien soit intégralement ou partiellement sélectionné voire même si le curseur est seulement situé à l'intérieur du texte du lien et qu'aucun texte n'est sélectionné.

Il ne me reste donc plus qu'à:

Ca commence plutôt bien, puisque le 2° paramètre de la méthode showModalDialog() permet justement de passer des informations à une boite de dialogue. Après quelques explorations dans les différents exemples, j'abouti au code suivant:

Ca m'oblige quand même à modifier quelque peu ma boite de dialogue d'insertion d'un lien pour gérer ces paramètres. Je vous épargne les détails, mais après cette "petite" modification et quelques autres trucs pour améliorer sa présentation et son utilisation (c'est pas bien de perdre son temps avec des bricoles quand des trucs si compliqués attendent encore), voici ce que donne ma nouvelle boite de dialogue:

Pour gérer la création, la modification et même la suppression d'un lien au retour de la boite de dialogue, ça n'est finalement pas trop compliqué :

Sinon, je croyais ne pas avoir de problème en ce qui concernait le code xhtml relatif aux liens puisque je le génère moi-même. Malheureusement, tous ces essais m'ont permi de me rendre compte que lorsque la légende ne contient qu'un seul mot, les guillemets disparaissent automatiquement. Encore un truc qu'il faudra régler quand je m'attaquerai sérieusement à la transformation en xhtml.

Conclusion

Finalement, tout ça c'est avéré un peu plus compliqué que ce que je pensais et je n'ai plus le temps (et le courage) de m'attaquer dès maintenant à tout ce que j'avais prévu pour aujourd'hui.

En attendant la prochaine fois où je risque d'avoir pas mal de boulot en ce qui concerne la gestion des images (sans compter qu'il faut aussi tenir compte du cas où une image sert pour définir un lien), j'ai déjà un éditeur html wysiwyg qui gére enfin complètement des liens accessibles.

Publicités