User:Ais523/editcountdev.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
Documentation for this user script can be added at User:Ais523/editcountdev. |
//Please leave this link: [[User:ais523/editcount.js]]
//<pre><nowiki>
//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('(<a href="/w')===0) return 'li'; //edit summary was a link
if(edsum.indexOf("(<a href='/w")===0) return 'li'; //edit summary was a link
if(edsum.indexOf('(<a href=/w')===0) return 'li'; //edit summary was a link
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 "</span>"
edsum=element.innerHTML;
sumloc=edsum.lastIndexOf("</span>");
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/resultsdev?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]]="<li><a href='//en.wikipedia.org/wiki/"+
m[2]+"'>"+m[2].split("_").join(" ")+"</a>"+m[5]+":";
a[m[4]]+=" [http://en.wikipedia.org"+m[1]+"]";
b[m[4]]+=" <a href='http://en.wikipedia.org"+m[1]+"'>["+(new Number(j)+1)+"]</a>";
}
}
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="<h1>Contribution breakdown for <a href='//en.wikipedia.org/wiki/User:"+trg;
h+="'>User:"+trg+"</a></h1>\n";
h+="<h2>HTML output</h2><ul>";
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+="</ul>\n<h2>Wikimarkup output</h2><pr"+"e>";
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+="</p"+"re>";
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("<li>");
i=h.length;
while(--i)
{
if(h[i].indexOf("block</a>)")!=-1)
h[i]=h[i].split("block</a>)")[1];
else
h[i]=h[i].split("contribs</a>)")[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+="<tr><td>"+i+"</td><td>"+j[i]+"</td></tr>";
location.href="//en.wikipedia.org/wiki/User:ais523/logresults?ais523logres="+
encodeURIComponent(h);
}
else if(location.href.indexOf("ais523logres")!=-1)
document.getElementById("ais523ecbody").innerHTML=
"<table>"+decodeURIComponent(ecGetParamValue('ais523logres'))+"</table>";
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<n)
{
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="<table class='wikitable'><tr><th> </th>";
var i=0;
while(i<24) h+="<th colspan=4>"+i++ +"</th>"
h+="</tr><tr><th>Sun</th>"; i=0; while(i<96) h+="<td id='a5w0q"+i++ +"'> </td>";
h+="</tr><tr><th>Mon</th>"; i=0; while(i<96) h+="<td id='a5w1q"+i++ +"'> </td>";
h+="</tr><tr><th>Tue</th>"; i=0; while(i<96) h+="<td id='a5w2q"+i++ +"'> </td>";
h+="</tr><tr><th>Wed</th>"; i=0; while(i<96) h+="<td id='a5w3q"+i++ +"'> </td>";
h+="</tr><tr><th>Thu</th>"; i=0; while(i<96) h+="<td id='a5w4q"+i++ +"'> </td>";
h+="</tr><tr><th>Fri</th>"; i=0; while(i<96) h+="<td id='a5w5q"+i++ +"'> </td>";
h+="</tr><tr><th>Sat</th>"; i=0; while(i<96) h+="<td id='a5w6q"+i++ +"'> </td>";
h+="</tr></table><div>Processed <span id='a5dtcp'>0</span> edits so far <span id='a5dtco'></span>";
h+=". Key: <span style='background-color:#000000'>0 edits, </span>";
h+="<span style='background-color:#00FF00'><span id='a5dtck1'>0</span> edits, </span>";
h+="<span style='background-color:#FFFF00'><span id='a5dtck2'>0</span> edits, </span>";
h+="<span style='background-color:#FF0000'><span id='a5dtck3'>0</span> edits.</span></div>";
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});
}
//</nowiki></pre>