MediaWiki:Gadget-show-ip-blocks.js

Fra Wikipedia, den frie encyklopedi

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 - 2015
//
 
var cbDaysToCheck = 60;
var cbCache = [];

function cb_inArray(arrobj, findobj) {
	if (!arrobj || !findobj) { return null; }
	for (var i=0; i<arrobj.length; i++) {
		if (findobj == arrobj[i]) { return i; }
	}
}
 
// 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 checkBlocks() {
	$("a.mw-userlink").each(function(){
		var test = $(this).attr("title");
		if (!(test === undefined)) {
			var named_user = test.indexOf("Bruker:");
			var username = "";
			if (!named_user) {
				var len = test.length;
				if (test.indexOf(" (siden finnes ikke)")>=0) {
					len = len - 20;
				}
				username = test.substring(7,len);
			} else {
				var unnamed_user = test.indexOf("Spesial:Bidrag/");
				if (!unnamed_user) {
					username = test.substring(15,test.length);
				}
			}
			// Have we seen this user before?
			if (cb_inArray(cbCache, username) === undefined) {
				// So, it's a new one. Let's mark it.
				cbCache[cbCache.length] = username;
				// And let's look it up
				$.getJSON( mw.util.wikiScript( 'api' ), {
					action:'query',
					format:'json',
					list:'logevents',
					letype:'block',
					maxage:'3600',
					smaxage:'3600',
					lelimit:'1',
					rawcontinue:'1',
					letitle:'User:' + username
		 
				}, function(data){
					var stuff = data;
					if (data === undefined) { 
						stuff = this;
					}
					if (stuff.query) {
						cb_colorLogAction(stuff, username);
					}			
				});
			}
		}
	});
}

function cb_colorLogAction(jobj, objectname) {
	$("a.mw-userlink").each(function(){
		var test = $(this).attr("title");
		if (!(test === undefined)) {
			var named_user = test.indexOf("Bruker:");
			var username = "";
			if (!named_user) {
				len = test.length;
				if (test.indexOf(" (siden finnes ikke)")>=0) {
					len = len - 20;
				}
				username = test.substring(7,len);
			} else {
				var unnamed_user = test.indexOf("Spesial:Bidrag/");
				if (!unnamed_user) {
					username = test.substring(15,test.length);
				}
			}
			if (username.indexOf(objectname)==0) {
				//There has been a blocking/unblocking action, so let's color accordingly to the time since the last action
				if (!jobj.query.logevents[0]) { return; }
				var ts = jobj.query.logevents[0].timestamp;
				var date = new Date();
				var tsDate = new Date();
				tsDate.setISO8601(ts);
				var tdiff = date - tsDate;
				var interval = (cbDaysToCheck*24*60*60*100);
				var intervaladd = interval;
				var colorval = -1;
				for (var i=0;i<10;i++) {
					if (tdiff<intervaladd) {
						colorval = i;
						break;
					} else {
						intervaladd += interval;
					}
				}
				$(this).addClass('trust'+colorval);
			}
		}
	});
}

if ((mw.config.get( 'wgCanonicalSpecialPageName' )=='Recentchanges') || (mw.config.get( 'wgCanonicalSpecialPageName' )=='Watchlist') || (mw.config.get( 'wgAction' )=='history')) {
  $(checkBlocks);
}