MediaWiki:Gadget-interlangSearch.js[править введение]

Материал из Minecraft Wiki
Перейти к навигации Перейти к поиску
[создать | история | обновить]Документация
У этого скрипта нет документации. Если вы знаете, как использовать этот скрипт, пожалуйста, добавьте соответствующую информацию.

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

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl-F5 или Ctrl-R (⌘-R на Mac)
  • Google Chrome: Нажмите Ctrl-Shift-R (⌘-Shift-R на Mac)
  • Internet Explorer: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl-F5
  • Opera: Выберите очистку кэша в меню Инструменты → Настройки
const i18n = {
	de: {
		suggest: 'Siehe auch die Seiten passend zu „$1“ in anderssprachigen Wikis.',
		langlink: 'Diese Seite existiert als „$1“ in diesem Wiki.',
		section: ' (Abschnitt $1)',
		language: ' ($1)'
	},
	en: {
		suggest: 'See also pages matching "$1" from other language wikis.',
		langlink: 'This page exists as "$1" on this wiki!',
		section: ' (section $1)',
		language: ' ($1)'
	},
	es: {
		suggest: 'Mira también páginas que coinciden con "$1" en wikis de otros idiomas.',
		langlink: '¡Esta página existe como "$1" en esta wiki!',
		section: ' (sección $1)',
		language: ' ($1)'
	},
	ja: {
		suggest: '他の言語版で見つかった「$1」も参照してください。',
		langlink: 'このページは「$1」としてこのWikiに存在します。',
		section: '($1の節)',
		language: '($1)'
	},
	ko: {
		suggest: '"$1"의 다른 언어 위키 검색 결과도 참고하세요.',
		langlink: '이 페이지는 이 위키에 "$1" 문서로 존재합니다!',
		section: ' ($1 문단)',
		language: ' ($1)'
	},
	nl: {
		suggest: 'Zoek naar pagina\'s die overeenkomen met "$1" op anderstalige wiki\'s',
		langlink: 'Deze pagina bestaat als "$1" op deze wiki!',
		section: ' (gedeelte $1)',
		language: ' ($1)'
	},
	pt: {
		suggest: 'Veja também páginas correspondentes a "$1" nas wikis de outros idiomas.',
		langlink: 'Esta página existe como "$1" nessa wiki!',
		section: ' (seção $1)',
		language: ' ($1)'
	},
	th: {
		suggest: 'ดูเพิ่มหน้าที่ตรงกับ "$1" จากวิกิภาษาอื่น',
		langlink: 'หน้านี้มีอยู่ใน "$1" บนวิกิแห่งนี้!',
		section: ' (ส่วน $1)',
		language: ' ($1)'
	},
	'zh-hans': {
		suggest: '另见其他语言wiki中与“$1”相匹配的页面。',
		langlink: '此页面在本wiki上已作为“$1”存在!',
		section: '(章节$1)',
		language: '($1)'
	},
	'zh-hant': {
		suggest: '參見其他語言wiki中與「$1」相符的頁面。',
		langlink: '此頁面在本wiki上已作為「$1」存在!',
		section: '(章節$1)',
		language: '($1)'
	},
};

mw.loader.using( [
	'mediawiki.util',
	'mediawiki.api',
	'mediawiki.ForeignApi',
	'ext.gadget.global-utils'
] ).then( function(require) {
	const globalUtils = require( 'ext.gadget.global-utils' );

	const config = mw.config.get( [
		'wgCanonicalSpecialPageName',
		'searchTerm',
		'wgUserId',
		'wgUserLanguage',
		'wgContentLanguage'
	] );

	if ( config.wgCanonicalSpecialPageName !== 'Search' || $('.searchresults a.mw-nextlink').length ) return;

	const searchTerm = config.searchTerm.trim();
	if ( !searchTerm ) return;

	const wikis = Object.values( globalUtils.wikis ).filter( wiki => wiki.url !== config.wgServer );
	const currentWiki = config.wgContentLanguage;
	const i18nLang = globalUtils.localization( i18n );
	
	Promise.allSettled( wikis.map(checkWiki) ).then( function(results) {
		var pages = [];
		results.forEach( function(result, i) {
			if ( result.status !== 'fulfilled' ) return;
			var query = result.value.query;
			var page = query.pages[0];
			if ( page.missing || page.invalid ) return;
			pages.push( {
				wiki: wikis[i],
				title: ( query.converted ? query.converted[0].from : page.title ),
				section: ( query.redirects && query.redirects[0].tofragment ),
				langlink: ( page.langlinks && page.langlinks[0].title )
			} );
		} );
		if ( !pages.length ) return;
		
		$('.searchresults .mw-search-visualclear:last-of-type').before(
			$('<div class="mw-search-visualclear">'),
			$('<div class="searchdidyoumean">').text(mw.format(i18nLang.suggest, searchTerm)).css('margin-top', '32px'),
			$('<ul class="mw-search-results">').css('margin-top', '24px').append( pages.map( function(page) {
				return $('<li class="mw-search-result">').append(
					$('<div class="mw-search-result-heading">').append(
						$('<a>').attr('href', page.wiki.url + mw.util.getUrl(page.title)).attr('title', page.title + ' – ' + page.wiki.name).append(
							mw.html.escape(page.title).replace(searchTerm, '<span class="searchmatch">' + searchTerm + '</span>')
						),
						( page.section ? $('<span class="searchalttitle">').append(
							mw.html.escape(i18nLang.section.split('$1')[0]),
							$('<a>').attr('href', page.wiki.url + mw.util.getUrl(page.title + '#' + page.section)).attr('title', page.title + ' – ' + page.wiki.name).append(
								mw.html.escape(page.section).replace(searchTerm, '<span class="searchmatch">' + searchTerm + '</span>')
							).css('font-size', 'unset'),
							mw.html.escape(i18nLang.section.split('$1')[1])
						) : '' ),
						$('<span class="searchalttitle">').text(mw.format(i18nLang.language, page.wiki.name))
					),
					( page.langlink ? $('<div class="searchresult">').append(
						mw.html.escape(i18nLang.langlink.split('$1')[0]),
						$('<a class="searchmatch">').attr('href', mw.util.getUrl(page.langlink)).attr('title', page.langlink.split('#')[0]).text(page.langlink).css('font-size', 'unset'),
						mw.html.escape(i18nLang.langlink.split('$1')[1])
					) : '' )
				);
			} ) )
		);
	} );
	
	function checkWiki(wiki) {
		return new mw.ForeignApi( wiki.url + '/api.php', {
			anonymous: true
		} ).get( {
			action: 'query',
			redirects: true,
			converttitles: true,
			titles: [searchTerm],
			prop: 'langlinks',
			lllang: currentWiki,
			formatversion: 2,
			requestid: 'gadget-interlangSearch'
		} );
	}
} );