page d'accueil

Un éditeur html wysiwyg (7)

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).

Insertion d'images

Ca y est, aujourd'hui je vais au minimum me consacrer à la mise en place d'une boite de dialogue spécifique pour gérer l'insertion d'images.

Ca commence bien puisque je viens seulement de me rendre compte que la boite de dialogue standard propose bêtement les images disponibles sur le poste client, c'est à dire des fichiers qui sont enregistrés sur le disque dur de la personne qui va utiliser l'éditeur !

C'est pas du tout ce qu'il me faut ! Moi j'ai besoin que cela me propose les images qui existent sur le serveur. Ou alors, il faudrait que les images sélectionnées sur le poste client soient ensuite téléversées (uploadées) sur le serveur.

Ca confirme ce que je subodorais depuis un petit moment, il est vraiment indispensable de refaire la boite de dialogue d'insertion d'une image. Pour cela, j'entrevois au moins quatre possibilités:

Ploum. Ploum. Bon, je vais réaliser la quatrième méthode. En fait, c'est parce que c'est la seule pour laquelle il n'y ait pas à mettre en oeuvre des technologies serveurs (style php, asp ou asp.net). En plus, la boite de dialogue pour l'insertion de liens fonctionne déjà selon ce principe et ça ne pose pas de difficulté insurmontable.

Une boite de dialogue

Au moins, ce qu'il y a de bien dans le fait d'avoir choisi cette solution, c'est que la boite de dialogue n'est vraiment pas trop compliquée à mettre au point. Il suffit de partir du source de celle qui existe déjà pour l'insertion des liens et de simplement lui apporter quelques modifications:

J'avais un peu hésité mais finalement j'ai préféré ne pas chercher à gérer l'épaisseur de la bordure (je l'ai initialisé à 0 pixels) et les espacements horizontal et vertical. D'autre part, j'ai limité (au moins pour l'instant) le nombre de choix possibles en ce qui concerne l'alignement.

Récupération d'image

Et pareil en ce qui concerne la fonction «doInsertImage()». Là encore il suffit presque quasiment de faire du copier-coler à partir de la fonction «doCreateLink()» avant de pouvoir enfin remplacer la ligne «document.execCommand(idCommand, true);» par la ligne «doInsertImage(oSelection);».

Quelques difficultés

Tout ne pouvait pas être aussi simple que ça. Il me reste encore deux problèmes à résoudre. Tout d'abord, pour que la modification d'image fonctionne correctement, il faut ruser un peu au moment de sélectionner l'image. Par défaut, en cliquant dessus, elle est sélectionnée en tant que contrôle: les poignées (?) permettant de la redimensionner apparaissent. Si on clique alors sur le bouton [Image] en espérant modifier l'image, cela provoque une erreur de javascript.

Afin que la modification d'image fonctionne correctement, il faut la sélectionner en tant que texte: la sélection est mise en évidence par une couleur spéciale. Pour parvenir à cela avec une image, il faut placer le curseur juste avant l'image, cliquer puis maintenir la touche Majuscule enfoncée tout en appuyant sur la touche Flèche Droite. L'image apparait alors avec les couleurs définies pour les éléments sélectionnés et il suffit de sélectionner le bouton [Image] pour obtenir la boite de dialogue de gestion des images en mode modification.

Le second problème concerne l'utilisation d'une image pour définir un lien. C'est plus ou moins possible à condition de sélectionner l'image en mode texte puis de cliquer sur le bouton [Lien]. Malheureusement, ça ne fonctionne pas du tout en mode modification, que ce soit lorsque l'image est sélectionnée en mode contrôle (erreur javascript) ou en mode texte (on ontient la boite de dialogue en mode création de lien).

Conclusion

Hum, ça va encore me faire de nouveaux trucs à régler avant de pouvoir retravailler sur la transformation du code en xhtml. Mais au moins, j'ai (enfin presque) une boite de dialogue d'insertion d'image qui me semble quand même plus pratique que celle fournie par défaut.

Et puis aussi j'envisage déjà quelques évolutions à faire du côté serveur (en ASP donc), comme de pouvoir faire une sélection parmi la liste des images enregistrées sur le serveur et de donner la possibilité d'uploader une nouvelle image. Côté client, il faudrait peut être pouvoir visualiser l'image indiquée directement depuis la boite de dialogue et éventuellement pouvoir définir les espacements horizontal et vertical autour de l'image.

Publicités