// Contributions calendar script ([[User:ais523/contribcalendar.js]]).
// <pre><nowiki>
// To use, install this script, and update the calendar by clicking the 'calendar' tab
// whilst viewing your userpage. It creates a user subpage for you (in 'Show Preview'
// mode, so you can choose not to save it if you don't like it). If you do this on
// someone else's userpage, it will create a calendar as a subpage for them (so don't
// do it there without permission). You can place the calendar on your userpage by
// typing {{User:ais523/ContribCalendar}} (use your username instead of mine!), or
// {{User:ais523/ContribCalendar|left}} if you want it left-aligned rather than
// right-aligned. Script idea suggested by [[User:Casmith 789]].
var ccwpajax;
// From [[WP:US]] mainpage (wpajax renamed to ccwpajax)
ccwpajax={
download:function(bundle) {
// mandatory: bundle.url
// optional: bundle.onSuccess (xmlhttprequest, bundle)
// optional: bundle.onFailure (xmlhttprequest, bundle)
// optional: bundle.otherStuff OK too, passed to onSuccess and onFailure
var x = window.XMLHttpRequest ? new XMLHttpRequest()
: window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP")
: false;
if (x) {
x.onreadystatechange=function() {
x.readyState==4 && ccwpajax.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));
}
};
// Example:
// function dlComplete(xmlreq, data) {
// alert(data.message + xmlreq.responseText);
// }
// ccwpajax.download({url:'http://en.wikipedia.org/w/index.php?title=Thresher&action=raw',
// onSuccess: dlComplete, message: "Here's what we got:\n\n" });
// End of [[WP:US]] quote
function ccinterpolate(n,x,l,h,v)
{
return Math.round(((v-n)/(x-n))*h+((x-v)/(x-n))*l);
}
function contribcolor(c)
{
var r,g,b;
//1 is #CCCCCC (#CC is 204)
//10 is #FF8080 (#FF is 255)
//50 is #8080FF (#80 is 128)
//100 is #80FF80
if(c<10) {r=ccinterpolate(1,10,204,255,c); g=ccinterpolate(1,10,204,128,c); b=g;}
else if(c<50) {r=ccinterpolate(10,50,255,128,c); b=128; g=383-r;}
else {g=ccinterpolate(50,100,255,128,c); r=128; b=383-g;}
if(r>255) r=255; if(g>255) g=255; if(b>255) b=255;
var nybbles=new Array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
return nybbles[Math.floor(r/16)]+nybbles[r%16]+
nybbles[Math.floor(g/16)]+nybbles[g%16]+
nybbles[Math.floor(b/16)]+nybbles[b%16];
}
function rendercalen(xmlreq,data)
{
var a=xmlreq.responseText;
a=a.split(/timestamp="/i);
var i;
var t=new Array();
i=a.length;
while(--i) //loop backwards, skip element 0
{
a[i]=a[i].substr(0,a[i].indexOf('T'));
if(t[a[i]]==undefined) t[a[i]]=0;
t[a[i]]++;
}
// This basically generates something similar to
// [[Template:OctoberCalendar2006Source]], designed to be transcluded onto a userpage.
a='{| class="toccolours" style="float:{{{1|right}}}; margin-left: 1em; '+
'text-align:center;" cellpadding=2 cellspacing=0\n';
a+='|- style="background:#CCCCFF;"\n'+
'|colspan="7"|Contributions\n';
a+='|- style="background:#CCCCFF;"\n'+
'|width="14%"| Su\n'+
'|width="14%"| Mo\n'+
'|width="14%"| Tu\n'+
'|width="14%"| We\n'+
'|width="14%"| Th\n'+
'|width="14%"| Fr\n'+
'|width="14%"| Sa\n'+
'|-\n';
var curdate="";
var curday=0;
var flg=0;
var d=new Date();
var od=d;
for(i in t)
{
d.setUTCFullYear(i.substr(0,4),new Number(i.substr(5,2))-1,i.substr(8,2));
if(d-od>new Date(2006,1,8)-new Date(2006,1,1)) flg=7;
od=d;
while(curday!=d.getUTCDay()||flg)
{
curday++;
a+='| \n';
if(curday==7)
{
a+="|-\n";
curday=0;
}
if(flg) flg--;
}
a+="|<span style='background-color:#"+contribcolor(t[i])+"'>"+i.substr(8,2)+
"</span>\n";
curday++;
if(curday==7)
{
a+="|-\n";
curday=0;
}
}
a+='|- style="background:#CCCCFF"\n'+
'|colspan="7"|Updated [[{{subst:CURRENTMONTHNAME}} {{subst:CURRENTDAY}}]]'+
' [[{{subst:CURRENTYEAR}}]]\n'+
'|-\n';
a+="|<span style='background-color:#"+contribcolor( 1)+"'>01</span>\n";
a+="|<span style='background-color:#"+contribcolor( 5)+"'>05</span>\n";
a+="|<span style='background-color:#"+contribcolor(10)+"'>10</span>\n";
a+="|<span style='background-color:#"+contribcolor(25)+"'>25</span>\n";
a+="|<span style='background-color:#"+contribcolor(50)+"'>50</span>\n";
a+="|<span style='background-color:#"+contribcolor(75)+"'>75</span>\n";
a+="|<span style='background-color:#"+contribcolor(99)+"'>99</span>\n";
a+='|}';
document.editform.wpTextbox1.value=a;
document.editform.wpMinoredit.checked="checked";
document.editform.wpSummary.value=
"Updating contributions calendar using [[WP:US|user scripts]]";
document.editform.wpPreview.click();
}
function contribcalendar()
{
var wgpn=mw.config.get('wgPageName');
if(wgpn.indexOf("/")!=-1) wgpn=wgpn.substr(0,wgpn.indexOf("/"));
location.href="http://en.wikipedia.org/w/index.php?title="+wgpn+
"/ContribCalendar&action=edit&rendercc="+wgpn;
}
// Contrib calendar update
$(function() {
if(location.href.indexOf("&rendercc=")!=-1)
ccwpajax.download({url:'http://en.wikipedia.org/w/query.php?what=usercontribs&'+
'titles='+location.href.substr(location.href.indexOf("&rendercc=")+10)+
'&uclimit=500&format=xml', onSuccess:rendercalen});
else if(mw.config.get('wgNamespaceNumber')==2)
mw.util.addPortletLink('p-cactions',"javascript:contribcalendar();","calendar","ca-calen","Contrib calendar","");
});
// </nowiki></pre>
//[[Category:Wikipedia scripts]]