Utilisateur:Dr Brains/ImagesUtilisees.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 : 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[s]).hasClass('categoryUsedImages') ){          
                  count++
                  Cadres[s].id = 'categoryUsedImages_'+count;
                  var ParamCategorie = Cadres[s].firstChild.innerHTML;
                  var ParamPage = Cadres[s].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[s].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[a].innerHTML;
                  if((ContenuInformation.indexOf('ns="0"')!=-1)||(ContenuInformation.indexOf('ns="1"')!=-1)){
                        var TitrePage = ContenuInformation.split('title="')[1].split('"')[0];
                        TitrePage = UsedImages_Clean(TitrePage);
                        PageList.push(TitrePage);
                  }
                  if(ContenuInformation.indexOf('cmcontinue=')!=-1){
                        AutreRequeteNecessaire = true;
                        var AutreRequeteContinue = ContenuInformation.split('cmcontinue="')[1].split('"')[0];
                        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[position];
      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[a].innerHTML;
                  if(ContenuInformation.indexOf('ns="6"')!=-1){
                        var TitrePage = ContenuInformation.split('title="')[1].split('"')[0];
                        TitrePage = UsedImages_Clean(TitrePage);
                        ImageList.push(TitrePage);
                  }
                  if(ContenuInformation.indexOf('imcontinue=')!=-1){
                        AutreRequeteNecessaire = true;
                        var AutreRequeteContinue = '&imcontinue=' + ContenuInformation.split('imcontinue="')[1].split('"')[0];
                        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[a]==ImageList[(a+1)]){
                  NbLiens++
            }else{
                  SortedImageList[index] = ImageList[a];
                  SortedImageListCount[index] = NbLiens;
                  index++
                  NbLiens = 1;
            }
      }
      var StandardLine = '$2$5$1|[[Special:Whatlinkshere/$1|$3 occurrence$4]]\n';
      var TableLines = new Array();
      for(var b=0;b<SortedImageList.length;b++){
            if(SortedImageListCount[b]>(UsedImages_Minimum-1)){
                  var pluriel = '';
                  if(SortedImageListCount[b]>1) pluriel = 's';
                  var Occurrences = SortedImageListCount[b];
                  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[b]);
                  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[c] = TableLines[c].split('$5')[1];
      }
      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 : \'\'\'[[:'+ParamCategorie+'|'+ParamCategorie.split(mw.config.get('wgFormattedNamespaces')[14]+':').join('')+']]\'\'\' - Tableau [[Modèle:Images utilisées/Documentation|mis à jour]] 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[a];
            }
            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}}