Utilisateur:Dr Brains/PageAuHasard.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.
/* {{Catégorisation JS|PageAuHasard}} */

/*
== Code JavaScript ==

{{Boîte déroulante/début|titre=Lien au hasard}}<!--
*/
// --><source lang=javascript>
// <nowiki>
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

var PageAuHasard_Adresse = mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=";

var PageAuHasard_ModeleDefaut = '<noinclude>\n'
                              + '{{Page au hasard\n'
                              + '|page=$1\n'
                              + '|catégorie=$2\n'
                              + '|miseAjour=$3\n'
                              + '|nbArticles=$4\n'
                              + '}}</noinclude>'

var PageAuHasard_DebutModele = '<!-- \nCe tableau est créé automatiquement par un robot. Page au hasard DEBUT \n  -->';

var PageAuHasard_FinModele = '<!-- \nCe tableau est créé automatiquement par un robot. Page au hasard FIN \n  -->';

var PageAuHasard_ResumeModif = 'Mise à jour du modèle [[Modèle:Page au hasard|{{Page au hasard}}]]';


var PageAuHasard_StartButton = '<img height="50" width="50" src="//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">';

var PageAuHasard_WorkingButton = '<img height="50" width="50" src="//upload.wikimedia.org/wikipedia/commons/d/de/Ajax-loader.gif" alt="Mise à jour en cours">';

// recherche des modèles {{Page au hasard}} de la page et ajout des liens de mise à jour

var PageAuHasard_AnalysisDivCount = 0;
function PageAuHasard_makeUpdateLinks(){
     var Cadres = document.getElementsByTagName('span');
     for(s=0;s<Cadres.length;s++){
            if( $(Cadres[s]).hasClass('RandomLink') ){
                  PageAuHasard_AnalysisDivCount++
                  Cadres[s].id = 'PageAuHasard_'+PageAuHasard_AnalysisDivCount;
                  var ParamCategorie = Cadres[s].firstChild.innerHTML;
                  var ParamPage = Cadres[s].firstChild.title;
                  var NewButton = '<center><a id="LienPageHasard_'+PageAuHasard_AnalysisDivCount+'" '
                                + 'href="javascript:PageAuHasard_GetParams('+PageAuHasard_AnalysisDivCount+ ');" '
                                + 'title="Cliquer pour  mettre à jour le contenu de la catégorie ' + ParamCategorie + ' sur la page '+ParamPage+'" >'
                                + PageAuHasard_StartButton
                                + '</a></center><br />' ;
                  Cadres[s].innerHTML += NewButton ;
            }
     }
}

function PageAuHasard_GetParams(ID){
     var Modele = document.getElementById('PageAuHasard_'+ID);
     if(!Modele) return;
     var Cadre = Modele.firstChild;
     if(!Cadre) return;
     var ParamCategorie = Cadre.innerHTML;
     var ParamPage = Cadre.title;
     var Pop = 'Catégorie à vérifier :\n'
             + '* '+ParamCategorie+'\n\n'
             + 'Page à mettre à jour :\n'
             + '* '+ParamPage+'\n\n'
             + 'Continuer ?';
     var SurEtCertain = confirm(Pop);
     if(SurEtCertain){
          PageAuHasard_CheckCategory(ParamPage, ParamCategorie);
          var Lien = document.getElementById('LienPageHasard_'+ID)
          if(Lien){
               Lien.innerHTML = PageAuHasard_WorkingButton;
               Lien.title = "Arrêter la mise à jour" ;
               Lien.href = "javascript:window.location.reload();";
               Lien.blur();
          }
     }
}

// ///////////////////////////////////////////////////// REQUÊTE PAGES DE LA CATÉGORIE /////////////////////////

function PageAuHasard_CheckCategory(ParamPage, ParamCategorie, ParamContinue, PageList){
      if(!PageList) PageList = [];
      var APILimit = 499;
      if( (mw.config.get('wgUserGroups').indexOf("sysop")!=-1)||(mw.config.get('wgUserGroups').indexOf("bot")!=-1) ){
           APILimit = 4999;
      } 
      var queryopt = {
          action  : 'query',
          list    : 'categorymembers',
          cmlimit : APILimit,
          cmtitle : ParamCategorie
      };
      if(ParamContinue) queryopt.cmcontinue = ParamContinue;
      queryopt.continue = '';
      var api = new mw.Api();
      api.get(queryopt).then( function ( data ) {
          var categorymembers = data.query.categorymembers;
          if ( categorymembers ) {
               for(var a=0,l=categorymembers.length;a<l;a++){
                    var TitrePage = categorymembers[a].title;
                    var NS = parseInt(categorymembers[a].ns);
                    if(NS === 0) PageList.push(TitrePage);
               }
          }
          if(data.continue && data.continue.cmcontinue){
               PageAuHasard_CheckCategory(ParamPage, ParamCategorie, data.continue.cmcontinue, PageList);
          }else{
               PageAuHasard_Edit(ParamPage, ParamCategorie, PageList);
          }
     });
}

// ///////////////////////////////////////////////////// ÉDITION /////////////////////////

function  PageAuHasard_Edit(ParamPage, ParamCategorie, PageList){
      var ajaxRequest = sajax_init_object();
      var URL = PageAuHasard_Adresse + encodeURIComponent(ParamPage) + '&action=edit';
      $.ajax({url : URL, complete : function(Req){
            while(document.body.firstChild){document.body.removeChild(document.body.firstChild);}
            document.body.innerHTML = Req.responseText;
            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 PageAuHasard_miseAjour = 'le '+ZeroJour+Jour+'/'+ZeroMois+Mois+'/'+Annee+' à '+ZeroHeures+Heures+':'+ZeroMinutes+Minutes;
            var PageAuHasard_TotalArticles = PageList.length;
            var NouveauModele = PageAuHasard_ModeleDefaut;
            NouveauModele = NouveauModele.split('$1').join(ParamPage);
            NouveauModele = NouveauModele.split('$2').join(ParamCategorie);
            NouveauModele = NouveauModele.split('$3').join(PageAuHasard_miseAjour);
            NouveauModele = NouveauModele.split('$4').join(PageAuHasard_TotalArticles);
            NouveauModele += PageAuHasard_DebutModele + '<includeonly>{{#switch: {{{1|{{rand|1|'+PageAuHasard_TotalArticles+'}}}}}\n';
            for(a=0;a<PageList.length;a++){
                  NouveauModele += '|'+(a+1)+'=[['+PageList[a]+']]\n';
            }
            NouveauModele += '|TOTAL='+PageAuHasard_TotalArticles+'\n';
            NouveauModele += '|UPDATE='+ZeroJour+Jour+'/'+ZeroMois+Mois+'/'+Annee+' à '+ZeroHeures+Heures+':'+ZeroMinutes+Minutes;
            NouveauModele += '}}</includeonly>' + PageAuHasard_FinModele;
            var ContenuPage = document.getElementById("wpTextbox1").value;
            var AncienResumeModif = document.editform.wpSummary.value;
            document.getElementById("wpTextbox1").value = NouveauModele;
            document.editform.wpSummary.value = AncienResumeModif + PageAuHasard_ResumeModif ;
            var SurEtCertain = confirm('Sauvegarder la modification ?');
            if(SurEtCertain) document.editform.submit();
      }});
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Lancement

if( (mw.config.get('wgAction')!="edit")&&(mw.config.get('wgAction')!="submit") ){
     $(PageAuHasard_makeUpdateLinks);
}