MediaWiki:Gadget-subpages.js

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

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

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
  • Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
  • Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
  • Opera: Нажмите Ctrl+F5.
/* Скрипт, добавляющий в меню "Ещё" и боковую панель ссылки на подстраницы
Автор - [[Участник:Lord]]
Дополнения - [[Участник:Больница для слабаков]]
             [[Участник:Септумулей]]
             [[Участник:Ла Ротьер]]
             [[Участник:Ламантепер]]
             [[Участник:Diman Russkov]]*/

mw.loader.using( 'mediawiki.util' ).then( function() {
	var ns = mw.config.get( 'wgNamespaceNumber' );
	var pageName = mw.config.get( 'wgPageName' );
	var title = mw.config.get( 'wgTitle' );
	var wikiName = mw.config.get( 'wgSiteName' ) || 'вики';

	// 1. В основном пространстве имён (ID 0)
	if ( ns === 0 ) {
		// Ссылка на "Подстраницы" в пространстве имён "Подстраница" (ID 3004)
		// Название пространства имён (например, "Подстраница") берётся динамически из конфигурации вики
		var subpageNs = mw.config.get( 'wgFormattedNamespaces' )[3004] || 'Подстраница';
		
		mw.util.addPortletLink(
			'p-cactions',
			mw.util.getUrl( 'Special:PrefixIndex/' + subpageNs + ':' + pageName ),
			'Подстраницы',
			null,
			'Подстраницы'
		);

		// Добавляет в боковое меню ссылку "Создать подстраницу"
		mw.util.addPortletLink(
			'p-tb',
			mw.util.getUrl( pageName, {
				action: 'edit',
				section: 'new',
				nosummary: 'yes',
				preview: 'yes',
				preload: 'Template:CreateSubpage'
			} ),
			'Создать подстраницу',
			null,
			'Создать подстраницу для этой статьи ' + wikiName + '!'
		);
	}

	// 2. В пространствах имён Участник (2), Проект/ЧТМ (4), Шаблон (10), Модуль (828), ЦК (3002) и Заготовка (3014)
	var allowedNamespaces = [ 2, 4, 10, 828, 3002, 3014 ];
	if ( allowedNamespaces.indexOf( ns ) !== -1 ) {
		// Добавляет ссылку "Создать подстраницу"
		mw.util.addPortletLink(
			'p-tb',
			mw.util.getUrl( pageName, {
				action: 'edit',
				section: 'new',
				nosummary: 'yes',
				preview: 'yes',
				preload: 'Template:CreateSubpage/2'
			} ),
			'Создать подстраницу',
			null,
			'Создать подстраницу!'
		);

		// Даёт ссылку на собственные подстраницы в этих же пространствах
		var rootPage = pageName.split( '/' )[0];
		mw.util.addPortletLink(
			'p-cactions',
			mw.util.getUrl( 'Special:PrefixIndex/:' + rootPage ),
			'Подстраницы',
			null,
			'Подстраницы'
		);
	}

	// 3. В пространстве "Подстраница" (ID 3004) возвращает на основную статью
	if ( ns === 3004 ) {
		var titleParts = title.split( '/' );
		var targetPage = '';

		// Учитываем специфику названий со слэшем в долях "1/8 финала)" и "1/4 финала)"
		if ( titleParts[1] === '8 финала)' || titleParts[1] === '4 финала)' ) {
			targetPage = titleParts[0] + '/' + titleParts[1];
		} else {
			targetPage = titleParts[0];
		}

		mw.util.addPortletLink(
			'p-cactions',
			mw.util.getUrl( targetPage ),
			'Основная страница',
			null,
			'Вернуться на корневую страницу'
		);
	}

	// 4. Ссылка на архивацию страницы в WebArchive (для всех пространств имён)
	// Динамически собираем полную каноническую ссылку на текущую страницу
	var protocol = location.protocol;
	var server = mw.config.get( 'wgServer' );
	if ( server.startsWith( '//' ) ) {
		server = protocol + server;
	}
	var canonicalUrl = server + mw.util.getUrl( pageName );

	mw.util.addPortletLink(
		'p-cactions',
		'https://web.archive.org/save/' + canonicalUrl,
		'Архивировать',
		null,
		'Создать архивную копию данной страницы на сайте WebArchive'
	);
} );