Discussion modèle:Option
Tests :
{{Option|texte en rouge|color:#ff0000|vive le rouge !}} donne : vive le rouge !
{{Option|texte en rouge|color:red|vive le rouge !}} donne : vive le rouge !
{{Option|texte en vert|color:green|vive le rouge !}} donne : vive le rouge !
{{Option|texte en gris|color:silver|vive le rouge !}} donne : vive le rouge !
{{Option|texte caché|display:none|vive le rouge !}} donne : vive le rouge !
Les noms de couleurs (en anglais) à la place des codes sont acceptés.
Pour comprendre à quoi sert ce modèle, cliquez plusieurs fois sur les options d’affichage qui sont proposées dans le menu à gauche de l’écran, et observez l’effet produit.
Applications envisageables : voir ici. --Zyephyrus (d) 14 octobre 2010 à 15:39 (UTC)
Problèmes de conformité HTML/XML/CSS/DOM [modifier]
(1) J'ai essayé de supprimer l'identifiant "memo" qui était généré en interne par le modèle, l'utilisation de ce modèle plusieurs fois dans la même page (y compris pour des options d'affichage différentes) faisait que cet identifiant ne désignait pas un élément unique du document. D'où un problème de validation stricte pour HTML4, HTML5 ou XML et XHTML. Malheureusement, un élément span vide ne contenant qu'un attribut de style est éliminé automatiquement par MediaWiki (d'où perte du style indiqué que le javascript ne pourra plus détecter...), sauf si on a un identifiant (MediaWiki le préserve car cet identifiant sert aussi d'ancre dans la page et ne sait pas où le placer ailleurs qu'en gardant ce span vide). Ne peut-on pas générer autre chose ?
De plus je me demande encore pourquoi on doit encore générer le style dans un span vide interne alors que ce style pourrait être directement être appliqué dans le span externe contenant le texte (on doit encore le faire car le javascript qui gère l'activation des options dans la barre d'outils à gauche va chercher ce style à cet endroit). Cela résoudrait le premier problème ci-dessus, puisqu'alors on n'a plus besoin de l'id "memo" qui visiblement n'est là que pour éviter que MediaWiki supprime automatiquement le span interne qui ne sert qu'à contenir le style d'affichage mais aucun texte visible.
(2) Plus embêtant : Le titre généré (par le javascript du Wikisource global MediaWiki:Base.js) dans le span externe (title="{{{OptionTitle}}}") contient le texte à afficher en clair dans la barre de gauche ("Désactiver titre"), mais ce texte est également utilisé pour :
- générer le nom du cookie ("OptionTexttitre") stockant "false" ou "true" suivant que l'option est activée ou non par l'utilisateur,
- ainsi que l'identifiant (id="titre") de l'élément de liste à puce apparaissant dans la barre de gauche ;
Dans ces deux derniers cas, il faudrait que ce soit un identifiant valide, mais le texte en clair passé en paramètre de ce modèle contenant le nom de l'option n'est pas un identifiant valide (par exemple quand ce texte contient espaces, ponctuations ou apostrophes), et peut trop facilement entrer en conflit avec un identifiant de la page. Le nom actuel du cookie est:
"OptionText-{{{OptionTitle}}}"
ce devrait être:
"OptionText-{{{OptionId}}}"
De même on génère actuellement par Javascript dans la barre d'outils :
<li id="{{{OptionTitle}}}"><a href="javascript:displayOptionText('{{{OptionTitle}}}', '{{{OptionStyle}}}', '{{{DisplayOptionDefault}}}')">Désactiver {{{OptionTitle}}}</a></li>
Il faudrait générer:
<li id="OptionText-{{{OptionId}}}"><a href="javascript:displayOptionText('{{{OptionTitle}}}', '{{{OptionStyle}}}', '{{{DisplayOptionDefault}}}')">Désactiver {{{OptionTitle}}}</a></li>
Ou bien cet identifiant pour l'élément de liste dans la barre d'outils "options d'affichage" est-il réellement nécessaire, et ne pourrait-on pas s'en passer ?
Problème: comment passer cet identifiant (au moins pour que le nom du cookie soit correct et n'entre pas non plus en collision en lui adjoignant un préfixe) ? Peut-on générer un identifiant valide ("{{{OptionId}}}" ci-dessus) à partir du nom en clair de l’option ("{{{OptionTitle}}}" ci-dessus), avec une fonction de filtrage Javascript, qui remplace tout caractère non alphanumérique ([0-9A-Za-z], éventuellement complété par des caractères accentués valides dans un identifiant) par un tiret ? Ou bien ce modèle ne devrait-il pas inclure un paramètre supplémentaire permettant de préciser un identifiant valide (mais alors où passer dans le HTML généré cet identifiant ? Dans un attribut data="" ou dans l'attribut title="" d'un autre span "mémo" vide ? — Verdy_p (d) 3 juin 2011 à 05:30 (UTC)