MediaWiki:Gadget-CommonEdit.js

Un livre de Wikilivres.

Attention : Depuis MediaWiki 1.18 les pages se terminant avec l'extension .js ou .css sont interprétées comme des pages wiki ! En particulier les modèles (subst ou non) et les liens. Vous devez donc migrer le code source et effectuer vos changements en évitant ces éléments de syntaxe wiki (peu importe leurs emplacements dans le code source : commentaire, chaine) :

  • Double accolades ouvrantes (en particulier avec subst:) : séparer les deux accolades "{"+"{" du reste de la chaine
  • Double crochets ouvrants : même technique de séparation.
  • Signature (tildes ~ multiples) : même technique de séparation.

Note : après avoir enregistré vos préférences, vous devrez attendre que le serveur mette à jour la feuille de style globale avant de forcer le rechargement complet du cache de votre navigateur pour voir les changements.

  • Firefox / Safari : Maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ou Ctrl-R (⌘-R sur un Mac) ;
  • Google Chrome : Appuyez sur Ctrl-Maj-R (⌘-Shift-R sur un Mac) ;
  • Internet Explorer : Maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ;
  • Konqueror : Cliquez sur Actualiser ou pressez F5 ;
  • Opera : Videz le cache dans Outils → Préférences.
// Fonctions communes pour la modification des pages

/**
 * Insertion de nouveaux boutons dans la barre d'outils
 */

function changeSummary(sampleText) {
 document.editform.wpSummary.value = sampleText;
}


function mwInsertEditButton(parent, item)
{
    if (item.labelText) // not a button but a label
    {
        var lbl = document.createTextNode(item.labelText);
        parent.appendChild(lbl);
        return;
    }
    if (item.toolbarNewLine) // not a button but a line break
    {
        var n_br = document.createElement("br");
        parent.appendChild(n_br);
        return;
    }
    if (item.domNode) // not a button but a DOM node
    {
        parent.appendChild(item.domNode);
        return;
    }
    var image = document.createElement("img");
    image.width = 23;
    image.height = 22;
    image.src = item.imageFile;
    image.border = 0;
    image.style.cursor = "pointer";
    if (item.imageId) image.id = item.imageId;
    var ref = document.createElement("a");
    var href;
    if (item.jscode != null) href="javascript:"+item.jscode+";";
    else href="javascript:insertTags(\"" + item.tagOpen + "\",\"" + item.tagClose + "\",\"" + item.sampleText + "\");";
    if (item.summary != null)
        href+="javascript:changeSummary(\"" + item.summary + "\");";
    ref.setAttribute("href", href);
    ref.setAttribute("title", item.speedTip);
    ref.appendChild(image);
 
    parent.appendChild(ref);
}


/********************************************/
/* Fonction de remplacement de la sélection */
/* dans la boîte d'édition (auteur: DavidL) */
/********************************************/


function doReplacementFor(text, fonction, f_args)
{
    // exclude ending space char, if any
    if (text.charAt(text.length-1) == " ")
    {
        var result = fonction(text.substring(0, text.length-1),f_args);
        if (typeof(result)!="undefined") result[0] += " ";
        return result;
    }
    else return fonction(text,f_args);
}


/*
fonction créée à partir de insertTags()
replaceSelection(fonction, arguments...)
-> fonction(string, arguments...)
retourne un tableau : [ new_string, selection_offset, selection_length ]
*/
function replaceSelection(fonction)
{
    var txtarea;
    var f_args = new Array();
    for(var j=1;j<arguments.length;j++) f_args.push(arguments[j]);
    if (document.editform)
    {
        txtarea = document.editform.wpTextbox1;
    }
    else
    {
        // some alternate form? take the first one we can find
        var areas = document.getElementsByTagName('textarea');
        if (areas.length==0) return;
        txtarea = areas[0];
    }

    if (document.selection) // IE
    {
        var myText = document.selection.createRange().text;
        if (!myText) myText="";
        txtarea.focus();

        var result = doReplacementFor(myText, fonction, f_args);
        if (typeof(result)=="undefined") return; // Cancel
        document.selection.createRange().text = result[0];
    }
    else if(txtarea.selectionStart || txtarea.selectionStart == '0') // Mozilla
    {
        var startPos = txtarea.selectionStart;
        var endPos = txtarea.selectionEnd;
        var replaced = endPos != startPos;
        var scrollTop = txtarea.scrollTop;
        var myText = (txtarea.value).substring(startPos, endPos);
        if (!myText) myText="";
        var result = doReplacementFor(myText, fonction, f_args);
        if (typeof(result)=="undefined") return; // Cancel
        var subst = result[0];

        txtarea.value = txtarea.value.substring(0, startPos) + subst +
            txtarea.value.substring(endPos, txtarea.value.length);
        txtarea.focus();
        //set new selection
        if (result.length<3)
        {
            var cPos = startPos+result[0].length;
            txtarea.selectionStart = cPos;
            txtarea.selectionEnd = cPos;
        }
        else
        {
            txtarea.selectionStart = startPos+result[1];
            txtarea.selectionEnd = startPos+result[1]+result[2];
        }
        txtarea.scrollTop = scrollTop;
    }
    // reposition cursor if possible
    if (txtarea.createTextRange)
        txtarea.caretPos = document.selection.createRange().duplicate();
}