MediaWiki:Gadget-show-possible-voters.js
Merk: Etter publisering vil det kanskje være nødvendig å slette mellomlageret i nettleseren din for å se endringene.
- Firefox / Safari: Hold Shift mens du klikker på Oppdater, eller trykk enten Ctrl+F5 eller Ctrl+R (⌘+R på Mac)
- Google Chrome: Trykk Ctrl+Shift+R (⌘+Shift+R på Mac)
- Internet Explorer / Edge: Hold Ctrl mens du trykker på Oppdater eller trykk Ctrl+F5
- Opera: Ttrykk Ctrl+F5.
// This is a big nasty javascript .. use with care..
//
// By [[:no:Bruker:Stigmj]] - 2008
//
(function(){
var cauDaysToCheck = 60;
var cauCache = [];
var cauCacheNum = [];
var cauCacheTs = [];
var cauShowDone = null;
var cauCount = 0;
function cau_inArray(arrobj, findobj) {
if (!arrobj || !findobj) { return null; }
for (var i=0; i<arrobj.length; i++) {
if (findobj == arrobj[i]) { return i; }
}
return null;
}
// Copyright Paul Sowden
// Used by permission under AFL
// Originally from: http://delete.me.uk/2005/03/iso8601.html
Date.prototype.setISO8601 = function (string) {
var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
"(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" +
"(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
var d = string.match(new RegExp(regexp));
var offset = 0;
var date = new Date(d[1], 0, 1);
if (d[3]) { date.setMonth(d[3] - 1); }
if (d[5]) { date.setDate(d[5]); }
if (d[7]) { date.setHours(d[7]); }
if (d[8]) { date.setMinutes(d[8]); }
if (d[10]) { date.setSeconds(d[10]); }
if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); }
if (d[14]) {
offset = (Number(d[16]) * 60) + Number(d[17]);
offset *= ((d[15] == '-') ? 1 : -1);
}
offset -= date.getTimezoneOffset();
var time = (Number(date) + (offset * 60 * 1000));
this.setTime(Number(time));
};
function checkActiveUsers() {
// alert('checkActiveUsers1');
var docobj = document.getElementById('bodyContent') || document.getElementById('mw_contentholder') || document.getElementById('content') || document.getElementsByTagName('body')[0];
if (docobj) {
//alert('checkActiveUsers2');
cau_processUsers(null, null);
}
}
function cau_get_handler(obj) {
var r = obj;
if (r.query) {
// Go through all logevents
var tsDate, date, ts;
for (var i=0; i<r.query.recentchanges.length; i++) {
//Check the timestamp
ts = r.query.recentchanges[i].timestamp;
tsDate = new Date();
tsDate.setISO8601(ts);
date = new Date();
date.setDate(date.getDate()-cauDaysToCheck);
if (tsDate>date) {
//We are still newer than the limit, so now let's go through the cache
var cachePos = null;
cachePos = cau_inArray(cauCache, r.query.recentchanges[i].user);
if (cachePos === null) {
// Didn't find it the cache, so let's make room for it.
cachePos = cauCache.length;
cauCacheNum[cachePos] = 0;
// And record the name.
cauCache[cachePos] = r.query.recentchanges[i].user;
}
// Now let's inc the numbers and record the timestamp
cauCacheNum[cachePos]++;
cauCacheTs[cachePos] = ts;
}
}
if (!r['query-continue']) {
//alert('first');
cau_showResults();
return;
}
// So, we have more results, but check the date first
tsDate = new Date();
tsDate.setISO8601(r['query-continue'].recentchanges.rcstart);
//$('#possible-voters-gadget').append(r['query-continue'].recentchanges.rcstart + ' ');
date = new Date();
date.setDate(date.getDate()-cauDaysToCheck);
if (tsDate>date) {
// We are still newer than the limit, so let's get some more.
cau_processUsers(r['query-continue'].recentchanges.rcstart);
} else {
//alert('second');
cau_showResults();
}
}
}
function cau_processUsers(from) {
cauCount++;
//$('#possible-voters-gadget').append('[' + cauCount + '] ');
var url = mw.util.wikiScript('api') + '?';
if (from) {
url = url + '&rcstart=' + from;
}
try {
$.getJSON(
url,
{ action: 'query',
list: 'recentchanges',
rcshow: '!bot|!anon',
rcprop: 'user|timestamp',
rclimit: '500',
format: 'json'
},
cau_get_handler
);
} catch(e) {
//alert('exception:' + e.message);
}
}
function cau_showResults() {
if (!cauShowDone) {
cauShowDone = 1;
//$('h1').append('['+cauCount+']');
// Do some sorting
//Make a new table of concatenated values
var sorTable = [];
for (var i=0, j=0; i<cauCache.length; i++) {
if (cauCacheNum[i] >= 30) { sorTable[j++] = cauCache[i] + ';' + cauCacheNum[i] + ';' + cauCacheTs[i]; }
}
// Sort the new table
sorTable.sort();
// And put it in place again:
cauCache = []; cauCacheNum = []; cauCacheTs = [];
for (var i=0; i<sorTable.length; i++) {
var tArr = sorTable[i].split(';',3);
cauCache[i] = tArr[0];
cauCacheNum[i] = tArr[1];
cauCacheTs[i] = tArr[2];
}
// I guess we are finished?
var docobj = document.getElementById('bodyContent') || document.getElementById('mw_contentholder') || document.getElementById('content') || document.getElementsByTagName('body')[0];
var header = new Array('Navn','Bidrag','Første bidrag');
// Create a table object
var table = document.createElement('table');
table.setAttribute('class', 'wikitable sortable')
var thead = document.createElement('thead');
var tbody = document.createElement('tbody');
var hr = document.createElement('tr');
for (var i=0; i<header.length; i++) {
var tc = document.createElement('th');
tc.appendChild(document.createTextNode(header[i]));
hr.appendChild(tc);
}
thead.appendChild(hr);
table.appendChild(thead);
table.appendChild(tbody);
docobj.appendChild(table);
for(var i=0;i<cauCache.length;i++) {
hr = document.createElement('tr');
var tc = document.createElement('td');
tc.style.backgroundColor = '#cccccc';
tc.appendChild(document.createTextNode(cauCache[i]));
hr.appendChild(tc);
tc = document.createElement('td');
tc.appendChild(document.createTextNode(cauCacheNum[i]));
hr.appendChild(tc);
tc = document.createElement('td');
tc.appendChild(document.createTextNode(cauCacheTs[i]));
hr.appendChild(tc);
tbody.appendChild(hr);
}
//$('#possible-voters-gadget').append(table);
}
}
if (mw.config.get('wgPageName')=='Wikipedia:Avstemninger/Stemmeberettigede/Status') {
jQuery( document ).ready(checkActiveUsers);
}
})();