Utilisateur:Dr Brains/LinkSearchDeluxe.js
Apparence
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>