MediaWiki:Gadget-ScriptToolbar.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.
wgfrwikibooks_Gadget_ScriptToolbarJsVersion = "20120804003";
/*********************************************/
/* Barres d'outils séparées (auteur: DavidL) */
/*********************************************/

var visible_toolbars = ($.cookie("toolbars") || "").split("/");
function findToolbar(id)
{
    for(var i in visible_toolbars)
        if (visible_toolbars[i]==id) return i;
    return -1;
}

// Créer/Obtenir le conteneur de barres d'outils
function getToolbarContainer()
{
var e=document.getElementById("toolbarcontainer");
if (e!=null) return e;
else
{
    var e=document.getElementById("toolbar");
    if (e==null) return null;
    var tc=document.createElement("div");
    tc.setAttribute("id","toolbarcontainer");
    var p=e.parentNode;
    e=p.replaceChild(tc,e);
    var alls=document.createElement("div");
    alls.setAttribute("id","all_toolbars");
    alls.appendChild(document.createTextNode("Barres d'outils :"));
    tc.appendChild(alls);
    tc.appendChild(e);
    return tc;
}
}

function addToolbarLabel(toolbar, label)
{
	// Remplacement des \n par des <br />
	var lines=label.split("\n");
	for(var i=0;i<lines.length;i++)
	{
		if (i>0) toolbar.buttons.push({"toolbarNewLine": true});
		if (lines[i].length>0) toolbar.buttons.push({"labelText": lines[i]});
	}
}

function addToolbarDomNode(toolbar, domNode)
{
	toolbar.buttons.push({"domNode": domNode});
}

function addToolbarButton(toolbar, imageFile, speedTip, tagOpen, tagClose, sampleText, summary)
{
	toolbar.buttons.push(
		{"imageFile": imageFile,
		 "speedTip": speedTip,
		 "tagOpen": tagOpen,
		 "tagClose": tagClose,
		 "sampleText": sampleText,
		 "summary": summary});
}

function addToolbarButtonScript(toolbar, imageFile, speedTip, jsCode, summary)
{
	toolbar.buttons.push(
		{"imageFile": imageFile,
		 "speedTip": speedTip,
		 "jscode": jsCode,
		 "summary": summary});
}

// Ajoute un attribut supplémentaire (ex: width, widthf)
// au bouton ajouté précédemment
function setToolbarButtonAttribute(toolbar, name, value)
{
    if (toolbar.buttons.length>0)
        toolbar.buttons[toolbar.buttons.length-1][name] = value;
}

function showToolbar(id,n)
{
    var t=document.getElementById(id);
    if (n==2) n=(t.style.display&&(t.style.display=="none"))?1:0;
    t.style.display=(n==0)?"none":"block";
    var ti=findToolbar(id);
    if (n==1) {if (ti<0) visible_toolbars.push(id);}
    else if (ti>=0) visible_toolbars.splice(ti,1);
    $.cookie("toolbars", visible_toolbars.join("/"), { expires: 365 });
    return false;
}

var def_toolbar; // not defined
// Obtenir la barre d'outils par défaut :
// Permet d'utiliser les mêmes méthodes qu'une barre d'outils supplémentaire
function getDefaultToolbar()
{
    if (!def_toolbar)
    {
    def_toolbar={ "buttons": mwCustomEditButtons,
        "addLabel": function(label)
            {addToolbarLabel(this, label);},
        "addNode": function(node)
            {addToolbarDomNode(this, node);},
        "addButton": function(imageFile, speedTip, tagOpen, tagClose, sampleText, summary)
            {addToolbarButton(this, imageFile, speedTip, tagOpen, tagClose, sampleText, summary);},
        "addModel": function(imageFile, text, summary)
            {addToolbarButton(this, imageFile, summary, '', text, '', summary);},
        "addScript": function(imageFile, speedTip, code, summary)
            {addToolbarButtonScript(this, imageFile, speedTip, code, summary);},
        "setButtonAttr" : function(name, value)
            {setToolbarButtonAttribute(this, name, value);}
        };
    mwCustomEditButtons = []; // prise en charge par ScriptToobars
    }
    return def_toolbar;
}

var toolbars=[];
// Créer une nouvelle barre d'outils
function createToolbar(id,title)
{
    var node=document.createElement("div");
    node.setAttribute("id",id);
    node.setAttribute("title",title);
    node.setAttribute("class","toolbar_perso");
    node.setAttribute("className","toolbar_perso");

    var titlenode=document.createElement("div");
    titlenode.setAttribute("class","toolbartitle");
    titlenode.setAttribute("className","toolbartitle");
    titlenode.appendChild(document.createTextNode(title));
    node.appendChild(titlenode);
    if (findToolbar(id)<0) node.style.display="none";

    var link=document.createElement("a");
    link.setAttribute("id",id+"_link");
    link.setAttribute("href","#");
    link.setAttribute("onclick","return showToolbar('"+id+"',2);");
    if (document.all)
    { link.onclick=function(){return showToolbar(id,2);} }
    link.setAttribute("title","montrer / cacher");
    link.appendChild(document.createTextNode("["+title+"]"));

    var toolbar={ "buttons": [], "title": title, "node": node, "nodelink": link,
        "addLabel": function(label)
            {addToolbarLabel(this, label);},
        "addNode": function(node)
            {addToolbarDomNode(this, node);},
        "addButton": function(imageFile, speedTip, tagOpen, tagClose, sampleText, summary)
            {addToolbarButton(this, imageFile, speedTip, tagOpen, tagClose, sampleText, summary);},
        "addModel": function(imageFile, text, summary)
            {addToolbarButton(this, imageFile, summary, '', text, '', summary);},
        "addScript": function(imageFile, speedTip, code, summary)
            {addToolbarButtonScript(this, imageFile, speedTip, code, summary);},
        "setButtonAttr" : function(name, value)
            {setToolbarButtonAttribute(this, name, value);}
        };
    toolbars.push(toolbar);
    return toolbar;
}

function openToolbars()
{
    // [!] Cette fonction peut être appelée plusieurs fois...
    if (def_toolbar)
    {
        var toolbar = document.getElementById("toolbar");
        if (!toolbar) return;
        var t=def_toolbar;
        for(var j in t.buttons)
            mwInsertEditButton(toolbar,t.buttons[j]);
        def_toolbar.buttons = []; // [!] ...donc vider le tableau pour éviter de rajouter les boutons plusieurs fois
    }
    if (toolbars.length>0)
    {
        var tc=getToolbarContainer();
        if (tc==null) return;
        var tca=document.getElementById("all_toolbars");
        for(var i in toolbars)
        {
            var t=toolbars[i];
            tc.appendChild(t.node);
            tca.appendChild(document.createTextNode(" "));
            tca.appendChild(t.nodelink);
            for(var j in t.buttons)
                mwInsertEditButton(t.node,t.buttons[j]);
        }
    }
    toolbars=[]; // [!] ...donc vider le tableau pour éviter de rajouter les barres d'outils plusieurs fois
}
$(openToolbars);


// Pour les gadgets ajoutant des boutons :
// retourne la barre d'outils où l'ajouter
// cette fonction retourne la barre d'outils standard
function getToolbarFor(id, title)
{ return getDefaultToolbar(); }

/*********************************************/