Utilisateur:Dr Brains/AddContribNumberInNewPages.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) ;
Firefox (sur GNU/Linux) / 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);