MediaWiki:Gadget-common-action-history.js

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
JS-код ниже относится к скрытому гаджету common-action-history. Он включён по умолчанию.

После сохранения или недавних изменений очистите кэш браузера.

// Не удаляйте проверку на название действия
$( function () {
	if ( mw.config.get( 'wgAction' ) !== 'history' ) {
		return;
	}
	
	// Скрыть дисклеймер, если на странице нет скрытых авторов
	if ( $( '.history-deleted.mw-userlink' ).length === 0 ) {
		$( '.ruwiki-histlegend-ru-by-disclaimer' ).hide();
	}
	
	// Функция для добавления ссылки в меню под заголовком
	function addSubLink( $link, toolName ) {
		$( '.mw-history-subtitle' ).append(
			' · ',
			$link
				.attr( 'href', 'javascript:' )
				.css( 'font-style', 'italic' )
		);
		
		return $link;
	}

	// Добавить ссылки «Вернуть к» для автопатрулируемых, патрулирующих и администраторов
	var wgUserGroups = mw.config.get( 'wgUserGroups' );
	var revertLinkGroups = [
		'autoreview',
		'editor',
		'sysop',
	];
	if ( wgUserGroups.length > 1 && revertLinkGroups.some( g => wgUserGroups.includes( g ) ) ) {
		addSubLink( $( '<a>' )
			.attr( 'title', 'Добавить ссылки для возврата к старым версиям' )
			.text( 'Вернуть к …' )
		).click( showRevertToLinks );
	}

	// Иконки «обновлено после моего последнего посещения»
	$( '.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();
		}
		window.revertLinksCSS.disabled = false;
		setTimeout( function () {
			window.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( 'вернуть' ),
				')'
			);
		}
		window.revertLinksCSS = mw.util.addCSS( '.revertTo { font-weight: bold; }' );
	}
} );