MediaWiki:Gadget-common-special-search.js: различия между версиями
м 1 версия импортирована: поисковики в интерфейс поиска при отсутствии статьи в Абсе |
Нет описания правки |
||
| Строка 1: | Строка 1: | ||
$(function() { | |||
$( 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:absurdopedia.wiki', | |||
'DuckDuckGo': 'https://duckduckgo.com/?q=%s+site:absurdopedia.wiki', | |||
'Google': 'https://google.com/search?q=%s+site:absurdopedia.wiki&hl=ru', | |||
'Yandex': 'https://yandex.ru/yandsearch?text=%s&site=absurdopedia.wiki' | |||
}; | |||
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'); | |||
} | |||
}); | |||
}); | |||
}); | |||
}); | |||