Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;

Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
/******************************************************************************************************************
 * - FAVORIS.JS -                                                                                                 *
 *                                                                                                                *
 * Fonction :                                                                                                     *
 ** Ajoute un panneau supplémentaire au dessus de la boîte de recherche permettant de lister des pages favorites. *
 ** La liste est stockée localement dans un cookie.                                                               *
 *                                                                                                                *
 * Tests :                                                                                                        *
 ** Monobook et Firefox 3 ou 3.5 : OK                                                                             *
 ** Monobook et Internet Explorer 8 : OK                                                                          *
 ** Moderne et Firefox 3.5 : OK                                                                                   *
 ** Moderne et Internet Explorer 7 : OK                                                                           *
 ** Vector et Firefox 3.5 : OK                                                                                    *
 ** Vector et Internet Explorer 7 : OK                                                                            *
 ** Autres skins : en cours d'adaptation.                                                                         *
 *                                                                                                                *
 * Crédits :                                                                                                      *
 ** Code original de Andy Cook [http://cookandy.com/downloads/mediawiki/andy-s-mediawiki-skin ext]                *
 ** Adapté en gadget par Dr Brains [http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/favoris.js ext]            *
 *                                                                                                                *
 *                                    {{Projet:JavaScript/Script}}                                                *
 ******************************************************************************************************************/

/////////////////////////////// PARTIE PERSONNALISABLE //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////// POPUPS //////////

// popup titre //
var PopupTitle_fav = "Cliquer pour ajouter la page courante aux favoris" ; 

// popup aide (?) //
var PopupHelp_fav = "INFORMATION : Cette liste est stockée sur un cookie local. Si vous effacez vos cookies, cette liste disparaîtra." ;

// popup retrait [-] //
var PopupRemove_fav = "Cliquer pour retirer de la liste la page : " ;


//////////////////////////////// TEXTES ///////////

// titre de la boîte //
var Title_fav = "Ajouter aux favoris" ; 

// texte de la boîte vide //
var NoFavorites_fav = "Vous n'avez pas de favoris." ; 
	
/////////////////////////////// PARAMÈTRES /////////////////

// début de l'URL des liens //
var Path_fav = mw.config.get('wgServer') + mw.config.get('wgArticlePath').split("$1").join(''); ; 

// affichage de l'aide (icône (?) à droite du titre) //
var ShowHelp_fav = true; 

/////////////////////////////// FIN DE LA PARTIE PERSONNALISABLE //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

addOnloadHook(AddFavoritesPortlet) ;


// * création du panneau *
function AddFavoritesPortlet() { 
    var span_fav = document.createElement( "span" );
    span_fav.setAttribute( "title",PopupTitle_fav );  
    span_fav.setAttribute( "fixdabsx","3");  
    span_fav.setAttribute( "requireclick","off"); 
    var a_fav = document.createElement( "a" );
    a_fav.setAttribute( "href", "javascript:storePage()" );
    var title_fav = document.createTextNode( Title_fav ) ;
    a_fav.appendChild( title_fav ) ;
    span_fav.appendChild( a_fav ) ;
 
    if (ShowHelp_fav == true){ 
        var spanhelp_fav = document.createElement( "span" );
        spanhelp_fav.setAttribute( "title", PopupHelp_fav );  
        spanhelp_fav.setAttribute( "fixdabsx","3");  
        spanhelp_fav.setAttribute( "requireclick","off"); 
        spanhelp_fav.setAttribute( "style","cursor:pointer"); 
        var help_fav = document.createTextNode( " (?)" ) ;
        spanhelp_fav.appendChild( help_fav ) ;
    }
 
    var h5_fav = document.createElement( "h5" );
    h5_fav.appendChild( span_fav ) ;
    if (ShowHelp_fav == true){ 
        h5_fav.appendChild( spanhelp_fav ) ; 
    }
 
    var ul_fav = document.createElement( "ul" );
    ul_fav.id = "FavoriList";
 
// * insertion du panneau (suivant le skin actif) *
    var skin = mw.config.get('skin');
    if((skin=="monobook")||(skin=="chick")||(skin=="myskin")||(skin=="simple")){
        var Portlet_ClassName = "portlet";
        var PBody_ClassName = "pBody";
        var Element_Id = 'p-search';
    }else if(skin=="modern"){
        var Portlet_ClassName = "portlet";
        var PBody_ClassName = "pBody";
        var Element_Id = 'p-search';
    }else if(skin=="vector"){
        var Portlet_ClassName = "portal";
        var PBody_ClassName = "body";
        var Element_Id = 'p-tb'
    }else{
        var Portlet_ClassName = false;
    }
    if(!Portlet_ClassName) return;
    var Element = document.getElementById(Element_Id);
    if(!Element) return;
 
    var div_fav = document.createElement( "div" );
    div_fav.className = PBody_ClassName ;
    div_fav.appendChild( ul_fav ) ; 
    var portlet_fav = document.createElement( "div" ) ;
    portlet_fav.className = Portlet_ClassName ;
    portlet_fav.id = "p-fav" ;
    portlet_fav.appendChild( h5_fav ) ;
    portlet_fav.appendChild( div_fav ) ; 
    Element.parentNode.insertBefore( portlet_fav, Element); 
    UpdateFavoritesList("FavoriList");
}
 
// * mise à jour de la liste de favoris *

function UpdateFavoritesList(UL){
    var ul_fav = document.getElementById(UL);
    if(!ul_fav) return;
    while(ul_fav.firstChild){ul_fav.removeChild(ul_fav.firstChild);}
    var pageListTitle = getCookie("pageListTitle");
    if (pageListTitle != "" && pageListTitle != null) {
        pSplitTitle = pageListTitle.split(";")
        for (a=0;a<pSplitTitle.length;a++) {
            if (pSplitTitle[a] != '' && pSplitTitle[a] != 'null') { 
                var Title = decodeURIComponent(pSplitTitle[a]).replace(/_/g," ");
                var EncodedTitle = encodeURIComponent(Title);
                var li_fav = document.createElement( "li" );
                li_fav.id = "n-fav_"+[a] ;
                li_fav.className = "favorite" ;
                var spanaCR_fav = document.createElement( "span" );
                spanaCR_fav.setAttribute( "title",  PopupRemove_fav + Title );  
                spanaCR_fav.setAttribute( "fixdabsx","3");  
                spanaCR_fav.setAttribute( "requireclick","off"); 
                spanaCR_fav.setAttribute( "style","cursor:pointer");  
                var aCR_fav = document.createElement( "a" );
                aCR_fav.setAttribute( "href", "javascript:removePage('" + Title + "')" );
                var smallR_fav = document.createElement( "small" );
                var font_fav = document.createElement( "font" );
                font_fav.setAttribute( "color", "red" );
                var textaCR_fav = document.createTextNode( "[-]");
                font_fav.appendChild( textaCR_fav );
                smallR_fav.appendChild( font_fav );
                aCR_fav.appendChild( smallR_fav );
                spanaCR_fav.appendChild( aCR_fav ) ;  
 
                var spanaC_fav = document.createElement( "span" );
                spanaC_fav.setAttribute( "title", "" + Title + "");  
                spanaC_fav.setAttribute( "fixdabsx","3");  
                spanaC_fav.setAttribute( "requireclick","off"); 
                spanaC_fav.setAttribute( "style","cursor:pointer"); 
                var aC_fav = document.createElement( "a" );
                aC_fav.setAttribute( "href", "" + Path_fav + Title +"");
                var smallT_fav = document.createElement( "small" ); 
 
                Raccourci = pSplitTitle[a]
                Raccourci = Raccourci.replace(/Spécial:/g,"Sp:");
                Raccourci = Raccourci.replace(/Utilisateur:/g,"Ut:");
                Raccourci = Raccourci.replace(/Wikipédia:/g,"Wp:");
                Raccourci = Raccourci.replace(/Fichier:/g,"F:");
                Raccourci = Raccourci.replace(/Catégorie:/g,"Cat:");
                Raccourci = Raccourci.replace(/Aide:/g,"A:");
                Raccourci = Raccourci.replace(/MediaWiki:/g,"MW:");
                Raccourci = Raccourci.replace(/Modèle:/g,"Mod:");
                Raccourci = Raccourci.replace(/Portail:/g,"Pt:");
                Raccourci = Raccourci.replace(/Projet:/g,"Pj:");
                Raccourci = Raccourci.replace(/^Discussion/g,"D");
                Raccourci = Raccourci.replace(/_/g," ");
 
                var textaC_fav = document.createTextNode( "" + Raccourci + "") ;
                smallT_fav.appendChild( textaC_fav ) ;
                aC_fav.appendChild( smallT_fav );
                spanaC_fav.appendChild( aC_fav ) ;   
                li_fav.appendChild( spanaCR_fav );
                li_fav.appendChild( spanaC_fav );
                ul_fav.appendChild( li_fav );
            }
        }
    } else {
        var li_fav = document.createElement( "li" );
        var nofav_fav = document.createTextNode( NoFavorites_fav );
        li_fav.appendChild( nofav_fav );
        ul_fav.appendChild( li_fav );
    } 
}
 
// * Ajout d'une page à la liste de favoris *
 
function storePage(){
    thisPageTitle = mw.config.get('wgPageName').replace(/_/g," ");
    var pageListTitle = getCookie("pageListTitle");
    var linkFound = false;
    if (pageListTitle != "" && pageListTitle != null) {
        pSplit = pageListTitle.split(";");
            for (a=0;a<pSplit.length;a++) {
                if(pSplit[a] == thisPageTitle) linkFound = true;
            }
    }
    if (!linkFound) {
        if (pageListTitle == null || pageListTitle == ";") {
            pageListTitle = thisPageTitle;
        } else {
            pageListTitle += ";" + thisPageTitle;
        }
        var now = new Date();
        var nextYear = new Date(now.getTime() + 1000 * 60 * 60 * 24 * 365 );
        setCookie("pageListTitle",pageListTitle,nextYear);
        UpdateFavoritesList("FavoriList");
    }
}
 
// * Suppression d'une page de la liste *
 
function removePage(Title){
    var pageListTitle = getCookie("pageListTitle");
    var linkList = ""
    if (pageListTitle != "" && pageListTitle != null) {
        pSplitTitle = pageListTitle.split(";");
        for (a=0;a<pSplitTitle.length;a++) {
            pSplitTitle[a] = decodeURIComponent(pSplitTitle[a]).replace(/_/g," ");
            if (pSplitTitle[a] != Title && pSplitTitle[a] != '') linkList += ";" + pSplitTitle[a];
        }
        var now = new Date();
        var nextYear = new Date(now.getTime() + 1000 * 60 * 60 * 24 * 365 );
        setCookie("pageListTitle",linkList,nextYear);
        UpdateFavoritesList("FavoriList");
    }
}

// * Mise à jour du cookie *
 
function setCookie (cookieName, cookieValue, expires, path) {
    document.cookie = escape(cookieName) + '=' + escape(cookieValue) + (expires ? '; EXPIRES=' + expires.toGMTString() : '') + "; PATH=/" ; 
}
 
// * Interrogation du cookie *
 
function getCookie (cookieName) {
    var cookieValue = null;
    var posName = document.cookie.indexOf(escape(cookieName) + '=' );
    if (posName != -1) {
        var posValue = posName + (escape(cookieName) + '=' ).length;
        var endPos = document.cookie.indexOf(';', posValue) ;
        if (endPos != -1) {
            cookieValue = unescape(document.cookie.substring(posValue, endPos));
        } else {
            cookieValue = unescape(document.cookie.substring(posValue));
        }
    }
    return cookieValue;
}