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

var ListAllProjects_CommStart ='<!-- DÉBUT LISTE -->';
var ListAllProjects_CommEnd ='<!-- FIN LISTE -->';
var ListAllProjects_Resume = 'Mise à jour de la liste des projets';


function ListAllProjects_AddLink(){
      var ButtonLink = document.getElementById('ListAllProjects_Link');
      if(ButtonLink){
            var Link = '<a href="javascript:ListAllProjects_Run();" title="Lancer la mise à jour">' + ButtonLink.innerHTML + '</a>';
            ButtonLink.innerHTML = Link;
            var Separator = document.createElement('br');
            var ControlSpan = document.createElement('span');
            ControlSpan.id = 'ListAllProjects_Control';
            ButtonLink.parentNode.insertBefore(Separator, ButtonLink);
            ButtonLink.parentNode.insertBefore(ControlSpan, Separator);
      }
}
if(mw.config.get('wgPageName').indexOf("/Liste_des_Projets_BOT")!=-1) $(ListAllProjects_AddLink);

function ListAllProjects_Alert(Text){
      if(!Text) Text = '';
      var ControlElement = document.getElementById('ListAllProjects_Control');
      if(ControlElement) ControlElement.innerHTML = Text;
}



var ListAllProjects_Array = [];
var ListAllProjects_Array_NoAccent = [];
var ListAllProjects_ArrayCount = -1;

function ListAllProjects_Run(ListContinue){
      if(!ListContinue) ListContinue = '';
      ListAllProjects_Alert("Listage : " + ListContinue);
      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=allpages&aplimit='+APILimit+'&apnamespace=102&apfilterredir=nonredirects&apfrom=' + ListContinue;
      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="102"')!=-1){
                              var TitrePage = ContenuInformation.split('title="')[1].split('"')[0];
                              TitrePage = ListAllProjects_HTMLDecode(TitrePage);
                              if((TitrePage.indexOf('/')==-1)&&(TitrePage!="Projet:Accueil")){
                                    ListAllProjects_ArrayCount++
                                    ListAllProjects_Array[ListAllProjects_ArrayCount] = TitrePage;
                                    ListAllProjects_Array_NoAccent[ListAllProjects_ArrayCount] = ListAllProjects_NoAccent(TitrePage);
                              }
                        }
                        if(ContenuInformation.indexOf('apfrom=')!=-1){
                              AutreRequeteNecessaire = true;
                              var AutreRequeteContinue = ContenuInformation.split('apfrom="')[1].split('"')[0];
                              AutreRequeteContinue = ListAllProjects_HTMLDecode(AutreRequeteContinue);
                        }
                  } 
                  if(AutreRequeteNecessaire==true){
                        ListAllProjects_Run(AutreRequeteContinue);
                  }else{
                        ListAllProjects_Sort();
                  }
            }
      }
}


var ListAllProjects_SortedArray = [];
var ListAllProjects_SortedArrayCount = -1;

function ListAllProjects_Sort(){
      ListAllProjects_Alert("Tri");
      ListAllProjects_Array_NoAccent.sort();
      for(var a=0;a<ListAllProjects_Array_NoAccent.length;a++){
            for(var b=0;b<ListAllProjects_Array.length;b++){
                  if(ListAllProjects_NoAccent(ListAllProjects_Array[b]) == ListAllProjects_Array_NoAccent[a]){
                        ListAllProjects_SortedArrayCount++
                        ListAllProjects_SortedArray[ListAllProjects_SortedArrayCount] = ListAllProjects_Array[b]
                  }
            }
      }
      ListAllProjects_Sleep();
}

var ListAllProjects_SleepingProjects = [];

function ListAllProjects_Sleep(ListContinue){
      if(!ListContinue) ListContinue = '';
      ListAllProjects_Alert("Listage projets endormis : " + ListContinue);
      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=Catégorie:Projet en sommeil&cmcontinue=' + ListContinue;
      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="102"')!=-1){
                              var TitrePage = ContenuInformation.split('title="')[1].split('"')[0];
                              TitrePage = ListAllProjects_HTMLDecode(TitrePage);
                              if((TitrePage.indexOf('/')==-1)&&(TitrePage!="Portail:Accueil")){
                                    ListAllProjects_SleepingProjects.push(TitrePage);
                              }
                        }
                        if(ContenuInformation.indexOf('cmcontinue=')!=-1){
                              AutreRequeteNecessaire = true;
                              var AutreRequeteContinue = ContenuInformation.split('cmcontinue="')[1].split('"')[0];
                              AutreRequeteContinue = ListAllProjects_HTMLDecode(AutreRequeteContinue);
                        }
                  } 
                  if(AutreRequeteNecessaire==true){
                        ListAllProjects_Sleep(AutreRequeteContinue);
                  }else{
                        ListAllProjects_SortSleepingProjects();
                  }
            }
      }
}

var ListAllProjects_SortedSleepingArray = [];

function ListAllProjects_SortSleepingProjects(){
      for(var a=0;a<ListAllProjects_SortedArray.length;a++){
            var Match = false;
            for(var b=0;b<ListAllProjects_SleepingProjects.length;b++){
                  if(ListAllProjects_SleepingProjects[b] == ListAllProjects_SortedArray[a]){
                        Match = true;
                  }else{
                        continue;
                  }
            }
            ListAllProjects_SortedSleepingArray[a] = Match;
            Match = false;
      }
      ListAllProjects_Edit();
}

function ListAllProjects_Edit(){
      ListAllProjects_Alert("Édition");
      var ajaxRequest = new XMLHttpRequest();
      var url = mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=' + mw.config.get('wgPageName') + '&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 ProjectsList = ListAllProjects_CommStart + "\n# [[Projet:Accueil|'''Portail des projets''']]\n";
                  for(var a=0;a<ListAllProjects_SortedArray.length;a++){
                        if(ListAllProjects_SortedSleepingArray[a]){
                              ProjectsList += '# \'\'<small>[[' + ListAllProjects_SortedArray[a] + '|'+ListAllProjects_SortedArray[a].split('Projet:').join('')+']]</small>\'\'\n';                              
                        }else{
                              ProjectsList += '# [[' + ListAllProjects_SortedArray[a] + '|'+ListAllProjects_SortedArray[a].split('Projet:').join('')+']]\n';
                        }
                  }
                  ProjectsList += ListAllProjects_CommEnd;

                  var debutTexte = ContenuPage.substring(0, ContenuPage.indexOf(ListAllProjects_CommStart));
                  var AncienModele = ContenuPage.substring(0, ContenuPage.indexOf(ListAllProjects_CommEnd)) + ListAllProjects_CommEnd;
                  AncienModele = AncienModele.replace(debutTexte, "");       
                  var finTexte = ContenuPage.split(debutTexte).join('').split(AncienModele).join('');
                  var TexteFinal = debutTexte + ProjectsList + finTexte;

                  document.getElementById ("wpTextbox1").value = TexteFinal ;
                  document.editform.wpSummary.value = AncienResumeModif + ListAllProjects_Resume ;
                  document.editform.submit();
            }
      }
}

function ListAllProjects_NoAccent(text){
      text=text.replace(/Â/g,"A");
      text=text.replace(/â/g,"a");
      text=text.replace(/É/g,"E");
      text=text.replace(/é/g,"e");
      text=text.replace(/è/g,"e");
      text=text.replace(/ê/g,"e");
      text=text.replace(/ë/g,"e");
      text=text.replace(/Î/g,"I");
      text=text.replace(/î/g,"i");
      text=text.replace(/ï/g,"i");
      text=text.replace(/ô/g,"o");
      text=text.replace(/ç/g,"c");
      return text;
}

function ListAllProjects_HTMLDecode(text){
      var EncodedCharacter = [];
      var DecodedCharacter = [];
      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;
}