MediaWiki:JSScripts/Titres

Un livre de Wikilivres.

/*

Améliore la présentation des titres en plaçant chaque partie séparées d'un slash sur une ligne à part. Chaque ligne, exceptée la dernière, est un lien vers le niveau correspondant.

Voici un exemple d'affichage pour Le système d'exploitation Linux/Redirection des entrées/sorties :

Utilisation

Ajoutez la ligne suivante dans votre monobook.js :

obtenir("Titres");

Source

 */

removeOnloadHook( setupTitle ); // Désactive le script par défaut

var slash_exceptions = [ // à compléter ...
// -------------------------------------
    [ /\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 ] ,
// -------------------------------------
    [ /\s$/ , /^/ ] ,
    [ /$/ , /^\s/ ] ];

function findSlashException(word)
{
    for(var i=0;i<slash_exceptions.length;i++)
        if (word.match(slash_exceptions[i][0])) 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)&&(words[j].match(slash_exceptions[index][1])))
        {
            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)
{
    var l=document.createElement("a");
    l.setAttribute("href", wgArticlePath.replace("$1", urlwiki.replace("?", "%3F")));
    l.setAttribute("title", urlwiki);
    l.appendChild( document.createTextNode( text ) );
    return l;
}

//
// Modifie la présentation du titre de la page
//
function u_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=n.childNodes[0];
            if (tn.nodeType==3)
            {
                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="";
                var tindex = tt[0].length-1;
                for ( var i=0 ; i<tindex ; i++)
                {
                    p+=tt[1][i];
                    n.appendChild( newlink( tt[0][i], p ) );
                    p+="/";
                    n.appendChild( document.createElement("br") );
                }
                n.appendChild( document.createTextNode( tt[0][tindex] ) );
                return;
            }
        }
    }
}

// IconesDeTitre après u_setuptitle :
removeOnloadHook(IconesDeTitre);
addOnloadHook(u_setuptitle);
addOnloadHook(IconesDeTitre);

/*

*/