MediaWiki:Gadget-advsearch.js
Megjegyzés: közzététel után frissítened kell a böngésződ gyorsítótárát, hogy lásd a változásokat.
- Firefox / Safari: tartsd lenyomva a Shift gombot és kattints a Frissítés gombra a címsorban, vagy használd a Ctrl–F5 vagy Ctrl–R (Macen ⌘–R) billentyűkombinációt
- Google Chrome: használd a Ctrl–Shift–R (Macen ⌘–Shift–R) billentyűkombinációt
- Internet Explorer / Edge: tartsd nyomva a Ctrl-t, és kattints a Frissítés gombra, vagy nyomj Ctrl–F5-öt
- Opera: Nyomj Ctrl–F5-öt
/**
* Recherche avancée
*
* Remplace la boîte de recherche par une avec beaucoup plus de possibilités
* (raccourcis, recherche dans toutes les langues et projets, et quelques autres sites)
*
* Auteur : Seb35
* Date de dernière révision : 10 novembre 2007
*
* Documentation de la fonction Recherche avancée : voir [[:fr:Utilisateur:Seb35/Scripts]]
* [[:fr:Catégorie:MediaWiki:Fonction Monobook en JavaScript]]
*
* Source: [[:fr:MediaWiki:Gadget-AdvancedResearch.js]]
*/
////////////////////// ZONE PERSONNALISABLE //////////////////////
// Voir aussi [[:fr:Utilisateur:Seb35/Scripts]]
var adSearchProject; // Projet par défaut - par défaut le projet courant - ex : 'wikipedia.org', 'meta.wikimedia.org'
var adSearchLang0; // Langue de la première case - par défaut la langue du projet courant (meta : <nowiki>''</nowiki>) - ex : 'fr', 'zh-classical', false (pour désactiver)
var adSearchLang0project; // Projet pour la première case - par défaut le projet par défaut ci-dessus
var adSearchLang0name; // Nom de la première case affiché - par défaut la langue
var adSearchLang1; // Idem pour la deuxième case
var adSearchLang1project;
var adSearchLang1name;
var adSearchLang2; // Idem pour la troisième case
var adSearchLang2project;
var adSearchLang2name;
var adSearchInstantTitle; // Afficher automotiquement le titre de la page quand on écrit '_' dans la recherche - par défaut activé
var adSearchSametab; // Ouvrir dans le même onglet - par défaut désactivé
var adSearchShowtab; // Ouvrir l'onglet supplémentaire en avant-plan - par défaut désactivé
var adSearchButtons; // Boutons de recherche - par défaut ['l','w','g','reset','c'] - voir le tableau adresses dans le code
var adSearchDefault; // Recherche par défaut lorsqu'on appuie sur Entrée - par défaut 'l'
var adSearchClear; // Effacer après x secondes (x >= 0), -1 pour ne pas effacer - par défaut -1
var adSearchAdresses; // Ajouter des adresses - voir le tableau adresses dans le code
var adSearchOpenOptions; // Options passées lors de l'ouverture d'une fenêtre
var adSearchShortcuts; // Remplacer les raccourcis
///////////////// FIN DE LA ZONE PERSONNALISABLE /////////////////
/*********************************/
/* Recherche avancée multilingue */
/* Auteur : Seb35 */
/*********************************/
function isset(va, dv) { if(va !== undefined) return va; else return dv; }
var server = mw.config.get( 'wgServer' );
adSearchProject = isset(adSearchProject, server.replace(/.*\/\/(?:((?:commons|incubator|meta|species|www)\.|wikimediafoundation)|\w*\.)(\w*\.org)/i, '$1$2'));
adSearchLang0 = isset(adSearchLang0, server.match(/.*\/\/(commons|incubator|meta|species|wikimediafoundation|www)/i) ? '' : server.match(/.*\/\/([a-z-]*)\./i)[1]);
adSearchLang0project = isset(adSearchLang0project, adSearchProject);
adSearchLang0name = isset(adSearchLang0name, (adSearchLang0 ? adSearchLang0 : adSearchLang0project.charAt(0)));
adSearchLang1 = isset(adSearchLang1, (adSearchLang0 != 'hu' ? 'hu' : 'en'));
adSearchLang1project = isset(adSearchLang1project, adSearchProject);
adSearchLang1name = isset(adSearchLang1name, (adSearchLang1 ? adSearchLang1 : adSearchLang1project.charAt(0)));
adSearchLang2 = isset(adSearchLang2, (adSearchLang0 != 'en' && adSearchLang0 != 'hu' ? 'en' : 'de'));
adSearchLang2project = isset(adSearchLang2project, adSearchProject);
adSearchLang2name = isset(adSearchLang2name, (adSearchLang2 ? adSearchLang2 : adSearchLang2project.charAt(0)));
adSearchInstantTitle = isset(adSearchInstantTitle, true);
adSearchSametab = isset(adSearchSametab, true);
adSearchShowtab = isset(adSearchShowtab, false);
adSearchButtons = isset(adSearchButtons, ['u', 'k', 'pi', 'g', 'gi']);
adSearchDefault = isset(adSearchDefault, 'l');
adSearchClear = isset(adSearchClear, -1);
adSearchAdresses = isset(adSearchAdresses, []);
adSearchOpenOptions = isset(adSearchOpenOptions, 'menubar=yes,location=yes,resizable=yes,scrollbars=yes,status=yes');
var adSearchCompteur, adSearchDelete, adSearchDash = 0, adSearchHistory = [], adSearchIndexH;
$(function advancedResearch_main() {
var a = document.getElementById('p-search').getElementsByTagName('div')[0];
var texte = '<form id="searchform" name="searchform">'
+ '<input type="text" id="searchInput" name="searchInput" value="" ' + (adSearchInstantTitle ? 'onkeyup="replaceunder();" onmouseup="replaceunder();" ' : '') + 'onkeypress="check(false, event);" onfocus="clearTimeout(adSearchDelete);" accesskey="c" style="font-size:95%;" /><br />'
+ '<label id="adlangall"><input type="radio" name="langselect" id="adlangalli" />mind</label>'
+ '<label id="adlang0"><input type="radio" checked="checked" name="langselect" id="adlang0i" />' + adSearchLang0name + '</label>'
+ '<label id="adlang1"' + (adSearchLang1 === false ? ' style="display:none;"' : '') + '><input type="radio" name="langselect" id="adlang1i" />' + adSearchLang1name + '</label>'
+ '<label id="adlang2"' + (adSearchLang2 === false ? ' style="display:none;"' : '') + '><input type="radio" name="langselect" id="adlang2i" />' + adSearchLang2name + '</label>'
+ (adSearchLang1 || adSearchLang2 || typeof adSearchLang1 != 'boolean' || typeof adSearchLang2 != 'boolean' ? '<br id="adbr" />' : '')
+ '<span id="adlangother"><input type="radio" name="langselect" onfocus="if(!document.searchform.adotherlang.value) document.searchform.adotherlang.focus();" style="vertical-align:top;" />'
+ '<input type="text" name="adotherlang" value="" size="2" maxlength="12" onkeypress="check(true, event);" onblur="if(document.searchform[5].checked && !document.searchform.adotherlang.value) document.searchform[2].checked = true;" style="font-size:95%;" /></span>'
+ '<input type="checkbox" id="adsametab" name="mode" style="vertical-align:top;" onclick="if(document.searchform.mode.checked) document.searchform.thiswindow.style.visibility = \'hidden\'; else document.searchform.thiswindow.style.visibility = \'visible\';"' + (adSearchSametab ? ' checked="checked"' : '') + ' />'
+ '<input type="checkbox" id="adshowtab" name="thiswindow" style="vertical-align:top;' + (adSearchSametab ? ' visibility:hidden;' : '') + '"' + (adSearchShowtab ? ' checked="checked"' : '') + ' /><br />';
for (var i=0; i<(adSearchButtons.length); i++) {
if (adSearchButtons[i] == 'reset')
texte = texte + '<input type="button" id="adreset" value="r" onclick="if(document.searchform.searchInput.value) document.searchform.searchInput.value = \'\'; else { document.searchform.adotherlang.value = \'\'; document.searchform[2].checked = true; } document.searchform.searchInput.focus(); adSearchDash = 0;" style="font-size:95%;" />';
else
texte = texte + '<input type="'+(i==0?'submit':'button')+'" id="adbutton' + (i+1) + '" value="' + adSearchButtons[i].charAt(0) + '" onclick="go(\'' + adSearchButtons[i] + '\'); return false;" style="font-size:95%;" />';
}
texte += '</form>';
a.innerHTML = texte;
});
/*************************/
/* Fonctions auxiliaires */
/* Auteur : Seb35 */
/*************************/
function check(frombarlang, e) {
if (e.keyCode == 13) {
if(document.searchform[5].checked && !document.searchform.adotherlang.value) document.searchform[2].checked = true;
} else if (frombarlang && !document.searchform[5].checked && e.keyCode != 9) {
document.searchform[5].checked = true;
}
if (!frombarlang && (e.keyCode == 35 || e.keyCode == 36) && adSearchHistory.length) {
if(!document.searchform.searchInput.value && e.keyCode == 36) {
adSearchIndexH = 0; document.searchform.searchInput.value = adSearchHistory[0];
} else if (document.searchform.searchInput.value == adSearchHistory[adSearchIndexH] && e.keyCode == 36 && adSearchIndexH < adSearchHistory.length-1) {
adSearchIndexH++;
document.searchform.searchInput.value = adSearchHistory[adSearchIndexH];
} else if (document.searchform.searchInput.value == adSearchHistory[adSearchIndexH] && e.keyCode == 35 && adSearchIndexH > 0) {
adSearchIndexH--;
document.searchform.searchInput.value = adSearchHistory[adSearchIndexH];
}
}
}
function replaceunder() {
clearTimeout(adSearchCompteur);
var entree = document.searchform.searchInput.value;
document.searchform.searchInput.value = entree.replace(/__/, theTitle(false));
if(entree.length - adSearchDash > 1) {
document.searchform.searchInput.value = entree.replace(/_/g, ' ');
} else if (/_/.test(entree)) {
if(!mw.config.get('wgNamespaceNumber'))
document.searchform.searchInput.value = entree.replace(/_/, theTitle(true));
else
adSearchCompteur = setTimeout("document.searchform.searchInput.value = document.searchform.searchInput.value.replace(/_/, theTitle(true)); adSearchDash = document.searchform.searchInput.value.length;", 350);
}
adSearchDash = entree.length;
}
function theTitle(withnamespace) {
if (mw.config.get('wgNamespaceNumber') != -1 || mw.config.get('wgCanonicalSpecialPageName') != 'Movepage') {
if (withnamespace)
return mw.config.get('wgPageName').replace(/_/g, ' ');
else
return mw.config.get('wgTitle');
} else {
return document.getElementById('movepage').wpOldTitle.value;
}
}
function storeHistory(mot) {
for (var i=0;i<adSearchHistory.length;i++) {
if (mot == adSearchHistory[i]) {
for (;i>0;i--)
adSearchHistory[i] = adSearchHistory[i-1];
adSearchHistory[0] = mot;
return;
}
}
var max = (adSearchHistory.length < 4 ? adSearchHistory.length : 4);
for(var i=max;i>0;i--)
adSearchHistory[i] = adSearchHistory[i-1];
adSearchHistory[0] = mot;
}
function go(motor) {
var raccourcis = [
/^sp:(.*)/i, 'Special:$1', 'Speciális:$1',
/^v:(.*)/i, 'Talk:$1', 'Vita:$1',
/^kv(?:at)?:(.*)/i,'Category talk:$1', 'Kategóriavita:$1',
/^kepv:(.*)/i, 'Image talk:$1', 'Képvita:$1',
/^sv:(.*)/i, 'Template talk:$1', 'Sablonvita:$1',
/^mv:(.*)/i, 'MediaWiki talk:$1', 'MediaWiki-vita:$1',
/^pv:(.*)/i, 'Portal talk:$1', 'Portál vita:$1',
/^uv:(.*)/i, 'User talk:$1', 'Szerkesztővita:$1',
/^wv:(.*)/i, 'Project talk:$1', 'Wikipédia-vita:$1',
/^k(?:at)?:(.*)/i, 'Category:$1', 'Kategória:$1',
/^kep:(.*)/i, 'Image:$1', 'Kép:$1',
/^s:(.*)/i, 'Template:$1', 'Sablon:$1',
/^mw:(.*)/i, 'MediaWiki:$1', 'MediaWiki:$1',
/^p:(.*)/i, 'Portal:$1', 'Portál:$1',
/^u:(.*)/i, 'User:$1', 'Szerkesztő:$1',
/^w:(.*)/i, 'Project:$1', 'Wikipédia:$1',
/(.*)--$/i, 'Special:Recentchangeslinked/$1','Special:Recentchangeslinked/$1',
/(.*)-$/i, 'Special:Whatlinkshere/$1', 'Special:Whatlinkshere/$1',
/(.*)\/c$/i, 'Special:Contributions/$1', 'Special:Contributions/$1',
/(.*)\/u$/i, 'Special:Undelete/$1', 'Special:Undelete/$1',
/(.*)\/(css|js)$/i,'User:$1/monobook.$2', 'Szerkesztő:$1/monobook.$2'
];
//Serveurs Wikimedia
var serveurs = [
/^(?:c|commons)$/i, '', 'commons.wikimedia.org',
/^(?:f|fou?ndation)$/i, '', 'wikimediafoundation.org',
/^(?:i|incubator)$/i, '', 'incubator.wikimedia.org',
/^(?:m|meta)$/i, '', 'meta.wikimedia.org',
/^(?:mw|mediawiki)$/i, '', 'www.mediawiki.org',
/^(?:s|species)$/i, '', 'species.wikipedia.org',
/^(?:wz|wiktionaryz|ow|omegawiki)$/i, '', 'www.omegawiki.org',
/^(?:t|translatewiki)$/i, '', 'www.translatewiki.org',
/^(.*)\.b$/i, '$1', 'wikibooks.org',
/^(.*)\.n$/i, '$1', 'wikinews.org',
/^(.*)\.q$/i, '$1', 'wikiquote.org',
/^(.*)\.s$/i, '$1', 'wikisource.org',
/^(.*)\.v$/i, '$1', 'wikiversity.org',
/^(.*)\.w(?:ikt)?$/i, '$1', 'wiktionary.org',
/^(.*)\.wp$/i, '$1', 'wikipedia.org'
];
var adresses = [
'u', 'https://*prefix*/wiki/$1',
'k', 'https://*prefix*/wiki/Special:Search?fulltext=search&search=$1',
'sz', 'https://*prefix*/wiki/$1?action=edit',
'lt', 'https://*prefix*/wiki/$1?action=history',
'ln', 'https://*prefix*/wiki/Special:Log?page=$1',
'szn', 'https://*prefix*/wiki/Special:Log?user=$1',
'pi', 'https://*prefix*/wiki/Special:Prefixindex/$1',
'g', 'https://www.google.com/search?num=100&q=$1+site:*prefix*',
'gi', 'https://www.google.com/search?num=100&q=%22$1%22',
'gg', 'https://www.google.com/search?num=100&q=$1',
'imdb','https://www.imdb.com/find?s=all&q=$1'
];
//Langue
var urllanguage = '';
var urlserver = adSearchProject;
var urlmotor = '';
var motor, i, sortie;
if (document.searchform[2].checked) {
urllanguage = adSearchLang0;
urlserver = adSearchLang0project;
} else if (document.searchform[3].checked) {
urllanguage = adSearchLang1;
urlserver = adSearchLang1project;
} else if (document.searchform[4].checked) {
urllanguage = adSearchLang2;
urlserver = adSearchLang2project;
} else if (document.searchform[5].checked) {
urllanguage = document.searchform.adotherlang.value;
if (!urllanguage) { motor = -1; urlmotor = '//www.wikimedia.org/'; }
if (urllanguage == '639') { motor = -1; urlmotor = '//fr.wikipedia.org/wiki/Liste_des_codes_ISO_639-1'; }
// Il y a aussi http://www.loc.gov/standards/iso639-2/php/code_list.php
if (urllanguage == 'liste') { motor = -1; urlmotor = '/wiki/Special:SiteMatrix'; }
for (i = 0; i<(serveurs.length)/3; i++) {
if (serveurs[3*i].test(urllanguage)) {
urllanguage = urllanguage.replace(serveurs[3*i], serveurs[3*i+1]);
if (urllanguage == '*') urllanguage = '';
urlserver = serveurs[3*i+2];
break;
}
}
}
//Serveur
var urlnom = document.searchform.searchInput.value;
var adr = adSearchAdresses.concat(adresses);
for (i = 0; i<(adr.length)/2; i++) {
if(adr[2*i] == motor) motor = i;
var tmp = new RegExp('^'+adr[2*i]+';(.*)', 'i');
if (tmp.test(urlnom)) {
urlnom = urlnom.replace(tmp, '$1');
motor = i;
break;
}
}
if (isNaN(motor)) {
document.searchform.searchInput.value = 'hiba a beállításokban';
return false;
}
var urlprefix = urlserver;
if (urllanguage) urlprefix = urllanguage + '.' + urlserver;
if (!urlnom && motor != -1) { motor = -1; urlmotor = 'http://' + urlprefix; }
// Préparation du moteur
if(motor != -1) {
urlmotor = adr[2*motor+1];
urlmotor = urlmotor.replace(/\*prefix\*/gi, urlprefix);
urlmotor = urlmotor.replace(/\*language\*/gi, urllanguage);
urlmotor = urlmotor.replace(/\*server\*/gi, urlserver);
}
//Requête
var rac = isset(adSearchShortcuts, raccourcis);
var mots = urlnom.split('|');
for(u = 0; u < mots.length; u++) {
mots[u] = mots[u].replace(/^ */, '').replace(/ *$/, '');
storeHistory(mots[u]);
if(/^#(\/.*)?/.test(mots[u])) mots[u] = mots[u].replace(/^#(\/.*)?/, 'Special:Random$1');
if(/^Special:Random\/Redirect$/i.test(mots[u])) mots[u] = 'Special:Randomredirect';
for (i = 0; i<(rac.length)/3; i++) {
if (rac[3*i].test(mots[u])) {
if (urllanguage == 'fr')
mots[u] = mots[u].replace(rac[3*i], rac[3*i+2]);
else
mots[u] = mots[u].replace(rac[3*i], rac[3*i+1]);
}
}
mots[u] = mots[u].replace(/__/, theTitle(false));
if (/_/.test(mots[u])) {
mots[u] = mots[u].replace(/_/, theTitle(true));
if (!/:/.test(mots[u]) && urlserver == 'wiktionary.org')
mots[u] = mots[u].substring(0, 1).toLowerCase() + mots[u].substring(1);
}
if(urllanguage != 'fr') {
for (i = 0; i<(rac.length)/3; i++) {
tmp = new RegExp(rac[3*i+2].replace('$1', '(.*)'), 'i');
if(tmp.test(mots[u])) mots[u] = mots[u].replace(tmp, rac[3*i+1]);
}
}
if(/\/wiki\//.test(urlmotor)) {
mots[u] = mots[u].replace(/ /g, '_');
if(urlmotor.indexOf('wiktionary')==-1) { mots[u] = mots[u].substring(0, 1).toUpperCase() + mots[u].substring(1); }
}
//Préparation de l'URL
if(motor != -1)
sortie = urlmotor.replace(/\$1/gi, mots[u]);
else
sortie = urlmotor;
//Pour le OmegaWiki
sortie = sortie.replace(/^http\:\/\/www\.omegawiki\.org\/w(?:iki)?\/(.*)/i, 'http://www.omegawiki.org/$1');
//Sortie
if(document.searchform.mode.checked) {
window.location.assign(sortie);
break;
} else {
dat = new Date();
fenetre = window.open(sortie, 'f'+u+dat.getTime(), adSearchOpenOptions);
if(!document.searchform.thiswindow.checked) fenetre.blur();
}
}
if (adSearchClear != -1) {
if (adSearchClear == 0)
document.searchform.searchInput.value = '';
else
adSearchDelete = setTimeout("document.searchform.searchInput.value = ''; adSearchDash = 0;", adSearchClear);
}
}