MediaWiki:Gadget-mark-disambigs.js

Матеріал з Вікіпедія

Позначка: По уложіню мусите вымазати кеш вашого перезерача, інакше зміны не будете видїти. Mozilla / Firefox / Safari: При кликнутю на Актуалізовати тримайте Shift, або стиснийте Ctrl-F5 або Ctrl-R (на Macintosh Command-R); Opera: Вымажте обсяг кеш в меню Інштрументы → Наставлїня; Internet Explorer: При кликнутю на Актуалізовати тримайте Ctrl, або стиснийте Ctrl-F5.

// z [[:pl:MediaWiki:Gadget-mark-disambigs.js]]
 
// expose to window as its used by jsonp so needs to be global
window.markDisambigsGadget = {
	pageLoaded:	false,
	dataLoaded:	false,
	disambig:	{},
	uniqueLinks:	0,
	links:	0
};

 
markDisambigsGadget.request = function(clcontinue) {
	var query = {
		action:	'query',
		titles:	mw.config.get('wgPageName'),
		prop:	'categories',
		cllimit:	'max',
		gpllimit:	'max',
		generator:	'links',
		callback:	'markDisambigsGadget.processResponse',
		requestid:	new Date().getTime()
	};
	if (clcontinue) {
		query['clcontinue'] = clcontinue;
	}
	beau$callAPI(query);
}
 
markDisambigsGadget.isDisambig = function(categories) {
	for (var key in categories) {
		if (categories[key].title == 'Kategória:Rozlišovacie stránky')
			return true;
	}
	return false;
}
 
markDisambigsGadget.processResponse = function(data) {
	if (! data.query)
		return;
 
	document.data = data;
	for (var pageid in data.query.pages) {
		var page = data.query.pages[pageid];
		if (page.categories && this.isDisambig(page.categories))
		{
			if (this.disambig[page.title])
				continue;
 
			this.disambig[page.title] = true;
			this.uniqueLinks++;
		}
	}
 
	if (data['query-continue'] && data['query-continue']['categories']) {
		this.request(data['query-continue']['categories']['clcontinue'])
	}
	else if (this.pageLoaded)
		this.doColor();
	else
		this.dataLoaded = true;
}
 
markDisambigsGadget.doColor = function() {
	if (! this.uniqueLinks)
		return;
 
	var links = document.getElementsByTagName('a');
	this.disambig['Wikipédia:Rozlišovacia stránka'] = false;
	for (var i = 0; i < links.length; i++)
	{
		var link = links[i];
 
		if (this.disambig[link.title]) {
			this.links++;
			if (link.text == 'rozlišovacia stránka')
				continue;
 
			if (link.parentNode && link.parentNode.className.match(/\bdisambig\b/))
				continue;
 
			link.className = 'mw-disambig';
		}
	}
}
 
 
markDisambigsGadget.init = function() {
	this.pageLoaded = true;
	if (this.dataLoaded)
		this.doColor();
}
 
if (mw.config.get('wgNamespaceNumber') >= 0 && mw.config.get('wgAction') == 'view' && !document.location.href.match(/printable=yes/)) {
 
	markDisambigsGadget.request();
	$(document).ready(function() { markDisambigsGadget.init() });
}