CSS and Javascript changes must comply with the wiki design rules.
Note: After saving, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Clear the cache in Tools → Preferences
// Author: pcj
mw.loader.using('mediawiki.api').then(function() {
if (mw.config.get("wgNamespaceNumber") != 202) return;
var user = mw.config.get("wgPageName").slice(12);
var a = new mw.Api();
var startDate = new Date(new Date().setFullYear(new Date().getFullYear() - 1)).toISOString();
var contribs = [];
var dateContribs = [];
var testDate = startDate;
while (testDate.slice(0,10) <= new Date().toISOString().slice(0,10)) {
dateContribs.push({date:testDate.slice(0,10),contribs:0});
testDate = new Date(new Date(testDate).getTime() + 86400000).toISOString();
}
function findIndex(date) {
for (var i in dateContribs) {
if (dateContribs[i].date == date) return i;
}
return -1;
}
function processData() {
for (var c in contribs) {
dateContribs[findIndex(contribs[c].timestamp.slice(0,10))].contribs++;
}
var numWeeks = dateContribs.length / 7;
var gridOutput = "";
var urlBase = '/index.php?title=Special%3AContributions&contribs=user&target='+encodeURIComponent(user.replace(/ /g,'_'))+'&start=';
for (d=0;d<dateContribs.length;d++) {
da = dateContribs[d];
var dayNum = new Date(da.date).getUTCDay() + 1;
var weekNum = Math.floor((new Date(da.date).getTime() - new Date(dateContribs[0].date).getTime())/(1000*60*60*24*7)) + 1 + ((dayNum < (new Date(dateContribs[0].date).getUTCDay() + 1))?1:0);
var bgColor = "#9999997d";
if (da.contribs > 0) bgColor = "#F3B67D";
if (da.contribs > 10) bgColor = "#F3B679";
if (da.contribs > 20) bgColor = "#F39A48";
if (da.contribs > 30) bgColor = "#F37F20";
gridOutput += '<a title="'+da.date+': '+da.contribs+'" style="background-color:'+bgColor+'; grid-area:'+dayNum+' / '+weekNum+' / '+(dayNum+1)+' / '+(weekNum+1)+';" href="'+urlBase+da.date+'&end='+da.date+'"></a>';
}
$("#gridOutput").css({
"display":"grid",
"grid-gap":"2px",
"grid-template":"repeat(7,1fr) / repeat("+Math.ceil(numWeeks)+",1fr)"
});
$("#gridOutput").html(gridOutput);
}
function getData(uccontinue) {
if ($("#gridOutput").length == 0) $(".curseprofile .activity").after('<div class="contribution-grid section"><h3>Contribution grid</h3><div id="gridOutput" style="width:100%; height:120px;">Loading...</div></div>');
params = {action:"query",list:"usercontribs",ucuser:user,ucend:startDate,uclimit:"max"};
if (uccontinue !== "") params.uccontinue = uccontinue;
a.get(params).done(function (data) {
contribs = contribs.concat(data.query.usercontribs);
if (data["continue"] !== undefined) {
if (data["continue"].uccontinue !== undefined) {
getData(data["continue"].uccontinue);
return;
}
}
processData();
});
}
getData("");
});