Utilisateur:Dr Brains/PageManager.js

Une page de Wikipédia, l'encyclopédie libre.
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.
// {{Projet:JavaScript/Script}} 
///////////////////////////////// STYLES ///////////////////////

if(typeof(SkinManagerCSSLOaded)=="undefined"){
    importStylesheetURI('http://fr.wikipedia.org/w/index.php?action=raw&ctype=text/css&title=User:Dr Brains/SkinManager.css');
    var SkinManagerCSSLOaded = true;
}

/* **************************************** SKIN MANAGER **************************************** */

$(GetSkinManager);

function GetSkinManager(){
    var SkinManagerlinkDiv = document.getElementById('Skin_Manager_Div');
    if(!SkinManagerlinkDiv){
        SkinManagerlinkDiv = document.createElement("div");
        SkinManagerlinkDiv.className = "Skin_Manager"; 
        SkinManagerlinkDiv.id = "Skin_Manager_Div";
        var sitenoticeDiv = document.getElementById("siteNotice");
        if(!sitenoticeDiv) return;
        sitenoticeDiv.parentNode.insertBefore(SkinManagerlinkDiv,sitenoticeDiv); 
        var LiensManager = document.createElement('ul');
        LiensManager.id = "Skin_Manager_Ul";
        SkinManagerlinkDiv.appendChild(LiensManager);
    }
    PageManager();
}


/* **************************************** Lien **************************************** */

var PageManager_Text_Link = "Informations";
var PageManager_Title_Link = "Obtenir des informations sur la page courante";

function PageManager(){
    if(mw.config.get('wgNamespaceNumber')<0) return;
    addLinkToSkinManager();
    addLinkToSkinManager( PageManager_Text_Link , 'javascript:PageManager_GetOptions()', PageManager_Title_Link);
}


/* **************************************** Menu **************************************** */

function PageManager_GetOptions(){
    var OldDiv = document.getElementById("PageManager_Div");
    if(OldDiv){
        OldDiv.parentNode.removeChild(OldDiv);
        return;
    }
    var PageManagerDiv = document.createElement('div');
    PageManagerDiv.id = "PageManager_Div";

    var HR1 = document.createElement('hr');
    PageManagerDiv.appendChild(HR1);

    var TopDiv = document.createElement('div');
    TopDiv.id = "PageManager_Top";
    PageManagerDiv.appendChild(TopDiv);

    var SelectDiv = document.createElement('span');
    SelectDiv.id = "PageManager_SelectDiv";
    TopDiv.appendChild(SelectDiv);

    var BasicInfoDiv = document.createElement('div');
    BasicInfoDiv.id = "PageManager_Basic";
    TopDiv.appendChild(BasicInfoDiv);

    var HR2 = document.createElement('hr');
    PageManagerDiv.appendChild(HR2);

    var BottomDiv = document.createElement('div');
    BottomDiv.id = "PageManager_Bottom";
    PageManagerDiv.appendChild(BottomDiv);
    
    var SkinManagerDiv = document.getElementById('Skin_Manager_Div');
    if(SkinManagerDiv){
        SkinManagerDiv.appendChild(PageManagerDiv);
        PageManager_MakeOptions();
        PageManager_Ajax_PageInfo();
    }
}


/* **************************************** Options **************************************** */

var PageManager_Ajax_Options_Text = "Autres informations";
var PageManager_Ajax_Options = new Array();
var PageManager_Ajax_Functions = new Array();

function PageManager_MakeOptions(){
    var SelectDiv = document.getElementById("PageManager_SelectDiv");
    if(!SelectDiv) return;
    var Select = document.createElement('select');
    var FirstOption = document.createElement('option');
    FirstOption.value = PageManager_Ajax_Options_Text;
    FirstOption.appendChild(document.createTextNode(PageManager_Ajax_Options_Text));
    FirstOption.disabled = "disabled";
    FirstOption.selected = "selected";
    Select.appendChild(FirstOption);
    for(var a=0;a<PageManager_Ajax_Options.length;a++){
        var Option = document.createElement('option');
        Option.value = PageManager_Ajax_Options[a]
        Option.appendChild(document.createTextNode(PageManager_Ajax_Options[a]));
        if(PageManager_Ajax_Functions[a]){
            Option.onclick = PageManager_Ajax_Functions[a];
        }else{
            Option.disabled = "disabled";
        }
        Select.appendChild(Option);
    }
    SelectDiv.appendChild(Select);
}


/* **************************************** API **************************************** */

var PageManager_APILimit = ( ((mw.config.get('wgUserGroups').indexOf("sysop")!=-1)||(mw.config.get('wgUserGroups').indexOf("bot")!=-1)) ? 4999 : 499);

///////////////////////////////// Page Info

var PageManager_Ajax_Text_Yes = "oui";
var PageManager_Ajax_Text_No = "non";
var PageManager_Ajax_Text_Namespace = "Espace de noms : ";
var PageManager_Ajax_Text_Url = "Adresse : ";
var PageManager_Ajax_Text_EditUrl = "Adresse d'édition : ";
var PageManager_Ajax_Text_Exist = "Cette page existe ? : ";
var PageManager_Ajax_Text_Redirect = "Cette page est une redirection ? : ";
var PageManager_Ajax_Text_Watched = "Vous suivez cette page ? : ";
var PageManager_Ajax_Text_Length = "Poids du wikitexte : ";
var PageManager_Ajax_Text_LengthUnit = " octets";
var PageManager_Ajax_Text_Date = "Dernière modification : ";
var PageManager_Ajax_Text_Oldid = "Oldid : ";

function PageManager_Ajax_PageInfo(Page){
    if(!Page) Page = mw.config.get('wgPageName');
    var AdresseRequete = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&prop=info&inprop='
    + 'protection|talkid|watched|subjectid|url'
    +'&titles=' + Page.replace(/&/g, "%26");
    var Requete = sajax_init_object();
    Requete.open("GET", AdresseRequete, true);
    Requete.onreadystatechange = function() {
            if(Requete.readyState != 4) return;
            var ObjetXML = Requete.responseXML;
            if(!ObjetXML) return;
            var Infos = ObjetXML.getElementsByTagName('page')[0];
            var Exist = ( Infos.getAttribute("missing")=="" ? PageManager_Ajax_Text_No : PageManager_Ajax_Text_Yes );
            var Redirect = ( Infos.getAttribute("redirect")=="" ? PageManager_Ajax_Text_Yes : PageManager_Ajax_Text_No );
            var Watched = ( Infos.getAttribute("watched")=="" ? PageManager_Ajax_Text_Yes : PageManager_Ajax_Text_No );
            var Ns = parseInt(Infos.getAttribute('ns'));
            var URL = Infos.getAttribute('fullurl');
            var EditURL = Infos.getAttribute('editurl');
            var Length = parseInt(Infos.getAttribute('length'));
            var Oldid = Infos.getAttribute('lastrevid');
            var Touched = PageManager_ManageTimestamp(Infos.getAttribute('touched'));

            var Result = new Array();
            Result.push(PageManager_Ajax_Text_Namespace + mw.config.get('wgFormattedNamespaces')[Ns] + " ("+Ns+")");
            Result.push(PageManager_Ajax_Text_Url + '<a href="'+URL+'">'+decodeURIComponent(URL)+'</a>');
            Result.push(PageManager_Ajax_Text_EditUrl + '<a href="'+EditURL+'">'+decodeURIComponent(EditURL)+'</a>');
            Result.push(PageManager_Ajax_Text_Exist + Exist);
            Result.push(PageManager_Ajax_Text_Redirect + Redirect);
            Result.push(PageManager_Ajax_Text_Watched + Watched);
            if(Length) Result.push(PageManager_Ajax_Text_Length + Length + PageManager_Ajax_Text_LengthUnit);
            if(Oldid) Result.push(PageManager_Ajax_Text_Oldid + '<a href="'+mw.config.get('wgScript')+'?title='+encodeURIComponent(Page)+'&diff=prev&oldid='+ Oldid+'">'+Oldid+'</a>');
            if(Touched) Result.push(PageManager_Ajax_Text_Date + Touched );


            var Ul = document.createElement('ul');
            for(var a=0;a<Result.length;a++){
                var Li = document.createElement('li');
                Li.innerHTML = Result[a];
                Ul.appendChild(Li);
            }
            var Div = document.getElementById("PageManager_Basic");
            if(Div) Div.appendChild(Ul);
    }
    Requete.send(null);
}

///////////////////////////////// Historique

PageManager_Ajax_Options.push("Historique");
PageManager_Ajax_Functions.push(function (){ PageManager_Ajax_Revisions();});

var PageManager_Ajax_Text_FormatRevisions = "$PAGE ($DIFF) ($SIZE octets) – $USER ($TALKU|$CONTRIBS) — $BOT$MINOR « $COMMENT »";

var PageManager_Ajax_Revisions_Limit = 20;
function PageManager_Ajax_Revisions(RVStartID, NewRevisionLimit){
    if(!RVStartID){
        var OldDiv = document.getElementById("PageManager_Bottom");
        if(OldDiv){
            while(OldDiv.firstChild){ OldDiv.removeChild(OldDiv.firstChild);}
        }
    }
    if(NewRevisionLimit) PageManager_Ajax_Revisions_Limit = NewRevisionLimit;
    var Page = mw.config.get('wgPageName').replace(/_/g, " ");
    if(!RVStartID) RVStartID = "";
    var AdresseRequete = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&prop=revisions&rvlimit='+PageManager_Ajax_Revisions_Limit+'&rvprop='
    + 'ids|flags|timestamp|user|size|comment|parsedcomment|content|tags'
    +'&titles=' + Page.replace(/&/g, "%26") + (RVStartID == "" ? "" : "&rvstartid=" + RVStartID);
    var Requete = sajax_init_object();
    Requete.open("GET", AdresseRequete, true);
    Requete.onreadystatechange = function() {
        if(Requete.readyState != 4) return;
        var ObjetXML = Requete.responseXML;
        if(!ObjetXML) return;
        var OldLinks = document.getElementById("PM_Next");
        if(OldLinks) OldLinks.parentNode.parentNode.removeChild(OldLinks.parentNode);
        var Revisions = new Array();
        var Infos = ObjetXML.getElementsByTagName('rev');
        for(var a=0;a<Infos.length;a++){
            var ThisInfo = Infos[a];
            var User = ThisInfo.getAttribute("user");
            var Minor = ( ThisInfo.getAttribute("minor")=="" ? "<b>m</b>" : "" );
            var Bot = ( ThisInfo.getAttribute("bot")=="" ? "<b>b</b>" : "" );
            var Comment = ( ThisInfo.getAttribute("comment") ? ThisInfo.getAttribute("comment") : "" );
            var ParsedComment = ( ThisInfo.getAttribute("parsedcomment") ? PageManager_Parse(ThisInfo.getAttribute("parsedcomment"), true, true) : "" );
            var Size = parseInt(ThisInfo.getAttribute('size'));
            var TimeStamp = PageManager_ManageTimestamp(ThisInfo.getAttribute('timestamp'));
            var Oldid = ThisInfo.getAttribute('revid');
            var ThisRevision = PageManager_Ajax_Text_FormatRevisions;
            ThisRevision = ThisRevision.split('$MINOR').join(Minor);
            ThisRevision = ThisRevision.split('$BOT').join(Bot);
            ThisRevision = ThisRevision.split('$DIFF').join(PageManager_ManagePageDiffLink(Page, Oldid, "prev", "diff"));
            ThisRevision = ThisRevision.split('$PAGE').join(PageManager_ManagePageOldidLink(Page, Oldid, TimeStamp));
            ThisRevision = ThisRevision.split('$SIZE').join(Size);
            ThisRevision = ThisRevision.split('$USER').join(PageManager_ManageUserLink(User));
            ThisRevision = ThisRevision.split('$TALKU').join(PageManager_ManageUserTalkLink(User, "D", "Discussion"));
            ThisRevision = ThisRevision.split('$CONTRIBS').join(PageManager_ManageUserContribLink(User, "C", "Contributions"));
            ThisRevision = ThisRevision.split('$COMMENT').join(ParsedComment);
            Revisions.push(ThisRevision);
        }
        var RevisionContinue = ObjetXML.getElementsByTagName('query-continue')[0];
        if(RevisionContinue){
            var RevisionContinueID = RevisionContinue.getElementsByTagName('revisions')[0].getAttribute('rvstartid');
            var AfterLink20 = '<a href="javascript:PageManager_Ajax_Revisions(\''+RevisionContinueID+'\', 20);" >20 révisions suivantes</a>'; 
            var AfterLink50 = '<a "href="javascript:PageManager_Ajax_Revisions(\''+RevisionContinueID+'\', 50);" >50 révisions suivantes</a>'; 
            var AfterLink100 = '<a "href="javascript:PageManager_Ajax_Revisions(\''+RevisionContinueID+'\', 100);" >100 révisions suivantes</a>'; 
            Revisions.push('<h5 id="PM_Next">'+ AfterLink20 +' | '+ AfterLink50 +' | '+ AfterLink100 + '</h5>');
        }
        var Ul = document.createElement('ul');
        for(var a=0;a<Revisions.length;a++){
            var Li = document.createElement('li');
            Li.innerHTML = Revisions[a];
            Ul.appendChild(Li);
        }
        var Div = document.getElementById("PageManager_Bottom");
        if(Div) Div.appendChild(Ul);
    }
    Requete.send(null);
}

///////////////////////////////// Pages liées

PageManager_Ajax_Options.push("Liens vers cette page");
PageManager_Ajax_Functions.push(function (){ PageManager_Ajax_BackLinks(false);});

PageManager_Ajax_Options.push("Redirections vers cette page");
PageManager_Ajax_Functions.push(function (){ PageManager_Ajax_BackLinks(true);});

var PageManager_Ajax_Text_FormatBackLinks = "$TITLE ; Espace de noms : $NS";

var PageManager_Ajax_BackLinks_Limit = 20;
function PageManager_Ajax_BackLinks(Redirect, BLStartID, NewBackLinksLimit){
    if(!BLStartID){
        var OldDiv = document.getElementById("PageManager_Bottom");
        if(OldDiv){
            while(OldDiv.firstChild){ OldDiv.removeChild(OldDiv.firstChild);}
        }
    }else{
        BLStartID = BLStartID.replace(/ZAPPOSTROPHE/g, "'");
    }
    if(NewBackLinksLimit) PageManager_Ajax_BackLinks_Limit = NewBackLinksLimit ;
    var Page = mw.config.get('wgPageName').replace(/_/g, " ");
    if(!BLStartID) BLStartID = "";

    var AdresseRequete = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&list=backlinks&bllimit='+PageManager_Ajax_BackLinks_Limit+ '&blfilterredir=nonredirects&blnamespace=&bltitle=' + Page.replace(/&/g, "%26") + (BLStartID == "" ? "" : "&blcontinue=" + BLStartID) ;
    var Requete = sajax_init_object();
    Requete.open("GET", AdresseRequete, true);
    Requete.onreadystatechange = function() {
        if(Requete.readyState != 4 ) return;
        var ObjetXML = Requete.responseXML;
        if(!ObjetXML) return;
        var OldLinks = document.getElementById("PM_Next");
        if(OldLinks) OldLinks.parentNode.parentNode.removeChild(OldLinks.parentNode);
        var BackLinks = new Array();
        if(Redirect){
            var Infos = ObjetXML.getElementsByTagName('redirlinks');
            for(var a=0;a<Infos.length;a++){
                var ThisInfo = Infos[a].parentNode;
                var NS = ThisInfo.getAttribute("ns");
                var Title = ThisInfo.getAttribute("title");
                var ThisBackLink = PageManager_Ajax_Text_FormatBackLinks;
                ThisBackLink = ThisBackLink.split('$TITLE').join(PageManager_ManagePageLink(Title));
                ThisBackLink = ThisBackLink.split('$NS').join( ( mw.config.get('wgFormattedNamespaces')[NS]=="" ? '(Principal)' :mw.config.get('wgFormattedNamespaces')[NS]) );
                BackLinks.push(ThisBackLink);
            }
        }else{
            var Infos = ObjetXML.getElementsByTagName('bl');
            for(var a=0;a<Infos.length;a++){
                var ThisInfo = Infos[a];
                var NS = ThisInfo.getAttribute("ns");
                var Title = ThisInfo.getAttribute("title");
                var ThisBackLink = PageManager_Ajax_Text_FormatBackLinks;
                ThisBackLink = ThisBackLink.split('$TITLE').join(PageManager_ManagePageLink(Title));
                ThisBackLink = ThisBackLink.split('$NS').join(( mw.config.get('wgFormattedNamespaces')[NS]=="" ? '(Principal)' :mw.config.get('wgFormattedNamespaces')[NS]));
                BackLinks.push(ThisBackLink);
            }
        }
        var BackLinksContinue = ObjetXML.getElementsByTagName('query-continue')[0];
        if(BackLinksContinue){
            var BackLinksContinueID = BackLinksContinue.getElementsByTagName('backlinks')[0].getAttribute('blcontinue').replace(/'/g, "ZAPPOSTROPHE");
            var AfterLink20 = '<a href="javascript:PageManager_Ajax_BackLinks('+Redirect+',\''+BackLinksContinueID+'\', 20);" >20 pages suivantes</a>'; 
            var AfterLink50 = '<a "href="javascript:PageManager_Ajax_BackLinks('+Redirect+',\''+BackLinksContinueID+'\', 50);" >50 pages suivantes</a>'; 
            var AfterLink100 = '<a "href="javascript:PageManager_Ajax_BackLinks('+Redirect+',\''+BackLinksContinueID+'\', 100);" >100 pages suivantes</a>'; 
            BackLinks.push('<h5 id="PM_Next">'+ AfterLink20 +' | '+ AfterLink50 +' | '+ AfterLink100 + '</h5>');
        }
        if(!BackLinks[0]&& BLStartID=="") BackLinks[0] = "<h5>Aucune page ne renvoie vers "+PageManager_ManagePageLink(mw.config.get('wgPageName'))+"</h5>";
        var Ul = document.createElement('ul');
        for(var a=0;a<BackLinks.length;a++){
            var Li = document.createElement('li');
            Li.innerHTML = BackLinks[a];
            Ul.appendChild(Li);
        }
        var Div = document.getElementById("PageManager_Bottom");
        if(Div) Div.appendChild(Ul);
    }
    Requete.send(null);
}

///////////////////////////////// Inclusions

PageManager_Ajax_Options.push("Inclusions de cette page");
PageManager_Ajax_Functions.push(function (){ PageManager_Ajax_Embeddedin();});

var PageManager_Ajax_Text_FormatEmbeddedin = "$TITLE ; Espace de noms : $NS";

var PageManager_Ajax_Embeddedin_Limit = 20;

function PageManager_Ajax_Embeddedin(EMStartID, NewEmbeddedinLimit){
    if(!EMStartID){
        var OldDiv = document.getElementById("PageManager_Bottom");
        if(OldDiv){
            while(OldDiv.firstChild){ OldDiv.removeChild(OldDiv.firstChild);}
        }
        EMStartID = "";
    }else{
        EMStartID = EMStartID.replace(/ZAPPOSTROPHE/g, "'");
    }
    if(NewEmbeddedinLimit) PageManager_Ajax_Embeddedin_Limit = NewEmbeddedinLimit ;
    var Page = mw.config.get('wgPageName').replace(/_/g, " ");
    var AdresseRequete = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&list=embeddedin&eilimit='+PageManager_Ajax_Embeddedin_Limit+ '&einamespace=&eititle=' + Page.replace(/&/g, "%26") + (EMStartID == "" ? "" : "&eicontinue=" + EMStartID) ;
    var Requete = sajax_init_object();
    Requete.open("GET", AdresseRequete, true);
    Requete.onreadystatechange = function() {
        if(Requete.readyState != 4 ) return;
        var ObjetXML = Requete.responseXML;
        if(!ObjetXML) return;
        var OldLinks = document.getElementById("PM_Next");
        if(OldLinks) OldLinks.parentNode.parentNode.removeChild(OldLinks.parentNode);
        var Embeddedin = new Array();
        var Infos = ObjetXML.getElementsByTagName('ei');
        for(var a=0;a<Infos.length;a++){
            var ThisInfo = Infos[a];
            var NS = ThisInfo.getAttribute("ns");
            var Title = ThisInfo.getAttribute("title");
            var ThisEmbeddedin = PageManager_Ajax_Text_FormatEmbeddedin;
            ThisEmbeddedin = ThisEmbeddedin.split('$TITLE').join(PageManager_ManagePageLink(Title));
            ThisEmbeddedin = ThisEmbeddedin.split('$NS').join(( mw.config.get('wgFormattedNamespaces')[NS]=="" ? '(Principal)' :mw.config.get('wgFormattedNamespaces')[NS]));
            Embeddedin.push(ThisEmbeddedin);
        }
        var EmbeddedinContinue = ObjetXML.getElementsByTagName('query-continue')[0];
        if(EmbeddedinContinue){
            var EmbeddedinContinueID = EmbeddedinContinue.getElementsByTagName('embeddedin')[0].getAttribute('eicontinue').replace(/'/g, "ZAPPOSTROPHE");
            var AfterLink20 = '<a href="javascript:PageManager_Ajax_Embeddedin(\''+EmbeddedinContinueID+'\', 20);" >20 pages suivantes</a>'; 
            var AfterLink50 = '<a "href="javascript:PageManager_Ajax_Embeddedin(\''+EmbeddedinContinueID+'\', 50);" >50 pages suivantes</a>'; 
            var AfterLink100 = '<a "href="javascript:PageManager_Ajax_Embeddedin(\''+EmbeddedinContinueID+'\', 100);" >100 pages suivantes</a>'; 
            Embeddedin.push('<h5 id="PM_Next">'+ AfterLink20 +' | '+ AfterLink50 +' | '+ AfterLink100 + '</h5>');
        }
        if(!Embeddedin[0]&& EMStartID=="") Embeddedin[0] = "<h5>Aucune page n'inclue "+PageManager_ManagePageLink(mw.config.get('wgPageName'))+"</h5>";
        var Ul = document.createElement('ul');
        for(var a=0;a<Embeddedin.length;a++){
            var Li = document.createElement('li');
            Li.innerHTML = Embeddedin[a];
            Ul.appendChild(Li);
        }
        var Div = document.getElementById("PageManager_Bottom");
        if(Div) Div.appendChild(Ul);
    }
    Requete.send(null);
}

///////////////////////////////// Liens

PageManager_Ajax_Options.push("Liens internes de cette page");
PageManager_Ajax_Functions.push(function (){ PageManager_Ajax_Links();});

var PageManager_Ajax_Text_FormatLinks = "$TITLE ; Espace de noms : $NS";

var PageManager_Ajax_Links_Limit = 20;

function PageManager_Ajax_Links(LinksStartID, NewLinksLimit){
    if(!LinksStartID){
        var OldDiv = document.getElementById("PageManager_Bottom");
        if(OldDiv){
            while(OldDiv.firstChild){ OldDiv.removeChild(OldDiv.firstChild);}
        }
        LinksStartID = "";
    }else{
        LinksStartID = LinksStartID.replace(/ZAPPOSTROPHE/g, "'");
    }
    if(NewLinksLimit) PageManager_Ajax_Links_Limit = NewLinksLimit;
    var Page = mw.config.get('wgPageName').replace(/_/g, " ");
    var AdresseRequete = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&prop=links&pllimit='+PageManager_Ajax_Links_Limit+'&titles=' + Page.replace(/&/g, "%26") + (LinksStartID == "" ? "" : "&plcontinue=" + LinksStartID) ;
    var Requete = sajax_init_object();
    Requete.open("GET", AdresseRequete, true);
    Requete.onreadystatechange = function() {
        if(Requete.readyState != 4 ) return;
        var ObjetXML = Requete.responseXML;
        if(!ObjetXML) return;
        var OldLinks = document.getElementById("PM_Next");
        if(OldLinks) OldLinks.parentNode.parentNode.removeChild(OldLinks.parentNode);
        var AllLinks = new Array();
        var Infos = ObjetXML.getElementsByTagName('pl');
        for(var a=0;a<Infos.length;a++){
            var ThisInfo = Infos[a];
            var NS = ThisInfo.getAttribute("ns");
            var Title = ThisInfo.getAttribute("title");
            var ThisLink = PageManager_Ajax_Text_FormatLinks;
            ThisLink = ThisLink.split('$TITLE').join(PageManager_ManagePageLink(Title));
            ThisLink = ThisLink.split('$NS').join(( mw.config.get('wgFormattedNamespaces')[NS]=="" ? '(Principal)' :mw.config.get('wgFormattedNamespaces')[NS]));
            AllLinks.push(ThisLink);
        }
        var LinksContinue = ObjetXML.getElementsByTagName('query-continue')[0];
        if(LinksContinue){
            var LinksContinueID = LinksContinue.getElementsByTagName('links')[0].getAttribute('plcontinue').replace(/'/g, "ZAPPOSTROPHE");
            var AfterLink20 = '<a href="javascript:PageManager_Ajax_Links(\''+LinksContinueID+'\', 20);" >20 pages suivantes</a>'; 
            var AfterLink50 = '<a "href="javascript:PageManager_Ajax_Links(\''+LinksContinueID+'\', 50);" >50 pages suivantes</a>'; 
            var AfterLink100 = '<a "href="javascript:PageManager_Ajax_Links(\''+LinksContinueID+'\', 100);" >100 pages suivantes</a>'; 
            AllLinks.push('<h5 id="PM_Next">'+ AfterLink20 +' | '+ AfterLink50 +' | '+ AfterLink100 + '</h5>');
        }
        if(!AllLinks[0]&& LinksStartID=="") AllLinks[0] = "<h5>Aucun lien interne dans la page "+PageManager_ManagePageLink(mw.config.get('wgPageName'))+"</h5>";
        var Ul = document.createElement('ul');
        for(var a=0;a<AllLinks.length;a++){
            var Li = document.createElement('li');
            Li.innerHTML = AllLinks[a];
            Ul.appendChild(Li);
        }
        var Div = document.getElementById("PageManager_Bottom");
        if(Div) Div.appendChild(Ul);
    }
    Requete.send(null);
}

///////////////////////////////// Liens externes

PageManager_Ajax_Options.push("Liens externes de cette page");
PageManager_Ajax_Functions.push(function (){ PageManager_Ajax_ExternalLinks();});

var PageManager_Ajax_ExternalLinks_Limit = 20;

function PageManager_Ajax_ExternalLinks(ExternalLinksStartID, NewExternalLinksLimit){
    if(!ExternalLinksStartID){
        var OldDiv = document.getElementById("PageManager_Bottom");
        if(OldDiv){
            while(OldDiv.firstChild){ OldDiv.removeChild(OldDiv.firstChild);}
        }
        ExternalLinksStartID = "";
    }else{
        ExternalLinksStartID = ExternalLinksStartID.replace(/ZAPPOSTROPHE/g, "'");
    }
    if(NewExternalLinksLimit) PageManager_Ajax_ExternalLinks_Limit = NewExternalLinksLimit;
    var Page = mw.config.get('wgPageName').replace(/_/g, " ");
    var AdresseRequete = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&prop=extlinks&ellimit='+PageManager_Ajax_ExternalLinks_Limit+'&titles=' + Page.replace(/&/g, "%26") + (ExternalLinksStartID == "" ? "" : "&eloffset=" + ExternalLinksStartID) ;
    var Requete = sajax_init_object();
    Requete.open("GET", AdresseRequete, true);
    Requete.onreadystatechange = function() {
        if(Requete.readyState != 4 ) return;
        var ObjetXML = Requete.responseXML;
        if(!ObjetXML) return;
        var OldLinks = document.getElementById("PM_Next");
        if(OldLinks) OldLinks.parentNode.parentNode.removeChild(OldLinks.parentNode);
        var AllLinks = new Array();
        var Infos = ObjetXML.getElementsByTagName('el');
        for(var a=0;a<Infos.length;a++){
            var Title = ( Infos[a].firstChild ? Infos[a].firstChild.nodeValue : "");
            if(Title != "") AllLinks.push('<a class="external text" href="' + Title + '" target="_blank">'+Title+'</a>');
        }
        var LinksContinue = ObjetXML.getElementsByTagName('query-continue')[0];
        if(LinksContinue){
            var LinksContinueID = LinksContinue.getElementsByTagName('extlinks')[0].getAttribute('eloffset').replace(/'/g, "ZAPPOSTROPHE");
            var AfterLink20 = '<a href="javascript:PageManager_Ajax_ExternalLinks(\''+LinksContinueID+'\', 20);" >20 pages suivantes</a>'; 
            var AfterLink50 = '<a "href="javascript:PageManager_Ajax_ExternalLinks(\''+LinksContinueID+'\', 50);" >50 pages suivantes</a>'; 
            var AfterLink100 = '<a "href="javascript:PageManager_Ajax_ExternalLinks(\''+LinksContinueID+'\', 100);" >100 pages suivantes</a>'; 
            AllLinks.push('<h5 id="PM_Next">'+ AfterLink20 +' | '+ AfterLink50 +' | '+ AfterLink100 + '</h5>');
        }
        if(!AllLinks[0] && ExternalLinksStartID=="") AllLinks[0] = "<h5>Aucun lien externe dans la page "+PageManager_ManagePageLink(mw.config.get('wgPageName'))+"</h5>";
        var Ul = document.createElement('ul');
        for(var a=0;a<AllLinks.length;a++){
            var Li = document.createElement('li');
            Li.innerHTML = AllLinks[a];
            Ul.appendChild(Li);
        }
        var Div = document.getElementById("PageManager_Bottom");
        if(Div) Div.appendChild(Ul);
    }
    Requete.send(null);
}

///////////////////////////////// Modèles

PageManager_Ajax_Options.push("Modèles de cette page");
PageManager_Ajax_Functions.push(function (){ PageManager_Ajax_Templates();});

var PageManager_Ajax_Text_FormatTemplates = "$TITLE ; Espace de noms : $NS";

var PageManager_Ajax_Templates_Limit = 20;

function PageManager_Ajax_Templates(TemplatesStartID, NewTemplatesLimit){
    if(!TemplatesStartID){
        var OldDiv = document.getElementById("PageManager_Bottom");
        if(OldDiv){
            while(OldDiv.firstChild){ OldDiv.removeChild(OldDiv.firstChild);}
        }
        TemplatesStartID = "";
    }else{
        TemplatesStartID = TemplatesStartID.replace(/ZAPPOSTROPHE/g, "'");
    }
    if(NewTemplatesLimit) PageManager_Ajax_Templates_Limit = NewTemplatesLimit;
    var Page = mw.config.get('wgPageName').replace(/_/g, " ");
    var AdresseRequete = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&prop=templates&tllimit='+PageManager_Ajax_Templates_Limit+'&titles=' + Page.replace(/&/g, "%26") + (TemplatesStartID == "" ? "" : "&tlcontinue=" + TemplatesStartID) ;
    var Requete = sajax_init_object();
    Requete.open("GET", AdresseRequete, true);
    Requete.onreadystatechange = function() {
        if(Requete.readyState != 4 ) return;
        var ObjetXML = Requete.responseXML;
        if(!ObjetXML) return;
        var OldLinks = document.getElementById("PM_Next");
        if(OldLinks) OldLinks.parentNode.parentNode.removeChild(OldLinks.parentNode);
        var AllTemplates = new Array();
        var Infos = ObjetXML.getElementsByTagName('tl');
        for(var a=0;a<Infos.length;a++){
            var ThisInfo = Infos[a];
            var NS = ThisInfo.getAttribute("ns");
            var Title = ThisInfo.getAttribute("title");
            var ThisTemplate = PageManager_Ajax_Text_FormatTemplates;
            ThisTemplate = ThisTemplate.split('$TITLE').join(PageManager_ManagePageLink(Title));
            ThisTemplate = ThisTemplate.split('$NS').join(( mw.config.get('wgFormattedNamespaces')[NS]=="" ? '(Principal)' :mw.config.get('wgFormattedNamespaces')[NS]));
            AllTemplates.push(ThisTemplate);
        }
        var TemplatesContinue = ObjetXML.getElementsByTagName('query-continue')[0];
        if(TemplatesContinue){
            var TemplatesContinueID = TemplatesContinue.getElementsByTagName('templates')[0].getAttribute('tlcontinue').replace(/'/g, "ZAPPOSTROPHE");
            var AfterLink20 = '<a href="javascript:PageManager_Ajax_Templates(\''+TemplatesContinueID+'\', 20);" >20 pages suivantes</a>'; 
            var AfterLink50 = '<a "href="javascript:PageManager_Ajax_Templates(\''+TemplatesContinueID+'\', 50);" >50 pages suivantes</a>'; 
            var AfterLink100 = '<a "href="javascript:PageManager_Ajax_Templates(\''+TemplatesContinueID+'\', 100);" >100 pages suivantes</a>'; 
            AllTemplates.push('<h5 id="PM_Next">'+ AfterLink20 +' | '+ AfterLink50 +' | '+ AfterLink100 + '</h5>');
        }
        if(!AllTemplates[0] && TemplatesStartID=="") AllTemplates[0] = "<h5>Aucun modèle dans la page "+PageManager_ManagePageLink(mw.config.get('wgPageName'))+"</h5>";
        var Ul = document.createElement('ul');
        for(var a=0;a<AllTemplates.length;a++){
            var Li = document.createElement('li');
            Li.innerHTML = AllTemplates[a];
            Ul.appendChild(Li);
        }
        var Div = document.getElementById("PageManager_Bottom");
        if(Div) Div.appendChild(Ul);
    }
    Requete.send(null);
}

///////////////////////////////// Images

PageManager_Ajax_Options.push("Images de cette page");
PageManager_Ajax_Functions.push(function (){ PageManager_Ajax_Images();});


var PageManager_Ajax_Images_Limit = 20;

function PageManager_Ajax_Images(ImagesStartID, NewImagesLimit){
    if(!ImagesStartID){
        var OldDiv = document.getElementById("PageManager_Bottom");
        if(OldDiv){
            while(OldDiv.firstChild){ OldDiv.removeChild(OldDiv.firstChild);}
        }
        ImagesStartID = "";
    }else{
        ImagesStartID = ImagesStartID.replace(/ZAPPOSTROPHE/g, "'");
    }
    if(NewImagesLimit) PageManager_Ajax_Images_Limit = NewImagesLimit;
    var Page = mw.config.get('wgPageName').replace(/_/g, " ");
    var AdresseRequete = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&prop=images&imlimit='+PageManager_Ajax_Images_Limit+'&titles=' + Page.replace(/&/g, "%26") + (ImagesStartID == "" ? "" : "&imcontinue=" + ImagesStartID) ;
    var Requete = sajax_init_object();
    Requete.open("GET", AdresseRequete, true);
    Requete.onreadystatechange = function() {
        if(Requete.readyState != 4 ) return;
        var ObjetXML = Requete.responseXML;
        if(!ObjetXML) return;
        var OldLinks = document.getElementById("PM_Next");
        if(OldLinks) OldLinks.parentNode.parentNode.removeChild(OldLinks.parentNode);
        var AllImages = new Array();
        var Infos = ObjetXML.getElementsByTagName('im');
        for(var a=0;a<Infos.length;a++){
            var ThisInfo = Infos[a];
            var Title = ThisInfo.getAttribute("title");
            var ThisImage = PageManager_ManagePageLink(Title);
            AllImages.push(ThisImage);
        }
        var ImagesContinue = ObjetXML.getElementsByTagName('query-continue')[0];
        if(ImagesContinue){
            var ImagesContinueID = ImagesContinue.getElementsByTagName('images')[0].getAttribute('imcontinue').replace(/'/g, "ZAPPOSTROPHE");
            var AfterLink20 = '<a href="javascript:PageManager_Ajax_Images(\''+ImagesContinueID+'\', 20);" >20 pages suivantes</a>'; 
            var AfterLink50 = '<a "href="javascript:PageManager_Ajax_Images(\''+ImagesContinueID+'\', 50);" >50 pages suivantes</a>'; 
            var AfterLink100 = '<a "href="javascript:PageManager_Ajax_Images(\''+ImagesContinueID+'\', 100);" >100 pages suivantes</a>'; 
            AllImages.push('<h5 id="PM_Next">'+ AfterLink20 +' | '+ AfterLink50 +' | '+ AfterLink100 + '</h5>');
        }
        if(!AllImages[0] && ImagesStartID=="") AllImages[0] = "<h5>Aucune image dans la page "+PageManager_ManagePageLink(mw.config.get('wgPageName'))+"</h5>";
        var Ul = document.createElement('ul');
        for(var a=0;a<AllImages.length;a++){
            var Li = document.createElement('li');
            Li.innerHTML = AllImages[a];
            Ul.appendChild(Li);
        }
        var Div = document.getElementById("PageManager_Bottom");
        if(Div) Div.appendChild(Ul);
    }
    Requete.send(null);
}

///////////////////////////////// Catégories

PageManager_Ajax_Options.push("Catégories de cette page");
PageManager_Ajax_Functions.push(function (){ PageManager_Ajax_Categories();});

var PageManager_Ajax_Text_FormatCategories = "$TITLE ; clé de tri : $CLE ; $CACHE ";

var PageManager_Ajax_Categories_Limit = 20;

function PageManager_Ajax_Categories(CategoriesStartID, NewCategoriesLimit){
    if(!CategoriesStartID){
        var OldDiv = document.getElementById("PageManager_Bottom");
        if(OldDiv){
            while(OldDiv.firstChild){ OldDiv.removeChild(OldDiv.firstChild);}
        }
        CategoriesStartID = "";
    }else{
        CategoriesStartID = CategoriesStartID.replace(/ZAPPOSTROPHE/g, "'");
    }
    if(NewCategoriesLimit) PageManager_Ajax_Categories_Limit = NewCategoriesLimit;
    var Page = mw.config.get('wgPageName').replace(/_/g, " ");
    var AdresseRequete = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&prop=categories&cllimit='+PageManager_Ajax_Categories_Limit+'&clprop=hidden|sortkey&titles=' + Page.replace(/&/g, "%26") + (CategoriesStartID == "" ? "" : "&clcontinue=" + CategoriesStartID) ;
    var Requete = sajax_init_object();
    Requete.open("GET", AdresseRequete, true);
    Requete.onreadystatechange = function() {
        if(Requete.readyState != 4 ) return false;
        var ObjetXML = Requete.responseXML;
        if(!ObjetXML) return;
        var OldLinks = document.getElementById("PM_Next");
        if(OldLinks) OldLinks.parentNode.parentNode.removeChild(OldLinks.parentNode);
        var AllCategories = new Array();
        var Infos = ObjetXML.getElementsByTagName('cl');
        for(var a=0;a<Infos.length;a++){
            var ThisInfo = Infos[a];
            var Title = ThisInfo.getAttribute("title");
            var Hidden = ThisInfo.getAttribute("hidden");
            var SortKey = ThisInfo.getAttribute("sortkey");
            var ThisCategorie = PageManager_Ajax_Text_FormatCategories;
            ThisCategorie = ThisCategorie.split('$TITLE').join(PageManager_ManagePageLink(Title));
            ThisCategorie = ThisCategorie.split('$CLE').join(SortKey);
            ThisCategorie = ThisCategorie.split('$CACHE').join((Hidden=="" ? "<small>Catégorie cachée</small>" : ""));
            AllCategories.push(ThisCategorie);
        }
        var CategoriesContinue = ObjetXML.getElementsByTagName('query-continue')[0];
        if(CategoriesContinue){
            var CategoriesContinueID = CategoriesContinue.getElementsByTagName('categories')[0].getAttribute('clcontinue').replace(/'/g, "ZAPPOSTROPHE");
            var AfterLink20 = '<a href="javascript:PageManager_Ajax_Categories(\''+CategoriesContinueID+'\', 20);" >20 pages suivantes</a>'; 
            var AfterLink50 = '<a "href="javascript:PageManager_Ajax_Categories(\''+CategoriesContinueID+'\', 50);" >50 pages suivantes</a>'; 
            var AfterLink100 = '<a "href="javascript:PageManager_Ajax_Categories(\''+CategoriesContinueID+'\', 100);" >100 pages suivantes</a>'; 
            AllCategories.push('<h5 id="PM_Next">'+ AfterLink20 +' | '+ AfterLink50 +' | '+ AfterLink100 + '</h5>');
        }
        if(!AllCategories[0] && CategoriesStartID=="") AllCategories[0] = "<h5>Aucune catégorie dans la page "+PageManager_ManagePageLink(mw.config.get('wgPageName'))+"</h5>";
        var Ul = document.createElement('ul');
        for(var a=0;a<AllCategories.length;a++){
            var Li = document.createElement('li');
            Li.innerHTML = AllCategories[a];
            Ul.appendChild(Li);
        }
        var Div = document.getElementById("PageManager_Bottom");
        if(Div) Div.appendChild(Ul);
    }
    Requete.send(null);
}


/* **************************************** Fonctions **************************************** */

function PageManager_ManageTimestamp(TimeStamp){
    if(!TimeStamp) return false;
    var DateUgly = TimeStamp.replace(/Z/g, "").split("T")[0];
    var Time = TimeStamp.split("T")[1].replace(/Z/g, "");
    var Date = DateUgly.split("-");
    var Year = Date[0];
    var Month = Date[1];
    var Day = Date[2];
    var Text = Day + "/" + Month + "/" + Year + " à " + Time;
    return Text;
}

function PageManager_Parse(Text, nobr, notags ){
    Text = Text.replace(/&amp;/g, "&");
    if(notags){
        Text = Text.replace(/</g, "&lt;");
        Text = Text.replace(/>/g, "&gt;");
    }else{
        Text = Text.replace(/&lt;/g, "<");
        Text = Text.replace(/&gt;/g, ">");
    }
    if(nobr) Text = Text.replace(/<br/g, "&lt;br").replace(/<\/br/g, "&lt;\/br");
    return Text;

}
///////////////////////////////////////////////////////////////// Création des liens //////////////////////////////////

function PageManager_ManagePageLink(Page, Text, Title){
    Page = Page.replace(/_/g, " ");
    if(!Text) Text = Page;
    if(!Title) Title = Page;
    var EncodedPage = encodeURIComponent(Page);
    var PageLink = '<a class="PM_PageLink" href="' + mw.config.get('wgServer') + mw.config.get('wgArticlePath').split('$1').join(EncodedPage) + '" title="' + Title + '">' + Text + '</a>';
    return PageLink;
}

function PageManager_ManagePageOldidLink(Page, Oldid, Text, Title){
    Page = Page.replace(/_/g, " ");
    if(!Text) Text = Page;
    if(!Title) Title = Page;
    var EncodedPage = encodeURIComponent(Page);
    var PageLink = '<a class="PM_OldidLink" href="' + mw.config.get('wgServer') + mw.config.get('wgScript')+ '?title=' + EncodedPage + '&oldid=' + Oldid + '" title="' + Title + '">' + Text + '</a>';
    return PageLink;
}

function PageManager_ManagePageDiffLink(Page, Oldid, Diff, Text, Title){
    Page = Page.replace(/_/g, " ");
    if(!Diff) Diff = "prev";
    if(!Text) Text = Page;
    if(!Title) Title = Page;
    var EncodedPage = encodeURIComponent(Page);
    var PageLink = '<a class="PM_DiffLink" href="' + mw.config.get('wgServer') + mw.config.get('wgScript')+ '?title=' + EncodedPage + '&oldid=' + Oldid + '&diff=' + Diff +'" title="' + Title + '">' + Text + '</a>';
    return PageLink;
}

function PageManager_ManageUserLink(User, Text, Title){
    User = User.replace(/_/g, " ");
    if(!Text) Text = User;
    if(!Title) Title = User;
    var EncodedUser = encodeURIComponent(User);
    var UserLink = '<a class="PM_UserLink" href="'+ mw.config.get('wgServer') + mw.config.get('wgArticlePath').split('$1').join(mw.config.get('wgFormattedNamespaces')[2]+':'+User) + '" title="'+Title+'">'+Text+'</a>';
    return UserLink;
}

function PageManager_ManageUserTalkLink(User, Text, Title){
    User = User.replace(/_/g, " ");
    if(!Text) Text = User;
    if(!Title) Title = User;
    var EncodedUser = encodeURIComponent(User);
    var UserTalkLink = '<a class="PM_UserTalkLink" href="'+ mw.config.get('wgServer') + mw.config.get('wgArticlePath').split('$1').join(mw.config.get('wgFormattedNamespaces')[3]+':'+User) + '" title="'+Title+'">'+Text+'</a>';
    return UserTalkLink;
}

function PageManager_ManageUserContribLink(User, Text, Title){
    User = User.replace(/_/g, " ");
    if(!Text) Text = User;
    if(!Title) Title = User;
    var EncodedUser = encodeURIComponent(User);
    var UserContribLink = '<a class="PM_UserContribLink" href="'+ mw.config.get('wgServer') + mw.config.get('wgArticlePath').split('$1').join('Special:Contributions/'+User) + '" title="'+Title+'">'+Text+'</a>';
    return UserContribLink;
}


/////////////////////////////////////////////////////////// Gestion des espaces de noms ///////////////////////////////////////
/*
function PageManager_GetNamespaceNumber(Page){
    var Namespace = 0;
    for(var NS in mw.config.get('wgFormattedNamespaces')){
        if(Page.indexOf(mw.config.get('wgFormattedNamespaces')[NS]+":"!=-1)
        Namespace = parseInt(NS);
    }
    return Namespace;
}

function PageManager_GetNamespaceName(Page){
    var Namespace = "";
    for(var NS in mw.config.get('wgFormattedNamespaces')){
        if(Page.indexOf(mw.config.get('wgFormattedNamespaces')[NS]+":"!=-1)
        Namespace = mw.config.get('wgFormattedNamespaces')[NS];
    }
    return Namespace;
}

function PageManager_GetTalkNamespaceName(Page){
    var Namespace = 0;
    for(var NS in mw.config.get('wgFormattedNamespaces')){
        if(Page.indexOf(mw.config.get('wgFormattedNamespaces')[NS]+":"!=-1)
        Namespace = parseInt(NS);
    }
    if(Namespace==-1) return false;
    if(Namespace%2){
        return (Namespace+1);
    }else[
        return Namespace;
    }
}

function PageManager_GetSubjectNamespaceName(Page){
    var Namespace = 0;
    for(var NS in mw.config.get('wgFormattedNamespaces')){
        if(Page.indexOf(mw.config.get('wgFormattedNamespaces')[NS]+":"!=-1)
        Namespace = parseInt(NS);
    }
    if(Namespace==-1) return -1;
    if(Namespace%2){
        return Namespace;
    }else[
        return (Namespace-1);
    }
}
*/


/* **************************************** AJOUT D'UN LIEN AU SKIN MANAGER **************************************** */

if(typeof(addLinkToSkinManager)=="undefined")
function addLinkToSkinManager( TextLink, HrefLink, TitleLink, TextBefore, TextAfter, Position){
   if(!Position) Position = -1;

   var LiensManager = document.getElementById('Skin_Manager_Ul');
   if(!LiensManager) return;

   var NewLinkInSkinManager = document.createElement('li');
 
if((!TextLink)&&(!HrefLink)){
   NewLinkInSkinManager.innerHTML = "&nbsp;&nbsp;&nbsp;";

}else{
   if(!TitleLink) TitleLink = HrefLink;
   if(!TextBefore) TextBefore = "";
   if(!TextAfter) TextAfter = "";

      if(HrefLink.indexOf("javascript:")==-1) HrefLink = "/wiki/" + HrefLink.replace(/ /g,"_");

      var NewLink = document.createElement('a');
      NewLink.href = HrefLink;
      NewLink.title = TitleLink;
      NewLink.appendChild(document.createTextNode(TextLink));

      NewLinkInSkinManager.appendChild(document.createTextNode(TextBefore));
      NewLinkInSkinManager.appendChild(NewLink);
      NewLinkInSkinManager.appendChild(document.createTextNode(TextAfter));
   }
   if(Position==-1){
      LiensManager.appendChild(NewLinkInSkinManager);
   }else{
      var Cible = LiensManager.getElementsByTagName('li')[Position];
      if(!Cible){
      }else{
         LiensManager.insertBefore(NewLinkInSkinManager, Cible);
      }
   }
}