Utilisateur:Dr Brains/AddContribNumberInNewPages.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.
/* 

Auteur : Darkoneko 13/01/2009
Fonction : ajouter le nombre de contribs de la personne juste avant son lien "discuter", dans special:newpages

Réécriture : Dr Brains (26/10/2014)

{{Catégorisation JS|AddContribNumberInNewPages}}
*/
 
window.AddContribNumberInNewPages_Texts = {
  contributions : "$1 {{PLURAL:$1|contribution|contributions}}"
}

var addContribNumberInNewPages_ajax = {
    http: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){ addContribNumberInNewPages_ajax.httpComplete(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;},
    httpComplete: function(xmlhttp,bundle){ if(xmlhttp.status == 200 || xmlhttp.status == 302){ if(bundle.onSuccess) bundle.onSuccess(xmlhttp,bundle); }else if(bundle.onFailure){ bundle.onFailure(xmlhttp,bundle); }else{ }}
};

function addContribNumberInNewPages_UserIsIP(user){
  var regexpIP4 = /^\d{1,3}\.\d{1,3}.\d{1,3}.\d{1,3}$/;
  var regexpIP6 = /\w{1,4}\:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}/;
  if(regexpIP4.exec(user)){
    return "V4";
  }else if(regexpIP6.exec(user)){
    return "V6";
  }else{
    return false;
  }
}


var addContribNumberInNewPages_Plural = function(Text){
    var PluralRegExp = new RegExp("\\{\\{PLURAL[^\\}]+\\}\\}", "ig")
    var Matches = Text.match(PluralRegExp);
    if(Matches!=null){
        for(var b=0,m=Matches.length;b<m;b++){
            var Match = Matches[b];
            var Params = Match.split('}}').join('').split('|');
            var thisnumber = parseInt(Params[0].replace(/[^0-9]/g, ""));
            var Result = "";
            if(thisnumber > 1){
                Result = Params[2];
            }else{
                Result = Params[1];
            }
            if(!Result) Result = "";
            Text = Text.replace(Match, Result);
        }
    }
    return Text;
}
 
function addContribNumberInNewPages() { 
    if ( mw.config.get('wgCanonicalSpecialPageName') != "Newpages" ) return;
    var Content = document.getElementById("mw-content-text");
    if(!Content) Content = document.getElementById("bodyContent");
    if(!Content) Content = document.getElementById("article");
    if(!Content) Content = document.getElementById("mw_contentholder");
    if(!Content) Content = document.body;
    var LinesList = Content.getElementsByTagName("ul")[0].getElementsByTagName("li");
    var users = {};
    for (var a=0,l=LinesList.length;a<l;a++) { 
        var thisuser = LinesList[a].getElementsByClassName("mw-userlink")[0].innerHTML;
        if(typeof(users[thisuser]) == "undefined") users[thisuser] = [];
        users[thisuser].push(LinesList[a]);
    }
    for(var user in users){
        addContribNumberInNewPages_geteditcount(users, user);
    }
}

function addContribNumberInNewPages_geteditcount(users, user){
    var APIlimit = ( (mw.config.get('wgUserGroups').indexOf('sysop')!=-1 || mw.config.get('wgUserGroups').indexOf('bot')!=-1 ) ? 4999 : 499 );
    if(addContribNumberInNewPages_UserIsIP(user)){
        var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml'
                + '&action=query&list=usercontribs&ucuserprefix=' + encodeURIComponent(user)
                + '&uclimit=' + APIlimit;
        addContribNumberInNewPages_ajax.http({
            url: URL, 
            onSuccess: addContribNumberInNewPages_getIPeditcount,
            user: user, 
            users: users,
            contribs: 0
        });
    }else{
        var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml'
                + '&action=query&list=allusers&auprefix=' + encodeURIComponent(user)
                + '&aulimit=1'
                + '&auprop=editcount';
        addContribNumberInNewPages_ajax.http({
            url: URL, 
            onSuccess: addContribNumberInNewPages_getUsereditcount,
            user: user, 
            users: users
        });
    }
}

function addContribNumberInNewPages_getIPeditcount(Req, data){
    var UContribs = Req.responseXML.getElementsByTagName('usercontribs')[0];
    if(!UContribs) return;
    var Items = UContribs.getElementsByTagName('item');
    var contribs = data.contribs + Items.length;
    var othercontribs = UContribs.getElementsByTagName('query-continue')[0];
    if(othercontribs){
        var continueparam = '&uccontinue=' + encodeURIComponent(othercontribs.firstChild.getAttribute('uccontinue'));
        var APIlimit = ( (mw.config.get('wgUserGroups').indexOf('sysop')!=-1 || mw.config.get('wgUserGroups').indexOf('bot')!=-1 ) ? 4999 : 499 );
        var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml'
                + '&action=query&list=usercontribs&ucuserprefix=' + encodeURIComponent(data.user);
                + '&uclimit=' + APIlimit
                + continueparam;
        addContribNumberInNewPages_ajax.http({
            url: URL, 
            onSuccess: addContribNumberInNewPages_getIPeditcount,
            user: data.user, 
            users: data.users,
            contribs: contribs
        });   
    }else{
        addContribNumberInNewPages_UpdateLines(data.users[data.user], contribs);
    }
}

function addContribNumberInNewPages_getUsereditcount(Req, data){
    var U = Req.responseXML.getElementsByTagName('u')[0];
    if(!U) return;
    var usereditcount = U.getAttribute("editcount");
    addContribNumberInNewPages_UpdateLines(data.users[data.user], usereditcount);
}

function  addContribNumberInNewPages_UpdateLines(LinesList, editcount){
    for (a=0;a<LinesList.length;a++) { 
        var user = LinesList[a].getElementsByClassName("mw-userlink")[0].innerHTML;
        var link =  LinesList[a].getElementsByClassName("mw-usertoollinks")[0].getElementsByTagName("a")[1]; 
        link.innerHTML = addContribNumberInNewPages_Plural( AddContribNumberInNewPages_Texts.contributions.split("$1").join(editcount) ); 
        link.className = "contribLink";
    }
} 
$(addContribNumberInNewPages);