MediaWiki:Gadget-summaryButtons.js

Материал из Википедии — свободной энциклопедии
Это старая версия этой страницы, сохранённая Stjn (обсуждение | вклад) в 21:38, 31 августа 2017 (стилизация через ID — прошлый век, аргументируйте свои изменения более подробно, чем «рефакторинг»). Она может серьёзно отличаться от текущей версии.
Перейти к навигации Перейти к поиску
JS-код ниже относится к скрытому гаджету «Кнопки описания правок: быстрый ввод стандартных и персональных описаний» (править описание). Связанный CSS-файл: MediaWiki:Gadget-summaryButtons.css. Он включён по умолчанию.

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

// Код из польской Википедии, изначально адаптированный для русскоязыного раздела Википедии by [[u:Alex Smotrov]]
// https://ru.wikipedia.org/ruwiki/w/index.php?diff=32005736&oldid=32004004&title=MediaWiki%3AEditpage.js&type=revision

function insertSummary( txt ) {
	if ( typeof txt !== 'string' ) {
		txt = this.title;
	}
	if ( typeof summaryItemsSeparator == 'undefined' ) {
		window.summaryItemsSeparator = ',';
	}
	var val = $( '#wpSummary' ).val();
	var regExp = new RegExp( '(^|[,;.?!/]) ?' + mw.RegExp.escape( txt ) );
	if ( regExp.test( val ) ) {
		return;
	}
	if ( /[^,; \/]$/.test( val ) ) {
		val += summaryItemsSeparator;
	}
	if ( /[^ ]$/.test( val ) ) {
		val += ' ';
	}
	$( '#wpSummary' ).val( val + txt ).focus().change();
}
 
$( function() {
	if (typeof summaryButtons === 'undefined') {
		window.summaryButtons = {
			hideDefaultButtons: false
		};
	}
	
	var frm = document.getElementById( 'editform' );
	if ( !mw.config.get( 'wgArticleId' ) || !frm || $( frm.wpSection ).val() === 'new' ) {
		return;
	}
	
	var $summaryButtons = $( '<div class="summaryButtons"></div>' ).insertAfter( '#wpSummaryWidget' );
	var $groups = $( '<div class="summaryButtons-groups"></div>' ).appendTo( $summaryButtons );
	
	window.addSumButton = window.addSummaryButton = function ( label, text, type ) {
		type = type || 'custom';  // 'default' or 'custom'
		var $group = $( '.summaryButtons-group-' + type );
		if ( !$group.length ) {
			$group = $( '<div class="mw-ui-button-group summaryButtons-group summaryButtons-group-' + type + '">' ).appendTo( $groups );
		}
		
		$( '<a class="mw-ui-button summaryButtons-button" title="' + text + '">' + label + '</a>' )
			.appendTo( $group )
			.click( insertSummary );
	};
	
	if ( !summaryButtons.hideDefaultButtons ) {
		$.each(
			[
				'викиф|икация', 'оформл|ение', 'стил|евые правки', 'орфогр|афия', 'пункт|уация',
				'вопрос', 'ответ', 'комм|ентарий', 'кат|егоризация',
				'к удал|ению', 'илл|юстрация', 'источ|ники', 'запр|ос источника',
				'доп|олнение', 'уточн|ение', 'испр|авление', 'обнов|ление', 'закр|ыто', 'итог'
			],
			function ( i, s ) {
				addSummaryButton( s.replace( /\|.*/, '' ), s.replace( /\|/, '' ), 'default' );
			}
		);
	}
	$( '<a href="https://ru.wikipedia.org/wiki/Википедия:Гаджеты/Кнопки_описания_правок" class="mw-ui-button mw-ui-quiet summaryButtons-info-button" title="Информация о кнопках описания правок">?</a>' )
		.appendTo( $summaryButtons );
	
	// Эти стили находятся здесь, а не в отдельном CSS, потому что на страницах, где кнопок нет,
	// они вредны, а за тем, где запускается CSS, мы не можем проследить.
	mw.util.addCSS('\
		.mw-editform #wpSummaryWidget {\
			margin-bottom: 0;\
		}\
		\
		.mw-editform #wpSummaryLabel {\
			margin-bottom: .85714em;\
		}\
	');
	
	mw.hook('summaryButtons').fire();
} );