MediaWiki:Gadget-QuickRollback.js

Nga Wikipedia, enciklopedia e lirë

Shënim: Pas ruajtjes së parapëlqimeve ose kryerjes së ndryshimet, për t'ju shfaqur dallimet duhet të pastroni ruajtësin (cache) e shfletuesit. Pastrimi i ruajtësit të shfletuesve bëhet duke shtypur në të njëjten kohë Ctrl+Shift+Reload për Mozilla/Safari/Konqueror ose ctrl+shift+r për IE ose Ctrl+f5 për Opera: F5.

// Author: Nardog
(mw.config.exists('wgDiffNewId') ||
mw.config.get('wgNamespaceNumber') === -1 ||
mw.config.get('wgAction') === 'history') &&
mw.loader.using([
	'mediawiki.api', 'mediawiki.util', 'user.options'
], function quickRollback() {
	[
		['rollback', 'Kthe ndryshimet'],
		['rollback-tooltip', 'Kthe versionin e përdoruesit të parafundit'],
		['rollingback', 'duke kthyer ndryshimet'],
		['rolledback', 'ndryshimet u kthyen'],
		['rolledback-tooltip', 'Ktheve ndryshimet te kjo faqe'],
		['prompt', 'Po kthen ndryshimet nga $1 te $2. Vendos përmbledhjen e redaktimit (me dëshirë):'],
		['custom-summary', 'U kthyen ndryshimet nga [[Special:Contributions/$1|$1]] ([[User talk:$1|diskutimet]]) duke përdorur QuickRollback: $2'],
		['custom-summary-anon', 'U kthyen ndryshimet nga [[Special:Contributions/$1|$1]] duke përdorur QuickRollback: $2'],
		['notification', 'U kthyen ndryshimet nga $1 ($2).'],
		['talk', 'diskutimet'],
		['diff-link', 'Hap ndryshimet në një faqe tjetër'],
		['error-rollback', 'Ndryshimet nuk mund të ktheheshin.'],
		['error-get-user', 'Nuk mund të gjendej përdoruesi i fundit.'],
		['error-find-title', 'Nuk mund të gjendet titulli i faqes.'],
	].forEach(function (entry) {
		var key = 'quickrollback-' + entry[0];
		if (!mw.messages.exists(key)) mw.messages.set(key, entry[1]);
	});
	mw.loader.addStyleTag('.quickrollback-done + .quickaccept{display:none}');
	var isPc = mw.config.get('wgCanonicalSpecialPageName') === 'PendingChanges';
	function handler(e) {
		e.preventDefault();
		var $link = $(this);
		var $wrapper = $link.parent();
		var title;
		if (isPc) {
			$wrapper.parent().prevAll('a').each(function () {
				if (mw.util.getParamValue('action', this.search) === 'history') {
					title = mw.util.getParamValue('title', this.search);
					return false;
				}
			});
		} else {
			title = mw.util.getParamValue('title', this.search);
		}
		if (!title) {
			showError('find-title');
			return;
		}
		title = title.replace(/_/g, ' ');
		$link.detach();
		$wrapper.addClass('quickrollback-doing')
			.text(mw.msg('quickrollback-rollingback'));
		var user = !isPc && mw.util.getParamValue('from', this.search);
		if (user) {
			mw.loader.using('oojs-ui-windows', function () {
				rollback(title, user, $link, $wrapper);
			});
		} else {
			$.when(
				new mw.Api().get({
					action: 'query',
					titles: title,
					prop: 'revisions',
					rvprop: 'user',
					rvlimit: 1,
					formatversion: 2
				}),
				mw.loader.using('oojs-ui-windows')
			).always(function (response) {
				user = ((((((response[0] || {}).query || {}).pages || [])[0] || {})
					.revisions || [])[0] || {}).user;
				if (user) {
					rollback(title, user, $link, $wrapper);
				} else {
					showError('get-user');
					$wrapper.removeClass('quickrollback-doing').html($link);
				}
			});
		}
		mw.requestIdleCallback(function () {
			var notif = $('.mw-notification-tag-quickrollback').data('mw-notification');
			if (notif) notif.close();
		});
	}
	function rollback(title, user, $link, $wrapper) {
		OO.ui.prompt(mw.msg('quickrollback-prompt', user, title), {
			textInput: { inputId: 'wpSummary' }
		}).then(function (summary) {
			if (typeof summary !== 'string') {
				$wrapper.removeClass('quickrollback-doing').html($link);
				return;
			}
			summary = summary.trim();
			if (summary) {
				var key = 'quickrollback-custom-summary';
				if (mw.util.isIPAddress(user)) key += '-anon';
				summary = mw.msg(key, user, summary);
			}
			new mw.Api().rollback(title, user, {
				summary: summary,
				tags: mw.messages.get('quickrollback-tag', undefined),
				errorformat: 'html',
				formatversion: 2
			}).always(function (response, error) {
				if (typeof response === 'object') {
					$wrapper.addClass('quickrollback-done')
						.text(mw.msg('quickrollback-rolledback'))
						.attr('title', mw.msg('quickrollback-rolledback-tooltip'));
					mw.notify($(
						$.parseHTML(mw.msg(
							'quickrollback-notification',
							$('<a>').attr({
								href: mw.util.getUrl('Special:Contributions/' + user),
								target: '_blank'
							}).text(user)[0].outerHTML,
							$('<a>').attr({
								href: mw.util.getUrl('User talk:' + user),
								target: '_blank'
							}).text(mw.msg('quickrollback-talk'))[0].outerHTML
						)).concat(
							$('<p>').append(
								$('<a>').attr({
									href: mw.util.getUrl(response.title || title, {
										diff: response.revid || 'cur',
										diffonly: 1
									}),
									target: '_blank'
								}).text(mw.msg('quickrollback-diff-link'))
							)[0]
						)
					), { tag: 'quickrollback' });
				} else {
					var msg = (((error || {}).errors || [])[0] || {}).html;
					showError('rollback', msg && $.parseHTML(msg));
					$wrapper.html($link);
				}
				$wrapper.removeClass('quickrollback-doing');
			});
		});
	}
	function showError(key, msg) {
		mw.notify(msg || mw.msg('quickrollback-error-' + key), {
			tag: 'quickrollback',
			type: 'error'
		});
	}
	if (isPc) {
		mw.hook('wikipage.content').add(function ($content) {
			var $button = $('<span>').addClass('quickrollback').append(
				$('<a>').attr({
					href: '#',
					role: 'button',
					title: mw.msg('quickrollback-rollback-tooltip')
				}).text(mw.msg('quickrollback-rollback')).click(handler)
			);
			var $acceptButtons = $content.find('.quickaccept');
			if ($acceptButtons.length) {
				$acceptButtons.before($button);
			} else {
				$content.find('form[name="pendingchanges"] ~ ul > li').append(
					' ',
					$('<span>').addClass('mw-changeslist-links mw-pager-tools').append($button)
				);
			}
		});
	} else if (Number(mw.user.options.get('showrollbackconfirmation')) !== 1) {
		$(document.body).on('click', '.mw-rollback-link > a', handler)
			.addClass('quickrollback-ready');
	}
});