Користувач:Gvozdet/common.js

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Увага: Після публікування слід очистити кеш браузера, щоб побачити зміни.

  • Firefox / Safari: тримайте Shift, коли натискаєте Оновити, або натисніть Ctrl-F5 чи Ctrl-Shift-R (⌘-R на Apple Mac)
  • Google Chrome: натисніть Ctrl-Shift-R (⌘-Shift-R на Apple Mac)
  • Internet Explorer / Edge: тримайте Ctrl, коли натискаєте Оновити, або натисніть Ctrl-F5
  • Opera: натисніть Ctrl-F5
(function () {
	
var userSet = {
	'A' : ['Aced', 'Amakuha', 'Antanana', 'Atoly', 'Brunei', 'Deineka', 'DixonD', 'Fessor', 'Geohem', 'Goo3', 'Green Zero', 'Helgi', 'Helixitta', 'Kholodovsky', 'Krupolskiy Anonim', 'Krystofer', 'Leonst', 'Lystopad', 'MaryankoD', 'Mr.Rosewater', 'NickK', 'Nina Shenturk', 'Olmi', 'Piramidion', 'RLuts', 'ReAl', 'Sergento', 'SteveR', 'Tigga', 'VictorAnyakin', 'Visem', 'Yakudza', 'YarikUkraine', 'Ykvach', 'Анатолій Мітюшин', 'Андрій Гриценко', 'Вальдимар', 'Стефанко1982']
};

function addCSS(css) {
	var styleElem = document.createElement('style');
	styleElem.appendChild(document.createTextNode(css));
	document.getElementsByTagName('head')[0].appendChild(styleElem);
}

function markadmins($content) {
	if (!$content.length) return;
	runNum++;
	if (runNum === 1) {
		addCSS('\
			tt.userflags { color:#0645ad; }\
			.userflags-wrapper { -moz-user-select:none; }\
		');
	}

	var $links = $content.find('a[title^="Користувач"], a[title^="Обговорення користувача"]');

	if (runNum === 2) {
		if ($links.length === prevLinksCount) {
			return;
		} else {
			if ($links.length > prevLinksCount) {
				$links = $links.slice(prevLinksCount);
			} else {
				var msg = 'MediaWiki:Gadget-markadmins.js: Нестандартная ситуация: количество ссылок на втором проходе (' + $links.length + ') меньше, чем на первом (' + prevLinksCount + '). Снова обходим все ссылки.';
				if (console.info) {
					console.info(msg);
				} else {
					console.log(msg);
				}
			}
		}
	}

	$links.each(function (i, link) {
		if (/[?#]/.test(link.href) && link.href.indexOf('redlink=1') === -1 ||
				link.parentElement.className === 'cancelLink') {
			return;
		}

		var matches, user, flags = [], tips = [], flag;
		matches = /^Користувач(?:ка):(.+)|Обговорення користувач(?:а|ки):(.+)/.exec(link.title);
		if (!matches) return;
		if (matches[2] && users_talkLinkOnly.indexOf(matches[2]) !== -1) {
			if ($(link).parent().hasClass('mw-usertoollinks') || link.textContent.match(/обс/i)) return;
			matches[1] = matches[2];
		} else if (!matches[1]) {
			return;
		}

		user = decodeURIComponent(matches[1]);
		if (link.href.indexOf('redlink=1') !== -1) {
			user = user.replace(/ \([^\)]+\)$/, '');
		}

		if ($.inArray(user, userSet['A']) !== -1) {
			flags.push('A');
			tips.push('адміністратор');
		}
		if (!flags.length) return;

		tips = ' (' + tips.join(', ') + ')';

		// Без jQuery здесь общее ускорение вдвое
		var spanElem = document.createElement('span');
		spanElem.className = 'userflags-wrapper';
		var nbspElem = document.createTextNode('\u00A0');
		var ttElem = document.createElement('tt');
		ttElem.className = 'userflags';
		ttElem.title = tips;
		var flagsElem = document.createTextNode('(' + flags.join(',') + ')');

		ttElem.appendChild(flagsElem);
		spanElem.appendChild(nbspElem);
		spanElem.appendChild(ttElem);

		link.parentNode.insertBefore(spanElem, link.nextSibling);
		link.title = link.title + tips;
	});

	prevLinksCount = $links.length;
}

var runNum = 0;
var prevLinksCount;
markadmins($('#mw-content-text'));
mw.hook('wikipage.content').add(markadmins);

}());