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

var ListAllProjectsPDD_CommStart ='<!-- DÉBUT LISTE -->';
var ListAllProjectsPDD_CommEnd ='<!-- FIN LISTE -->';
var ListAllProjectsPDD_Resume = 'Mise à jour de la liste des projets';


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

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


var ListAllProjectsMain_Array = [];

function ListAllProjectsPDD_Run(ListContinue){
    if(!ListContinue) ListContinue = '';
    ListAllProjectsPDD_Alert("Listage : " + ListContinue);
    if( (mw.config.get('wgUserGroups').indexOf("sysop")!=-1)||(mw.config.get('wgUserGroups').indexOf("bot")!=-1) ){
        var APILimit = 5000;
    }else{
        var APILimit = 500;
    }
    var queryopt = {
        action        : 'query',
        list          : 'allpages',
        aplimit       : APILimit,
        apnamespace   : 102,
        apfilterredir : 'nonredirects'
    };
    if(ListContinue) queryopt.apcontinue = ListContinue;
    queryopt.continue = '';
    var api = new mw.Api();
    api.get(queryopt).then(function(data){
        if(data.query.allpages){
            var pages = data.query.allpages;
            for(var a=0,l=pages.length;a<l;a++){
                var title = pages[a].title;
                if((title.indexOf('/')==-1) && (title != "Projet:Accueil")){
                    ListAllProjectsMain_Array.push(title);
                }
            }
        }
        if(data.query.continue && data.query.continue.apcontinue){
            ListAllProjectsPDD_Run(data.query.continue.apcontinue);
        }else{
            alert("AllProjects : "+ListAllProjectsMain_Array.length);
            ListAllProjectsPDD_getMaintenanceProjects();
        }
    });
}


var ListAllProjectsPDD_MaintenanceProjects = [];

function ListAllProjectsPDD_getMaintenanceProjects(ListContinue){
    if(!ListContinue) ListContinue = '';
    ListAllProjectsPDD_Alert("Listage projets endormis : " + ListContinue);
    if( (mw.config.get('wgUserGroups').indexOf("sysop")!=-1)||(mw.config.get('wgUserGroups').indexOf("bot")!=-1) ){
        var APILimit = 5000;
    }else{
        var APILimit = 500;
    }
    var queryopt = {
        action        : 'query',
        list          : 'categorymembers',
        cmlimit       : APILimit,
        cmtitle       : "Catégorie:Projet de maintenance",
        cmcontinue    : ListContinue,
        continue      : ''
    }
    var api = new mw.Api();
    api.get(queryopt).then(function(data){
        if(data.query.categorymembers) {
            var AllCM = data.query.categorymembers;
            var CM = AllCM.length;
            for(var a=0,l=CM;a<l;a++){
                var title = AllCM[a].title;
                title = title.replace(/^Catégorie:/g, "");
                ListAllProjectsPDD_MaintenanceProjects.push(title);
            }
        }
        if(data.query.continue && data.query.continue.cmcontinue){
            ListAllProjectsPDD_getMaintenanceProjects(data.query.continue.cmcontinue);
        }else{
            alert("MaintenanceProjects : "+ListAllProjectsPDD_MaintenanceProjects.length);
            ListAllProjectsPDD_getRealProjects();
        }
    });
}

function ListAllProjectsPDD_getRealProjects(){
    var RealProjects = [];
    for(var a=0,l=ListAllProjectsMain_Array.length;a<l;a++){
        var P = ListAllProjectsMain_Array[a];
        if(ListAllProjectsPDD_MaintenanceProjects.indexOf(P) === -1 && RealProjects.indexOf(P) === -1) RealProjects.push(P.split("Projet:").join(""));
    }
    alert("RealProjects : "+RealProjects.length);
    ListAllProjectsPDD_getRelatedPDD(RealProjects);
}

var ListAllRedirectedProjectsPDD = {};

function ListAllProjectsPDD_getRelatedPDD(arr){
    if(arr.length===0) return ListAllProjectsPDD_Edit();
    ListAllProjectsPDD_Alert("Recherche des pdd");
    if( (mw.config.get('wgUserGroups').indexOf("sysop")!=-1)||(mw.config.get('wgUserGroups').indexOf("bot")!=-1) ){
        var APILimit = 500;
    }else{
        var APILimit = 50;
    }
    var titles = [];
    var remainingtitles = [];
    for(var a=0,l=arr.length;a<l;a++){
        var title = arr[a];
        if(a<APILimit) titles.push("Discussion Projet:"+title);
        else remainingtitles.push(title);
    }
    var queryopt = {
        action   : 'query',
        prop     : ['info','revisions'],
        rvprop   : 'content',
        titles   : titles,
        continue : ''
    }
    var api = new mw.Api();
    api.get(queryopt).then(function(data){
        var pages = data.query.pages;
        if(pages){
            var NS = "Discussion Projet:"
            for(var id in pages){
                var page = pages[id];
                var title = page.title;
                var ismissing = page.missing === "";
                var isredirect = page.redirect === "";
                if(!ismissing){
                    if(isredirect){
                        var revision = page.revisions[0];
                        var target = revision["*"].replace(/.*\[/g, "").replace(/\].*/g, "");
                        ListAllRedirectedProjectsPDD[title] = target;
                    }
                }
            }
        }
        ListAllProjectsPDD_getRelatedPDD(remainingtitles);
    });
}

function ListAllProjectsPDD_Edit(){
    ListAllProjectsPDD_Alert("Édition");
    var URL = mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=' + mw.config.get('wgPageName') + '&action=edit';
    $.ajax({ url : URL, complete : function(editReq){
        while(document.body.firstChild){document.body.removeChild(document.body.firstChild);}  
        ajaxResponse = editReq.responseText;
        document.body.innerHTML = ajaxResponse;
        var ContenuPage = document.getElementById("wpTextbox1").value;
        var AncienResumeModif = document.editform.wpSummary.value;
                 
        var ProjectsList = ListAllProjectsPDD_CommStart + "\n";
        for(var a=0,l=ListAllProjectsMain_Array.length;a<l;a++){
            var project = ListAllProjectsMain_Array[a];
            if(ListAllRedirectedProjectsPDD[project]){
                var pdd = ListAllRedirectedProjectsPDD[project];         
                ProjectsList += '# \'\'\'[[' + project + '|'+project.split('Projet:').join('')+']] : '
                              + '[['+pdd+']]\'\'\'\n';  
            }else{
                var pdd = "Discussion Projet:" + project.split("Projet:").join("");         
                ProjectsList += '# [[' + project + '|'+project.split('Projet:').join('')+']] : '
                              + '[['+pdd+']]\n'; 
            }
        }
        ProjectsList += ListAllProjectsPDD_CommEnd;

        var debutTexte = ContenuPage.substring(0, ContenuPage.indexOf(ListAllProjectsPDD_CommStart));
        var AncienModele = ContenuPage.substring(0, ContenuPage.indexOf(ListAllProjectsPDD_CommEnd)) + ListAllProjectsPDD_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 + ListAllProjectsPDD_Resume ;
//        document.editform.submit();
    }});
}