MediaWiki:Gadget-common-action-history.js

Материал из wikixw
Перейти к навигации Перейти к поиску

Замечание: Возможно, после публикации вам придётся очистить кэш своего браузера, чтобы увидеть изменения.

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
  • Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
  • Internet Explorer / Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
  • Opera: Нажмите Ctrl+F5.
/**
 * Ввиду маленького размера не резон тратить на загрузку этого гаджета отдельный запрос; он грузится
 * безусловно (в силу «|default» в [[MediaWiki:Gadgets-definition]]). Если код вырастет до
 * нескольких килобайт, можно делегировать его загрузку [[MediaWiki:Common.js]] и загружать по
 * условию/условиям.
 * 
 * Так как на настоящий момент гаджет содержит только функции для зарегистрированных
 * участников, он грузится только им. Если это изменится, удалите «|rights=minoredit» из
 * [[MediaWiki:Gadgets-definition]] для этого гаджета.
 */
if ( mw.config.get( 'wgAction' ) === 'history' ) {
	$( function () {
		// Функция для добавления ссылки в меню под заголовком
		function addSubLink( $link, toolName ) {
			$( '.mw-history-subtitle' ).append(
				' • ',
				$link
					.attr( 'href', 'javascript:' )
					.css( 'font-style', 'italic' )
					.click( showRevertToLinks )
			);
		}

		// Добавить ссылки «Вернуть к» для автопатрулируемых, патрулирующих и администраторов
		var wgUserGroups = mw.config.get( 'wgUserGroups' );
		if ( wgUserGroups && /autoreview|editor|sysop/.test( wgUserGroups.join( '|' ) ) ) {  // Включая autoeditor
			addSubLink( $( '<a>' )
				.attr( 'title', 'Добавить ссылки для возврата к старым версиям' )
				.text( 'Вернуть к …' )
			);
		}

		// Иконки «обновлено после моего последнего посещения»
		$( '.updatedmarker' ).attr( 'title', 'обновлено после моего последнего посещения' );

		function plural( number, one, few, many ) {
			number = Math.abs( number ) % 100;
			if ( number < 10 || number > 20 ) {
				var x = number % 10;
				if ( x == 1 ) {
					return one;
				}
				if ( 0 < x && x < 5 ) {
					return few;
				}
			}
			return many;
		}

		function showRevertToLinks( e ) {
			e.preventDefault();
			if ( !window.revertLinksCSS ) {
				appendRevertToLinks();
			}
			revertLinksCSS.disabled = false;
			setTimeout( function () {
				revertLinksCSS.disabled = true;
			}, 5000 );
		}

		function appendRevertToLinks() {
			var $ul = $( '#pagehistory' );
			if ( !$ul.length ) {
				alert( 'История изменений страницы пуста' );
				return;
			}
			var $li, $link, version, user, url,
				$lis = $ul.find( 'li' );
			for (var i = 2; i < $lis.length; i++ ) {
				$li = $lis.eq( i );
				$link = $li.find( '.mw-changeslist-date' );
				version = $li.find( 'input' ).val();
				user = $li.find( 'a.mw-userlink' ).text();
				url = $link.attr( 'href' ) + '&action=edit&summary=' + encodeURIComponent(
					i + ' ' + plural( i, 'правка', 'правки', 'правок' ) + ' [[ВП:ВЕРНУТЬ К|' +
					plural( i, 'возвращена', 'возвращены', 'возвращено' ) + ']] к версии ' + version + (user ? ' ' + user : '') + ': '
				) + '#wpSummary';
				$link.after(
					' (',
					$( '<a>' )
						.attr( 'href', url )
						.attr( 'title', 'Вернуть эту версию' )
						.addClass( 'revertTo' )
						.text( 'вернуть' ),
					')'
				);
			}
			revertLinksCSS = mw.util.addCSS( '.revertTo { font-weight: bold; }' );  // Глобальная переменная
		}
	} );
}