MediaWiki:Gadget-common-action-edit.js: различия между версиями

Материал из Буквицы
Перейти к навигации Перейти к поиску
Нет описания правки
мНет описания правки
Строка 1: Строка 1:
mw.log.warn( 'Using MediaWiki:Gadget-common-action-edit.js' );
mw.hook( 'wikipage.content' ).add( function () {
mw.log.warn( typeof runAsEarlyAsPossible );
 
runAsEarlyAsPossible( function () {
// Автоматическое заполнение полей при добавлении новых тем сверху
// Автоматическое заполнение полей при добавлении новых тем сверху
var summary = $( '#wpSummary' ).val();
var summary = $( '#wpSummary' ).val();
Строка 13: Строка 10:
  mw.loader.load( 'ext.gadget.newTopicOnTop' );
  mw.loader.load( 'ext.gadget.newTopicOnTop' );
}
}
}, $( '#wpSummary' ), mw.hook( 'wikipage.content' ).add );
} );


mw.log.warn( typeof runAsEarlyAsPossible );
// Секция гаджетов в панели инструментов
// Секция гаджетов в панели инструментов
if ( mw.user.options.get( 'usebetatoolbar' ) === 1 ) {
if ( mw.user.options.get( 'usebetatoolbar' ) === 1 ) {
var gadgetToolbarLocation = '#wikiEditor-section-main';
$.when(
$.when(
mw.loader.using( 'ext.wikiEditor' ),
mw.loader.using( 'ext.wikiEditor' ),
Строка 24: Строка 19:
).then( function() {
).then( function() {
function addGadgetsGroup() {
function addGadgetsGroup() {
gadgetToolbar();
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
'section': 'main',
'section': 'main',
Строка 33: Строка 26:
} );
} );
var $groupGadgets = $( '#wikiEditor-section-main .group-gadgets' ),
$groupGadgets = $( '#wikiEditor-section-main .group-gadgets' );
$groupFormat = $( '#wikiEditor-section-main .group-format' );
$groupFormat = $( '#wikiEditor-section-main .group-format' );
if ( $groupGadgets.length && $groupFormat.length ) {
$groupGadgets.insertBefore( $groupFormat );
}
if ( $groupGadgets.length ) {
if ( $groupGadgets.length ) {
if ( $groupFormat.length ) {
$groupGadgets.insertBefore( $groupFormat );
}
mw.hook( 'wikieditor.toolbar.gadgetsgroup' ).fire();
mw.hook( 'wikieditor.toolbar.gadgetsgroup' ).fire();
}
}
}
}
var $groupGadgets, $groupFormat;
addGadgetsGroup();
addGadgetsGroup();
if ( !$( '#wikiEditor-section-main .group-gadgets' ).length ) {
if ( !$groupGadgets.length ) {
// Лечение для случаев, когда панель инструментов поздно прорисовывается
// Лечение для случаев, когда панель инструментов поздно прорисовывается
setTimeout( addGadgetsGroup, 0 );
setTimeout( addGadgetsGroup, 0 );
}
}
} );
} );
} else if ( mw.user.options.get( 'showtoolbar' ) === 1 ) {
var gadgetToolbarLocation = '#toolbar';
importScript( 'MediaWiki:ToolbarOld.js' );
} else {
var gadgetToolbarLocation = '#editform';
importScript( 'MediaWiki:ToolbarNone.js' );
}
}


function gadgetToolbar() {
// Напоминание о подписи. Выводится в пространствах имён обсуждений, «Википедия» и «Проект».
if ( !$( '#gadget-toolbar' ).length ) {
var namespaceNumber = mw.config.get( 'wgNamespaceNumber' );
var $where = $( gadgetToolbarLocation );
if ( namespaceNumber % 2 || namespaceNumber === 4 || namespaceNumber === 104 ) {
if ( !$where.length ) return;  // Новая панель инструментов ещё не готова
$( function () {
 
var $textbox, matches, newLinesCountInitial, $tildes, $signReminderCommon, $signReminder,
$( '<div>' )
$copyrightWarning = $( '#editpage-copywarn' ),
.attr('id', 'gadget-toolbar' )
$saveButton = $( '#wpSave' ),
.prependTo( $where );
warningDone = false;
}
}


if ( mw.user.options.get( 'usebetatoolbar' ) !== 1 ) {
if ( !$copyrightWarning.length ||
$( function() {
!$saveButton.length ||
gadgetToolbar();
// Пространства имён «Википедия» и «Проект»
setTimeout( gadgetToolbar, 2000 );
( mw.config.get( 'wgNamespaceNumber' ) === 4 || mw.config.get( 'wgNamespaceNumber' ) === 104 ) &&
setTimeout( gadgetToolbar, 6000 );
( !mw.config.get( 'wgTitle' ).match(
} );
}
 
// Напоминание о подписи ??????????????
if ( mw.config.get( 'wgNamespaceNumber' ) % 2 ||
mw.config.get( 'wgNamespaceNumber' ) === 4 ||
mw.config.get( 'wgNamespaceNumber' ) === 104
) {
$( function () {
var matches = $( '#wpTextbox1' ).val().match( /\n/g );
var newLinesCountInitial = matches ? matches.length : 0;
var copywarn = document.getElementById( 'editpage-copywarn' ),
wpSave = document.getElementById( 'wpSave' );
if ( !copywarn || !wpSave ) {
return;
}
if ( ( mw.config.get( 'wgNamespaceNumber' ) === 4 || mw.config.get( 'wgNamespaceNumber' ) === 104 ) &&
( !mw.config.get( 'wgTitle' ).match(  
// Википедия:
// Википедия:
'^(?:Форум[/ ]|Голосования/|Опросы/|Обсуждение правил/|Заявки на |Запросы|Кандидаты в .*/|' +
'^(?:Форум[/ ]|Голосования/|Опросы/|Обсуждение правил/|Заявки на |Запросы|Кандидаты в .*/|' +
Строка 106: Строка 73:
return;
return;
}
}
var ins = '<a href="javascript:mw.toolbar.insertTags(\' ~~\~~\', \'\', \'\');">~~\~~</a>';
 
$( '<div id="signReminder"></div>' )
$textbox = $( '#wpTextbox1' );
.insertAfter( '#editpage-copywarn' );
matches = $textbox.val().trim().match( /\n/g );
$( '<div class="signReminder-common">Не забудьте добавить к вашему сообщению подпись с помощью ' + ins + '</div>' )
newLinesCountInitial = matches ? matches.length : 0;
.appendTo( '#signReminder' );
 
if ( $.inArray( 'autoconfirmed', mw.config.get( 'wgUserGroups' ) ) !== -1 && !window.sigWarning ) {
$tildes = $( '<a>' )
.attr( 'href', 'javascript:' )
.text( '~~\~~' )
.click( function () {
$textbox.textSelection( 'encapsulateSelection', { pre: ' ~~\~~' } );
} );
$signReminderCommon = $( '<div>' )
.addClass( 'signReminder-common' )
.append(
'Не забудьте добавить к вашему сообщению подпись с помощью ',
$tildes
);
$signReminder = $( '<div>' )
.attr( 'id', 'signReminder' )
.append( $signReminderCommon )
.insertAfter( $copyrightWarning );
 
if ( mw.config.get( 'wgUserGroups' ).indexOf( 'autoconfirmed' ) !== -1 && !window.sigWarning ) {
return;
return;
}
}
// Только незарегистрированные/новые пользователи и те, кто включил предупреждение в личном JS строчкой
// Только незарегистрированные/новые пользователи и те, кто включил предупреждение в личном JS строчкой
// var sigWarning = true;
// var sigWarning = true;
var warningDone = false;
$saveButton.click( function () {
wpSave.onclick = function () {
try {
try {
var textboxContent = $( '#wpTextbox1' ).val();
var newLinesCount, $signReminderWarningbox, $tildesCopy,
matches = textboxContent.replace(/([^\n])$/, '$1\n').match( /\n/g );
textboxContent = $textbox.val();
var newLinesCount = matches ? matches.length : 0;
 
if ( warningDone ||
matches = textboxContent.trim().match( /\n/g );
newLinesCount = matches ? matches.length : 0;
 
if ( textboxContent.indexOf( '~~\~~' ) !== -1 ||
$( '#wpMinoredit' ).prop( 'checked' ) ||
$( '#wpMinoredit' ).prop( 'checked' ) ||
newLinesCountInitial === newLinesCount ||
newLinesCountInitial === newLinesCount ||
textboxContent.indexOf( '~~\~~' ) !== -1
warningDone
) {
) {
return true;
return true;
}
}
warningDone = true;
warningDone = true;
$( '.signReminder-common' ).remove();
$tildesCopy = $tildes.clone( true );
$( '<div class="warningbox signReminder-warningbox"></div>' )
$signReminderCommon.remove();
.appendTo( '#signReminder' );
$signReminderWarning = $( '<div>' )
$( '<div class="signReminder-warning">Пожалуйста, <strong>подпишитесь</strong>, добавив в конце своего сообщения&nbsp;' + ins + ' <small>(<a href="https://ru.wikipedia.org/wiki/Википедия:Подписывайтесь" title="(Ссылка откроется в новом окне)" target="_blank">подробнее</a>)</small></div>' )
.addClass( 'signReminder-warning' )
.appendTo( '.signReminder-warningbox' );
.append( 'Пожалуйста, <strong>подпишитесь</strong>, добавив в конце своего сообщения ',
$tildesCopy,
' <small>(<a href="https://ru.wikipedia.org/wiki/Википедия:Подписывайтесь" title="(Ссылка откроется в новом окне)" target="_blank">подробнее</a>)</small>'
);
$( '<div>' )
.addClass( 'warningbox signReminder-warningbox' )
.append( $signReminderWarning )
.appendTo( $signReminder );
return false;
return false;
} catch ( e ) {
} catch ( e ) {
return true;
return true;
}
}
};
} );
} );
} );
}
}

Версия от 05:39, 3 ноября 2021

mw.hook( 'wikipage.content' ).add( function () {
	// Автоматическое заполнение полей при добавлении новых тем сверху
	var 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' );
	}
} );

// Секция гаджетов в панели инструментов
if ( mw.user.options.get( 'usebetatoolbar' ) === 1 ) {
	$.when(
		mw.loader.using( 'ext.wikiEditor' ),
		$.ready
	).then( function() {
		function addGadgetsGroup() {
			$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
				'section': 'main',
				'groups': {
					'gadgets': {}
				}
			} );
			
			$groupGadgets = $( '#wikiEditor-section-main .group-gadgets' );
			$groupFormat = $( '#wikiEditor-section-main .group-format' );
			if ( $groupGadgets.length ) {
				if ( $groupFormat.length ) {
					$groupGadgets.insertBefore( $groupFormat );
				}
				mw.hook( 'wikieditor.toolbar.gadgetsgroup' ).fire();
			}
		}
		
		var $groupGadgets, $groupFormat;
		addGadgetsGroup();
		if ( !$groupGadgets.length ) {
			// Лечение для случаев, когда панель инструментов поздно прорисовывается
			setTimeout( addGadgetsGroup, 0 );
		}
	} );
}

// Напоминание о подписи. Выводится в пространствах имён обсуждений, «Википедия» и «Проект».
var namespaceNumber = mw.config.get( 'wgNamespaceNumber' );
if ( namespaceNumber % 2 || namespaceNumber === 4 || namespaceNumber === 104 ) {
	$( function () {
		var $textbox, matches, newLinesCountInitial, $tildes, $signReminderCommon, $signReminder,
			$copyrightWarning = $( '#editpage-copywarn' ),
			$saveButton = $( '#wpSave' ),
			warningDone = false;

		if ( !$copyrightWarning.length ||
			!$saveButton.length ||
			// Пространства имён «Википедия» и «Проект»
			( mw.config.get( 'wgNamespaceNumber' ) === 4 || mw.config.get( 'wgNamespaceNumber' ) === 104 ) &&
			( !mw.config.get( 'wgTitle' ).match(
				// Википедия:
				'^(?:Форум[/ ]|Голосования/|Опросы/|Обсуждение правил/|Заявки на |Запросы|Кандидаты в .*/|' +
				'К (?:удалению|объединению|переименованию|разделению|улучшению|оценке источников|посредничеству)/|' +
				'Оспаривание |Рецензирование/|Проверка участников/|Фильтр правок/Срабатывания|' +
				// Проект:
				'Инкубатор/(?:Мини-рецензирование|Форум)|Социальная ответственность/Форум|Водные объекты|' +
				'Библиотека/(?:Требуются книги|Вопросы|Горячие темы|Технические вопросы)|' +
				'Графическая мастерская/Заявки|Добротные статьи/К лишению статуса|Грамотность/Запросы|.* запросы)'
			) ||
				mw.config.get( 'wgTitle' ).match( '/Архив' )
			)
		) {
			return;
		}

		$textbox = $( '#wpTextbox1' );
		matches = $textbox.val().trim().match( /\n/g );
		newLinesCountInitial = matches ? matches.length : 0;

		$tildes = $( '<a>' )
			.attr( 'href', 'javascript:' )
			.text( '~~\~~' )
			.click( function () {
				$textbox.textSelection( 'encapsulateSelection', { pre: ' ~~\~~' } );
			} );
		$signReminderCommon = $( '<div>' )
			.addClass( 'signReminder-common' )
			.append(
				'Не забудьте добавить к вашему сообщению подпись с помощью ',
				$tildes
			);
		$signReminder = $( '<div>' )
			.attr( 'id', 'signReminder' )
			.append( $signReminderCommon )
			.insertAfter( $copyrightWarning );

		if ( mw.config.get( 'wgUserGroups' ).indexOf( 'autoconfirmed' ) !== -1 && !window.sigWarning ) {
			return;
		}

		// Только незарегистрированные/новые пользователи и те, кто включил предупреждение в личном JS строчкой
		// var sigWarning = true;
		$saveButton.click( function () {
			try {
				var newLinesCount, $signReminderWarningbox, $tildesCopy,
					textboxContent = $textbox.val();

				matches = textboxContent.trim().match( /\n/g );
				newLinesCount = matches ? matches.length : 0;

				if ( textboxContent.indexOf( '~~\~~' ) !== -1 ||
					$( '#wpMinoredit' ).prop( 'checked' ) ||
					newLinesCountInitial === newLinesCount ||
					warningDone
				) {
					return true;
				}

				warningDone = true;
				$tildesCopy = $tildes.clone( true );
				$signReminderCommon.remove();
				$signReminderWarning = $( '<div>' )
					.addClass( 'signReminder-warning' )
					.append( 'Пожалуйста, <strong>подпишитесь</strong>, добавив в конце своего сообщения ',
						$tildesCopy,
						' <small>(<a href="https://ru.wikipedia.org/wiki/Википедия:Подписывайтесь" title="(Ссылка откроется в новом окне)" target="_blank">подробнее</a>)</small>'
					);
				$( '<div>' )
					.addClass( 'warningbox signReminder-warningbox' )
					.append( $signReminderWarning )
					.appendTo( $signReminder );
				return false;
			} catch ( e ) {
				return true;
			}
		} );
	} );
}