Aller au contenu

Utilisateur:Dr Brains/AjoutModeleBOT.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.
// <nowiki>
// Licence : Domaine public

var  AjoutModeleBOT_Modele = '';
var  AjoutModeleBOT_Multi = true;
var  AjoutModeleBOT_AutoSave = false;

if(mw.config.get('wgNamespaceNumber')==14){ 
     addOnloadHook(AjoutModeleBOT_AddLink);
}

function AjoutModeleBOT_AddLink(){
     var OngletsCactions = document.getElementById('p-cactions').getElementsByTagName('ul')[0];
     OngletsCactions.innerHTML += '<li><a href="javascript:AjoutModeleBOT_GetOptions();">Modèle</a></li>';
}


function AjoutModeleBOT_GetOptions(){
     AjoutModeleBOT_Modele = prompt('Bandeau à ajouter : ', '');
     if(AjoutModeleBOT_Modele==''){
          return;
     }else{
          AjoutModeleBOT_Multi = confirm('Recherche dans les sous-catégorie ?');
          AjoutModeleBOT_AutoSave = confirm('Publier sans confirmation manuelle ?');
          AjoutModeleBOT_Run();
     }
}



if( (mw.config.get('wgUserGroups').indexOf("sysop")!=-1)||(mw.config.get('wgUserGroups').indexOf("bot")!=-1)){
   var AjoutModeleBOT_APILimit = 4999;
}else{
   var AjoutModeleBOT_APILimit = 499;
}

var AjoutModeleBOT_PageInCategory = new Array();
var AjoutModeleBOT_PageInCategoryCount = 0;

var AjoutModeleBOT_CategoryInCategory = new Array();
var AjoutModeleBOT_CategoryInCategoryCount = 0;
 
var AjoutModeleBOT_IndexCategory = -1;

function AjoutModeleBOT_Run(category, categorycontinue){
     if(!category) category = mw.config.get('wgPageName');    
     if(!categorycontinue) categorycontinue = '';
      var NouvelleRequete = new XMLHttpRequest()
      var AdresseRequete = mw.config.get('wgServer') + '/w/api.php?action=query&list=categorymembers&cmlimit='+AjoutModeleBOT_APILimit+'&cmtitle=' + category + '&cmcontinue=' + categorycontinue;
      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)||(ContenuInformation.indexOf('ns="1"')!=-1)||(ContenuInformation.indexOf('ns="14"')!=-1)){
                              var TitrePage = ContenuInformation.split('title="')[1].split('"')[0];
                              TitrePage = AjoutModeleBOT_HTMLDecode(TitrePage);

                              TitrePage = TitrePage.split(mw.config.get('wgFormattedNamespaces')[1] + ':').join("");
                              if((TitrePage.indexOf(mw.config.get('wgFormattedNamespaces')[14] + ':')!=-1)&&(AjoutModeleBOT_Multi)){
                                   AjoutModeleBOT_CategoryInCategory[AjoutModeleBOT_CategoryInCategoryCount] = TitrePage;
                                   AjoutModeleBOT_CategoryInCategoryCount++
                              }else if(TitrePage.indexOf(mw.config.get('wgFormattedNamespaces')[14] + ':')==-1){
                                   AjoutModeleBOT_PageInCategory[AjoutModeleBOT_PageInCategoryCount] = TitrePage;
                                   AjoutModeleBOT_PageInCategoryCount++
                              }
                        }
                        if(ContenuInformation.indexOf('cmcontinue=')!=-1){
                              AutreRequeteNecessaire = true;
                              var AutreRequeteContinue = ContenuInformation.split('cmcontinue="')[1].split('"')[0];
                              AutreRequeteContinue = AjoutModeleBOT_HTMLDecode(AutreRequeteContinue);
                        }
                  } 
                  if(AutreRequeteNecessaire==true){
                        AjoutModeleBOT_Run(category, AutreRequeteContinue);
                  }else{
                        AjoutModeleBOT_IndexCategory++
                        var NewCategory = AjoutModeleBOT_CategoryInCategory[AjoutModeleBOT_IndexCategory];
                        if(NewCategory){
                              AjoutModeleBOT_Run(NewCategory);
                        }else{
                              AjoutModeleBOT_SortList();
                        }
                  }
            }
      }
}


var AjoutModeleBOT_SortedPageInCategory = new Array();
var AjoutModeleBOT_SortedPageInCategoryCount = 0;

function AjoutModeleBOT_SortList(){
      var PagesTemp = AjoutModeleBOT_PageInCategory.sort();
      for(var a=0;a<PagesTemp.length;a++){
           if(PagesTemp[a]!=PagesTemp[(a+1)]){
                 AjoutModeleBOT_SortedPageInCategory[AjoutModeleBOT_SortedPageInCategoryCount] = PagesTemp[a];
                 AjoutModeleBOT_SortedPageInCategoryCount++
           }
      }
      var PopContent = 'Nombre de pages à vérifier : ' + AjoutModeleBOT_SortedPageInCategoryCount + '\n';
      if(AjoutModeleBOT_Multi){
            PopContent += '\nCatégories : \n';
            for(var p=0;p<AjoutModeleBOT_CategoryInCategory.length;p++){
                  PopContent += AjoutModeleBOT_CategoryInCategory[p].split(mw.config.get('wgFormattedNamespaces')[14]+':').join('') + '\n';
            }
      }
      var Pop = confirm(PopContent);
      if(Pop) AjoutModeleBOT_AddModele(0);

      
}

function AjoutModeleBOT_AddModele(position){
      var Category = AjoutModeleBOT_SortedPageInCategory[position];
      if(!Category){ alert('Travail terminé'); window.location.reload(); }
      var url = mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=' + Category.replace(/&/g, "%26") + '&action=edit';
      var NouvelleRequete = new XMLHttpRequest();      
      NouvelleRequete.open("GET", url, true);
      NouvelleRequete.send(null);
      NouvelleRequete.onreadystatechange = function() {
            if(NouvelleRequete.readyState == 4 && NouvelleRequete.status == 200) {
                  while(document.body.firstChild){ document.body.removeChild(document.body.firstChild);}
                  var ElementTraitement = document.createElement('div');
                  document.body.appendChild(ElementTraitement);
                  ElementTraitement.innerHTML = NouvelleRequete.responseText; 
                  var TextArea = document.getElementById('wpTextbox1');
                  if(!TextArea){alert(url); return; }                  

                  var OldText = TextArea.value;
                  if((OldText.indexOf('#REDIRECT')!=-1)||(OldText.indexOf('#redirect')!=-1)||(OldText=='')){
                        AjoutModeleBOT_AddModele((position+1)); 
                        return;
                  }

                  // Nettoyage
                  OldText = OldText.replace(/\{\{Portail /ig, "\{\{Portail\|"); // Cas d'un bandeau unique : {{Portail Truc}} -> {{Portail|Truc}}
                  OldText = OldText.replace(/\{\{portail\|/ig, "\{\{Portail\|");
                  OldText = OldText.replace(/\[\[catégorie\|/ig, "\[\[Catégorie");
                  OldText = OldText.replace(/\[\[category\|/ig, "\[\[Catégorie");

                  var NouveauModele = '{{'+AjoutModeleBOT_Modele+'}}';
                  var Sommaire = 'Bot : Ajout modèle [[Modèle:'+AjoutModeleBOT_Modele+'|'+NouveauModele+']]';
                  if(OldText.indexOf(NouveauModele)==-1){
                        var DebutModele1 = OldText.substring(0, OldText.indexOf('{{Portail'));
                        var DebutModele2 = OldText.substring(0, OldText.indexOf('{{DEFAULTSORT:'));
                        var DebutModele3 = OldText.substring(0, OldText.indexOf('[[Catégorie:'));
                        var SuiteModele = OldText.split(DebutModele1).join('').split(DebutModele2).join('').split(DebutModele3).join('');
                        var DebutModele = OldText.split(SuiteModele).join('');
                  }else{
                        AjoutModeleBOT_AddModele((position+1));
                        return;
                  }
                  var TexteFinal = DebutModele + NouveauModele +'\n'+ SuiteModele; 
                  var SommaireFinal = Sommaire + ' ; ([[Utilisateur:Dr Brains/AjoutModeleBOT.js|script]])'
                  document.getElementById('wpTextbox1').value = TexteFinal;
                  document.getElementById('wpSummary').value = SommaireFinal;
                  document.getElementById('wpMinoredit').checked = "checked";

                  if(!AjoutModeleBOT_AutoSave){
                        var SurEtCertain = confirm('Sauvegarder la modification ?');
                        if(!SurEtCertain){
                              var SurEtCertainBis = confirm('Page suivante ?');
                              if(!SurEtCertainBis){
                                      //window.location.reload();
                                      return;
                              }else{
                                      AjoutModeleBOT_AddModele((position+1));
                                      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' + SommaireFinal + '\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")){
                                    AjoutModeleBOT_AddModele((position+1));
                              }else{
                                    var DeuxiemeEssai = confirm('Problème !\n\nRéessayer ?');
                                    if(DeuxiemeEssai) AjoutModeleBOT_AddModele(position);
                              }
                        }
                  }
            }
      }
}

function AjoutModeleBOT_HTMLDecode(text){
      var EncodedCharacter = new Array();
      var DecodedCharacter = new Array();
      var CharacterCount = 0;

      EncodedCharacter[CharacterCount] = "&amp;";
      DecodedCharacter[CharacterCount] = "&";
      CharacterCount++;
      EncodedCharacter[CharacterCount] = "&#039;";
      DecodedCharacter[CharacterCount] = "'";
      CharacterCount++;
      EncodedCharacter[CharacterCount] = "&quot;";
      DecodedCharacter[CharacterCount] = '"';
      CharacterCount++;

      for(var a=0;a<EncodedCharacter.length;a++){
            while(text.indexOf(EncodedCharacter[a])!=-1){
                  text = text.split(EncodedCharacter[a]).join(DecodedCharacter[a]);
                  if(text.indexOf(EncodedCharacter[a])==-1) break;
            }
      }
      return text;
}

function AjoutModeleBOT_CleanModele(Modele){
      Modele = Modele.replace(/\n/g,"");
      Modele = Modele.replace(/\| /g,"\|");
      Modele = Modele.replace(/ \|/g,"\|");
      Modele = Modele.replace(/\|\}/g,"\}");
      Modele = Modele.replace(/\|\|/g,"\|");
      return Modele;
}

// </nowiki>