//{{Boîte déroulante début|titre=]}}<source lang=javascript>
//<pre><nowiki>
// ############################################################################################################
// Bot de mise à jour des modèles {{Page au hasard}}
// Page de démarrage : ]
// Voir aussi le gadget : ]
// Licence : Domaine public
// ############################################################################################################
// ///////////////////////////////////////////////////// VARIABLES /////////////////////////
var PageAuHasardBOT_Adresse = mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=";
var PageAuHasardBOT_ModeleDefaut = '<noinclude>\n'
+ '{{Page au hasard\n'
+ '|page=$1\n'
+ '|catégorie=$2\n'
+ '|miseAjour=$3\n'
+ '|nbArticles=$4\n'
+ '}}</noinclude>'
var PageAuHasardBOT_DebutModele = '<!-- Ce tableau est créé automatiquement par un robot. Page au hasard DEBUT -->';
var PageAuHasardBOT_FinModele = '<!-- Ce tableau est créé automatiquement par un robot. Page au hasard FIN -->';
var PageAuHasardBOT_ResumeModif = 'Bot : ] du modèle ]';
/* Publication automatique par défaut */
var PageAuHasardBOT_UpdateAll = true;
/* Page de commencement */
var PageAuHasardBOT_UpdateFrom = 1;
/* Renouvellement automatique par défaut */
var PageAuHasardBOT_AutomaticMode = true;
/* Liste des pages à mettre à jour */
var PageAuHasardBOT_ListToUpdate = new Array();
var PageAuHasardBOT_ListToUpdateCount = -1;
// ///////////////////////////////////////////////////// FONCTION DE REQUÊTE ///////////////
var PageAuHasardBOT_ajax = {
http: function(bundle) {
// mandatory: bundle.url
// optional: bundle.async
// optional: bundle.method
// optional: bundle.headers
// optional: bundle.data
// optional: bundle.onSuccess (xmlhttprequest, bundle)
// optional: bundle.onFailure (xmlhttprequest, bundle)
// optional: bundle.otherStuff OK too, passed to onSuccess and onFailure
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)
PageAuHasardBOT_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);
} catch(err) {
//Argos42 : pour rendre LiveRC fonctionnel sur chrome
}
}
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 {
// A activer en debug mode ?
// alert(xmlhttp.status+xmlhttp.responseText);
}
}
};
// ///////////////////////////////////////////////////// LANCEMENT /////////////////////////
if( (mw.config.get('wgAction')!="edit")&&(mw.config.get('wgAction')!="submit")&&(mw.config.get('wgPageName').indexOf("/Page_au_hasard_BOT")!=-1) ){
importStylesheet('Utilisateur:Dr Brains/PageAuHasardBOT.css');
addOnloadHook(PageAuHasardBOT_addLinks);
}
// ///////////////////////////////////////////////////// CRÉATION DES LIENS /////////////////////////
function PageAuHasardBOT_addLinks(){
var buttonDiv = document.getElementById("ListToUpdate_Run");
if(buttonDiv){
var link = '<a href="javascript:PageAuHasardBOT_RunAll();" title="Lancer la mise à jour de toutes les pages de la liste">' + buttonDiv.innerHTML + '</a>';
buttonDiv.innerHTML = link;
}
var listDiv = document.getElementById("ListToUpdate");
if(listDiv){
var Count = -1;
var Liens = listDiv.getElementsByTagName('a');
for(var a=0;a<Liens.length;a++){
if(Liens.href.indexOf("javascript:")==-1){
Count++
Liens.id = "LinkToUpdate_"+Count;
var UpdateLink = document.createElement('a');
UpdateLink.href = "javascript:PageAuHasardBOT_RunOne("+Count+");";
UpdateLink.title = "Lancer la mise à jour";
UpdateLink.innerHTML = '<img height="15" width="15" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Crystal_Clear_action_exit.svg/50px-Crystal_Clear_action_exit.svg.png" alt="Lancer la mise à jour de cette page">';
Liens.parentNode.insertBefore(UpdateLink, Liens);
a++
Liens.parentNode.insertBefore(document.createTextNode(' - '), Liens);
}
}
}
var NewPagesDiv = document.getElementById("ListToUpdate_CheckNewPages");
if(NewPagesDiv){
var NewPageLink = '<a href="javascript:PageAuHasardBOT_CheckNewPages();" title="Rechercher de nouvelles pages à mettre à jour">' + NewPagesDiv.innerHTML + '</a>';
NewPagesDiv.innerHTML = NewPageLink;
}
if(mw.config.get('wgUserGroups').indexOf('bot')!=-1){
PageAuHasardBOT_RunAll();
setTimeout("window.location.reload();", 1000*3600);
}
}
// ///////////////////////////////////////////////////// PRÉPARATION MISE À JOUR 1 PAGE /////////////////////////
function PageAuHasardBOT_RunOne(Count){
var Link = document.getElementById("LinkToUpdate_"+Count);
if(Link){
PageAuHasardBOT_UpdateAll = false;
PageAuHasardBOT_ListToUpdateCount++
PageAuHasardBOT_ListToUpdate = Link.innerHTML;
PageAuHasardBOT_Update(0);
}
}
// ///////////////////////////////////////////////////// PRÉPARATION MISE À JOUR TOUTES LES PAGES /////////////////////////
function PageAuHasardBOT_RunAll(){
var listDiv = document.getElementById("ListToUpdate");
if(listDiv){
if(mw.config.get('wgUserGroups').indexOf('bot')==-1){
PageAuHasardBOT_UpdateAll = confirm('Publication automatique ?');
PageAuHasardBOT_UpdateFrom = prompt('Commencer à quelle page','1');
if((!PageAuHasardBOT_UpdateFrom)||(PageAuHasardBOT_UpdateFrom=='')) PageAuHasardBOT_UpdateFrom = 1;
PageAuHasardBOT_UpdateFrom = parseInt(PageAuHasardBOT_UpdateFrom);
if(PageAuHasardBOT_UpdateFrom<1) PageAuHasardBOT_UpdateFrom = 1;
PageAuHasardBOT_AutomaticMode = confirm('Renouvellement automatique ?');
}
var Liens = listDiv.getElementsByTagName('a');
for(var a=0;a<Liens.length;a++){
if(Liens.href.indexOf("javascript:")==-1){
PageAuHasardBOT_ListToUpdateCount++
PageAuHasardBOT_ListToUpdate = Liens.innerHTML;
}
}
PageAuHasardBOT_Update((PageAuHasardBOT_UpdateFrom-1));
}
}
// ///////////////////////////////////////////////////// REQUÊTE PAGE À METTRE À JOUR /////////////////////////
function PageAuHasardBOT_Update(position){
if(!position) position=0;
var Page = PageAuHasardBOT_ListToUpdate;
if(!Page){
if(PageAuHasardBOT_AutomaticMode&&PageAuHasardBOT_UpdateAll){
position=0;
PageAuHasardBOT_Update(position);
return;
}else{
alert('Travail terminé !');
window.location.reload();
}
}
PageAuHasardBOT_ajax.http({ url: PageAuHasardBOT_Adresse + encodeURIComponent(Page) + '&action=render',
onSuccess: PageAuHasardBOT_UpdateDone,
position:position
});
}
function PageAuHasardBOT_UpdateDone(Req, data){
var position = data.position;
var Page = PageAuHasardBOT_ListToUpdate;
while(document.body.firstChild){document.body.removeChild(document.body.firstChild);}
document.body.innerHTML = '<center><h1 id="firstHeading" class="firstHeading" >'
+ (position+1) + '/' + PageAuHasardBOT_ListToUpdate.length +' : '+ Page
+ '</h1></center>'
+ Req.responseText;
window.scrollTo(0,0);
var Cadres = document.getElementsByTagName('span');
for(var s=0;s<Cadres.length;s++){
if( $(Cadres).hasClass('RandomLink') ){
var ParamCategorie = Cadres.firstChild.innerHTML;
var ParamPage = Cadres.firstChild.title;
}
}
if(!ParamCategorie || !ParamPage){
if(!ParamCategorie) alert('Manque paramètre « ParamCategorie »');
if(!ParamPage) alert('Manque paramètre « ParamPage »');
return;
}
PageAuHasardBOT_CheckCategory({paramposition : position,
paramPage : ParamPage,
paramCategorie : ParamCategorie,
paramNewCategory : new Array()
});
}
// ///////////////////////////////////////////////////// REQUÊTE PAGES DE LA CATÉGORIE /////////////////////////
function PageAuHasardBOT_CheckCategory(Args){
var APILimit = ( ((mw.config.get('wgUserGroups').indexOf("sysop")!=-1)||(mw.config.get('wgUserGroups').indexOf("bot")!=-1)) ? 4999 : 499 );
var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&list=categorymembers&cmlimit='+APILimit+'&cmtitle=' + encodeURIComponent(Args.paramCategorie) + (Args.paramContinue ? Args.paramContinue : '');
//alert(URL);
PageAuHasardBOT_ajax.http({ url: URL,
onSuccess: PageAuHasardBOT_CheckCategoryDone,
args:Args
});
}
function PageAuHasardBOT_CheckCategoryDone(Req, data){
var Args = data.args;
var ObjetXML = Req.responseXML;
var Pages = ObjetXML.getElementsByTagName('cm');
for(a=0;a<Pages.length;a++){
var TitrePage = Pages.getAttribute('title');
var NS = Pages.getAttribute('ns');
if(NS=="0"){
Args.paramNewCategory.push(TitrePage);
}
}
var AutreRequeteNecessaire = ObjetXML.getElementsByTagName('query-continue');
if(AutreRequeteNecessaire){
Args.paramContinue = '&cmcontinue=' + encodeURIComponent(AutreRequeteNecessaire.getElementsByTagName('categorymembers').getAttribute('cmcontinue'));
PageAuHasardBOT_CheckCategory(Args);
}else{
PageAuHasardBOT_ajax.http({ url : PageAuHasardBOT_Adresse + encodeURIComponent(Args.paramPage) + '&action=edit',
onSuccess: PageAuHasardBOT_Edit,
args:Args
});
}
}
// ///////////////////////////////////////////////////// ÉDITION /////////////////////////
function PageAuHasardBOT_Edit(Req, data){
var Args = data.args;
var position = Args.paramposition;
var ParamPage = Args.paramPage;
var ParamCategorie = Args.paramCategorie;
var NewCategory = Args.paramNewCategory;
while(document.body.firstChild){document.body.removeChild(document.body.firstChild);}
document.body.innerHTML = Req.responseText;
var wpSave = document.getElementById("wpSave");
if(!wpSave){
PageAuHasardBOT_Update((position+1));
return;
}
var ContenuPage = document.getElementById("wpTextbox1").value;
var AncienResumeModif = document.editform.wpSummary.value;
var Aujourdhui = new Date();
var Minutes = Aujourdhui.getMinutes()
if(Minutes<10){ var ZeroMinutes = "0" ; }else{ var ZeroMinutes = "";}
var Heures = Aujourdhui.getHours()
if(Heures<10){ var ZeroHeures = "0" ; }else{ var ZeroHeures = "";}
var Jour = Aujourdhui.getDate();
if(Jour<10){ var ZeroJour = "0" ; }else{ var ZeroJour = "";}
var Mois = Aujourdhui.getMonth() + 1;
if(Mois<10){ var ZeroMois = "0" ; }else{ var ZeroMois = "";}
var Annee = Aujourdhui.getYear();
if (Annee < 2000){
Annee = Annee + 1900;
}
var NoNeedUpdate = true;
var PageAuHasardBOT_miseAjour = 'le '+ZeroJour+Jour+'/'+ZeroMois+Mois+'/'+Annee+' à '+ZeroHeures+Heures+':'+ZeroMinutes+Minutes;
var PageAuHasardBOT_TotalArticles = NewCategory.length;
var NouveauModele = PageAuHasardBOT_ModeleDefaut;
NouveauModele = NouveauModele.split('$1').join(ParamPage);
NouveauModele = NouveauModele.split('$2').join(ParamCategorie);
NouveauModele = NouveauModele.split('$3').join(PageAuHasardBOT_miseAjour);
NouveauModele = NouveauModele.split('$4').join(PageAuHasardBOT_TotalArticles);
NouveauModele += PageAuHasardBOT_DebutModele + '<includeonly>{{#switch: {{{1|{{rand|1|'+PageAuHasardBOT_TotalArticles+'}}}}}\n';
for(a=0;a<NewCategory.length;a++){
var Match = '=+']]\n'
if(ContenuPage.indexOf(Match)==-1) NoNeedUpdate = false;
NouveauModele += '|'+(a+1)+Match;
}
NouveauModele += '|TOTAL='+PageAuHasardBOT_TotalArticles+'\n';
NouveauModele += '|UPDATE='+ZeroJour+Jour+'/'+ZeroMois+Mois+'/'+Annee+' à '+ZeroHeures+Heures+':'+ZeroMinutes+Minutes;
NouveauModele += '}}</includeonly>' + PageAuHasardBOT_FinModele;
var SommaireFinal = AncienResumeModif + PageAuHasardBOT_ResumeModif;
document.getElementById("wpTextbox1").value = NouveauModele;
document.editform.wpSummary.value = SommaireFinal ;
document.editform.wpMinoredit.checked = "checked";
document.editform.wpWatchthis.checked = "checked";
if(NoNeedUpdate){
PageAuHasardBOT_Update((position+1));
return;
}
if(!PageAuHasardBOT_UpdateAll){
var SurEtCertain = confirm('Sauvegarder la modification ?');
if(!SurEtCertain) return;
}
var EditForm = document.editform
var EditParam = new Array();
EditParam = encodeURIComponent(EditForm.wpEditToken.value);
EditParam = encodeURIComponent(ParamPage);
EditParam = "nochange";
EditParam = "1";
if(mw.config.get('wgUserGroups').indexOf("bot")!=-1) EditParam = "";
EditParam = encodeURIComponent(SommaireFinal);
EditParam = encodeURIComponent(NouveauModele);
var Params = new Array();
for(var Param in EditParam){
if(EditParam || EditParam=="") Params.push(Param+"="+EditParam);
}
Params = Params.join("&");
//alert(Params);
var headers = new Array();
headers = 'application/x-www-form-urlencoded';
PageAuHasardBOT_ajax.http({ url : mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?action=edit',
method : "POST",
headers : headers,
data : Params,
onSuccess : PageAuHasardBOT_EditDone,
position : position
});
}
function PageAuHasardBOT_EditDone(Req, data){
PageAuHasardBOT_Update((data.position+1));
}
function PageAuHasardBOT_CheckNewPages(){
var listDiv = document.getElementById("ListToUpdate");
if(listDiv){
var OldPages = new Array();
var Liens = listDiv.getElementsByTagName('a');
for(var a=0;a<Liens.length;a++){
if(Liens.href.indexOf("javascript:")==-1){
OldPages.push(Liens.innerHTML);
}
}
PageAuHasardBOT_GetTransclusions(OldPages);
}
}
function PageAuHasardBOT_GetTransclusions(OldPages, ActualPages, GetContinue){
if(!ActualPages) ActualPages = new Array();
if(!GetContinue) GetContinue = "";
var APILimit = ( ((mw.config.get('wgUserGroups').indexOf("sysop")!=-1)||(mw.config.get('wgUserGroups').indexOf("bot")!=-1)) ? 4999 : 499 );
var AdresseRequete = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&list=embeddedin&eilimit='+APILimit+'&einamespace=0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|100|101|102|103|104|105&eititle=Modèle:Page au hasard' + GetContinue;
var NouvelleRequete = sajax_init_object();
NouvelleRequete.open("GET", AdresseRequete, true);
NouvelleRequete.onreadystatechange = function() {
if(NouvelleRequete.readyState != 4) return;
var ObjetXML = NouvelleRequete.responseXML;
var Pages = ObjetXML.getElementsByTagName('ei');
for(var a=0;a<Pages.length;a++){
ActualPages.push(Pages.getAttribute('title'));
}
var QueryContinue = ObjetXML.getElementsByTagName('query-continue');
if(QueryContinue){
var EContinue = '&eicontinue=' + QueryContinue.getElementsByTagName('embeddedin').getAttribute('eicontinue');
PageAuHasardBOT_GetTransclusions(OldPages, ActualPages, EContinue);
}else{
var NewPages = new Array();
for(var b=0;b<ActualPages.length;b++){
var Match = false;
for(var c=0;c<OldPages.length;c++){
if(OldPages == ActualPages) Match = true;
}
if(!Match) NewPages.push(ActualPages);
}
if(NewPages.length == 0){
alert('Pas de nouvelles pages à mettre à jour');
return;
}
var Div = document.getElementById("ListToUpdate_CheckNewPages");
if(Div){
var List = document.createElement('ol');
for(var i=0;i<NewPages.length;i++){
var Li = document.createElement('li');
var A = document.createElement('a');
A.href = mw.config.get('wgServer') + mw.config.get('wgArticlePath').split('$1').join(NewPages);
A.title = NewPages
A.appendChild(document.createTextNode(NewPages));
Li.appendChild(document.createTextNode("[["));
Li.appendChild(A);
Li.appendChild(document.createTextNode("]]"));
List.appendChild(Li);
}
Div.appendChild(List);
}else{
alert('Nouvelles pages :\n\n' + NewPages.join('\n') );
}
}
}
NouvelleRequete.send(null);
}
// ///////////////////////////////////////////////////// NETTOYAGE RÉSULTATS REQUÊTE /////////////////////////
function PageAuHasardBOT_Clean(text){
while(text.indexOf('&')!=-1){
text = text.split('&').join("&");
if(text.indexOf('&')==-1) break;
}
while(text.indexOf(''')!=-1){
text = text.split(''').join("'");
if(text.indexOf(''')==-1) break;
}
while(text.indexOf('"')!=-1){
text = text.split('"').join('"');
if(text.indexOf('"')==-1) break;
}
while(text.indexOf(' ')!=-1){
text = text.split(' ').join(' ');
if(text.indexOf(' ')==-1) break;
}
return text;
}
// ############################################################################################################
//</nowiki></pre></source>{{Boîte déroulante fin}}