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 enginesvar 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 = 'Искать&nbsp;в&nbsp;(';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( '&nbsp;| ' );}}// Таблица ключевых слов для поиска: привязываем обработчик к ссылке «Ключевые слова»,// дооформляем, делаем ключевые слова кликабельнымиvar $pseudolinkWrapper = $( '#keywords-popup-pseudolink-wrapper' );if ( !$pseudolinkWrapper.length ) return;var $popup = $( '#keywords-popup' );$popup.attr( 'aria-labelledby', 'keywords-popup-pseudolink-wrapper' );$( '#mw-indicator-mw-helplink a' ).text( 'Полная справка' );var popupShownFirstTime = true;function clickOnKeydown( e ) {if ( [ 'Space', 'Enter' ].includes( e.code ) ) {e.preventDefault();this.click();}}$pseudolinkWrapper.show().find( 'a' ).removeAttr( 'title' ).attr( 'role', 'button' ).attr( 'aria-controls', 'keywords-popup' ).attr( 'aria-expanded', false ).on( 'click', function ( e ) {e.preventDefault();const isCollapsed = !$popup.hasClass( 'mwe-popups-fade-in-up' );$( this ).attr( 'aria-expanded', isCollapsed );// Используем классы [[mw:Extension:Popups]] (работают даже при выключенных// всплывающих окнах)if ( isCollapsed ) {$popup.show().removeClass( 'mwe-popups-fade-out-down' ).addClass( 'mwe-popups-fade-in-up' );if ( popupShownFirstTime ) {// Позиционируем «хвост» попапаvar $populTailPart1 = $( '#keywords-popup-tail-part1' );var $populTailPart2 = $( '#keywords-popup-tail-part2' );var popupTailPart1Left = $pseudolinkWrapper.offset().left + ( $pseudolinkWrapper.width() / 2 ) -$popup.offset().left - (( $populTailPart1.outerWidth() / 2 ) - ((parseInt( $pseudolinkWrapper.find( 'a' ).css( 'padding-left' ) ) -$( '.dropdown-icon' ).outerWidth( true )) / 2));$populTailPart1.css( 'left', popupTailPart1Left + 'px' );$populTailPart2.css( 'left', ( popupTailPart1Left - 3 ) + 'px' );}popupShownFirstTime = false;} else {$popup.removeClass( 'mwe-popups-fade-in-up' ).addClass( 'mwe-popups-fade-out-down' );setTimeout( function () {// Состояние не изменилось: ссылка «Ключевые слова» не была кликнута// в середине затуханияif ( $popup.hasClass( 'mwe-popups-fade-out-down' ) ) {$popup.hide();}}, 150 );}} ).on( 'keydown', clickOnKeydown );$popup.find( 'a' ).attr( 'target', '_blank' );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 ));} );