Utilisateur:Dr Brains/ImagesUtilisees.js

Dans le monde de Utilisateur:Dr Brains/ImagesUtilisees.js, il existe un large éventail de perspectives, d’opinions et de connaissances qui alimentent un débat et un échange d’idées constants. Depuis des décennies, Utilisateur:Dr Brains/ImagesUtilisees.js fait l’objet d’études, d’analyses et de réflexions de la part d’universitaires, d’experts, de passionnés et de curieux. Son impact sur la société, la culture, la science et la technologie est indéniable, et sa pertinence continue d'évoluer constamment. Dans cet article, nous explorerons les différentes facettes de Utilisateur:Dr Brains/ImagesUtilisees.js, en fournissant une analyse détaillée et une vue complète qui nous permettent de mieux comprendre son importance et son influence dans notre monde contemporain.
/*
== Code JavaScript ==

* Durée : environ 10 minutes pour 600 pages 

{{Boîte déroulante début|titre=Images Utilisées}}<!--
*/
// --><source lang=javascript>

var UsedImages_ModeleDefautDebut = '{{Images utilisées\n'
                  + '|pageportail=$1\n'
                  + '|catégorie=$2\n'
                  + '|defilant=oui\n'
                  + '|hauteur=800\n'
                  + '}}\n'

var UsedImages_ModeleDefautFin = '{{Images utilisées fin}}\n';

var UsedImages_ResumeModif = 'Mise à jour du modèle {{Images utilisées}}';

var  UsedImages_DebutModele = '<!-- Ce tableau est créé automatiquement par un robot. Images Utilisées DEBUT -->\n';
var  UsedImages_FinModele = '<!-- Ce tableau est créé automatiquement par un robot. Images Utilisées FIN -->\n'

var UsedImages_Minimum = 1;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/* ************************************************************************************************************************************ 
Lancement 
*/
 
if( (mw.config.get('wgAction')!="edit")&&(mw.config.get('wgAction')!="submit") ){
     addOnloadHook(UsedImages_makeUpdateLinks);
}
 
/* ************************************************************************************************************************************ 
1- recherche des modèles {{Maintenance de catégorie}} de la page courante
2- ajout des liens de mise à jour
*/
 
var UsedImages_StartButton = '<img height="50" width="50" 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">';
 
var UsedImages_WorkingButton = '<img height="50" width="50" src="http://upload.wikimedia.org/wikipedia/commons/d/de/Ajax-loader.gif" alt="Mise à jour en cours">';
 

function UsedImages_makeUpdateLinks(){
     var count=-1;
     var Cadres = document.getElementsByTagName('div');
     for(s=0;s<Cadres.length;s++){
            if( $(Cadres).hasClass('categoryUsedImages') ){          
                  count++
                  Cadres.id = 'categoryUsedImages_'+count;
                  var ParamCategorie = Cadres.firstChild.innerHTML;
                  var ParamPage = Cadres.firstChild.title;
                  var NewButton = '<a id="categoryUsedImagesLink_'+count+'" href="javascript:UsedImages_GetParams('+count+');" title="Cliquer pour  mettre à jour l\'analyse de la catégorie ' + ParamCategorie + ' sur la page '+ParamPage+'" >'+UsedImages_StartButton+'</a>' ;
                  Cadres.innerHTML += NewButton ;
            }
     }
}
 
function UsedImages_GetParams(index){
     var Modele = document.getElementById('categoryUsedImages_'+index);
     if(!Modele) return;
     var Cadre = Modele.firstChild;
     if(!Cadre) return;
     var ParamCategorie = Cadre.innerHTML;
     var ParamPage = Cadre.title;
     var Pop1 = 'Limite basse du nombre d\'occurrences :\n';
     var Minimum = prompt(Pop1, UsedImages_Minimum);
     if(Minimum){
          if(Minimum!=''){
               Minimum = parseInt(Minimum);
               if(Minimum!="NaN") UsedImages_Minimum = Minimum;
          }
     }
     var Pop = 'Catégorie à vérifier :\n'
             + '* '+ParamCategorie+'\n\n'
             + 'Page à mettre à jour :\n'
             + '* '+ParamPage+'\n\n'
             + 'Minimum :\n'
             + '* '+UsedImages_Minimum+'\n\n'
             + 'Continuer ?';
     var SurEtCertain = confirm(Pop);
     if(SurEtCertain){
          Modele.innerHTML += '<br /><span id="WorkingFunction" ></span><br /><span id="WorkingPage" ></span>';
          UsedImages_CheckCategory(ParamPage, ParamCategorie);
          var Lien = document.getElementById('categoryUsedImagesLink_'+index)
          if(Lien){
               Lien.innerHTML = UsedImages_WorkingButton ;
               Lien.title = "Arrêter la mise à jour" ;
               Lien.href = "javascript:window.location.reload();";
               Lien.blur();
          }
     }
}
 
// ///////////////////////////////////////////////////// REQUÊTE PAGES DE LA CATÉGORIE /////////////////////////
 
function UsedImages_CheckCategory(ParamPage, ParamCategorie, PageList, ParamContinue){
      if(!PageList) PageList = new Array();
      if(!ParamContinue) ParamContinue='';
      if( (mw.config.get('wgUserGroups').indexOf("sysop")!=-1)||(mw.config.get('wgUserGroups').indexOf("bot")!=-1) ){
           var APILimit=4999;
      }else{
           var APILimit=499;
      }
 
      document.getElementById('WorkingFunction').innerHTML = "Listage des pages";
      document.getElementById('WorkingPage').innerHTML = ParamCategorie;
      var NouvelleRequete = new XMLHttpRequest()
      var AdresseRequete = mw.config.get('wgServer') + '/w/api.php?action=query&list=categorymembers&cmlimit='+APILimit+'&cmtitle=' + ParamCategorie.replace(/&/g,"%26") + '&cmcontinue=' + ParamContinue;
      //alert(AdresseRequete);
      NouvelleRequete.open("GET", AdresseRequete, true);
      NouvelleRequete.onreadystatechange = function() {
            if(NouvelleRequete.readyState != 4 || NouvelleRequete.status != 200) return;
            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.innerHTML;
                  if((ContenuInformation.indexOf('ns="0"')!=-1)||(ContenuInformation.indexOf('ns="1"')!=-1)){
                        var TitrePage = ContenuInformation.split('title="').split('"');
                        TitrePage = UsedImages_Clean(TitrePage);
                        PageList.push(TitrePage);
                  }
                  if(ContenuInformation.indexOf('cmcontinue=')!=-1){
                        AutreRequeteNecessaire = true;
                        var AutreRequeteContinue = ContenuInformation.split('cmcontinue="').split('"');
                        AutreRequeteContinue = UsedImages_Clean(AutreRequeteContinue);
                  }
            } 
            if(AutreRequeteNecessaire==true){
                  UsedImages_CheckCategory(ParamPage, ParamCategorie, PageList, AutreRequeteContinue);
            }else{
                  UsedImages_CheckPage(0, ParamPage, ParamCategorie, PageList);
            }
      }
      NouvelleRequete.send(null);
}


function UsedImages_CheckPage(position, ParamPage, ParamCategorie, PageList, ImageList, imContinue){
      if(!ImageList) ImageList = new Array();
      if(!imContinue) imContinue='';
      var Page = PageList;
      if(!Page){
            UsedImages_SortImages(ParamPage, ParamCategorie, ImageList);
            return;
      }
      if( (mw.config.get('wgUserGroups').indexOf("sysop")!=-1)||(mw.config.get('wgUserGroups').indexOf("bot")!=-1) ){
           var APILimit=4999;
      }else{
           var APILimit=499;
      }
      document.getElementById('WorkingFunction').innerHTML = "Listage des images";
      document.getElementById('WorkingPage').innerHTML = Page;
      var AdresseRequete = mw.config.get('wgServer') + '/w/api.php?action=query&prop=images&titles='+Page.replace(/&/g, "%26")+'&imlimit='+APILimit+imContinue;
      var NouvelleRequete = new XMLHttpRequest()
      NouvelleRequete.open("GET", AdresseRequete, true);
      NouvelleRequete.onreadystatechange = function() {
            if(NouvelleRequete.readyState != 4 || NouvelleRequete.status != 200) return;
            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.innerHTML;
                  if(ContenuInformation.indexOf('ns="6"')!=-1){
                        var TitrePage = ContenuInformation.split('title="').split('"');
                        TitrePage = UsedImages_Clean(TitrePage);
                        ImageList.push(TitrePage);
                  }
                  if(ContenuInformation.indexOf('imcontinue=')!=-1){
                        AutreRequeteNecessaire = true;
                        var AutreRequeteContinue = '&imcontinue=' + ContenuInformation.split('imcontinue="').split('"');
                        AutreRequeteContinue = UsedImages_Clean(AutreRequeteContinue);
                  }
            } 
            if(AutreRequeteNecessaire==true){
                  UsedImages_CheckPage(position, ParamPage, ParamCategorie, PageList, ImageList, AutreRequeteContinue);
            }else{
                  UsedImages_CheckPage((position+1), ParamPage, ParamCategorie, PageList, ImageList);
            }
      }
      NouvelleRequete.send(null);
}

function UsedImages_SortImages(ParamPage, ParamCategorie, ImageList){
      document.getElementById('WorkingFunction').innerHTML = "Tri des images";
      document.getElementById('WorkingPage').innerHTML = '';
      ImageList = ImageList.sort();
      var SortedImageList = new Array();
      var SortedImageListCount = new Array();
      var index = 0;
      var NbLiens = 1;
      for(var a=0;a<ImageList.length;a++){
            if(ImageList==ImageList){
                  NbLiens++
            }else{
                  SortedImageList = ImageList;
                  SortedImageListCount = NbLiens;
                  index++
                  NbLiens = 1;
            }
      }
      var StandardLine = '$2$5$1|]\n';
      var TableLines = new Array();
      for(var b=0;b<SortedImageList.length;b++){
            if(SortedImageListCount>(UsedImages_Minimum-1)){
                  var pluriel = '';
                  if(SortedImageListCount>1) pluriel = 's';
                  var Occurrences = SortedImageListCount;
                  var ZeroOccurrences = "";
                  if(Occurrences<10) ZeroOccurrences +="0";
                  if(Occurrences<100) ZeroOccurrences +="0";
                  if(Occurrences<1000) ZeroOccurrences +="0";
                  var NewLine = StandardLine
                  NewLine = NewLine.split('$1').join(SortedImageList);
                  NewLine = NewLine.split('$2').join(ZeroOccurrences+Occurrences);
                  NewLine = NewLine.split('$3').join(Occurrences);
                  NewLine = NewLine.split('$4').join(pluriel);
                  TableLines.push(NewLine);
            }
      }
      TableLines = TableLines.sort();
      for(var c=0;c<TableLines.length;c++){
            TableLines = TableLines.split('$5');
      }
      UsedImages_Edit(ParamPage, ParamCategorie, TableLines);
}


function UsedImages_Edit(ParamPage, ParamCategorie, TableLines){
      document.getElementById('WorkingFunction').innerHTML = "Édition";
      document.getElementById('WorkingPage').innerHTML = ParamPage;
      var ajaxRequest = new XMLHttpRequest();
      var url = mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=' + ParamPage.replace(/&/g, "%26") + '&action=edit';
      ajaxRequest.open("GET", url, true);
      ajaxRequest.onreadystatechange = function() {
            if(ajaxRequest.readyState != 4 || ajaxRequest.status != 200) return;
            while(document.body.firstChild){document.body.removeChild(document.body.firstChild);} 
            document.body.innerHTML = ajaxRequest.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 Titre = '<center>\'\'Catégorie : \'\'\'+':').join('')+']]\'\'\' - Tableau ] le ' + ZeroJour + Jour + '/' + ZeroMois + Mois + '/' + Annee + ' à ' + ZeroHeures + Heures + ':' + ZeroMinutes + Minutes + '\'\'</center>\n';
 
            var Modele = Titre + '<gallery>\n';
            for(var a=(TableLines.length-1);a>-1;a--){
                  Modele += TableLines;
            }
            Modele += '</gallery>\n';

            var TableauComplet = UsedImages_DebutModele+Modele+UsedImages_FinModele;

            UsedImages_ModeleDefautDebut = UsedImages_ModeleDefautDebut.split('$1').join(ParamPage);
            UsedImages_ModeleDefautDebut= UsedImages_ModeleDefautDebut.split('$2').join(ParamCategorie);


            var ContenuPage = document.getElementById("wpTextbox1").value;
            var AncienResumeModif = document.editform.wpSummary.value;

            if( (ContenuPage.indexOf(UsedImages_DebutModele)!=-1)&&(ContenuPage.indexOf(UsedImages_FinModele)!=-1) ){
// ----------------- Déja le modèle : remplacement tableau
                  var debutTexte = ContenuPage.substring(0, ContenuPage.indexOf(UsedImages_DebutModele));
                  var AncienModele = ContenuPage.substring(0, ContenuPage.indexOf(UsedImages_FinModele)) + UsedImages_FinModele;
                  AncienModele = AncienModele.replace(debutTexte, "");       
                  var finTexte = ContenuPage.split(debutTexte).join('').split(AncienModele).join('');
                  var TexteFinal = debutTexte + TableauComplet + finTexte;
            }else{
// ----------------- Pas de modèle : ajout modèle + tableau
                  var TexteFinal = UsedImages_ModeleDefautDebut + TableauComplet + UsedImages_ModeleDefautFin + ContenuPage;
            }
                                       
            document.getElementById ("wpTextbox1").value = TexteFinal ;
            document.editform.wpSummary.value = AncienResumeModif + UsedImages_ResumeModif ;
            document.editform.submit();

      }
      ajaxRequest.send(null);
}

// ///////////////////////////////////////////////////// NETTOYAGE REQUÊTES API /////////////////////////
 
function UsedImages_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;
}


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