MediaWiki:Gadget-common-special-search.js
Перейти к навигации
Перейти к поиску
Замечание: Возможно, после публикации вам придётся очистить кэш своего браузера, чтобы увидеть изменения.
- Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
- Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
- Internet Explorer / Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
- Opera: Нажмите Ctrl+F5.
$(function() {
if (mw.config.get('wgCanonicalSpecialPageName') !== 'Search') return;
var searchInput = document.querySelector('#searchText input, #searchInput');
if (!searchInput) return;
var engines = {
'Bing': 'https://www.bing.com/search?q=%s+site:cyclowiki.org',
'DuckDuckGo': 'https://duckduckgo.com/?q=%s+site:cyclowiki.org',
'Google': 'https://google.com/search?q=%s+site:cyclowiki.org&hl=ru',
'Yandex': 'https://yandex.ru/yandsearch?text=%s&site=cyclowiki.org'
};
var $enginesContainer = $('<p>').attr('id', 'searchEngines');
var $textNode = $('<span>').text('Искать в (');
$enginesContainer.append($textNode);
var engineNames = Object.keys(engines);
engineNames.forEach(function(name, index) {
var url = engines[name].replace('%s', encodeURIComponent(searchInput.value));
var $link = $('<a>')
.attr('href', url)
.attr('target', '_blank')
.attr('rel', 'noopener noreferrer')
.text(name);
$enginesContainer.append($link);
if (index < engineNames.length - 1) {
$enginesContainer.append(' | ');
}
});
$enginesContainer.append(')');
$('.searchresults > .mw-search-visualclear').last().after($enginesContainer);
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 + '»')
.attr('href', $searchAllLink.attr('href') + '&prefix=' + encodeURIComponent(basePage));
$searchAllLink.after(
$('<span>').text(' | '),
$searchPrefix
);
}
}
mw.loader.using(['mediawiki.util', 'oojs-ui-core', 'oojs-ui-widgets'], function() {
var $keywordsWrapper = $('#keywords-popup-pseudolink-wrapper');
if (!$keywordsWrapper.length) return;
$('#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');
}
});
});
});
});