MediaWiki:Gadget-TitreDeluxe.js

Un livre de Wikilivres.
Aller à : navigation, rechercher

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 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_TitreDeluxeJsVersion = "20160416001";
wgGadget_TitreDeluxeJsVersion = "20120602001";
var slash_exceptions = [ // à compléter ...
// -------------------------------------
// Pas de coupure entre les mots suivants :
    [ /\bentrée$/i , /^sortie\b/i ] ,
    [ /\bentrées$/i , /^sorties\b/i ] ,
    [ /\bsortie$/i , /^entrée\b/i ] ,
    [ /\bsorties$/i , /^entrées\b/i ] ,
    [ /\bGNU$/i , /^Linux\b/i ] ,
    [ /\bTCP$/i , /^IP\b/i ] ,
    [ /\bUDP$/i , /^IP\b/i ] ,
    [ /\bPL$/i , /^SQL\b/i ] ,
    [ /\bPS$/i , /^2\b/i ] ,
    [ /\bCP$/i , /^M\b/i ] ,
    [ /\bet$/i , /^ou\b/i ] ,
    [ /\bou$/i , /^et\b/i ] ,
    [ /\bI$/i , /^O\b/i ] ,
    [ /\bE$/i , /^S\b/i ] ,
    [ /\bP$/i , /^Invoke\b/i ] ,
// -------------------------------------
// Pas de coupure si espace avant/après le slash :
    [ /\s$/ , /^/ ] ,
    [ /$/ , /^\s/ ] ];

function findSlashException(word)
{
    for(var i=0;i slash_exceptions.length;i++)
        if (slash_exceptions[i][0].test(word)) return i;
    return -1;
}

function slashExceptionCollapse(words, titlewords)
{
    var new_words=[];
    var new_titles=[];
    new_words.push(words[0]);
    new_titles.push(titlewords[0]);
    var k=0;
    for(var j=1;j words.length;j++)
    {
        var index = findSlashException(new_words[k]);
        if ((index =0)&&(slash_exceptions[index][1].test(words[j])))
        {
            new_words[k] += "/"+words[j];
            new_titles[k] += "/"+titlewords[j];
        }
        else { new_words.push(words[j]); new_titles.push(titlewords[j]); k++; }
    }
    return [new_words, new_titles];
}

function newlink(text, urlwiki, ltitle)
{
    var l=document.createElement("a");
    l.setAttribute("href", wgArticlePath.replace("$1", urlwiki.replace("?", "%3F")));
    l.setAttribute("title", ltitle);
    l.appendChild( document.createTextNode( text ) );
    return l;
}

function findTextNodeChild(node)
{
    if (node.nodeType==3) return node;
    if (node.nodeType==1)
        for(var i=0;i node.childNodes.length;i++)
        {
            var n = findTextNodeChild(node.childNodes[i]);
            if (n !== undefined) return n;
        }
    return undefined; // Pas trouvé
}

//
// Modifie la présentation du titre de la page
//
function setupTitle()
{
    hh = document.getElementsByTagName("h1");
    for(var el=0;el hh.length;el++)
    {
        var n = hh.item(el);
        var a = n.attributes.getNamedItem("class");
        if ( a&& (a.value=="firstHeading"))
        {
            var tn=findTextNodeChild(n);
            if (tn !== undefined)
            {
                n = tn.parentNode;
                var dtitlew = n.removeChild(tn).value.split(/\//g), ttitlew;
                if (wgPageName) ttitlew=wgPageName.split(/\//g);
                else ttitlew = dtitlew;
                var tt=slashExceptionCollapse( dtitlew, ttitlew );
                var p="", ptitle="";
                var tindex = tt[0].length-1;
                for ( var i=0 ; i tindex ; i++)
                {
                    ptitle+=tt[0][i]; p+=tt[1][i];
                    n.appendChild( newlink( tt[0][i], p, ptitle ) );
                    ptitle+="/"; p+="/";
                    n.appendChild( document.createElement("br") );
                }
                n.appendChild( document.createTextNode( tt[0][tindex] ) );
                return;
            }
        }
    }
}

$(setupTitle);