Utilisateur:Dr Brains/ArticlesRecentsDev.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.
/*
== Code JavaScript ==

* Durée : 

{{Boîte déroulante début|titre=Articles récents}}<!--
*/
// --><source lang=javascript>

var ArticlesRecents_TailleListe = 10;

var ArticlesRecents_ModeleDefautDebut = '{{Articles récents\n'
                  + '|pageportail=$1\n'
                  + '|catégorie=$2\n'
                  + '|nbMax=$3\n'
                  + '|defilant=oui\n'
                  + '|hauteur=250\n'
                  + '|listeRecents=\n'
                  + '$4\n'
                  + '|listeCatégorie=\n'
                  + '$5\n'
                  + '}}\n'


var ArticlesRecents_DebutListeRecents = '<!-- Ce tableau est créé automatiquement par un robot. Articles Récents DEBUT -->\n';

var ArticlesRecents_FinListeRecents = '<!-- Ce tableau est créé automatiquement par un robot. Articles Récents FIN -->\n'

var ArticlesRecents_DebutListeCategorie = '<!-- Ce tableau est créé automatiquement par un robot. Articles Récents Liste DEBUT -->\n'

var ArticlesRecents_FinListeCategorie = '<!-- Ce tableau est créé automatiquement par un robot. Articles Récents Liste FIN -->\n'

var ArticlesRecents_ResumeModif = 'Mise à jour du modèle {{Articles récents}}';

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

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

// recherche des modèles {{Articles récents}} de la page et ajout des liens de mise à jour

var ArticlesRecents_TemplateCount = 0;
function ArticlesRecents_init(){
     var Cadres = document.getElementsByTagName('div');
     for(s=0;s<Cadres.length;s++){
            if( $(Cadres[s]).hasClass('categoryRecentChanges') ){          
                  ArticlesRecents_TemplateCount++
                  Cadres[s].id = 'categoryRecentChanges_'+ArticlesRecents_TemplateCount;
                  var ParamCategorie = Cadres[s].firstChild.innerHTML;
                  var ParamPage = Cadres[s].firstChild.title;
                  var NewButton = '<a href="javascript:ArticlesRecents_Update(\'categoryRecentChanges_'
                  +ArticlesRecents_TemplateCount+ '\',\''+ParamPage.replace(/'/g,"\\'")+'\');" title="Cliquer pour  mettre à jour l\'analyse de la catégorie ' + ParamCategorie + ' sur la page '+ParamPage+'" >Mettre à jour le modèle Articles récents</a>' ;
                  Cadres[s].innerHTML = NewButton + Cadres[s].innerHTML;
            }
     }
}


function ArticlesRecents_Update(id, Page){
     if(!id) return;
     if(!Page) Page = mw.config.get('wgPageName');
     var Cadre = document.getElementById(id);
     if(!Cadre){
          alert('Il y a un problème avec le modèle {{Articles récents}}'); 
          window.location.reload();
     }
     var Bouton = Cadre.getElementsByTagName('span')[0];           
     var ParamCategorie = Bouton.innerHTML;
     var ParamPage = Bouton.title;
     var TailleListe= Bouton.className;
     if((!TailleListe)||(TailleListe=='')) TailleListe = ArticlesRecents_TailleListe;

// /*
               var Suretcertain = confirm('Paramètres :'
                                        + '\n* Page à mettre à jour : -( ' + ParamPage + ' )- '
                                        + '\n* Catégorie : -( ' + ParamCategorie + ' )- '
                                        + '\n* Maximum : -( ' + TailleListe + ' )- '
                                        + '\n\n Lancer la mise à jour ?' );
               if(!Suretcertain) window.location.reload();
// */

     var url = ArticlesRecents_Adresse + Page + '&action=render' ;
     var ajaxRequest = new XMLHttpRequest();
     ajaxRequest.open("GET", url, true);
     ajaxRequest.send(null);
     ajaxRequest.onreadystatechange = function() {
          if(ajaxRequest.readyState == 4 && ajaxRequest.status == 200) {
               while(document.body.firstChild){document.body.removeChild(document.body.firstChild);}  
               ajaxResponse = ajaxRequest.responseText;
               document.body.innerHTML = ajaxResponse;

               var OldRecents = new Array();
               var OldRecentsCount = -1;
               var OldCategory = new Array();
               var OldCategoryCount = -1;

               var Liste1 = document.getElementsByTagName('ol')[0];
               if(Liste1) ArticlesRecents_ListeArticlesRecents = Liste1.getElementsByTagName('a');
               if( ArticlesRecents_ListeArticlesRecents.length>0 ){
                    for(var r=0;r<ArticlesRecents_ListeArticlesRecents.length;r++){
                         OldRecentsCount++
                         OldRecents[OldRecentsCount] = ArticlesRecents_ListeArticlesRecents[r].title;
                         while(OldRecents[OldRecentsCount].indexOf('&amp;')!=-1){
                              OldRecents[OldRecentsCount] = OldRecents[OldRecentsCount].split('&amp;').join("&");
                              if(OldRecents[OldRecentsCount].indexOf('&amp;')==-1) break;
                         }
                         while(OldRecents[OldRecentsCount].indexOf('&#039;')!=-1){
                              OldRecents[OldRecentsCount]= OldRecents[OldRecentsCount].split('&#039;').join("'");
                              if(OldRecents[OldRecentsCount].indexOf('&#039;')==-1) break;
                         }
                         while(OldRecents[OldRecentsCount].indexOf('&quot;')!=-1){
                              OldRecents[OldRecentsCount] = OldRecents[OldRecentsCount].split('&quot;').join('"');
                              if(OldRecents[OldRecentsCount].indexOf('&quot;')==-1) break;
                         }
                    }
               }

               var Liste2 = document.getElementsByTagName('ul')[0];
               if(Liste2) ArticlesRecents_ListeArticlesCategorie = Liste2.getElementsByTagName('a');
               if(ArticlesRecents_ListeArticlesCategorie.length>0 ){
                    for(var c=0;c<ArticlesRecents_ListeArticlesCategorie.length;c++){
                         OldCategoryCount++
                         OldCategory[OldCategoryCount] = ArticlesRecents_ListeArticlesCategorie[c].title; 
                         while(OldCategory[OldCategoryCount].indexOf('&amp;')!=-1){
                              OldCategory[OldCategoryCount] = OldCategory[OldCategoryCount].split('&amp;').join("&");
                              if(OldCategory[OldCategoryCount].indexOf('&amp;')==-1) break;
                         }
                         while(OldCategory[OldCategoryCount].indexOf('&#039;')!=-1){
                              OldCategory[OldCategoryCount]= OldCategory[OldCategoryCount].split('&#039;').join("'");
                              if(OldCategory[OldCategoryCount].indexOf('&#039;')==-1) break;
                         }
                         while(OldCategory[OldCategoryCount].indexOf('&quot;')!=-1){
                              OldCategory[OldCategoryCount] = OldCategory[OldCategoryCount].split('&quot;').join('"');
                              if(OldCategory[OldCategoryCount].indexOf('&quot;')==-1) break;
                         }                    
                    }
               }

               var NewCategory = new Array();
               var NewCategoryCount = -1;
               ArticlesRecents_CheckCategory(id, ParamPage, ParamCategorie, TailleListe, OldCategory, OldRecents, NewCategory, NewCategoryCount);
          }
     }
}

function ArticlesRecents_CheckCategory(id, ParamPage, ParamCategorie, TailleListe, OldCategory, OldRecents, NewCategory, NewCategoryCount, Continue){
      if(!Continue) Continue='';
      if( (mw.config.get('wgUserGroups').indexOf("sysop")!=-1)||(mw.config.get('wgUserGroups').indexOf("bot")!=-1) ){
           var APILimit=4999;
      }else{
           var APILimit=499;
      }
      var NouvelleRequete = new XMLHttpRequest()
      var AdresseRequete = mw.config.get('wgServer') + '/w/api.php?action=query&list=categorymembers&cmlimit='+APILimit+'&cmtitle=' + ParamCategorie + '&cmcontinue=' + Continue;
      NouvelleRequete.open("GET", AdresseRequete, true);
      NouvelleRequete.send(null);
      NouvelleRequete.onreadystatechange = function() {
            if(NouvelleRequete.readyState == 4 && NouvelleRequete.status == 200) {
                  var ElementTraitement = document.createElement('div');
                  ElementTraitement.innerHTML = NouvelleRequete.responseText; 
                  var Informations = ElementTraitement.getElementsByTagName('span');
                  var AutreRequeteNecessaire = false;
                  for(a=0;a<Informations.length;a++){
                        var ContenuInformation = Informations[a].innerHTML;
                        if(ContenuInformation.indexOf('ns="0"')!=-1){
                              var TitrePage = ContenuInformation.split('title="')[1].split('"')[0];
                              while(TitrePage.indexOf('&amp;')!=-1){
                                    TitrePage = TitrePage.split('&amp;').join("&");
                                    if(TitrePage.indexOf('&amp;')==-1) break;
                              }
                              while(TitrePage.indexOf('&#039;')!=-1){
                                    TitrePage = TitrePage.split('&#039;').join("'");
                                    if(TitrePage.indexOf('&#039;')==-1) break;
                              }
                              while(TitrePage.indexOf('&quot;')!=-1){
                                    TitrePage = TitrePage.split('&quot;').join('"');
                                    if(TitrePage.indexOf('&quot;')==-1) break;
                              }
                              NewCategoryCount++
                              NewCategory[NewCategoryCount] = TitrePage;
                        }
                        if(ContenuInformation.indexOf('cmcontinue=')!=-1){
                              AutreRequeteNecessaire = true;
                              var AutreRequeteContinue = ContenuInformation.split('cmcontinue="')[1].split('"')[0];
                        }
                  } 
                  if(AutreRequeteNecessaire==true){
                        ArticlesRecents_CheckCategory(id, ParamPage, ParamCategorie, TailleListe, OldCategory, OldRecents, NewCategory, NewCategoryCount, AutreRequeteContinue);
                  }else{
                        ArticlesRecents_SortList(id, ParamPage, ParamCategorie, TailleListe, OldCategory, OldRecents, NewCategory);
                  }
            }
      }
}

function ArticlesRecents_SortList(id, ParamPage, ParamCategorie, TailleListe, OldCategory, OldRecents, NewCategory){
      var NewRecents = new Array();
      var NewRecentsCount = -1;
      for(var a=0;a<NewCategory.length;a++){
            var PageMatch = false;
            for(var b=0;b<OldCategory.length;b++){
                  if(NewCategory[a] == OldCategory[b]) PageMatch = true;
            }
            if(PageMatch == false){
                  NewRecentsCount++
                  NewRecents[NewRecentsCount] = NewCategory[a];
            } 
      }
      for(var c=0;c<OldRecents.length;c++){
            if(NewRecentsCount<(TailleListe-1)){
                  NewRecentsCount++
                  NewRecents[NewRecentsCount] = OldRecents[c];
            }
      }
      ArticlesRecents_Edit(id, ParamPage, ParamCategorie, TailleListe, NewCategory, NewRecents);
}

function ArticlesRecents_Edit(id, ParamPage, ParamCategorie, TailleListe, NewCategory, NewRecents){
      var ajaxRequest = new XMLHttpRequest();
      var url = ArticlesRecents_Adresse + ParamPage + '&action=edit';
      ajaxRequest.open("GET", url, true);
      ajaxRequest.send(null);
      ajaxRequest.onreadystatechange = function() {
            if(ajaxRequest.readyState == 4 && ajaxRequest.status == 200) {
                  while(document.body.firstChild){document.body.removeChild(document.body.firstChild);}  
                  ajaxResponse = ajaxRequest.responseText;
                  document.body.innerHTML = ajaxResponse;
                  var ContenuPage = document.getElementById("wpTextbox1").value;
                  var AncienResumeModif = document.editform.wpSummary.value;

                  var NouvelleListeRecents = ArticlesRecents_DebutListeRecents;
                  for(var r=0;r<NewRecents.length;r++){
                         NouvelleListeRecents += '# [[' + NewRecents[r] + ']]\n';
                  }
                  NouvelleListeRecents += ArticlesRecents_FinListeRecents;

                  var NouvelleListeCategorie = ArticlesRecents_DebutListeCategorie;
                  for(var cat=0;cat<NewCategory.length;cat++){
                         NouvelleListeCategorie += '* [[' + NewCategory[cat] + ']]\n';
                  }
                  NouvelleListeCategorie += ArticlesRecents_FinListeCategorie;

                  if( 
                  (ContenuPage.indexOf(ArticlesRecents_DebutListeCategorie)!=-1) && 
                  (ContenuPage.indexOf(ArticlesRecents_FinListeCategorie)!=-1) && 
                  (ContenuPage.indexOf(ArticlesRecents_DebutListeRecents)!=-1) && 
                  (ContenuPage.indexOf(ArticlesRecents_FinListeRecents)!=-1) ){                          
                         var debutTexte = ContenuPage.substring(0, ContenuPage.indexOf(ArticlesRecents_DebutListeCategorie));
                         var AncienModele = ContenuPage.substring(0, ContenuPage.indexOf(ArticlesRecents_FinListeCategorie)) + ArticlesRecents_FinListeCategorie;
                         AncienModele = AncienModele.replace(debutTexte, "");       
                         var finTexte = ContenuPage.split(debutTexte).join('').split(AncienModele).join('');
                         var TexteFinal = debutTexte + NouvelleListeCategorie + finTexte;
                       /*
                         alert('Début Texte : \n\n' + debutTexte);
                         alert('NouvelleListeCategorie : \n\n' + NouvelleListeCategorie);
                         alert('Fin Texte : \n\n' + finTexte);
                       */
                         debutTexte = TexteFinal.substring(0, TexteFinal.indexOf(ArticlesRecents_DebutListeRecents));
                         AncienModele = TexteFinal.substring(0, TexteFinal.indexOf(ArticlesRecents_FinListeRecents)) + ArticlesRecents_FinListeRecents;
                         AncienModele = AncienModele.replace(debutTexte, "");       
                         finTexte = TexteFinal.split(debutTexte).join('').split(AncienModele).join('');
                         TexteFinal = debutTexte + NouvelleListeRecents + finTexte;
                       /*
                         alert('Début Texte : \n\n' + debutTexte);
                         alert('NouvelleListeRecents : \n\n' + NouvelleListeRecents);
                         alert('Fin Texte : \n\n' + finTexte);
                       */
                  }else{
                         var TexteFinal = ArticlesRecents_ModeleDefautDebut;
                         TexteFinal = TexteFinal.split('$1').join(ParamPage);
                         TexteFinal = TexteFinal.split('$2').join(ParamCategorie);
                         TexteFinal = TexteFinal.split('$3').join(TailleListe);
                         TexteFinal = TexteFinal.split('$4').join(NouvelleListeRecents);
                         TexteFinal = TexteFinal.split('$5').join(NouvelleListeCategorie);
                  }
                  document.getElementById ("wpTextbox1").value = TexteFinal ;
                  document.editform.wpSummary.value = AncienResumeModif + ArticlesRecents_ResumeModif ;

// /*
                  var SurEtCertain = confirm('Publier la modification ?');
                  if(!SurEtCertain) return;
// */

                  var action = document.getElementById("editform").action;
                  var boundary = '--------123xyz';
                  var data = '';
                  data += '--' + boundary + '\nContent-Disposition: form-data; name="wpTextbox1"\n\n' + TexteFinal + '\n'
                  data += '--' + boundary + '\nContent-Disposition: form-data; name="wpSection"\n\n' + document.editform.wpSection.value + '\n'
                  data += '--' + boundary + '\nContent-Disposition: form-data; name="wpSummary"\n\n' + AncienResumeModif + ArticlesRecents_ResumeModif + '\n'
                  //data += '--' + boundary + '\nContent-Disposition: form-data; name="wpMinorEdit"\n\n' + document.editform.wpMinorEdit.value + '\n'
                  data += '--' + boundary + '\nContent-Disposition: form-data; name="wpStarttime"\n\n' + document.editform.wpStarttime.value + '\n'
                  data += '--' + boundary + '\nContent-Disposition: form-data; name="wpEdittime"\n\n' + document.editform.wpEdittime.value + '\n'
                  data += '--' + boundary + '\nContent-Disposition: form-data; name="wpEditToken"\n\n' + document.editform.wpEditToken.value + '\n'
                  var ajaxSubmit = new XMLHttpRequest();
                  ajaxSubmit.open('POST', action, true);
                  ajaxSubmit.setRequestHeader('Content-Type', 'multipart/form-data; boundary='+boundary);
                  ajaxSubmit.send(data + '--' + boundary);
                  ajaxSubmit.onreadystatechange = function(){
                        if (ajaxSubmit.readyState == 4){
                              while(document.body.firstChild){document.body.removeChild(document.body.firstChild);}
                              var ElementTraitementBis = document.createElement('div');
                              document.body.appendChild(ElementTraitementBis);
                              ElementTraitementBis.innerHTML = ajaxSubmit.responseText; 
                              if(!document.getElementById("editform")){
                                    window.location.reload();
                              }else{
                                    var DeuxiemeEssai = confirm('Il y a eu un problème !\n\nRéessayer ?');
                                    if(DeuxiemeEssai){
                                          ArticlesRecents_Update(id);
                                    }else{
                                          window.location.reload();
                                    }
                              }
                        }
                  }
            }
      }
}

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