MediaWiki:Editpage.js

Материал из Викитеки — свободной библиотеки

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

  • 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.
// Справка: https://www.mediawiki.org/wiki/Extension:WikiEditor/Toolbar_customization


var isEditPage = $.inArray( mw.config.get( 'wgAction' ), ['edit', 'submit'] ) !== -1;
var isWikitext = $.inArray( mw.config.get( 'wgPageContentModel' ), ['wikitext', 'proofread-page'] ) !== -1;   // не 'javascript', 'Scribunto' (Lua)


// Секция гаджетов в панели инструментов
if ((isEditPage && isWikitext) && mw.user.options.get( 'usebetatoolbar' ) === 1) {
	$.when(
		mw.loader.using( 'ext.wikiEditor' ),
		$.ready
	).then( 
		function() {
			function addGadgetsGroup() {
				$('#wpTextbox1').wikiEditor('addToToolbar', { section:'main', groups: {'gadgets':{}}});
				mw.util.addCSS('.wikiEditor-ui-toolbar .group-insert {border-right:1px solid #DDD}');
				$groupInsert = $( '#wikiEditor-section-main .group-insert' );
				$groupGadgets = $( '#wikiEditor-section-main .group-gadgets' );
				if ( $groupGadgets.length ) { 
					$groupGadgets.insertAfter( $groupInsert );
					mw.hook( 'wikieditor.toolbar.gadgetsgroup' ).fire();
				}
			}
			function addRuwsoldGroup() {
				$('#wpTextbox1').wikiEditor('addToToolbar', { section:'advanced', groups: {'ruws-old':{}}});
				$groupButtonRuwsold = $( '#wikiEditor-section-main .group-ruws-old' );
				if ( $groupButtonRuwsold.length ) { 
					mw.hook( 'wikieditor.toolbar.ruws-oldgroup' ).fire();
				}
			}
			
			var $groupGadgets, $groupInsert, $groupFormat, $groupButtonRuwsold;
			addGadgetsGroup();
			addRuwsoldGroup();
			addButtonRuwsold();
			
			// Лечение для случаев, когда панель инструментов поздно прорисовывается
			if ( !$groupGadgets.length ) setTimeout( addGadgetsGroup, 0 );
			if ( !$groupButtonRuwsold.length ) setTimeout( addRuwsoldGroup, 0 );
		}
	);
}


// Функции для добавления кнопок в секцию advanced панели
function addButtonRuwsold() {
    function addInsertBtn( id, pretxt, posttxt, img, title ){
        $('#wpTextbox1').wikiEditor('addToToolbar', {
            section:'advanced',
            group:'ruws-old',
            tools: {
                id: {
                    type:'button',
                    action: {type:'encapsulate', options: {pre:pretxt, post:posttxt}},
                    label: title,
                    icon:'//upload.wikimedia.org/' + img
                }
            }
        });
    }
    // Кнопки
    addInsertBtn('math', "\u003cmath>", "</math>", 'wikipedia/commons/2/2e/Button_math.png', 'Математическая формула');
    addInsertBtn('hr', "\n----\n", "", 'wikipedia/commons/0/0d/Button_hr.png', 'Горизонтальная линия');
    addInsertBtn('redir', "#REDIRECT [\[", "]]", 'wikipedia/ru/1/1d/Button_redirect_rus.png', 'Перенаправление');
    addInsertBtn('wplink', "[\[w:|", "]]", 'wikisource/ru/c/cc/Button-pipelink.png', 'Ссылка на Википедию');
    addInsertBtn('category', "[\[Категория:", "]]", 'wikipedia/commons/3/3c/Button_cat_ru.png', 'Категория');
    addInsertBtn('quotes', "«", "»", 'wikisource/ru/0/0b/Button-quotes.png', 'Кавычки');
    addInsertBtn('quotes_lapki', "„", "“", 'wikipedia/commons/2/23/Quotes-Lithuanian.png', 'Кавычки-лапки');
    addInsertBtn('dash', "—", "", 'wikisource/ru/a/a9/Button-dash.png', 'Тире');
    addInsertBtn('poem', "<poem>\n", "\n</poem>", 'wikisource/ru/c/cd/Button_poem.png', 'Стихи');
    addInsertBtn('accent', "́", "", 'wikipedia/commons/0/0e/Button_acute_accent.png', 'Ударение');
    addInsertBtn('comment', "<!-- ", " -->", 'wikipedia/commons/7/74/Button_comment.png', 'Комментарий');
    addInsertBtn('wsref', "{\{Примечание ВТ|", "}}", 'wikipedia/commons/c/c4/Button_ref.png', 'Примечание редактора ВТ (в тексте)');
    addInsertBtn('wsrefs', "{\{Примечания ВТ}}", "", 'wikipedia/commons/f/fe/Button_refs.png', 'Примечания редакторов ВТ (внизу страницы)');
}


// Edit Summary buttons
var wpSummaryBtn;
$(function () {
    var wpSummary = document.getElementById('wpSummary');
    if (!wpSummary || (wpSummary.form.wpSection && wpSummary.form.wpSection.value == 'new')) return;
    wpSummaryBtn = document.createElement('span'); //global var
    wpSummaryBtn.id = 'userSummaryButtonsA';
    wpSummary.parentNode.insertBefore(wpSummaryBtn, wpSummary.nextSibling);
    addSumButton('викиф.', 'викификация', 'Произведена викификация');
    addSumButton('оформл.', 'оформление', 'Улучшено оформление');
    addSumButton('орфогр.', 'орфография', 'Поправлена орфография');
    addSumButton('пункт.', 'пунктуация', 'Изменена пунктуация');
    addSumButton('интервики', 'интервики', 'Исправлены межъязыковые ссылки (интервики)');
    addSumButton('кат.', 'категоризация', 'Исправлена категоризация');
    addSumButton('шаблон', 'шаблон', 'Добавлен / изменён шаблон');
    // addSumButton('шабл. опис.', 'шаблон описания', 'Добавлен / изменён шаблон описания');
    addSumButton('шабл. АП', 'шаблон АП', 'Добавлен / изменён шаблон авторских прав');
    addSumButton('к удал.', 'к удалению', 'Страница предложена к удалению');
    // addSumButton('доп.', 'дополнение', 'Добавлены новые сведения');
    addSumButton('илл.', 'иллюстрация', 'Размещена иллюстрация');
    addSumButton('обнов.', 'обновление данных', 'Обновлены устаревшие данные');
    addSumButton('качество', 'качество текста', 'Уточнено качество текста');
    addSumButton('источн.', 'источник', 'Указан источник текста');
    addSumButton('неоднозн.', 'неоднозначность', 'Добавлена ссылка на страницу разрешения неоднозначности');
    addSumButton('архивация', 'архивация', 'Текст перемещён в архив');
    addSumButton('запрос', 'запрос источника', 'Запрос источника');
    addSumButton('сделано', 'сделано', 'Запрос выполнен');
    addSumButton('закрыто', 'закрыто', 'Обсуждение закрыто');
    addSumButton('итог', 'итог', 'Итог обсуждения или номинации');
    addSumButton('так в источнике', 'так в источнике', 'уточнение по источнику');
});

function addSumButton(name, text, note) {
    var btn = document.createElement('a');
    btn.appendChild(document.createTextNode(name));
    btn.title = note;
    btn.onclick = function(){insertSummary(text)};
    wpSummaryBtn.appendChild(btn);
}

function insertSummary(text) {
    var wpSummary = document.getElementById('wpSummary');
    if (wpSummary.value.indexOf(text) != -1) return;
    if (wpSummary.value.match(/[^,; \/]$/)) wpSummary.value += ',';
    if (wpSummary.value.match(/[^ ]$/)) wpSummary.value += ' ';
    wpSummary.value += text;
}


// Блок "быстрая вставка", часто используемые шаблоны
var $formatButtons = $( '<p>' )
		.addClass( 'extraSpecialchars' )
		.css( 'font-size', '0.875em' )
		.prependTo( '#editpage-specialchars' );
$( '<b>' )
	.addClass( 'extraSpecialchars-title' )
	.text( 'Часто используемые шаблоны: ' )
	.appendTo( $formatButtons );

const tplbuttons = [
	['Отексте', '{\{Отексте\n' + 
			'| АВТОР                 = ', '\n' +
			'| НАЗВАНИЕ              = \n' +
			'| ЧАСТЬ                 = \n' +
			'| ПОДЗАГОЛОВОК          = \n' +
			'| ИЗЦИКЛА               = \n' +
			'| ИЗСБОРНИКА            = \n' +
			'| СОДЕРЖАНИЕ            = \n' +
			'| ДАТАСОЗДАНИЯ          = \n' +
			'| ДАТАПУБЛИКАЦИИ        = \n' +
			'| ПЕРВАЯПУБЛИКАЦИЯ      = \n' +
			'| ЯЗЫКОРИГИНАЛА         = \n' +
			'| НАЗВАНИЕОРИГИНАЛА     = \n' +
			'| ПОДЗАГОЛОВОКОРИГИНАЛА = \n' +
			'| ДАТАПУБЛИКАЦИИОРИГИНАЛА = \n' +
			'| ПЕРЕВОДЧИК            = <!-- Для отображения заполните ЯЗЫКОРИГИНАЛА -->\n' +
			'| ИСТОЧНИК              = \n' +
			'| ДРУГОЕ                = \n' +
			'| ВИКИПЕДИЯ             = \n' +
			'| ВИКИДАННЫЕ            = <!-- id элемента темы -->\n' +
			'| ОГЛАВЛЕНИЕ            = \n' +
			'| ПРЕДЫДУЩИЙ            = \n' +
			'| СЛЕДУЮЩИЙ             = \n' +
			'| КАЧЕСТВО              = <!-- оценка по 4-х бальной шкале -->\n' +
			'| ЛИЦЕНЗИЯ              = \n' +
			'| СТИЛЬ                 = text\n' +
			'| НЕОДНОЗНАЧНОСТЬ       = \n' +
			'| ДРУГИЕПЕРЕВОДЫ        = \n' +
       		'}}\n'],
	['Обавторе', '{\{Обавторе\n' +
			'| ФАМИЛИЯ        = ', '\n' +
        	'| ИМЕНА          = \n' +
        	'| ВАРИАНТЫИМЁН   = \n' +
        	'| ОПИСАНИЕ       = \n' +
        	'| ДРУГОЕ         = \n' +
        	'| ДАТАРОЖДЕНИЯ   = \n' +
        	'| МЕСТОРОЖДЕНИЯ  = \n' +
        	'| ДАТАСМЕРТИ     = \n' +
        	'| МЕСТОСМЕРТИ    = \n' +
        	'| ИЗОБРАЖЕНИЕ    = \n' +
        	'| ВИКИДАННЫЕ     = \n' +
        	'| ВИКИПЕДИЯ      = \n' +
        	'| ВИКИЦИТАТНИК   = \n' +
        	'| ВИКИСКЛАД      = \n' +
        	'| ВИКИЛИВР       = \n' +
        	'| ЭСБЕ           = \n' +
        	'| Google         = \n' +
        	'}}\n'],
   	['Документ', '{\{Документ\n' +
			'|ОРГАН        = \n' +
			'|ОРГАН2       = \n' +
			'|ОРГАН3       = \n' +
			'|СТРАНА       = \n' +
			'|СТРАНА2      = \n' +
			'|СТРАНА3      = \n' +
			'|ВИД          = \n' +
			'|НАЗВАНИЕ     = \n' +
			'|ДАТА         = \n' +
			'|№            = \n' +
			'|№2           = \n' +
			'|№3           = \n' +
			'|ИСТОЧНИК     = \n' +
			'|ДРУГОЕ       = \n' +
			'|КАЧЕСТВО     = \n' +
			'|ВИКИПЕДИЯ    = \n' +
			'|СТИЛЬ        = text\n' +
			'|КАТЕГОРИЯ    = \n' +
			'|НЕТ КАВЫЧЕК  = \n' +
			'|НЕТ ДАТЫ     = \n' +
			'|УТРАТИЛ СИЛУ = \n' +
			'|ГРИФ         = \n' +
			'|ЛИЦЕНЗИЯ     = PD-RU-exempt\n' +
    		'}}\n'],
	['БСЭ1', '{\{БСЭ1\n' +
			'|ВИКИДАННЫЕ = \n' +
        	'|ВИКИПЕДИЯ=\n' +
        	'|ВИКИТЕКА=\n' +
        	'|ВИКИСКЛАД=\n' +
        	'|ВИКИСЛОВАРЬ=\n' +
        	'|ВИКИЦИТАТНИК=\n' +
        	'|ВИКИУЧЕБНИК=\n' +
        	'|ВИКИНОВОСТИ=\n' +
        	'|ВИКИВИДЫ=\n' +
        	'|НЕОДНОЗНАЧНОСТЬ=\n' +
			'|КАЧЕСТВО=\n' +
        	'}}\n', ''],
	['Poemx', '{\{poemx||\n', '\n|}}'],
	['Poem-on\/off', '{\{poem-on|}}\n', '\n{\{poem-off}}'],
	['Poemx1', '{\{poemx1||\n', '\n|}}'],
	['Изображение', '\n=={{int:filedesc}}==\n{{изображение\n|описание = ', '\n|время создания = \n|источник = \n|автор = \n|лицензия =\n}}\n'],
	['Версии', '{\{версии|\n', '\n}}'],
	['Unsigned', '{\{unsigned|', '}}'],
	['Книга', '{\{книга|автор=|часть=|заглавие=', '|оригинал=|томов=|ссылка=|ссылка часть=|ответственный=|издание=|место=|издательство=|год=|том=|страницы=|страниц=|серия=|isbn=}}'],
	['Статья', '{\{статья|автор=|заглавие=', '|оригинал=|ссылка=|ответственный=|издание=|тип=|место=|год=|том=|номер=|страницы=|issn=}}'],
	['Источник', '{\{Источник|', '|}}'],
	['Неоднозначность', '{\{неоднозначность}}', ''],
	['АП', '{{АП|ГОД=','|ВОВ=|ГОДРЕАБИЛИТАЦИИ=}}'],
	['RusGov', '{\{RusGov}}', ''],
	['PD-old-70', '{\{PD-old-70}}', ''],
	['PD-RusEmpire', '{\{PD-RusEmpire}}', ''],
	['R', '{\{R|', '}}'],
	['ВАР', '{\{ВАР|', '<!--\n-->|<!--\n-->\n}}'],
	['ВАР2', '{\{ВАР2|', '<!--\n-->|<!--\n-->\n}}'],
	['---', '{\{---|width=15%}}', ''],
	['closed2', '{\{closed2| --~~\~~|text=', '}}'],
	['Сделано', ': {\{сделано}}. --~~\~~', ''],
	['К удалению', '<noinclude>{\{к удалению|', '}}</noinclude>'],
	['К быстрому удалению', '<noinclude>{\{к быстрому удалению|', '}}</noinclude>'],
	
];

function addClickEvent() {
	var $currentFocused = $( '#wpTextbox1' );
	if ( !$currentFocused.length) return;
	$.each(tplbuttons, function (i, b) {
		var label = b[0], start = b[1], end = b[2];
		var $item = $( '<a href="#">'+label+'</a>' );
		$item.attr('data-mw-charinsert-start', start);
		$item.attr('data-mw-charinsert-end', end);
		$item.on( 'click', function ( e ) {
			e.preventDefault();
			if ($currentFocused.length) {
				$currentFocused.textSelection('encapsulateSelection', {	pre: start, peri: '', post: end });
			}
		} );
		$item.addClass('mw-charinsert-item').appendTo( $formatButtons );
	} );
}

if (isEditPage && isWikitext) {
    mw.loader.using( 'jquery.textSelection', function () {
        $(document).ready( addClickEvent );
    } );
}

// -------------------

mw.hook( 'wikipage.content' ).add( function () {
	// Автоматическое заполнение полей при добавлении новых тем сверху
	let summary = $( '#wpSummary' ).val();
	if ( decodeURIComponent( location.search ).search( /[?&]summary=\/\*[+ ]*\*\// ) !== -1 ||
		( mw.config.get( 'wgAction' ) === 'submit' &&
			summary !== undefined &&
			summary.search( /\/\*\s*\*\// ) !== -1
		)
	) {
	  	mw.loader.load( 'ext.gadget.newTopicOnTop' );
	}
} );