MediaWiki:Common.js/edit.js

/** * Applications spécifiques à la page d'édition * */ /* todo : migrer celles qui ne sont pas vitales dans les gadgets */ /** * Désactiver le bouton Sauvegarder à la première édition * English : Force IP to preview before saving changes. * Copyright Marc Mongenet, 2006 * Plyd 05/2007: add "after preview" in the button to prevent misunderstanding from beginners */ function forcePreview { if (wgUserName != null || wgAction != "edit") return; saveButton = document.getElementById("wpSave"); if (!saveButton) return; saveButton.disabled = true; saveButton.value = "Publier (après prévisualisation)"; saveButton.style.fontWeight = "normal"; document.getElementById("wpPreview").style.fontWeight = "bold"; } addOnloadHook(forcePreview); /** * Fonctions de remplissage automatique */ function InitPDDvide(page_name) { return ""; } function InitIaS(page_name) { return "\n" + "" + page_name + "\n" + ""; } function InitIaA(page_name) { return "\n" + ""; } function InitArbReq(page_name) { return "\n" + "__NOINDEX__ \n" + "\n" + "\n" + ""; } function InitDiscArbReq(page_name) { return "\n" + "__NOINDEX__ \n" + "\n" + ""; } function InitCdl(page_name) { return "\n" + "\n\n" + " \n" + "" + page_name + ""; } function InitPL(page_name) { return "\n" + " \n" + " \n" + " "; } var init_if_empty = new Array( new Array('Discussion_Wikipédia:Images_à_supprimer/', InitPDDvide), new Array('Wikipédia:Images_à_supprimer/', InitIaS), new Array('Discussion_Wikipédia:Comité_d\'arbitrage/Arbitrage/', InitDiscArbReq), new Array('Wikipédia:Comité_d\'arbitrage/Arbitrage/', InitArbReq), new Array('Discussion_Wikipédia:Comité_de_lecture/', InitPDDvide), new Array('Wikipédia:Comité_de_lecture/', InitCdl), new Array('Discussion_Portail:Littérature/Invitation_à_la_lecture/Sélection/', InitPDDvide), new Array('Portail:Littérature/Invitation_à_la_lecture/Sélection/', InitPL) ); /** * Remplit la zone d'édition si elle est vide avec le texte retourné par * un pointeur de fonction sélectionné par le nom de la page. */ function InitPage { // Tester si editform et wpTextbox1 existe sinon il y a une erreur lorsqu'on // ouvre l'historique d'une page qui match un des noms de init_if_empty[], // tester seulement le nom de la page n'est pas suffisant. if (document.editform == undefined || document.editform.wpTextbox1 == undefined) return; var text_area = document.editform.wpTextbox1; if (text_area.value.length != 0) return; for (var i = 0; i < init_if_empty.length; ++i) { var page_match = init_if_empty[i][0]; var index = wgPageName.indexOf(page_match); if (index != -1) { page_name = wgPageName.slice(page_match.length); page_name = page_name.replace(/_/g, ' '); text_area.value = init_if_empty[i][1](page_name); break; } } } addOnloadHook(InitPage); /** * Caractères spéciaux * * Ajouter un menu pour choisir des sous-ensembles de caractères spéciaux. * Ecrit par Zelda, voir sur Utilisateur:Zelda/Edittools.js. * Remplace l'ancienne fonction par une variante plus rapide. */ /** * 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 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 { 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 */ chooseCharSubset(0); } /** * Affichage du jeu de caractères sélectionné */ function 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).replace(unescapeRe, "\\"))); spans[j].appendChild(a); spans[j].appendChild(document.createTextNode(" ")); }   // suppression de l'ancien contenu spans[j].removeChild(spans[j].firstChild); } } addOnloadHook(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 : â ê î ô û " */ function addSpecialCharsetHTML(title, charsHTML) { var specialchars = document.getElementById('specialcharsets'); if (!specialchars) return; // 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.title = title; 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, " " + chars + " "); } /** * Générateur de tableaux * English: Generate an array using Mediawiki syntax * * @author: fr:user:dake * @version: 0.2 */ function generateTableau(nbCol, nbRow, styleHeader, styleLine) { var code = "\n{| " + ((styleHeader==1) ? 'class="wikitable"' : '')+ '\n|+ Titre du tableau\n'; for (var i=0; i<nbCol; i++) code += '! en-tête ' + i + '\n'; for (var j=0; j<nbRow; j++) { if ((j+1)%2==0 && styleLine==1) { code += '|-{'+'{ligne grise}'+'}\n'; } else { code += '|-\n'; }   for (var i=0; ifunction insertCode{'; javaCode += 'var row = parseInt(document.paramForm.inputRow.value); '; javaCode += 'var col = parseInt(document.paramForm.inputCol.value); '; javaCode += 'var styleHeader = document.paramForm.inputHeader.checked; '; javaCode += 'var styleLine = document.paramForm.inputLine.checked; '; javaCode += 'window.opener.generateTableau(col,row,styleHeader,styleLine); '; javaCode += '}<\/script>'; popup.document.write('  Paramètres du tableau '); popup.document.write('<\/script>'); popup.document.write('/*<![CDATA[*/ @import "\/skins-1.5\/monobook\/main.css?5"; /*]]>*/<\/style>'); popup.document.write(javaCode); popup.document.write(' '); popup.document.write(' Veuillez entrer les paramètres du tableau : '); popup.document.write(''); popup.document.write('Nombre de lignes :  '); popup.document.write('Nombre de colonnes :  '); popup.document.write('Mise en forme (wikitable) :  '); popup.document.write('Lignes grises alternées :  '); popup.document.write(' '); popup.document.write('  Insérer le code dans la fenêtre d\'édition '); popup.document.write('  Fermer '); popup.document.write(' '); popup.document.close; } /** * Insertion de nouveaux boutons dans la barre d'outil */ addCustomButton('http://upload.wikimedia.org/wikipedia/commons/0/04/Button_array.png',               'Tableau',                '{|\n|-\n|\n|\n|}',                ,                ,                'mw-editbutton-array'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/c/c9/Button_strike.png',               'Rayer',                ' ',                ' ',                '',                'mw-editbutton-strike'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/8/88/Btn_toolbar_enum.png',               'Énumération',                '\n# élément 1\n# élément 2\n# élément 3',                ,                ,                'mw-editbutton-enum'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/1/11/Btn_toolbar_liste.png',               'Liste',                '\n* élément A\n* élément B\n* élément C',                ,                ,                'mw-editbutton-liste'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/9/9e/Btn_toolbar_gallery.png',               'Galerie d\'images',                '\n\n',                ,                ,                'mw-editbutton-gallery'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/3/37/Btn_toolbar_commentaire.png',               'Commentaire',                ,                ,                'mw-editbutton-comment'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/4/47/Button_redir.png',               'Redirection',                '#REDIRECTION',                '',                'nom de la destination',                'mw-editbutton-redir'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/b/b4/Button_category03.png',               'Catégorie',                '[[Catégorie:',                ']]',                'nom de la catégorie',                'mw-editbutton-category'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/3/3b/Button_template_alt.png',               'Modèle',                '',                'modèle ou page à inclure',                'mw-editbutton-template'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/c/c4/Button_ref.png',               'Référence',                ' ',                'référence, citation ou lien',                'mw-editbutton-ref'); addCustomButton('http://upload.wikimedia.org/wikipedia/commons/6/64/Buttonrefvs8.png',               'Index des références',                '== Notes et références ==\n',                ,                ,                'mw-editbutton-references'); var voirAussi = '== Notes et références ==\n' + '\n\n' + '== Annexes ==\n' + '=== Articles connexes ===\n' + '* À remplacer\n\n' + '=== Liens externes ===\n' + '*\n\n' + '=== Bibliographie ===\n' + '* À remplacer\n\n' addCustomButton('http://upload.wikimedia.org/wikipedia/commons/b/bb/Seealso.png',               'Section Annexes',                voirAussi,                ,                ,                'mw-editbutton-voiraussi'); /** * Changer le lien du bouton de création de tableau et supprime le bouton signature sur les articles */ function changButtons { toolbarArray = document.getElementById('mw-editbutton-array'); if (toolbarArray) { toolbarArray.onclick = function { popupTableau; return false; } }  var btnSigImg = document.getElementById('mw-editbutton-signature'); if (btnSigImg && wgNamespaceNumber == 0) btnSigImg.style.display = "none"; } addOnloadHook(changButtons); //