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

Материал из ЧТМ
Перейти к навигации Перейти к поиску
аттрибуция правки
Нет описания правки
 
Строка 4: Строка 4:
             [[Участник:Септумулей]]
             [[Участник:Септумулей]]
             [[Участник:Ла Ротьер]]
             [[Участник:Ла Ротьер]]
             [[Участник:Ламантепер]]*/
             [[Участник:Ламантепер]]
            [[Участник:Diman Russkov]]*/


// В основном пространстве даёт ссылку на пространство имён "Подстраница":
mw.loader.using( 'mediawiki.util' ).then( function() {
mw.loader.using( 'mediawiki.util' ).done( function() {
var ns = mw.config.get( 'wgNamespaceNumber' );
if (mw.config.get('wgNamespaceNumber') === 0) {                                 // Пространство имён
var pageName = mw.config.get( 'wgPageName' );
mw.util.addPortletLink                                                     // Добавить ссылку
var title = mw.config.get( 'wgTitle' );
( 'p-cactions',                                                             // Тип ссылки (всплывающее меню)
var wikiName = mw.config.get( 'wgSiteName' ) || 'вики';
'http://thirdworldcup.ru/index.php?title=Special:PrefixIndex/Подстраница:' // Сама
 
+ encodeURIComponent(mw.config.get('wgPageName')),                         //      ссылка
// 1. В основном пространстве имён (ID 0)
'Подстраницы',                                                             // Отображаемый текст
if ( ns === 0 ) {
null,                                                                       // HTML-идентификатор (пока отсутствует)
// Ссылка на "Подстраницы" в пространстве имён "Подстраница" (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)
mw.loader.using( 'mediawiki.util' ).done( function() {
var allowedNamespaces = [ 2, 4, 10, 828, 3002, 3014 ];
if (mw.config.get('wgNamespaceNumber') === 0 ) {
if ( allowedNamespaces.indexOf( ns ) !== -1 ) {
mw.util.addPortletLink  
// Добавляет ссылку "Создать подстраницу"
( 'p-tb',  
mw.util.addPortletLink(
'http://thirdworldcup.ru/index.php?title='
'p-tb',
+ encodeURIComponent(mw.config.get('wgPageName'))
mw.util.getUrl( pageName, {
+ '&action=edit&section=new&nosummary=yes&preview=yes&preload=Template:CreateSubpage',
action: 'edit',
'Создать подстраницу',  
section: 'new',
null,  
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) возвращает на основную статью
mw.loader.using( 'mediawiki.util' ).done( function() {
if ( ns === 3004 ) {
if (mw.config.get('wgNamespaceNumber') === 2 ||
var titleParts = title.split( '/' );
mw.config.get('wgNamespaceNumber') === 4    ||
var targetPage = '';
mw.config.get('wgNamespaceNumber') === 10    ||
 
mw.config.get('wgNamespaceNumber') === 828  ||
// Учитываем специфику названий со слэшем в долях "1/8 финала)" и "1/4 финала)"
mw.config.get('wgNamespaceNumber') === 3002  ||
if ( titleParts[1] === '8 финала)' || titleParts[1] === '4 финала)' ) {
mw.config.get('wgNamespaceNumber') === 3014 ) {
targetPage = titleParts[0] + '/' + titleParts[1];
mw.util.addPortletLink
} else {
( 'p-tb',
targetPage = titleParts[0];
'http://thirdworldcup.ru/index.php?title='
}
+ encodeURIComponent(mw.config.get('wgPageName'))
+ '&action=edit&section=new&nosummary=yes&preview=yes&preload=Template:CreateSubpage/2',
'Создать подстраницу',
null,
'Создать подстраницу!');
}
} );


// В пространствах имён "Участник", "ЧТМ", "Шаблон", "Модуль", "ЦК" и "Заготовка" даёт ссылку на собственные подстраницы:
mw.util.addPortletLink(
mw.loader.using( 'mediawiki.util' ).done( function() {
'p-cactions',
if (mw.config.get('wgNamespaceNumber') === 2 ||
mw.util.getUrl( targetPage ),
mw.config.get('wgNamespaceNumber') === 4    ||
'Основная страница',
mw.config.get('wgNamespaceNumber') === 10    ||
null,
mw.config.get('wgNamespaceNumber') === 828  ||
'Вернуться на корневую страницу'
mw.config.get('wgNamespaceNumber') === 3002  ||
);
mw.config.get('wgNamespaceNumber') === 3014) {
mw.util.addPortletLink  
( 'p-cactions',  
'http://thirdworldcup.ru/index.php?title=Special:PrefixIndex/:'
+ encodeURIComponent(mw.config.get('wgPageName').split("/")[0]),  
'Подстраницы',  
null,  
'Подстраницы');
}
}
} );


// В пространстве "Подстраница" возвращает на основную статью:
// 4. Ссылка на архивацию страницы в WebArchive (для всех пространств имён)
mw.loader.using( 'mediawiki.util' ).done( function() {
// Динамически собираем полную каноническую ссылку на текущую страницу
    // Для статей о матчах плей-офф, названия которых заканчиваются на 1/8 финала) и 1/4 финала):
var protocol = location.protocol;
if (mw.config.get('wgNamespaceNumber') === 3004) {
var server = mw.config.get( 'wgServer' );
if (mw.config.get('wgTitle').split("/")[1] === "8 финала)") {
if ( server.startsWith( '//' ) ) {
mw.util.addPortletLink
server = protocol + server;
( 'p-cactions',
'http://thirdworldcup.ru/index.php?title='
+ encodeURIComponent(mw.config.get('wgTitle').split("/")[0]) + "/" + encodeURIComponent(mw.config.get('wgTitle').split("/")[1]),
'Основная страница',
null,
'Вернуться на корневую страницу');
}
else
if (mw.config.get('wgTitle').split("/")[1] === "4 финала)") {
mw.util.addPortletLink
( 'p-cactions',
'http://thirdworldcup.ru/index.php?title='  
+ encodeURIComponent(mw.config.get('wgTitle').split("/")[0]) + "/" + encodeURIComponent(mw.config.get('wgTitle').split("/")[1]),
'Основная страница',
null,
'Вернуться на корневую страницу');
}
    // Для остальных статей:
else
mw.util.addPortletLink
( 'p-cactions',
'http://thirdworldcup.ru/index.php?title='
+ encodeURIComponent(mw.config.get('wgTitle').split("/")[0]),
'Основная страница',
null,
'Вернуться на корневую страницу');
}
}
} );
var canonicalUrl = server + mw.util.getUrl( pageName );


// Даёт ссылку на архивацию страницы в WebArchive:
mw.util.addPortletLink(
mw.loader.using( 'mediawiki.util' ).done( function() {
'p-cactions',
mw.util.addPortletLink                                                     
'https://web.archive.org/save/' + canonicalUrl,
( 'p-cactions',                                                            
'Архивировать',
'https://web.archive.org/save/http://thirdworldcup.ru/index.php/'
null,
+ encodeURIComponent(mw.config.get('wgPageName')),                        
'Создать архивную копию данной страницы на сайте WebArchive'
'Архивировать',                                                            
);
null,                                                                      
'Создать архивную копию данной страницы на сайте WebArchive');  
} );
} );

Текущая версия от 21:03, 24 мая 2026

/* Скрипт, добавляющий в меню "Ещё" и боковую панель ссылки на подстраницы
Автор - [[Участник: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'
	);
} );