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

м 1 версия импортирована: поисковики в интерфейс поиска при отсутствии статьи в Абсе
Нет описания правки
Строка 1: Строка 1:
// Не удаляйте проверку на название спецстраницы
$(function() {
$( function () {
    if (mw.config.get('wgCanonicalSpecialPageName') !== 'Search') return;
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) !== 'Search' ) {
return;
}


// External search engines
    var searchInput = document.querySelector('#searchText input, #searchInput');
var searchInput = document.querySelector( '#searchText input' );
    if (!searchInput) return;
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' );
    var engines = {
searchEngines.id = 'searchEngines';
        'Bing': 'https://www.bing.com/search?q=%s+site:absurdopedia.wiki',
searchEngines.innerHTML = 'Искать в (';
        'DuckDuckGo': 'https://duckduckgo.com/?q=%s+site:absurdopedia.wiki',
if (!searchInput) return;
        'Google': 'https://google.com/search?q=%s+site:absurdopedia.wiki&hl=ru',
        'Yandex': 'https://yandex.ru/yandsearch?text=%s&site=absurdopedia.wiki'
    };


for ( var i in list ) {
    var $enginesContainer = $('<p>').attr('id', 'searchEngines');
var link = document.createElement( 'a' );
    var $textNode = $('<span>').text('Искать в (');
link.href = list[ i ].replace( '%s', encodeURIComponent( searchInput.value ) );
    $enginesContainer.append($textNode);
link.textContent = i;
   
searchEngines.appendChild( link );
    var engineNames = Object.keys(engines);
    engineNames.forEach(function(name, index) {
        var url = engines[name].replace('%s', encodeURIComponent(searchInput.value));


if ( listKeys.indexOf( i ) < listKeys.length - 1 ) {
        var $link = $('<a>')
searchEngines.appendChild( document.createTextNode( ' | ' ) );
            .attr('href', url)
}
            .attr('target', '_blank')
}
          .attr('rel', 'noopener noreferrer')
searchEngines.appendChild(document.createTextNode( ')' ));
          .text(name);


$( '.searchresults > .mw-search-visualclear' ).last().after( searchEngines );
        $enginesContainer.append($link);
// Добавить ссылку «Искать на подстраницах» в поиск с префиксом
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;| ' );
}
}
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' );
        if (index < engineNames.length - 1) {
$helpLink.html( $helpLink.html().replace( 'Справка', 'Полная справка' ) );
            $enginesContainer.append(' | ');
        }
mw.util.addCSS( '.mw-indicators { display: flex; align-items: center; }' );
    });
var keywordsButton = new OO.ui.PopupButtonWidget( {
 
id: 'keywords-button',
    $enginesContainer.append(')');
label: 'Ключевые слова',
   
indicator: 'down',
    $('.searchresults > .mw-search-visualclear').last().after($enginesContainer);
flags: [
   
'progressive'
    var urlParams = new URLSearchParams(location.search);
],
    var prefix = urlParams.get('prefix');
icon: 'keywords',
 
framed: false,
    if (prefix && prefix.includes('/')) {
popup: {
        var basePage = prefix.split('/')[0];
$content: $( '<div>' ).html( $( '#keywords-popup' ).html() ),
        var $searchAllLink = $('#mw-content-subtitle a');
padded: true,
 
align: 'down',
        if ($searchAllLink.length) {
width: 420
            var $searchPrefix = $searchAllLink.clone();
}
            $searchPrefix
} );
                .text('Искать на подстраницах «' + basePage + '»')
keywordsButton.$element.appendTo( $( '#mw-indicator-0-keywords-popup .mw-parser-output' ) );
                .attr('href', $searchAllLink.attr('href') + '&prefix=' + encodeURIComponent(basePage));
 
var $searchBox = $( '#searchText input' );
            $searchAllLink.after(
var pseudolinkHref = $pseudolinkWrapper.find( 'a' ).attr( 'href' );
                $('<span>').text(' | '),
$( '.keywords-popup-keyword' ).wrap( $( '<a>' )
                $searchPrefix
.attr( 'href', pseudolinkHref )
            );
.attr( 'role', 'button' )
        }
.attr( 'title', 'Вставить ключевое слово в поле поиска' )
    }
.on( 'click', function( e ) {
   
e.preventDefault();
    mw.loader.using(['mediawiki.util', 'oojs-ui-core', 'oojs-ui-widgets'], function() {
$searchBox.val( $searchBox.val() + $( this ).find( '.keywords-popup-keyword' )
        var $keywordsWrapper = $('#keywords-popup-pseudolink-wrapper');
.data( 'keyword' ).replace( / /g, ' ' ) ).focus();
        if (!$keywordsWrapper.length) return;
} )
       
.on( 'keydown', clickOnKeydown )
        $('#mw-indicator-mw-helplink a').text(function(i, text) {
);
            return text.replace('Справка', 'Полная справка');
} );
        });
} );
 
        mw.util.addCSS('.mw-indicators { display: flex; align-items: center; }');
 
        var keywordsButton = new OO.ui.PopupButtonWidget({
            label: 'Ключевые слова',
            indicator: 'down',
            flags: ['progressive'],
            icon: 'keywords',
            framed: false,
            popup: {
                $content: $('<div>').append($('#keywords-popup').children().clone()),
                padded: true,
                align: 'down',
                width: 420
            }
        });
 
        keywordsButton.$element.appendTo('#mw-indicator-0-keywords-popup .mw-parser-output');
 
        var $searchBox = $('#searchText input');
        $('.keywords-popup-keyword').each(function() {
        var $keyword = $(this);
        var keywordText = $keyword.data('keyword').replace(/ /g, ' ');
 
        $keyword
        .attr('role', 'button')
        .attr('tabindex', '0')
        .attr('title', 'Вставить ключевое слово в поле поиска')
        .css('cursor', 'pointer')
        .on('click keydown', function(e) {
          if (e.type === 'click' || e.key === ' ' || e.key === 'Enter') {
            e.preventDefault();
        $searchBox.val($searchBox.val() + keywordText).trigger('focus');
            }
        });
      });
    });
});