Utilisateur:Dr Brains/LiensPageAuHasard.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.LiensPageAuHasard = new Object();
LiensPageAuHasard.Params = new Object();
LiensPageAuHasard.Params.Timeout = 8;
LiensPageAuHasard.Variables = new Object();
LiensPageAuHasard.Variables.Timers = new Array();
LiensPageAuHasard.Variables.Links = new Array();
LiensPageAuHasard.Variables.Pages = new Array();
LiensPageAuHasard.Variables.PagesOK = new Array();
LiensPageAuHasard.Variables.AllPagesOK = false;
LiensPageAuHasard.Variables.Cats = new Array();
LiensPageAuHasard.Fonctions = new Object();
LiensPageAuHasard.Variables.APILimit = ( (mw.config.get('wgUserGroups').indexOf("sysop")!=-1 || mw.config.get('wgUserGroups').indexOf("bot")!=-1) ? 4999 : 499);
LiensPageAuHasard.Fonctions.Init = function(){
if(typeof(LiensPageAuHasard.Fonctions.CustomParams) == "function") LiensPageAuHasard.Fonctions.CustomParams();
var AllSpans = getElementsByClassName(document, "span", "PageAuHasard");
for(var a=0,l=AllSpans.length;a<l;a++){
var ThisSPan = AllSpans[a];
var CatSpan = ThisSPan.getElementsByTagName("span")[0];
var RandomLink = ThisSPan.getElementsByTagName("a")[0];
if(!RandomLink || !CatSpan) continue;
RandomLink.id="RandomLink"+a;
LiensPageAuHasard.Variables.Links[a] = RandomLink;
var Cat = mw.html.escape(CatSpan.innerHTML);
LiensPageAuHasard.Fonctions.GetPages(a, Cat);
LiensPageAuHasard.Variables.Timers[a] = setTimeout("LiensPageAuHasard.Fonctions.AnotherPage("+a+");", LiensPageAuHasard.Params.Timeout*1000+parseInt((a/AllSpans.length)*LiensPageAuHasard.Params.Timeout*1000));
}
}
LiensPageAuHasard.Fonctions.GetPages = function(index, Cat, categorycontinue){
var CatURL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&list=categorymembers'
+ '&cmlimit=' + LiensPageAuHasard.Variables.APILimit
+ '&cmtitle=' + mw.config.get('wgFormattedNamespaces')[14]+":" + encodeURIComponent(Cat)
+ ( categorycontinue ? categorycontinue : "");
var Link = LiensPageAuHasard.Variables.Links[index];
Link.innerHTML = Link.innerHTML + '<span style="text-decoration:blink">…</span>';
LiensPageAuHasard.Variables.PagesOK[index] = 0;
LiensPageAuHasard.Fonctions.ajax.http({
url: CatURL,
cat: Cat,
index:index,
onSuccess:LiensPageAuHasard.Fonctions.GetPagesDone
});
}
LiensPageAuHasard.Fonctions.GetPagesDone = function(Req, data){
var index = data.index;
var Cat = data.cat;
if(!LiensPageAuHasard.Variables.Pages[index]) LiensPageAuHasard.Variables.Pages[index] = new Array();
if(!LiensPageAuHasard.Variables.Cats[index]) LiensPageAuHasard.Variables.Cats[index] = Cat;
var ElementTraitement = Req.responseXML;
if(!ElementTraitement){
prompt("!Problème", data.url);
return;
}
var Pages = ElementTraitement.getElementsByTagName('cm');
for(a=0;a<Pages.length;a++){
var TitrePage = Pages[a].getAttribute('title');
if(LiensPageAuHasard.Variables.Pages[index].indexOf(TitrePage)==-1) LiensPageAuHasard.Variables.Pages[index].push(TitrePage);
}
var CatContinue = ElementTraitement.getElementsByTagName('query-continue')[0];
if(CatContinue){
var AutreRequeteContinue = '&cmcontinue=' + encodeURIComponent(CatContinue.firstChild.getAttribute("cmcontinue"));
LiensPageAuHasard.Fonctions.GetPages(index, Cat, AutreRequeteContinue);
}else{
LiensPageAuHasard.Variables.PagesOK[index] =1;
LiensPageAuHasard.Variables.AllPagesOK = true;
for(var Page in LiensPageAuHasard.Variables.PagesOK){
if(LiensPageAuHasard.Variables.PagesOK[Page] != 1) LiensPageAuHasard.Variables.AllPagesOK = false;
}
}
}
LiensPageAuHasard.Fonctions.AnotherPage = function(index){
clearTimeout(LiensPageAuHasard.Variables.Timers[index]);
var Cat = LiensPageAuHasard.Variables.Cats[index];
var ListeLiens = LiensPageAuHasard.Variables.Pages[index];
var Link = LiensPageAuHasard.Variables.Links[index];
var Max = ListeLiens.length;
if(!Cat || !ListeLiens || !Link || !Max || !LiensPageAuHasard.Variables.AllPagesOK){
LiensPageAuHasard.Variables.Timers[index] = setTimeout("LiensPageAuHasard.Fonctions.AnotherPage("+index+");", LiensPageAuHasard.Params.Timeout*1000);
return;
}
var ChosenLink = parseInt(Math.random()*Max);
var NewLink = ListeLiens[ChosenLink];
Link.innerHTML = NewLink;
Link.title = NewLink;
Link.href = mw.config.get('wgServer') + mw.config.get('wgArticlePath').split("$1").join(encodeURIComponent(NewLink));
LiensPageAuHasard.Variables.Timers[index] = setTimeout("LiensPageAuHasard.Fonctions.AnotherPage("+index+");", LiensPageAuHasard.Params.Timeout*1000);
}
LiensPageAuHasard.Fonctions.ajax = {
http:function(bundle){ var xmlhttp; try{ xmlhttp = new XMLHttpRequest(); }catch(e){ try{ xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ try{ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){ xmlhttp = false; }}}; if(xmlhttp){ xmlhttp.onreadystatechange = function(){ if (xmlhttp.readyState == 4){ LiensPageAuHasard.Fonctions.ajax.httpComplete(xmlhttp,bundle);}}; xmlhttp.open(bundle.method ? bundle.method : "GET",bundle.url,bundle.async == false ? false : true); if (bundle.headers) { for (var field in bundle.headers){ try{ xmlhttp.setRequestHeader(field,bundle.headers[field]); }catch(err){}}}; xmlhttp.send(bundle.data ? bundle.data : null); }; return xmlhttp;},
httpComplete: function(xmlhttp,bundle){ if(xmlhttp.status == 200 || xmlhttp.status == 302){ if(bundle.onSuccess) bundle.onSuccess(xmlhttp,bundle); }else if(bundle.onFailure){ bundle.onFailure(xmlhttp,bundle); }else{ }}
};
$(LiensPageAuHasard.Fonctions.Init);