MediaWiki:Gadget-common-special-search.js
Перейти к навигации
Перейти к поиску
JS-код ниже относится к скрытому гаджету common-special-search. Связанный CSS-файл: MediaWiki:Gadget-common-special-search.css. Он включён по умолчанию.
После сохранения или недавних изменений очистите кэш браузера.
// Не удаляйте проверку на название спецстраницы
$( function () {
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) !== 'Search' ) {
return;
}
// External search engines
var searchInput = document.querySelector( '#searchText input' );
var list = {
'Google': 'https://google.com/search?q=%s+site:ru.wikipedia.org&hl=ru',
'Яндексе': 'https://yandex.ru/yandsearch?text=%s&site=ru.wikipedia.org',
'Bing': 'https://www.bing.com/search?q=%s+site:ru.wikipedia.org',
};
var listKeys = Object.keys( list );
var searchEngines = document.createElement( 'p' );
searchEngines.id = 'searchEngines';
searchEngines.innerHTML = 'Искать в (';
if (!searchInput) return;
for ( var i in list ) {
var link = document.createElement( 'a' );
link.href = list[ i ].replace( '%s', encodeURIComponent( searchInput.value ) );
link.textContent = i;
searchEngines.appendChild( link );
if ( listKeys.indexOf( i ) < listKeys.length - 1 ) {
searchEngines.appendChild( document.createTextNode( ' | ' ) );
}
}
searchEngines.appendChild(document.createTextNode( ')' ));
$( '.searchresults > .mw-search-visualclear' ).last().after( searchEngines );
// Добавить ссылку «Искать на подстраницах» в поиск с префиксом
var urlParams = new URLSearchParams( location.search );
var prefix = urlParams.get( 'prefix' );
if ( prefix && prefix.includes( '/' ) ) {
var basePage = prefix.split( '/' )[ 0 ];
var $searchAllLink = $( '#mw-content-subtitle a' );
if ( $searchAllLink.length ) {
var $searchPrefix = $searchAllLink.clone();
$searchPrefix.text( 'Искать на подстраницах «' + basePage + '»' );
$searchPrefix.attr( 'href', $searchPrefix.attr( 'href' ) + '&prefix=' + encodeURIComponent( basePage ) );
$searchAllLink.after( $searchPrefix );
$searchAllLink.after( ' | ' );
}
}
function clickOnKeydown( e ) {
if ( [ 'Space', 'Enter' ].includes( e.code ) ) {
e.preventDefault();
this.click();
}
}
// Таблица ключевых слов для поиска
mw.loader.using( [
'mediawiki.util',
'oojs-ui-core',
'oojs-ui-widgets'
], () => {
var $pseudolinkWrapper = $( '#keywords-popup-pseudolink-wrapper' );
if ( !$pseudolinkWrapper.length ) return;
var $helpLink = $( '#mw-indicator-mw-helplink a' );
$helpLink.html( $helpLink.html().replace( 'Справка', 'Полная справка' ) );
mw.util.addCSS( '.mw-indicators { display: flex; align-items: center; }' );
var keywordsButton = new OO.ui.PopupButtonWidget( {
id: 'keywords-button',
label: 'Ключевые слова',
indicator: 'down',
flags: [
'progressive'
],
icon: 'keywords',
framed: false,
popup: {
$content: $( '<div>' ).html( $( '#keywords-popup' ).html() ),
padded: true,
align: 'down',
width: 420
}
} );
keywordsButton.$element.appendTo( $( '#mw-indicator-0-keywords-popup .mw-parser-output' ) );
var $searchBox = $( '#searchText input' );
var pseudolinkHref = $pseudolinkWrapper.find( 'a' ).attr( 'href' );
$( '.keywords-popup-keyword' ).wrap( $( '<a>' )
.attr( 'href', pseudolinkHref )
.attr( 'role', 'button' )
.attr( 'title', 'Вставить ключевое слово в поле поиска' )
.on( 'click', function( e ) {
e.preventDefault();
$searchBox.val( $searchBox.val() + $( this ).find( '.keywords-popup-keyword' )
.data( 'keyword' ).replace( / /g, ' ' ) ).focus();
} )
.on( 'keydown', clickOnKeydown )
);
} );
} );