User:ais523/editcount.js

//Please leave this link: User:ais523/editcount.js

//

//JavaScript edit counter. By User:ais523.

//To install this, you can copy it into your monobook.js or use a script-inclusion

//method (see WikiProject User Scripts). It produces a 'count' tab on contribs pages

//that can be used to count a user's edits. It won't count more than 5000 edits in any

//namespace, to prevent excessive server load.

// Newly simplified Add Tab, to replace the old broken one.

function ecAddTab(url, name, id, title, key){

return mw.util.addPortletLink('p-cactions', url, name, id, title, key);

}

var aecwpajax;

// From WP:US mainpage (wpajax renamed to aecwpajax), some comments removed

aecwpajax={

download:function(bundle) {

var x = window.XMLHttpRequest ? new XMLHttpRequest()

: window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP")

: false;

if (x) {

x.onreadystatechange=function() {

x.readyState==4 && aecwpajax.downloadComplete(x,bundle);

};

x.open("GET",bundle.url,true);

x.send(null);

}

return x;

},

downloadComplete:function(x,bundle) {

x.status==200 && ( bundle.onSuccess && bundle.onSuccess(x,bundle) || true )

|| ( bundle.onFailure && bundle.onFailure(x,bundle) || alert(x.statusText));

}

};

function ecQuickCountComplete(xmlreq,data)

{

alert("Edit count: "+xmlreq.responseText.split('editcount="')[1].split('"')[0]);

}

$(function() {

if(location.href.indexOf("Special")!=-1&&location.href.indexOf("Contributions")!=-1)

ecAddTab("javascript:ais523quickcount()","quick count","ca-ais523qc","Quick Count","");

});

function ais523quickcount()

{

var trg;

trg=ecGetParamValue('target');

if(trg==null) trg=location.href.substr(location.href.lastIndexOf("/")+1);

aecwpajax.download({url:'//en.wikipedia.org/w/api.php?action=query&list=users&ususers='

+encodeURIComponent(trg)+'&usprop=editcount&format=xml', onSuccess:ecQuickCountComplete});

}

$(function() {

if(location.href.indexOf("Special")!=-1&&location.href.indexOf("Contributions")!=-1)

ecAddTab("javascript:ais523contrib()","count","ca-ais523count","Count","");

});

//This function was orignally taken from User:Lupin/autoedit.js. I've renamed it

//because I know many users use popups, and I don't want to cause a naming conflict.

//Edited to decode + to space as well, and to use a decoding function that handles

//a broader range of characters.

function ecGetParamValue(paramName) {

var cmdRe=RegExp('[&?]'+paramName+'=([^&]*)');

var h=document.location;

var m;

if ((m=cmdRe.exec(h))) {

try {

while(m[1].indexOf('+')!=-1)

{

m[1]=m[1].substr(0,m[1].indexOf('+'))+" "+m[1].substr(m[1].indexOf('+')+1);

}

return decodeURIComponent(m[1]);

} catch (someError) {}

}

return null;

}

// TODO: Can we autogenerate this from somewhere?

var namespaces = {

0: "Article",

1: "Talk",

2: "User",

3: "User talk",

4: "Wikipedia",

5: "Wikipedia talk",

6: "File",

7: "File talk",

8: "MediaWiki",

9: "MediaWiki talk",

10: "Template",

11: "Template talk",

12: "Help",

13: "Help talk",

14: "Category",

15: "Category talk",

100: "Portal",

101: "Portal talk",

108: "Book",

109: "Book talk",

118: "Draft",

119: "Draft talk",

446: "Education Program",

447: "Education Program talk",

710: "TimedText",

711: "TimedText talk",

828: "Module",

829: "Module talk",

2600: "Topic",

};

function nextnamespace(n)

{

var flag = false;

for (var nsnum in namespaces) {

if (flag)

return nsnum;

if (nsnum == n)

flag = true;

}

return null;

}

function ais523contrib()

{

var u;

if(location.href.indexOf("?")!=-1) u=ecGetParamValue("target");

else u=location.href.substr(location.href.lastIndexOf("/")+1);

location.href="//en.wikipedia.org/w/index.php?title=Special:Contributions&limit=5000&target="+u+"&ais523count=1&namespace=0";

}

//Analyses an edit summary and returns a two-letter code indicating what the edit seems

//to be doing. The edit summary is passed with parens round it, written in HTML. This

//doesn't yet work for section edits, which will have to be parsed out in the main

//function.

function ecAnalyseSummary(edsum)

{

while(edsum.indexOf(" ")===0) edsum=edsum.substr(1);

edsum="("+edsum+")";

edsum=edsum.toLowerCase();

if(edsum.indexOf("→")!==-1) return 'se'; //section edit, can't say any more than that

if(edsum==="") return 'se'; //section edit, no summary

if(edsum.indexOf("(rvv")===0) return 'rv'; //vandalism revert

if(edsum.indexOf("(rv vand")===0) return 'rv'; //vandalism revert

if(edsum.indexOf("(revv")===0) return 'rv'; //vandalism revert

if(edsum.indexOf("(rev vand")===0) return 'rv'; //vandalism revert

if(edsum.indexOf("(revert vand")===0) return 'rv'; //vandalism revert

if(edsum.indexOf("(rv ")===0&&edsum.indexOf("vandal")!=-1) return 'rv';

if(edsum.indexOf("(rev ")===0&&edsum.indexOf("vandal")!=-1) return 'rv';

if(edsum.indexOf("(rv ")===0) return 'ro'; //other manual revert

if(edsum.indexOf("(rev ")===0) return 'ro'; //other manual revert

if(edsum.indexOf("(reverted ")===0) return 'ra'; //automatic revert

if(edsum.indexOf("(revert to ")===0) return 'ra'; //automatic revert, probably

if(edsum.indexOf("(revert edit(s) ")===0) return 'ra'; //per User:Qxz

if(edsum.indexOf("(revert")===0) return 'ro'; //guess manual for time being;

//I need more examples of this sort of rv

if(edsum.indexOf("(rm ")===0) return 'rm'; //removal

if(edsum.indexOf("(rem ")===0) return 'rm'; //removal

if(edsum.indexOf("(remove ")===0) return 'rm'; //removal

if(edsum.indexOf("(redir")===0) return 'rd'; //redirect, including redir auto-summary

if(edsum.indexOf("(#redir")===0) return 'rd'; //redirect, including redir auto-summary

if(edsum.indexOf('(

if(edsum.indexOf('(

if(edsum.indexOf('{{welcome')!=-1) return 'we'; //welcome

if(edsum.indexOf('welcome}}')!=-1) return 'we'; //welcome

if(edsum.indexOf('(welcome')!=-1) return 'we'; //welcome

if(edsum.indexOf('welcome)')!=-1) return 'we'; //welcome

if(edsum.indexOf('(welcoming')!=-1) return 'we'; //welcome (Huggle)

//User warnings are sorted by level. Other warnings and edit summaries are used;

//this is just a small beginning for now.

if(edsum.indexOf('test0')!=-1) return 'w0'; //warning 1

if(edsum.indexOf('test1')!=-1) return 'w1'; //warning 1

if(edsum.indexOf('test2')!=-1) return 'w2'; //warning 2

if(edsum.indexOf('test3')!=-1) return 'w3'; //warning 3

if(edsum.indexOf('test4')!=-1) return 'w4'; //warning 4

if(edsum.indexOf('test5')!=-1) return 'w5'; //warning 5

if(edsum.indexOf('test6')!=-1) return 'w5'; //warning 5

//Twinkle's edit summaries by level

if(edsum.indexOf('(general note:')!=-1) return 'a1'; //warning 1

if(edsum.indexOf('(caution:')!=-1) return 'a2'; //warning 2

if(edsum.indexOf('(warning:')!=-1) return 'a3'; //warning 3

if(edsum.indexOf('(final warning:')!=-1) return 'a4'; //warning 4

if(edsum.indexOf('(only warning:')!=-1) return 'a4'; //warning 4

if(edsum.indexOf('blocked from editing')!=-1) return 'a5'; //warning 5

//Huggle's are a lot simpler

if(edsum.indexOf('level 1 warning')!=-1) return 'a1'; //warning 1

if(edsum.indexOf('level 2 warning')!=-1) return 'a2'; //warning 2

if(edsum.indexOf('level 3 warning')!=-1) return 'a3'; //warning 3

if(edsum.indexOf('level 4 warning')!=-1) return 'a4'; //warning 4

if(edsum.indexOf('level 5 warning')!=-1) return 'a5'; //warning 5

//Unknown warnings

if(edsum.indexOf('(warning user using')!=-1) return 'au'; //automated warning

if(edsum.indexOf('warning')!=-1) return 'wu'; //unknown warning

//Notifications

if(edsum.indexOf('notify')!=-1) return 'no'; //notification

if(edsum.indexOf('(notice')!=-1) return 'no'; //notification

if(edsum.indexOf('notification')!=-1) return 'no'; //notification

//Prodding

if(edsum.indexOf('{'+'{prod')!=-1) return 'pr'; //prod

if(edsum.indexOf('(prod')!=-1) return 'pr'; //prod

//Some XfD-tagging summaries. So far I've only included the deletion-debates

//I'm familiar with.

if(edsum.indexOf('{'+'{afd}}')!=-1) return 'xf'; //XfD tagging

if(edsum.indexOf('{'+'{afd1')!=-1) return 'xf'; //XfD tagging

if(edsum.indexOf('(afd)')!=-1) return 'xf'; //XfD tagging

if(edsum.indexOf('{'+'{tfd}}')!=-1) return 'xf'; //XfD tagging

if(edsum.indexOf('(tfd)')!=-1) return 'xf'; //XfD tagging

if(edsum.indexOf('{'+'{md}}')!=-1) return 'xf'; //XfD tagging

if(edsum.indexOf('{'+'{md1')!=-1) return 'xf'; //XfD tagging

if(edsum.indexOf('(mfd)')!=-1) return 'xf'; //XfD tagging

if(edsum.indexOf('{'+'{rfd}}')!=-1) return 'xf'; //XfD tagging

if(edsum.indexOf('(rfd)')!=-1) return 'xf'; //XfD tagging

if(edsum.indexOf('for deletion')!=-1) return 'xf'; //XfD tagging

//Speedy deletions

if(edsum.indexOf('db-')!=-1) return 'sp'; //Speedy

if(edsum.indexOf('db|')!=-1) return 'sp'; //Speedy

if(edsum.indexOf('speedy')!=-1) return 'sp'; //Speedy (probably)

if(edsum.indexOf('{{delete}}')!=-1) return 'sp'; //override group de below

//Other deletion-related (removal of text, delete votes, etc.

if(edsum.indexOf('(del')!=-1) return 'de';

if(edsum.indexOf('delete')!=-1) return 'de';

if(edsum.indexOf('(d)')!=-1) return 'de';

if(edsum.indexOf('(d ')!=-1) return 'de';

if(edsum.indexOf('(-')==0) return 'de'; // as in -link

//Marked as additions

if(edsum.indexOf('(add ')!=-1) return 'ad';

if(edsum.indexOf(' add ')!=-1) return 'ad';

if(edsum.indexOf('(add)')!=-1) return 'ad';

if(edsum.indexOf(' add)')!=-1) return 'ad';

if(edsum.indexOf('(+')==0) return 'ad'; // as in +1

//Probable XfD votes to keep

if(edsum.indexOf('(k)')!=-1) return 'ke';

if(edsum.indexOf('(keep')!=-1) return 'ke';

if(edsum.indexOf("'keep'")!=-1) return 'ke'; //for when the user just copies their

//vote to the summary; also produced by

//WikiVoter

//Votes somewhere to support

if(edsum.indexOf('(support')!=-1) return 'su';

//to oppose

if(edsum.indexOf('(oppose')!=-1) return 'op';

if(edsum.indexOf("{"+"{")!=-1) return 'ta'; //unknown, marked as a tag

if(edsum.length<=6) return 'ab'; //unknown abbreviation <=4 chars + parens

return 'uk'; //unknown

}

//The main function; this actually counts the edits. The section at the end displays

//the results.

$(function() {

if(location.href.indexOf("ais523count")!=-1&&location.href.indexOf("ais523countres")==-1)

{

// Counting edits. New, simpler jQuery version.

var contribs=$(".mw-contributions-title").length;

var contribsWithSummary=0;

var sortcount=[];

$(".comment").each(function(idx, element){

contribsWithSummary++;

var edsum=element.innerHTML;

edsum=ecAnalyseSummary(edsum);

if(edsum=='se')

{

//find the part beyond the last ""

edsum=element.innerHTML;

sumloc=edsum.lastIndexOf("");

edsum=edsum.substr(sumloc+8);

edsum=ecAnalyseSummary(edsum);

}

if(sortcount[edsum]===undefined) sortcount[edsum]=0;

sortcount[edsum]++;

});

var namespace=ecGetParamValue("namespace");

var scres="";

var scit;

for (scit in sortcount)

{

scres+="&cns"+namespace+scit+"="+sortcount[scit];

}

if(nextnamespace(namespace) !== null)

location.href=location.href.substr(0,location.href.lastIndexOf("namespace="))+

"countns"+namespace+"="+contribs+scres+"&countnosum"+namespace+"="+(contribs-contribsWithSummary)+"&namespace="+nextnamespace(namespace);

else

{

var lh=location.href;

location.href="//en.wikipedia.org/wiki/User:ais523/results?ais523countres="+lh+"&countns"+namespace+"="+contribs+scres+"&countnosum"+namespace+"="+(contribs-contribsWithSummary)

//You can use a page other than User:ais523/results as long as it's in the

//correct format.

}

}

else if(location.href.indexOf("ais523countres=")!=-1)

{ //This relies on the template page User:ais523/results being in the

//correct format.

document.getElementById("ais523echead").style.display="none";

$(".ais523ecbody").each(function(idx,element) {

var h=element.innerHTML;

// First replacement: loop over namespaces.

var hComponents = h.split("((pernamespace))");

for (var hci = 1; hci < hComponents.length; hci++) {

var hcc = hComponents[hci].split("((/pernamespace))");

var hcp = "";

for (var nsnum in namespaces) {

if (ecGetParamValue('countns'+nsnum) > 0)

hcp += hcc[0].split("((NSNUM))").join(nsnum).split("((NSNAME))").join(namespaces[nsnum])

}

hComponents[hci] = hcp + hcc[1]

}

h = hComponents.join("")

// Second replacement: substitute in individual results.

while(h.indexOf("((")!=-1)

{

var i=h.indexOf("((");

var f=h.substr(0,i);

var g=h.substr(i+2,h.indexOf("))")-i-2);

if(g.indexOf('#d')==0)

{ //delete unwanted lines to remove clutter

var j=h.indexOf("((/#d))");

var v=false;

j=h.substr(i+6,j-i-2);

while(j.indexOf("((")!=-1)

{

var ii=j.indexOf("((");

var gg=j.substr(ii+2,j.indexOf("))")-ii-2);

j=j.substr(ii+2);

gg=ecGetParamValue(gg);

if(gg!=null&&gg!=0&&gg!='0') v=true;

}

if(v) g="";

else {h=h.substr(h.indexOf("((/#d")); g="";}

}

else if(g.indexOf("/#d")==0)

g="";

else if(g.indexOf("total")==0)

{

g = 0;

for (var nsnum in namespaces)

g += new Number(ecGetParamValue('countns'+nsnum));

}

else if(g.indexOf("(")==-1)

g=ecGetParamValue(g);

if(g==null) g='0';

f+=g+h.substr(h.indexOf("))")+2);

h=f;

}

element.innerHTML=h;

});

}

});

//JavaScript diff finder. By User:ais523

$(function() {

if(location.href.indexOf("Special")!=-1&&location.href.indexOf("Contributions")!=-1)

{

ecAddTab("javascript:ais523l1000()","last 1000","ca-ais523sort","Random diffs from recent edits","");

ecAddTab("javascript:ais523l2000()","2000","ca-ais523sort","Random diffs from recent edits","");

}

if(location.href.indexOf("&ais523sort=last")!=-1)

window.setTimeout("ais523sort();",500); //work around IE bug

});

function ais523l1000()

{

var trg;

trg=ecGetParamValue('target');

if(trg==null) trg=location.href.substr(location.href.lastIndexOf("/")+1);

location.href="//en.wikipedia.org/w/index.php?title=Special:Contributions"+

"&limit=1000&target="+trg+"&ais523sort=last1000";

}

function ais523l2000()

{

var trg;

trg=ecGetParamValue('target');

if(trg==null) trg=location.href.substr(location.href.lastIndexOf("/")+1);

location.href="//en.wikipedia.org/w/index.php?title=Special:Contributions"+

"&limit=2000&target="+trg+"&ais523sort=last2000";

}

function ais523sort()

{

var s=document.body.innerHTML;

var re=/href="(\/w\/index\.php\?title=([^"/]*)((\/[^"]*)?)&diff=prev&oldid=[0-9]*)"/i;

var a=new Array();

var b=new Array();

var c=new Array();

var nc=new Array();

var d=new Array();

while(s.search(re)!=-1)

{

var m=s.match(re);

var m2="";

var q;

if(m[3]!='') m2=" subpages";

m[4]=decodeURIComponent(m[2])+m2;

m[5]=m2;

if(c[m[4]]==undefined) c[m[4]]=0;

if(c[m[4]]<10) q=c[m[4]];

else if(Math.random()<10/(c[m[4]]+1)) q=Math.floor(Math.random()*10);

else q=-1;

c[m[4]]++;

if(d[m[4]]==undefined) d[m[4]]=new Array();

if(q>-1) d[m[4]][q]=m;

s=s.substr(s.search(re)+2);

}

var i;

var j;

for(i in c)

{

if(c[i]<5)

{

for(j in d[i])

{

var ns="(main)";

var q;

if(d[i][j][4].indexOf(":")!=-1) ns=d[i][j][4].substr(0,d[i][j][4].indexOf(":"));

m=d[i][j];

m[2]="Others in namespace "+ns;

m[3]="";

m[4]=m[2];

m[5]="";

if(nc[m[4]]==undefined) nc[m[4]]=0;

if(nc[m[4]]<10) q=nc[m[4]];

else if(Math.random()<10/(nc[m[4]]+1)) q=Math.floor(Math.random()*10);

else q=-1;

nc[m[4]]++;

if(d[m[4]]==undefined) d[m[4]]=new Array();

if(q>-1) d[m[4]][q]=m;

}

}

}

for(i in d)

{

if(nc[i]!=undefined||c[i]>=5)

for(j in d[i])

{

var m=d[i][j];

m[2]=decodeURIComponent(m[2]);

if(a[m[4]]==undefined) a[m[4]]="*:"+m[2].split("_").join(" ")+""+m[5]+":";

if(b[m[4]]==undefined) b[m[4]]="

  • "+m[2].split("_").join(" ")+""+m[5]+":";

    a[m[4]]+=" [http://en.wikipedia.org"+m[1]+"]";

    b[m[4]]+=" ["+(new Number(j)+1)+"]";

    }

    }

    var e=0;

    for(i in c)

    {

    if(c[i]>=5)

    {

    a[i]+=(c[i]>10?"...":"")+" ("+c[i]+" edit(s))\n";

    b[i]+=(c[i]>10?"...":"")+" ("+c[i]+" edit(s))\n";

    if(c[i]>e) e=c[i]+1;

    }

    }

    for(i in nc)

    {

    if(nc[i]>=5)

    {

    a[i]+=(nc[i]>10?"...":"")+" ("+nc[i]+" edit(s))\n";

    b[i]+=(nc[i]>10?"...":"")+" ("+nc[i]+" edit(s))\n";

    }

    }

    var trg=ecGetParamValue('target');

    var h="

    Contribution breakdown for User:"+trg+"

    \n";

    h+="

    HTML output

      ";

      var j=e;

      while(--j>=5)

      {

      for(i in c)

      {

      if(c[i]==j) h+=b[i];

      }

      }

      for(i in nc) if(nc[i]>=5) h+=b[i];

      j=e;

      h+="

    \n

    Wikimarkup output

    ";

    while(--j>=5)

    {

    for(i in c)

    {

    if(c[i]==j) h+=a[i];

    }

    }

    for(i in nc) if(nc[i]>=5) h+=a[i];

    h+="";

    document.body.innerHTML=h;

    }

    // Log counter.

    function ais523log()

    {

    location.href="//en.wikipedia.org/w/index.php?title=Special:Log&type=&user="+

    document.getElementById('user').value+"&page=&limit=5000&offset=0&ais523log=count";

    }

    $(function() {

    if(location.href.indexOf("ais523log")!=-1&&location.href.indexOf("ais523logres")==-1)

    {

    var h=document.body.innerHTML;

    var i;

    var j=new Array();

    h=h.toLowerCase().split("

  • ");

    i=h.length;

    while(--i)

    {

    if(h[i].indexOf("block)")!=-1)

    h[i]=h[i].split("block)")[1];

    else

    h[i]=h[i].split("contribs)")[1];

    h[i]=h[i].split("<")[0].split('"').join("").split(" ").join("");

    if(h[i]==""&&i+1==h.length) h[i]="newuseraccount";

    else if(h[i]=="") h[i]="renamed"; //renames and original account creation are both ""

    if(j[h[i]]==null||j[h[i]]==undefined) j[h[i]]=0;

    j[h[i]]++;

    }

    h="";

    for(i in j)

    h+=""+i+""+j[i]+"";

    location.href="//en.wikipedia.org/wiki/User:ais523/logresults?ais523logres="+

    encodeURIComponent(h);

    }

    else if(location.href.indexOf("ais523logres")!=-1)

    document.getElementById("ais523ecbody").innerHTML=

    "

    "+decodeURIComponent(ecGetParamValue('ais523logres'))+"
    ";

    else if(mw.config.get('wgPageName')=="Special:Log")

    ecAddTab("javascript:ais523log()","count","ca-ais523log","Count","");

    });

    // Contribution day/time counter

    $(function(){

    if(mw.config.get('wgPageName')=="Special:Contributions")

    ecAddTab("javascript:ais523dtc()","day/time","ca-ais523dtc","Summarizes what times on what days this editor edits","");

    });

    var ais523dtc_counts=null;

    var ais523dtc_max=0;

    var ais523dtc_rschn=false;

    var ais523dtc_prog=0;

    var ais523drc_sg=false;

    var ais523dtc_nybbles=['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'];

    function ais523dtc_v(n)

    {

    if(ais523dtc_max

    {

    ais523dtc_max=n;

    ais523dtc_rschn=true;

    }

    var f=n/ais523dtc_max;

    var r=0, g=0;

    if(f<1/3) g=Math.floor(f*3*255);

    else if(f<2/3) {g=255; r=Math.floor((f*3-1)*255);}

    else {r=255; g=Math.floor((3-f*3)*255);}

    return ais523dtc_nybbles[Math.floor(r/16)]+ais523dtc_nybbles[r%16]+

    ais523dtc_nybbles[Math.floor(g/16)]+ais523dtc_nybbles[g%16]+"00";

    }

    function ais523dtcStep(xmlreq,data)

    {

    var trg;

    trg=ecGetParamValue('target');

    if(trg==null) trg=location.href.substr(location.href.lastIndexOf("/")+1);

    var a=xmlreq.responseText.split('timestamp="')

    var i=a.length;

    ais523dtc_prog+=i-1;

    while(--i)

    {

    var q=a[i].split('"')[0];

    var d=new Date();

    d.setUTCFullYear(+q.substr(0,4));

    d.setUTCMonth((+q.substr(5,2))-1);

    d.setUTCDate(+q.substr(8,2));

    var wday=d.getUTCDay();

    var hper=4*+q.substr(11,2)+Math.floor((+q.substr(14,2))/15);

    document.getElementById('a5w'+wday+'q'+hper).style.backgroundColor=

    "#"+ais523dtc_v(++ais523dtc_counts[wday*96+hper]);

    }

    if(ais523dtc_rschn)

    {

    ais523dtc_rschn=false;

    var wday=7;

    while(wday--)

    {

    var hper=96;

    while(hper--)

    document.getElementById('a5w'+wday+'q'+hper).style.backgroundColor=

    "#"+ais523dtc_v(ais523dtc_counts[wday*96+hper]);

    }

    }

    document.getElementById('a5dtcp').innerHTML=ais523dtc_prog;

    document.getElementById('a5dtck1').innerHTML=Math.floor(ais523dtc_max/3);

    document.getElementById('a5dtck2').innerHTML=Math.floor(2*ais523dtc_max/3);

    document.getElementById('a5dtck3').innerHTML=ais523dtc_max;

    if(xmlreq.responseText.indexOf("query-continue")==-1) // finished

    {

    ais523dtc_sg=true;

    document.getElementById('a5dtco').innerHTML='(finished)';

    return;

    }

    aecwpajax.download({url:'//en.wikipedia.org/w/api.php?action=query&list=usercontribs&'+

    'ucuser='+encodeURIComponent(trg)+'&ucprop=timestamp&format=xml&uclimit=100&ucstart='+

    xmlreq.responseText.split('ucstart="')[1].split('"')[0],onSuccess:ais523dtcStep});

    }

    function ais523dtcook(xmlreq,data)

    {

    if(!ais523dtc_sg) return;

    document.getElementById('a5dtco').innerHTML="(out of an overestimated "+

    xmlreq.responseText.split('editcount="')[1].split('"')[0]+")";

    }

    function ais523dtc()

    {

    var trg;

    trg=ecGetParamValue('target');

    if(trg==null) trg=location.href.substr(location.href.lastIndexOf("/")+1);

    var h="

    ";

    var i=0;

    while(i<24) h+="

    "

    h+="

    "; i=0; while(i<96) h+="";

    h+="

    "; i=0; while(i<96) h+="";

    h+="

    "; i=0; while(i<96) h+="";

    h+="

    "; i=0; while(i<96) h+="";

    h+="

    "; i=0; while(i<96) h+="";

    h+="

    "; i=0; while(i<96) h+="";

    h+="

    "; i=0; while(i<96) h+="";

    h+="

      "+i++ +"
    Sun
    Mon
    Tue
    Wed
    Thu
    Fri
    Sat
    Processed 0 edits so far ";

    h+=". Key: 0 edits, ";

    h+="0 edits, ";

    h+="0 edits, ";

    h+="0 edits.

    ";

    document.getElementById('contentSub').innerHTML=h;

    if(ais523dtc_counts==null) ais523dtc_counts=new Array();

    ais523dtc_max=null;

    ais523dtc_prog=0;

    ais523dtc_sg=true;

    i=7*96; while(i--) ais523dtc_counts[i]=0;

    aecwpajax.download({url:'//en.wikipedia.org/w/api.php?action=query&list=usercontribs&'+

    'ucuser='+encodeURIComponent(trg)+'&ucprop=timestamp&format=xml&uclimit=100',

    onSuccess:ais523dtcStep});

    aecwpajax.download({url:'//en.wikipedia.org/w/api.php?action=query&list=users&ususers='

    +encodeURIComponent(trg)+'&usprop=editcount&format=xml', onSuccess:ais523dtcook});

    }

    //