_ _    _ _____  ___   __                       
 __      _(_) | _(_)___ / ( _ ) / /_   ___ ___  _ __ ___  
 \ \ /\ / / | |/ / | |_ \ / _ \| '_ \ / __/ _ \| '_ ` _ \ 
  \ V  V /| |   <| |___) | (_) | (_) | (_| (_) | | | | | |
   \_/\_/ |_|_|\_\_|____/ \___/ \___(_)___\___/|_| |_| |_|

Utilisateur:Dr Brains/PageAuHasardBOT.js

Dans le monde Utilisateur:Dr Brains/PageAuHasardBOT.js, nous trouvons des aspects infinis qui nous amènent à réfléchir, à nous questionner et même à nous émerveiller. Utilisateur:Dr Brains/PageAuHasardBOT.js est un sujet qui a suscité l'intérêt de nombreuses personnes à travers l'histoire, ses racines remontent à l'Antiquité et son influence est toujours présente dans la société contemporaine. Dans cet article, nous explorerons les différentes facettes de Utilisateur:Dr Brains/PageAuHasardBOT.js, de son impact sur la culture à ses implications dans la vie quotidienne. À travers une analyse détaillée et enrichissante, nous chercherons à comprendre en profondeur tout ce que Utilisateur:Dr Brains/PageAuHasardBOT.js a à nous offrir, en perçant les mystères, en révélant des vérités et en offrant une vision globale de ce phénomène.
//{{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('&amp;')!=-1){
            text = text.split('&amp;').join("&");
            if(text.indexOf('&amp;')==-1) break;
      }
      while(text.indexOf('&#039;')!=-1){
            text = text.split('&#039;').join("'");
            if(text.indexOf('&#039;')==-1) break;
      }
      while(text.indexOf('&quot;')!=-1){
            text = text.split('&quot;').join('"');
            if(text.indexOf('&quot;')==-1) break;
      }
      while(text.indexOf('&nbsp;')!=-1){
            text = text.split('&nbsp;').join(' ');
            if(text.indexOf('&nbsp;')==-1) break;
      }  
      return text;
}

// ############################################################################################################
//</nowiki></pre></source>{{Boîte déroulante fin}}