Aller au contenu

Utilisateur:Dr Brains/LinkSearchDeluxe.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.
//<syntaxhighlight lang=javascript>//<pre>//<nowiki>
if(mw.config.get('wgCanonicalSpecialPageName') == "LinkSearch" && typeof(LinkSearchDeluxe) == "undefined"){


LinkSearchDeluxe = new Object();
LinkSearchDeluxe.Fonctions = new Object();

LinkSearchDeluxe.Fonctions.getURLParams = function(){
    var URL = document.URL;
    var URLParams = new Array();
    if(URL.indexOf(mw.config.get('wgScript'))==-1) return URLParams;
    var Params = URL.split(mw.config.get('wgScript'))[1];
    Params = Params.split("&");
    for(var a=0,l=Params.length;a<l;a++){
        var ParamName = Params[a].split("=")[0].replace(/^\?/, "");
        var ParamValue = Params[a].split("=")[1];
        try{ ParamValue = decodeURIComponent(ParamValue); }catch(e){ }
        URLParams[ParamName] = ParamValue;
    }
    return URLParams;
}

LinkSearchDeluxe.Fonctions.createNamespaceSelect = function(){
    var NamespaceSpan = document.createElement("span");
    var NSSelectLabel = document.createElement('label');
    NSSelectLabel.setAttribute("for", "namespace");
    NSSelectLabel.innerHTML = "Espace de noms";
    NamespaceSpan.appendChild(NSSelectLabel);
    var NSSelect = document.createElement('select');
    NSSelect.id = "namespace";
    var ns;
    var options = "";
    var lstNs = new Array();
    for (var id in mw.config.get('wgFormattedNamespaces')) {
      ns = mw.config.get('wgFormattedNamespaces')[id];
      if (id < 0) continue;
      if (id == 0) ns = "(Principal)";
      options += '<option value="' + id + '">' + ns + '</option>';
      lstNs.push(id);
    }
    options = '<option value="' + lstNs.join('|') + '" selected="selected">*</option>' + options;
    NSSelect.innerHTML = options;
    NamespaceSpan.appendChild(NSSelect);
    return NamespaceSpan;
}

LinkSearchDeluxe.Fonctions.initForm = function(){
    var Form = document.getElementById("mw-linksearch-form");
    var TargetInput = document.getElementById("target");
    if(!Form || !TargetInput) return false;

    var URLParams = LinkSearchDeluxe.Fonctions.getURLParams();
    if(typeof(URLParams["namespace"])!="undefined" && typeof(URLParams["target"])!="undefined"){
        var LinkList = getElementsByClassName(document, "ol", "special")[0];
        if(LinkList) while(LinkList.firstChild){ LinkList.removeChild(LinkList.firstChild); }        
        LinkSearchDeluxe.Fonctions.initLinkList(URLParams);
    }
 
    var Offset = ( URLParams["offset"] ? URLParams["offset"] : "0" );
    var OffsetInput = document.createElement('input');
    OffsetInput.id = "OffsetInput";
    OffsetInput.type = "hidden";
    OffsetInput.value = Offset;
    OffsetInput.name = "offset";
    Form.appendChild(OffsetInput);
 
    var Limit = ( URLParams["limit"] ? parseInt(URLParams["limit"]) : 200 );
    var LimitInput = document.createElement('input');
    LimitInput.id = "LimitInput";
    LimitInput.type = "hidden";
    LimitInput.value = Limit;
    LimitInput.name = "limit";
    Form.appendChild(LimitInput);    

    var NamespaceSelect = LinkSearchDeluxe.Fonctions.createNamespaceSelect();
    TargetInput.parentNode.insertBefore(NamespaceSelect, TargetInput);
    TargetInput.value = ( URLParams["target"] ? URLParams["target"] : "" );
    if(URLParams["namespace"]){
        var options = NamespaceSelect.getElementsByTagName("option");
        for(var a=0,l=options.length;a<l;a++){
            if(options[a].value == URLParams["namespace"]){
                options[a].selected = "selected");
            }else{{
                options[a].selected = false;            
            } 
        }
    }

    var LinkListContent = getElementsByClassName(document, "div", "mw-spcontent")[0];
    if(LinkListContent){
        var LinkListLegendP = LinkListContent.getElementsByTagName('p')[0];
        if(LinkListLegendP) p.innerHTML = "Affichage de <span id='NumerOfResults'>"+Limit+"</span> résultats à partir du n°<span id='FirstResultsNumber'>1</span>."
        var LinkListLinks = LinkListContent.getElementsByTagName('p')[1];
        if(LinkListLinks){
            LinkSearchDeluxe.Fonctions.initLinkListLinks(LinkListLinks, (Limit/2) );
            LinkSearchDeluxe.Fonctions.initLinkListLinks(LinkListLinks, Limit );
            LinkSearchDeluxe.Fonctions.initLinkListLinks(LinkListLinks, (Limit*2), true ); 
        }
    }

    //TODO : modifier le bouton "Rechercher"
    
}

LinkSearchDeluxe.Fonctions.initLinkListLinks = function(LinkListLinks, Limit, Separator){
    var Link = document.createElement('a');
    Link.href = "#"
    Link.onclick = function(){
        var Form = document.getElementById("mw-linksearch-form");
        if(!Form) return false;

    }
    Link.appendChild(document.createTextNode(Limit + " suivantes"));
    LinkListLinks.appendChild(Link)
    if(Separator) LinkListLinks.appendChild(document.createTextNode(" — "));
}

LinkSearchDeluxe.Fonctions.initLinkList = function(URLParams, RequestContinue){
    if(!RequestContinue) RequestContinue = "";
    var LinkList = getElementsByClassName(document, "ol", "special")[0];
    if(!LinkList) return;
    var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + "/api.php?format=xml&action=query&list=exturlusage"
            + "&euquery=" + encodeURIComponent(URLParams["target"]);
            + ( URLParams["namespace"] ? "&eunamespace=" + URLParams["namespace"] : "")
            + "&eulimit=" + ( URLParams["limit"] ? URLParams["limit"] : "200" )
            + "&euoffset=" + ( URLParams["offset"] ? URLParams["offset"] : "0" )
            + RequestContinue
    
    var NouvelleRequete = new XMLHttpRequest();
    NouvelleRequete.open("GET", URL, true);
    NouvelleRequete.onreadystatechange = function() {
        if(NouvelleRequete.readyState != 4) return;
            var ElementTraitement = NouvelleRequete.responseXML;
            var Pages = ElementTraitement.getElementsByTagName('eu');
            for(a=0;a<Pages.length;a++){
                  var TitrePage = Pages[a].getAttribute('title');
                  var TargetURL = Pages[a].getAttribute('url');
                  LinkSearchDeluxe.Fonctions.addThisLinkToList(LinkList, TitrePage,TargetURL);
            } 
            var MustContinue = ElementTraitement.getElementsByTagName('query-continue')[0];
            if(MustContinue){
                  RequestContinue = "&euoffset="+encodeURIComponent(MustContinue.fistChild.getAttribute("euoffset"));
                  LinkSearchDeluxe.Fonctions.initLinkList(LinkList, URLParams, RequestContinue)
            }
    };
    NouvelleRequete.send(null);
}

LinkSearchDeluxe.Fonctions.addThisLinkToList = function(LinkList, TitrePage,TargetURL){


}


$(LinkSearchDeluxe.Fonctions.initForm);

} //</nowiki></pre></syntaxhighlight>