Utilisateur:ProméthéeBot/ListerProjets.js

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.
/* 
__NOTOC__
<center><h2 style="margin-top:-1.5em;"> Mise à jour des listes de Projets</h2></center>
{| width="100%" style="background:white;border:1px solid gray;"
| width="200px" valign="middle" align="center" style="background:white;border:1px solid silver;" |
<span id="ListAllProjects_Link">[[Image:Crystal Clear action exit.svg|100px|Démarrer la mise à jour|link=]]</span>
| rowspan="2" align="left" valign="top" style="background:white;border:1px solid silver;" |
<div style="height:250px;overflow-y:scroll;padding:0;padding-left:1em;padding-right:1em;">
{{Special:Recentchangeslinked/{{FULLPAGENAME}}}}
</div>
|--------------------------------------------------------------------------------
| align="left" valign="middle" style="background:white;border:1px solid silver;" |
# {{nobr|[[Wikipédia:Liste des projets#Liste des projets|Liste des projets]]}}
# {{nobr|{{m|Nombre de projets}}}}
|}


{{#ifeq:{{{showdoc|}}}|non||
<center><h2> Documentation</h2></center>
<div style="border:2px dashed green;padding:1.5em;">Pour utiliser ce programme : 
# ajouter à votre [[Special:Mypage/common.js|common.js]] le code : 
#* '''<code>mw.loader.load('//fr.wikipedia.org/w/index.php?title=Utilisateur:ProméthéeBot/ListerProjets.js&action=raw&ctype=text/javascript');</code>'''
# ajouter dans n'importe quelle page de l'[[Aide:espace de noms|espace de noms]] <code>Utilisateur:</code> ou <code>MediaWiki:</code> le code :
#* '''<code><nowiki>{{Utilisateur:ProméthéeBot/ListerProjets.js}}</nowiki></code>'''
# Purger le cache de votre navigateur
# Cliquer sur le gros bouton rouge ci-dessus.
</div>}}


{{#ifeq:{{{showscript|}}}|oui|
<center><h2>Script</h2></center>
<center><h5>[[Utilisateur:ProméthéeBot/ListerProjets.js]] (Licence : [[Domaine public (propriété intellectuelle)|Domaine public]])</h5></center>
<!--
*/
//-->{{Boîte déroulante début|titre=Variables}}<source lang=javascript>//<pre><nowiki>

window.ListAllProjects_CommStart ='<!-- DÉBUT LISTE -->';
window.ListAllProjects_CommEnd ='<!-- FIN LISTE -->';
window.ListAllProjects_Resume = '[[Utilisateur:ProméthéeBot/Liste Projet|Mise à jour de la liste des projets]]';

window.ListAllProjects_APILimit = ( ((mw.config.get('wgUserGroups').indexOf("sysop")!=-1)||(mw.config.get('wgUserGroups').indexOf("bot")!=-1)) ? 4999 : 499 );

// API URL
window.ListAllProjects_APIURL_AllProjects = '//fr.wikipedia.org/w/api.php?format=xml&action=query&list=allpages&rawcontinue=1&aplimit='+ListAllProjects_APILimit+'&apnamespace=102&apfilterredir=nonredirects';

// Edit URL
window.ListAllProjects_ListURL = '//fr.wikipedia.org/w/index.php?title=Wikipédia:Liste_des_projets&action=edit&section=1';
window.ListAllProjects_NumberOfProjectsURL = '//fr.wikipedia.org/w/index.php?title=Modèle:Nombre_de_projets&action=edit';

window.ListAllProjects_ExceptionArray = new Array();         // Projets listés manuellement (présence d'un slash)
ListAllProjects_ExceptionArray.push("Projet:GNU/Linux");


//</nowiki></pre></source>{{Boîte déroulante fin}}{{Boîte déroulante début|titre=FONCTION : Fonctions Ajax}}<source lang=javascript>//<pre><nowiki>

window.ListAllProjects_Ajax = function(bundle) {
    var xmlhttp;
    try {
        xmlhttp = new XMLHttpRequest();
    } catch(e) {
        try {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
                xmlhttp = false;
            }
        }
    } 
    if (xmlhttp) {
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4){
                if (xmlhttp.status == 200 || xmlhttp.status == 302) {
                    if (bundle.onSuccess) bundle.onSuccess(xmlhttp,bundle);
                } else {
                    if (bundle.onFailure) bundle.onFailure(xmlhttp,bundle);
                }
            }
        };
        xmlhttp.open(bundle.method ? bundle.method : "GET",bundle.url,bundle.async === false ? false : true);
        if (bundle.headers) {
            for (var field in bundle.headers){
                try { xmlhttp.setRequestHeader(field,bundle.headers[field]); } catch(err) { }
            }
        }
        xmlhttp.send(bundle.data ? bundle.data : null);
    }
    return xmlhttp;
};
 
window.ListAllProjects_GetPage = function(URL, NextFunc){
    ListAllProjects_Ajax({ url: URL,
                          onSuccess:NextFunc
    });
};

window.ListAllProjects_SavePage = function(NextFunc){
    //if(!confirm("OK ?")) return;
    var Form = document.getElementById('editform');
    var action = Form.action;
    var headers = new Array();
    headers['Content-Type'] = 'application/x-www-form-urlencoded';
    ListAllProjects_Ajax({ url: action,
                          method: "POST",
                          headers: headers,
                          data: ListAllProjects_createURLFromParams(ListAllProjects_getFormParams(Form)),
                          onSuccess:(NextFunc ? NextFunc : function(){ window.location.reload(); } )
    });
};



//</nowiki></pre></source>{{Boîte déroulante fin}}{{Boîte déroulante début|titre=FONCTION : Suppression des accents pour le tri}}<source lang=javascript>//<pre><nowiki>

window.ListAllProjects_NoAccent = function(text){
      text=text.toLowerCase();
      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,"i");
      text=text.replace(/ï/g,"i");
      text=text.replace(/ô/g,"o");
      text=text.replace(/œ/g,"oe");
      text=text.replace(/ç/g,"c");
      text=text.replace(/š/g,"s");
      text=text.replace(/-/g," ");
      text=text.replace(/'/g," ");
      text=text.replace(/:les /i,":");
      text=text.replace(/:la /i,":");
      return text;
};


//</nowiki></pre></source>{{Boîte déroulante fin}}{{Boîte déroulante début|titre=FONCTION : Suppression des caractères HTML}}<source lang=javascript>//<pre><nowiki>

window.ListAllProjects_HTMLDecode = function(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;
};


//</nowiki></pre></source>{{Boîte déroulante fin}}{{Boîte déroulante début|titre=FONCTION : suivi du process}}<source lang=javascript>//<pre><nowiki>

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

//</nowiki></pre></source>{{Boîte déroulante fin}}{{Boîte déroulante début|titre=FONCTION : récupération paramètres d'édition}}<source lang=javascript>//<pre><nowiki>

window.ListAllProjects_getFormParams = function(Form){
     var Params = new Array();
     var Tags = new Array("textarea", "select", "input");
     for(var a=0,l=Tags.length;a<l;a++){
          var Elements = Form.getElementsByTagName(Tags[a]);
          for(var b=0,m=Elements.length;b<m;b++){
               var Element = Elements[b];
               var ElName = Element.name;
               var ElValue = Element.value;
               var ElType = Element.type;
               if(Tags[a].toLowerCase()=='input' && (ElType == "checkbox" || ElType == "radio") && Element.checked){
                    Params[ElName] = ElValue;
               }else if(Tags[a].toLowerCase()=='input' && (ElType == "text" || ElType == "hidden") ){
                    Params[ElName] = ElValue;
               }else if(Tags[a].toLowerCase()!='input'){
                    Params[ElName] = ElValue;
               }
          }
     }
     return Params;
}


window.ListAllProjects_createURLFromParams = function(Params){
    var ParamsInURL = new Array();
    for(var P in Params){
        if(typeof(Params[P])=="string") ParamsInURL.push(P+"="+encodeURIComponent(Params[P]));
    }
    return ParamsInURL.join('&');
}

//</nowiki></pre></source>{{Boîte déroulante fin}}{{Boîte déroulante début|titre=Ajout du lien de mise à jour}}<source lang=javascript>//<pre><nowiki>

window.ListAllProjects_AddLinks = function(){
      var ButtonLink = document.getElementById('ListAllProjects_Link');
      if(!ButtonLink) return;
      var Link = '<a id="ListAllProjects_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);
}


//</nowiki></pre></source>{{Boîte déroulante fin}}{{Boîte déroulante début|titre=Recherche des pages de l'espace de noms Projet: }}<source lang=javascript>//<pre><nowiki>

window.ListAllProjects_Array = new Array();
window.ListAllProjects_Array_NoAccent = new Array();

for(var z=0;z<ListAllProjects_ExceptionArray.length;z++){
      ListAllProjects_Array.push(ListAllProjects_ExceptionArray[z]);
      ListAllProjects_Array_NoAccent.push(ListAllProjects_NoAccent(ListAllProjects_ExceptionArray[z]));
}

window.ListAllProjects_Run = function(){
      ListAllProjects_Alert("Listage de tous les Projets");
      ListAllProjects_GetPage(ListAllProjects_APIURL_AllProjects, ListAllProjects_AllProjects);
}

window.ListAllProjects_AllProjects = function(Req){
      var ObjetXML = Req.responseXML; 
      var AllProjects = ObjetXML.getElementsByTagName('p');
      for(a=0;a<AllProjects.length;a++){
            var TitrePage =AllProjects[a].getAttribute('title');
            if((TitrePage.indexOf('/')==-1)&&(TitrePage!="Projet:Accueil")){
                  ListAllProjects_Array.push(TitrePage);
                  ListAllProjects_Array_NoAccent.push(ListAllProjects_NoAccent(TitrePage));
            }
      } 
      var AutreRequeteNecessaire = ObjetXML.getElementsByTagName('query-continue')[0];
      if(AutreRequeteNecessaire){
            var ContinueParam = AutreRequeteNecessaire.firstChild.attributes[0];
            var AutreRequeteContinue = ContinueParam.value;
            ListAllProjects_Alert("Listage de tous les Projets : "+AutreRequeteContinue);
            ListAllProjects_GetPage(ListAllProjects_APIURL_AllProjects+'&'+ContinueParam.name+'='+encodeURIComponent(AutreRequeteContinue), ListAllProjects_AllProjects);
      }else{
            ListAllProjects_Alert("Tri des pages");
            ListAllProjects_Sort();
      }
}

//</nowiki></pre></source>{{Boîte déroulante fin}}{{Boîte déroulante début|titre=Tri alphabétique des pages}}<source lang=javascript>//<pre><nowiki>

window.ListAllProjects_SortedArray = new Array();
window.ListAllProjects_SortedArrayCount = -1;
window.ListAllProjects_SortedStubArray = new Array();
window.ListAllProjects_SortedStubArrayCount = -1;

window.ListAllProjects_Sort = function(){
      ListAllProjects_Alert("Tri des Projets");
      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];
                  }else{
                        continue;
                  }
            }
      }

      ListAllProjects_Alert("Création des nouvelles listes");
      ListAllProjects_CreateTemplates();
}


//</nowiki></pre></source>{{Boîte déroulante fin}}{{Boîte déroulante début|titre=Création des listes}}<source lang=javascript>//<pre><nowiki>

window.ListAllProjects_ProjectsListTemplate = "Test List";

window.ListAllProjects_CreateTemplates = function(){
      ListAllProjects_ProjectsListTemplate = '{{colonnes|nombre=4|1=\n' 
                                         + "# [[Projet:Accueil|'''Projet des projets''']]\n";
      for(var a=0;a<ListAllProjects_SortedArray.length;a++){
            var Project = ListAllProjects_SortedArray[a];
            var ProjectName = ListAllProjects_SortedArray[a].split('Projet:')[1].replace(/ \(.*/g, "");
            ListAllProjects_ProjectsListTemplate += '# [[' + Project + '|' + ProjectName + ']]\n';
      }
      ListAllProjects_ProjectsListTemplate += "}}";
      
      ListAllProjects_Alert("Éditions");
      ListAllProjects_GetPage(ListAllProjects_ListURL, ListAllProjects_EditPageList);
}


//</nowiki></pre></source>{{Boîte déroulante fin}}{{Boîte déroulante début|titre=Mise à jour de [[Wikipédia:Liste des projets#Liste des projets]]}}<source lang=javascript>//<pre><nowiki>

window.ListAllProjects_EditPageList = function(Req){
      while(document.body.firstChild){document.body.removeChild(document.body.firstChild);}  
      document.body.innerHTML = Req.responseText;
      var ContenuPage = document.getElementById("wpTextbox1").value;
      var AncienResumeModif = document.editform.wpSummary.value;
      var Reg = new RegExp("\\{\\{colonnes\\|nombre=4\\|[^\\}]+\\}\\}", "ig");
      var Matches = ContenuPage.match(Reg);
      if(Matches != null && Matches.length == 1){
            var TexteFinal = ContenuPage.replace(Matches[0], ListAllProjects_ProjectsListTemplate);
      }else{
            if(Matches == null){ 
                  alert("Pas trouvé le texte à remplacer " + Reg);
            }else{
                  alert("Trouvé plusieurs occurrences du texte à remplacer " + Reg);
            }
            document.getElementById ("wpTextbox1").value = "<!-------------------------------------------------------\n"
                                                   + ListAllProjects_ProjectsListTemplate
                                                   + "-------------------------------------------------------->\n"
                                                   + ContenuPage ;
            return;
      }
      document.getElementById ("wpTextbox1").value = TexteFinal ;
      document.editform.wpSummary.value = AncienResumeModif + ListAllProjects_Resume ;
      document.editform.wpMinoredit.checked = "checked";
      document.editform.wpWatchthis.checked = "checked";
     ListAllProjects_SavePage(function(){ ListAllProjects_GetPage(ListAllProjects_NumberOfProjectsURL, ListAllProjects_EditNumberOfProjects) });
}

//</nowiki></pre></source>{{Boîte déroulante fin}}{{Boîte déroulante début|titre=Mise à jour de {{m|Nombre de projets}}}}<source lang=javascript>//<pre><nowiki>

window.ListAllProjects_EditNumberOfProjects = function(Req){
      while(document.body.firstChild){document.body.removeChild(document.body.firstChild);}  
      document.body.innerHTML = Req.responseText;
      var ContenuPage = document.getElementById("wpTextbox1").value;
      var AncienResumeModif = document.editform.wpSummary.value;
      
	  ContenuPage = "{{formatnum:" + (ListAllProjects_SortedArray.length+1) + "}}<noinclude> <!-- Bien maintenir ce « noinclude » collé à ce nombre qui est mis à jour régulièrement par un bot ! -->\n"
	  ContenuPage += "{{Documentation}}\n"
	  ContenuPage += "</noinclude>"

      document.getElementById ("wpTextbox1").value = ContenuPage;
      document.editform.wpSummary.value = AncienResumeModif + ListAllProjects_Resume + " : " +  (ListAllProjects_SortedArray.length+1);
      document.editform.wpMinoredit.checked = "checked";
      document.editform.wpWatchthis.checked = "checked";
      ListAllProjects_SavePage();
}

// </nowiki></pre></source>{{Boîte déroulante fin}}{{Boîte déroulante début|titre=Lancement}}<source lang=javascript>//<pre><nowiki>

if(mw.config.get('wgNamespaceNumber')==2 || mw.config.get('wgNamespaceNumber')== 8) $(ListAllProjects_AddLinks);


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