MediaWiki:Gadget-searchlist.js
Перейти к навигации
Перейти к поиску
Замечание: Чтобы после сохранения вступили в силу изменения стилей, перезагрузите файл //traditio.wiki/w/load.php?debug=false&lang=ru&modules=site&only=styles&skin=vector&*, если используете скин Vector, или //traditio.wiki/w/load.php?debug=false&lang=ru&modules=site&only=styles&skin=common&*, если используете скин Common.
Чтобы вступили в силу изменения скриптов, перезагрузите файл //traditio.wiki/w/load.php?debug=false&lang=ru&modules=site&only=scripts&skin=vector&*, если используете скин Vector, или //traditio.wiki/w/load.php?debug=false&lang=ru&modules=site&only=scripts&skin=common&*, если используете скин Common.
Гаджеты и импортируемые скрипты загружаются отдельными файлами.
//Утилита заменяет кнопку "Найти" на выпадающий список пространств, в которых вы часто ищете
// ВНИМАНИЕ! Не рекомендуется изменять эту утилиту, т.к. она входит в число настроек!
//var searchInNewWindow = true;
var msgThisWin, msgNewWin = 'в НОВОМ окне';
var newWinOption;
var msgSelectTitle = 'выберите пространство для поиска';
var select;
var is_gecko, is_safari;
var searchForm;
function searchList(){
if (!window.searchListInNewWin) searchListInNewWin = false;
if (!window.searchListNS)
searchListNS = [
['','найти в…'],
[-5,'в этом окне', 'переключатель, показывать ли результат в новом окне'],
['','Внешний поиск'],
['http://google.com/?q=site:traditio.ru+', 'Google tr', 'Google.ru по «Традиции»'],
['http://google.com/?q=site:www.traditio.ru+', 'Google www.tr', 'Google.ru по «Традиции»'],
['http://www.yandex.ru/yandsearch?site=http://www.traditio.ru&site_manually=true&ras=1&text=','Yandex tr', 'Yandex.ru по «Традиции»'],
['','MediaWiki'],
[-1,'По умолчанию'],
[0,'Статьи'],
[1,'Статьи (обс)'],
[2,'Участник'],
[3,'Участник (обс)'],
[4,'Традиция'],
[5,'Традиция (обс)'],
[6,'Изображение'],
[7,'Изобр. (обс)'],
[8,'Mediawiki'],
[9,'Mediawiki (обс)'],
[10,'Шаблон'],
[11,'Шаблон (обс)']
];
if (!window.searchListShortNS)
searchListShortNS = {
'u':'User',
'i':'Image',
'ш':'Шаблон',
'c':'Category',
'me':'MediaWiki',
'тр':'Традиция',
't':'Традиция',
'у':'Участник',
'и':'Изображение',
'к':'Категория',
'пл':'Портал',
'по':'Портал'
}
searchForm = document.getElementById('searchform');
if (!searchForm) return;
/*
if (typeof (wgVectorPreferences) === 'undefined') return;
if (wgVectorPreferences['simplesearch']['enable'] === 1) return;
*/
if (searchForm.fulltext !== undefined && searchForm.fulltext !== null) {
searchButton = searchForm.fulltext;
} else {
searchButton = searchForm.searchButton;
}
//create namespace selector hidden input
var searchHidden = document.createElement('input');
searchHidden.type = 'hidden';
searchHidden.value = '1';
searchForm.searchInput.parentNode.appendChild(searchHidden);
//create select
select = document.createElement('select');
var item, opt, text;
for (var i=0; i<searchListNS.length; i++){
item = searchListNS[i];
opt = new Option(item[1], item[0]);
opt.title = item[2] || '';
if (i == 0)
opt.style.color = '#222222';
else if (opt.value == -5){
newWinOption = opt;
msgThisWin = opt.text;
}else if (opt.value == ''){
opt.disabled = true;
opt.style.color = 'gray';
opt.style.paddingLeft = '10px';
}else
opt.txt = ' ' + opt.txt;
select.options[select.options.length] = opt;
}
//select.selectedIndex = 0;
with (select.style){ margin = '0'; marginTop = '2px'; fontSize = '90%'}
setTarget (searchForm, searchListInNewWin, select);
searchForm.searchInput.parentNode.insertBefore(select, searchHidden);
//hide standard Search button if not IE //if (is_opera || is_gecko){
if (navigator.userAgent.indexOf('MSIE') == -1){
searchButton.style.display = 'none';
searchForm.go.title = searchForm.go.value;
searchForm.go.value = ' → ';
searchForm.go.style.width = '30px';
select.style.width = '90px';
}
select.title = msgSelectTitle;
searchForm.go.title += ' (' + (is_gecko||is_safari?'Ctrl':'Shift') + ': ' + msgNewWin + ')';
//events
addHandler(searchForm.search, 'keydown', detectShift); //if Enter pressed
addHandler(searchForm.go, 'mouseup', detectShift); //Go clicked
select.onchange = onSelect;
//addHandler(select, 'click', detectShift)
addHandler(searchForm, 'submit', shortNS);
}
function detectShift(e){ //open in new win if shift is pressed
e = e || window.event;
searchForm.target = (searchListInNewWin || e.shiftKey
|| (is_gecko||is_safari) && e.ctrlKey) ? '_blank' : '';
}
function onSelect(e){
if (this.selectedIndex == 0 || this.options[this.selectedIndex].disabled){
this.selectedIndex = 0;
return;
}
var val = this.options[this.selectedIndex].value;
this.selectedIndex = 0;
if (! /^-?\d+$/.test(val)){ //not a number => external search engine
var url = val + encodeURIComponent(searchForm.search.value);
if (searchListInNewWin) window.open(url);
else window.location = url;
}else if (val == -5){ //new window switch
searchListInNewWin = !searchListInNewWin;
setTarget (searchForm, searchListInNewWin, select);
}else if (searchForm.search.value == ''){
searchForm.search.value = '?';
}else { //MediaWiki search
searchHidden.name = (val == -1) ? '' : 'val' + val;
detectShift(e); //doesn't work in FF/Safari anyway
searchButton.click();
}
}
function setTarget (form, in_new, select) {
form.target = in_new ? '_blank' : '';
select.style.backgroundColor = in_new ? '#F5F5FF' : '';
newWinOption.text = ' (' + (in_new ? msgNewWin : msgThisWin) + ')';
}
function shortNS(){ //expands 'u:test' into 'User:test'
var txt = searchForm.search.value, k;
if ((k=txt.indexOf(':'))==-1 || txt.substring(0,1) == ' ') return;
var pref = txt.substring(0,k).toLowerCase();
if (searchListShortNS[pref])
searchForm.search.value = searchListShortNS[pref] + txt.substring(k);
return true;
}
$(searchList);