Utilisateur:Dr Brains/BandeauxCategoriesBOT.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  RemoveCategoryText = '';
var  AddCategoryText = '';
var  BandeauxCategorie_MultiCat = true;
var  BandeauxCategorie_Autoconfirm = false;

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

function BandeauxCategorie_AddLink(){
     var OngletsCactions = document.getElementById('p-cactions').getElementsByTagName('ul')[0];
     OngletsCactions.innerHTML += '<li><a href="javascript:BandeauxCategorie_GetOptions();">Catégorie (bot)</a></li>';
}


function BandeauxCategorie_GetOptions(){
     AddCategoryText = prompt('Bandeau à ajouter : ', '');
     RemoveCategoryText = prompt('Bandeau à supprimer : ', '');
     if((!RemoveCategoryText)&&(!AddCategoryText)){
          return;
     }else{
          BandeauxCategorie_MultiCat = confirm('Recherche dans les sous-catégorie ?');
          BandeauxCategorie_Autoconfirm = confirm('Publier sans confirmation manuelle ?');
          BandeauxCategorie();
     }
}



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

var CategoryInCategory = new Array();
CategoryInCategory.push(mw.config.get('wgPageName').replace(/_/g," "));
var CategoryInCategoryCount = 1;
 
var IndexCategory = 0;

function BandeauxCategorie(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?format=xml&action=query&list=categorymembers&cmnamespace=14&cmlimit='+BandeauxCategorie_APILimit+'&cmtitle=' + category + '&cmcontinue=' + categorycontinue;
      NouvelleRequete.open("GET", AdresseRequete, true);
      NouvelleRequete.send(null);
      NouvelleRequete.onreadystatechange = function() {
            if(NouvelleRequete.readyState != 4 || NouvelleRequete.status != 200) return;
            var ElementTraitement = NouvelleRequete.responseXML; 
            var Pages = ElementTraitement.getElementsByTagName('cm');
            var AutreRequeteNecessaire = false;
            for(a=0;a<Pages.length;a++){
                  var TitrePage = Pages[a].getAttribute("title");
                  CategoryInCategory[CategoryInCategoryCount] = TitrePage;
                  CategoryInCategoryCount++
            }
            var CatContinue = ElementTraitement.getElementsByTagName('query-continue')[0];
            if(CatContinue){
                  AutreRequeteNecessaire = true;
                  var AutreRequeteContinue = CatContinue.getElementsByTagName('categorymembers')[0].getAttribute("cmcontinue");
            } 
            if(AutreRequeteNecessaire==true){
                  BandeauxCategorie(category, AutreRequeteContinue);
            }else{
                  IndexCategory++
                  var NewCategory = CategoryInCategory[IndexCategory];
                  if(NewCategory){
                        BandeauxCategorie(NewCategory);
                  }else{
                        BandeauxCategorie_SortList();
                  }
            }
      }
}


var SortedCategoryInCategory = new Array();
var SortedCategoryInCategoryCount = 0;

function BandeauxCategorie_SortList(){
      var PagesTemp = CategoryInCategory.sort();
      for(var a=0;a<PagesTemp.length;a++){
           if(PagesTemp[a]!=PagesTemp[(a+1)]){
                 SortedCategoryInCategory[SortedCategoryInCategoryCount] = PagesTemp[a];
                 SortedCategoryInCategoryCount++
           }
      }
      BandeauxCategorie_AddBandeau(0);
}

function BandeauxCategorie_AddBandeau(position){
      var Category = SortedCategoryInCategory[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('Problème\nAdresse :' + url); return; }
                  var OldText = TextArea.value;

                  // Redirections de [[Modèle:Multi bandeau]]
                  OldText = OldText.replace(/\{\{multi bandeau\|/ig, "\{\{Multi bandeau\|");
                  OldText = OldText.replace(/\{\{Multibandeau\|/ig, "\{\{Multi bandeau\|");
                  OldText = OldText.replace(/\{\{Multi-bandeau\|/ig, "\{\{Multi bandeau\|");
                  OldText = OldText.replace(/\{\{Multib\|/ig, "\{\{Multi bandeau\|");
                  OldText = OldText.replace(/\{\{Multi bandeaux\|/ig, "\{\{Multi bandeau\|");
                  OldText = OldText.replace(/\{\{Duo ébauche\|/ig, "\{\{Multi bandeau\|");
                  OldText = OldText.replace(/\{\{Trio ébauche\|/ig, "\{\{Multi bandeau\|");
                  OldText = OldText.replace(/\{\{Duo portail\|/ig, "\{\{Multi bandeau\|");
                  OldText = OldText.replace(/\{\{Trio portail\|/ig, "\{\{Multi bandeau\|");
                  OldText = OldText.replace(/\{\{catégorie\|/ig, "\{\{Catégorie\|");
                  OldText = OldText.replace(/\|catégorie/ig, "\|Catégorie");
                  OldText = OldText.replace(/\{\{Catégorie /ig, "\{\{Multi bandeau\|Catégorie ");

                  var TexteFinal;
                  if(OldText.indexOf('{{Multi bandeau')==-1){ // Pas de multi bandeau
                        //alert('Pas bandeau');
                        var portailaction = '';
                        var portailretrait = '';
                        var portailajout = '';
                        if((OldText.indexOf('{{Catégorie')!=-1)||(OldText.indexOf('{{catégorie')!=-1)){ // Modèle "Catégorie" présent
                             var CatTemplateAdd = "{{Catégorie " + AddCategoryText + "}}" ;
                             if((AddCategoryText!='') && (OldText.indexOf(CatTemplateAdd)==-1)){
                                  //alert('1');
                                  portailaction = 'ajout';
                                  portailajout = ' , + '+AddCategoryText.replace(/\|/g," , + ");
                                  var CatRegexp = /\{\{Catégorie [^\}]+\}\}/ig;
                                  //alert('2');
                                  var index = -1;
                                  while (CatRegexp.exec(OldText) != null) index = CatRegexp.lastIndex;
                                  //alert('3');
                                  TexteFinal = OldText.substring(0, index) + CatTemplateAdd + OldText.substring(index);
                                  TexteFinal = TexteFinal.replace(/\}\}\{\{Catégorie /g, "\|Catégorie ");
                                  //alert('4');
                                  var Sommaire = 'Bot : Ajout automatique de {{Catégorie}} : + '+AddCategoryText.replace(/\|/g," , + ");
                             }
                             var CatTemplateRemove = "|Catégorie " + RemoveCategoryText ;
                             if((RemoveCategoryText!='')&&(TexteFinal.indexOf(CatTemplateRemove)!=-1)){
                                  TexteFinal = TexteFinal.split(CatTemplateRemove + "|").join('');
                                  TexteFinal = TexteFinal.split(CatTemplateRemove + "}}").join('');
                                  if(portailaction == ''){
                                       portailaction = 'retrait';
                                  }else{
                                       portailaction = 'changement';
                                  }
                                  portailretrait = ' - '+RemoveCategoryText;
                             }
                             TexteFinal = TexteFinal.replace(/\{\{Catégorie /ig, "\{\{Multi bandeau\|Catégorie ");
                             var Sommaire = 'Bot : Retrait automatique de {{Catégorie}} : + '+RemoveCategoryText.replace(/\|/g," , + ");
                        }else{
                             TexteFinal = '{{Multi bandeau|Catégorie ' + AddCategoryText + '}}\n' + OldText;
                             portailaction = 'ajout';
                             portailajout = ' + '+AddCategoryText.replace(/\|/g," , + ")
                        }
                        var Sommaire = 'Bot : '+portailaction+' automatique de {{Catégorie}} : '+portailretrait+portailajout; 

                  }else{ // Modèle multi bandeau présent
                        //alert('Bandeau');
                        var portailaction = '';
                        var portailretrait = '';
                        var portailajout = '';
                        var DebutModele = OldText.substring(0, OldText.indexOf('{{Multi bandeau'));
                        var ApresModele = OldText.split(DebutModele).join('');
                        var OldModele = ApresModele.substring(0, ApresModele.indexOf('}}')) + '}}';
                        var SuiteModele = ApresModele.split(OldModele).join('');
                        OldModele = BandeauxCategorie_CleanModele(OldModele);
                        if((RemoveCategoryText!='')&&(AddCategoryText!='')){ 
                              var NouveauModele = OldModele;
                              if((NouveauModele.indexOf('|' +RemoveCategoryText+ '|')!=-1)||(NouveauModele.indexOf('|' +RemoveCategoryText+ '}}')!=-1)){
                                    NouveauModele = NouveauModele.split('|Catégorie '+RemoveCategoryText+ '|').join('|');
                                    NouveauModele = NouveauModele.split('|Catégorie ' +RemoveCategoryText+ '}}').join('}}');
                                    portailaction = 'Retrait';
                                    portailretrait = ' - '+RemoveCategoryText;
                              }
                              if((NouveauModele.indexOf('|Catégorie ' +AddCategoryText + '|')==-1)&&(NouveauModele.indexOf('|Catégorie ' +AddCategoryText + '}')==-1)){
                                    var NouveauModele = NouveauModele.split('}}').join('|Catégorie ' + AddCategoryText + '}}');
                                    if(portailaction!=''){
                                           portailaction = 'Changement';
                                           portailajout = ' , + '+AddCategoryText.replace(/\|/g," , + ")
                                    }else{
                                           portailaction = 'Ajout';
                                           portailajout = ' + '+AddCategoryText.replace(/\|/g," , + ")
                                    }
                              } 
                              var Sommaire = 'Bot : '+portailaction+' automatique de {{Catégorie}} :'+portailretrait+portailajout;
                              if(portailaction==''){ 
                                    BandeauxCategorie_AddBandeau((position+1)); 
                                    return;
                              }
                        }else if(RemoveCategoryText!=''){
                              var NouveauModele = OldModele;
                              if((NouveauModele.indexOf('|Catégorie '+RemoveCategoryText+ '|')!=-1)||(NouveauModele.indexOf('|'+RemoveCategoryText+'}}')!=-1)){
                                    NouveauModele = NouveauModele.split('|Catégorie ' +RemoveCategoryText+ '|').join('|');
                                    NouveauModele = NouveauModele.split('|Catégorie ' +RemoveCategoryText+ '}}').join('}}');
                                    var Sommaire = 'Bot : Retrait automatique de {{Catégorie}} : - '+RemoveCategoryText; 
                                    if(NouveauModele.indexOf('|')==-1) NouveauModele = '';
                              }else{
                                    BandeauxCategorie_AddBandeau((position+1))
                                    return;
                              }          
                        }else if(AddCategoryText!=''){
                              var NouveauModele = OldModele;
                              if((NouveauModele.indexOf('|Catégorie '+AddCategoryText+'|')==-1)&&(NouveauModele.indexOf('|Catégorie '+AddCategoryText+'}')==-1)){
                                    var NouveauModele = NouveauModele.split('}}').join('|Catégorie ' + AddCategoryText + '}}');
                                    var Sommaire = 'Bot : Ajout automatique de {{Catégorie}} : + '+AddCategoryText.replace(/\|/g," , + ");
                              }else{
                                    BandeauxCategorie_AddBandeau((position+1))
                                    return;
                              }  
                        }
                        TexteFinal = DebutModele + NouveauModele + SuiteModele; 
                  } // --------------------------------------------------------------------------


                  var SommaireFinal = Sommaire + ' ; ([[Utilisateur:Dr Brains/BandeauxCategoriesBOT.js|script]])'
                  document.getElementById('wpTextbox1').value = TexteFinal;
                  document.getElementById('wpSummary').value = SommaireFinal;
                  document.getElementById('wpMinoredit').checked = "checked";

                  if(!BandeauxCategorie_Autoconfirm){
                        var SurEtCertain = confirm('Publier ?\n\n' + Sommaire);
                        if(!SurEtCertain){
                              var SurEtCertainBis = confirm('Page suivante ?');
                              if(!SurEtCertainBis){
                                      window.location.reload();
                                      return;
                              }else{
                                      BandeauxCategorie_AddBandeau((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")){
                                    BandeauxCategorie_AddBandeau((position+1));
                              }else{
                                    var DeuxiemeEssai = confirm('Problème !\n\nRéessayer ?');
                                    if(DeuxiemeEssai) BandeauxCategorie_AddBandeau(position);
                              }
                        }
                  }
            }
      }
}

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

// </nowiki>