User:Ais523/contribcalendar.js

// Contributions calendar script (User:ais523/contribcalendar.js).

//

// 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 (use your username instead of mine!), or //  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:; 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+="|"+i.substr(8,2)+       " \n";    curday++;    if(curday==7)    {      a+="|-\n"; curday=0; } }  a+='|- style="background:#CCCCFF"\n'+ '|colspan="7"|Updated '+ ' \n'+ '|-\n'; a+="|01 \n"; a+="|05 \n"; a+="|10 \n"; a+="|25 \n"; a+="|50 \n"; a+="|75 \n"; a+="|99 \n"; a+='|}'; document.editform.wpTextbox1.value=a; document.editform.wpMinoredit.checked="checked"; document.editform.wpSummary.value= "Updating contributions calendar using 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",""); });

// //