Utilisateur:Zelda/Edittools.js
Un article de Wikipédia, l'encyclopédie libre.
Note : Après avoir publié la page, vous devrez forcer son rechargement pour voir les changements : Mozilla / Konqueror / Firefox : Shift-Ctrl-R, Internet Explorer / Opera : Ctrl-F5, Safari : Cmd-R.
//<source lang="javascript"> // Test de d'optimisation des caractères spéciaux de la page de modification // Les fonctions addCharSubsetMenu et chooseCharSubset sont préfixées par z_ dans ce test // pour éviter les conflits avec celles de Commons.js. // La page de test pour ce script est [[Utilisateur:Zelda/Edittools]] /** * Ajoute un menu déroulant permettant de choisir un jeu de caractères spéciaux * Les caractères spéciaux sont définis dans Mediawiki:Edittools */ function z_addCharSubsetMenu() { var specialchars = document.getElementById('specialcharsets'); if (!specialchars) return; // Construction du menu de selection var charSubsetSelect = document.createElement("select"); charSubsetSelect.setAttribute("style", "display:inline"); charSubsetSelect.onchange = function () { z_chooseCharSubset(this.selectedIndex); }; // Ajout des options au menu var p = document.getElementById('specialcharsets').getElementsByTagName('p'); for (var i = 0; i < p.length ; i++) { var opt = document.createElement("option"); var txt = document.createTextNode(p[i].title); opt.appendChild(txt); charSubsetSelect.appendChild(opt); } specialchars.insertBefore(charSubsetSelect, specialchars.childNodes[0]); /* default subset - try to use a cookie some day */ z_chooseCharSubset(0); } /** * Affichage du jeu de caractères sélectionné */ function z_chooseCharSubset(index) { var p = document.getElementById('specialcharsets').getElementsByTagName('p'); for (var i = 0; i < p.length ; i++) { // Initialisation du jeu de caractères sélectionné if (i == index) { initializeCharSubset(p[i]); } // Affichage du jeu sélectionné, masquage des autres p[i].style.display = i == index ? 'inline' : 'none'; p[i].style.visibility = i == index ? 'visible' : 'hidden'; } } /** * Initialisation du jeu de caractères sélectionné * Paramètre : paragraphe contenant le jeu à initialiser. Initialise tous les * caractères contenus dans les sous-spans du paragraphe */ function initializeCharSubset(p) { // recherche des sous-elements de type span à traiter var spans = p.getElementsByTagName("span"); if (!spans) return; // regexp pour echapper les caractères JS spéciaux : \ et ' var re = new RegExp("(\\\\|')", "g"); // gestion du caractère d'échappement '\' var escapeRe = new RegExp("[^\\\\](\\\\\\\\)*\\\\$", "g"); var unescapeRe = new RegExp("\\\\\\\\", "g"); // traitement des spans du paragraphe for (var j = 0; j < spans.length; j++) { // span deja traité if (spans[j].childNodes.length == 0 || spans[j].childNodes[0].nodeType != 3) continue; // On parse le contenu du span var chars = spans[j].childNodes[0].nodeValue.split(" "); for (var k = 0; k < chars.length; k++) { var a = document.createElement("a"); var tags = chars[k]; // regroupement des mots se terminant par un espace protégé par un \ while (k < chars.length && chars[k].match(escapeRe)) { k++; tags = tags.substr(0, tags.length - 1) + " " + chars[k]; } // création du lien insertTag(tagBegin, tagEnd, defaultValue) en protegeant les caractères JS \ et ' tags = (tags.replace(unescapeRe, "\\")).split("+"); var tagBegin = tags[0].replace(re, "\\$1"); var tagEnd = tags.length > 1 ? tags[1].replace(re, "\\$1") : ""; var defaultValue = tags.length > 2 ? tags[2].replace(re, "\\$1") : ""; a.href = "javascript:insertTags('" + tagBegin + "','" + tagEnd + "', '" + defaultValue + "')"; //a.href="#"; //eval("a.onclick = function() { insertTags('" + tagBegin + "','" + tagEnd + "', '" + defaultValue + "'); return false; }"); a.appendChild(document.createTextNode(tagBegin + tagEnd)); spans[j].appendChild(a); spans[j].appendChild(document.createTextNode(" ")); } // suppression de l'ancien contenu spans[j].removeChild(spans[j].firstChild); } } addOnloadHook(z_addCharSubsetMenu); /** * Permet d'ajouter d'un jeu de caractères spéciaux dans le menu déroulant * paramètres : * - nom du jeu de caractères * - contenu HTML. Les caractères spéciaux doivent être dans des spans * exemple : "caractères : <span>â ê î ô û</span>" */ function addSpecialCharsetHTML(title, charsHTML) { var specialchars = document.getElementById('specialcharsets'); if (!specialchars) return; // Ajout d'un nouvel item au menu déroulant var select = specialchars.getElementsByTagName("select")[0]; var opt = document.createElement("option"); opt.appendChild(document.createTextNode(title)); select.appendChild(opt); // Ajout des caractères spéciaux. Les liens seront initialisé par initializeCharSubset() // lors de la sélection var specialcharsets = document.getElementById('specialcharsets'); var p = document.createElement("p"); p.style.display = "none"; p.innerHTML = charsHTML; specialcharsets.appendChild(p); } /** * Permet d'ajouter d'un jeu de caractères spéciaux dans le menu déroulant * paramètres : * - nom du jeu de caractères * - caractères spéciaux * exemple d'utilisation : addSpecialCharset("Français", "â ê î ô û"); */ function addSpecialCharset(title, chars) { addSpecialCharsetHTML(title, "<span>" + chars + "</span>"); } /* Tests */ function addTestCharsets() { addSpecialCharset("Français", "à â é è ê î ò ô ù û"); addSpecialCharsetHTML("Japonais", "minuscules : <span>ā ī ē ū ō</span><br />majuscules :<span>Ā Ī Ē Ū Ō</span>"); } addOnloadHook(addTestCharsets); //</source>