MediaWiki:JSScripts/AdvancedResearch
Aparéncia
//

Dejos (inactiu perque 'oc' marcat) : adreça de Wikilibres
/* * Recèrca avançada * * Remplaça la boita de recèrca per una amb fòràa mai de possibilitats * (acorchis, recèrca dins totas las lengas e projèctes, e qualques autres sites) * * Autor : * Data de darrièra revision : 10 de novembre 2007 * * Documentacion de la foncion Recèrca avançada : vejatz */ ////////////////////// ////////////////////// var adSearchProject; // Projècte per defaut - per defaut lo projècte corrent - ex : 'wikipedia.org', 'meta.wikimedia.org' var adSearchLang0; // Lenga de la primièra casa - per defaut la lenga del projècte corrent (meta : '') - ex : 'oc', 'zh-classical', false (per desactivar) var adSearchLang0project; // Projècte per la primièra casa - per defaut lo projècte per defaut çaisús var adSearchLang0name; // Nom de la primièra casa afichat - per defaut la lenga var adSearchLang1; // Idèm per la segonda casa var adSearchLang1project; var adSearchLang1name; var adSearchLang2; // Idèm per la tresena casa var adSearchLang2project; var adSearchLang2name; var adSearchInstantTitle; // Afichar automoticament lo títol de la pagina quand s'escriu '_' dins la recèrca - per defaut activat var adSearchSametab; // Dobrir dins lo meteis onglet - per defaut desactivat var adSearchShowtab; // Dobrir l'onglet suplementari en primèr plan - per defaut desactivat var adSearchButtons; // Botons de recèrca - per defaut Array('l','w','g','reset','c') - veire lo tablèu adreças dins lo còde var adSearchDefault; // Recèrca per defaut quand se pica sus Entrada - per defaut 'l' var adSearchClear; // Escafar aprèo x segondas (x >= 0), -1 per escafar pas - per defaut -1 var adSearchAdresses; // Ajustar d'adreças - veire lo tablèu adreças dins lo còde var adSearchOpenOptions; // Opcions passadas al moment de la dobertura d'una fenèstra var adSearchShortcuts; // Remplaçar los acorchis ///////////////// FIN DE LA ZÒNE PERSONALIZABLA /////////////////
// Code :
/*********************************/
/* Recèrca avançada multilingüa */
/* Autor : Seb35 */
/*********************************/
function isset(va, dv) { if(va != undefined) return va; else return dv; }
adSearchProject = isset(adSearchProject, wgServer.replace(/.*\/\/(?:((?:commons|incubator|meta|species|www)\.|wikimediafoundation)|\w*\.)(\w*\.org)/i, '$1$2'));
adSearchLang0 = isset(adSearchLang0, wgServer.match(/.*\/\/(commons|incubator|meta|species|wikimediafoundation|www)/i) ? '' : wgServer.match(/.*\/\/([a-z-]*)\./i)[1]);
adSearchLang0project = isset(adSearchLang0project, adSearchProject);
adSearchLang0name = isset(adSearchLang0name, (adSearchLang0 ? adSearchLang0 : adSearchLang0project.charAt(0)));
adSearchLang1 = isset(adSearchLang1, (adSearchLang0 != 'oc' ? 'oc' : 'fr'));
adSearchLang1project = isset(adSearchLang1project, adSearchProject);
adSearchLang1name = isset(adSearchLang1name, (adSearchLang1 ? adSearchLang1 : adSearchLang1project.charAt(0)));
adSearchLang2 = isset(adSearchLang2, (adSearchLang0 != 'en' && adSearchLang0 != 'oc' ? 'en' : 'fr'));
adSearchLang2project = isset(adSearchLang2project, adSearchProject);
adSearchLang2name = isset(adSearchLang2name, (adSearchLang2 ? adSearchLang2 : adSearchLang2project.charAt(0)));
adSearchInstantTitle = isset(adSearchInstantTitle, true);
adSearchSametab = isset(adSearchSametab, false);
adSearchShowtab = isset(adSearchShowtab, false);
adSearchButtons = isset(adSearchButtons, Array('l', 'w', 'g', 'reset', 'c'));
adSearchDefault = isset(adSearchDefault, 'l');
adSearchClear = isset(adSearchClear, -1);
adSearchAdresses = isset(adSearchAdresses, Array());
adSearchOpenOptions = isset(adSearchOpenOptions, 'menubar=yes,location=yes,resizable=yes,scrollbars=yes,status=yes');
var adSearchCompteur, adSearchDelete, adSearchDash = 0, adSearchHistory = Array(), adSearchIndexH;
function advancedResearch_main()
{
var a = document.getElementById('p-search').getElementsByTagName('div')[0];
var texte = '<form id="adsearch" name="adsearch">'
+ '<input type="text" id="adinput" name="adinput" 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" />all</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.adsearch.adotherlang.value) document.adsearch.adotherlang.focus();" style="vertical-align:top;" />'
+ '<input type="text" name="adotherlang" value="" size="2" maxlength="12" onkeypress="check(true, event);" onblur="if(document.adsearch[5].checked && !document.adsearch.adotherlang.value) document.adsearch[2].checked = true;" style="font-size:95%;" /></span>'
+ '<input type="checkbox" id="adsametab" name="mode" style="vertical-align:top;" onclick="if(document.adsearch.mode.checked) document.adsearch.thiswindow.style.visibility = \'hidden\'; else document.adsearch.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.adsearch.adinput.value) document.adsearch.adinput.value = \'\'; else { document.adsearch.adotherlang.value = \'\'; document.adsearch[2].checked = true; } document.adsearch.adinput.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%;" />';
}
tèxt += '</form>';
a.innerHTML = tèxt;
}
addOnloadHook(advancedResearch_main);
/*************************/
/* Foncions auxiliàrias */
/* Autor : Seb35 */
/*************************/
function check(frombarlang, e)
{
if(e.keyCode == 13) { if(document.adsearch[5].checked && !document.adsearch.adotherlang.value) document.adsearch[2].checked = true; }
else if(frombarlang && !document.adsearch[5].checked && e.keyCode != 9) document.adsearch[5].checked = true;
if(!frombarlang && (e.keyCode == 35 || e.keyCode == 36) && adSearchHistory.length)
{
if(!document.adsearch.adinput.value && e.keyCode == 36) { adSearchIndexH = 0; document.adsearch.adinput.value = adSearchHistory[0]; }
else if(document.adsearch.adinput.value == adSearchHistory[adSearchIndexH] && e.keyCode == 36 && adSearchIndexH < adSearchHistory.length-1) { adSearchIndexH++; ; document.adsearch.adinput.value = adSearchHistory[adSearchIndexH]; }
else if(document.adsearch.adinput.value == adSearchHistory[adSearchIndexH] && e.keyCode == 35 && adSearchIndexH > 0) { adSearchIndexH--; ; document.adsearch.adinput.value = adSearchHistory[adSearchIndexH]; }
}
}
function replaceunder()
{
clearTimeout(adSearchCompteur);
var entrada = document.adsearch.adinput.value;
document.adsearch.adinput.value = entree.replace(/__/, theTitle(false));
if(entree.length - adSearchDash > 1) document.adsearch.adinput.value = entree.replace(/_/g, ' ');
else if(/_/.test(entree))
{
if(!wgNamespaceNumber) document.adsearch.adinput.value = entree.replace(/_/, theTitle(true));
else adSearchCompteur = setTimeout("document.adsearch.adinput.value = document.adsearch.adinput.value.replace(/_/, theTitle(true)); adSearchDash = document.adsearch.adinput.value.length;", 350);
}
adSearchDash = entree.length;
}
function theTitle(withnamespace)
{
if(wgNamespaceNumber != -1 || wgTitle != 'Movepage')
{
if(withnamespace) return wgPageName.replace(/_/g, ' ');
else return 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 acorchis = new Array(
/^sp:(.*)/i, 'Special:$1', 'Especial:$1',
/^d:(.*)/i, 'Talk:$1', 'Discutir:$1',
/^da:(.*)/i, 'Help talk:$1', 'Discussion Ajuda:$1',
/^dc(?:at)?:(.*)/i,'Category talk:$1', 'Discussion Categoria:$1',
/^di:(.*)/i, 'Image talk:$1', 'Discussion Imatge:$1',
/^dm:(.*)/i, 'Template talk:$1', 'Discussion Modèl:$1',
/^dmw:(.*)/i, 'MediaWiki talk:$1', 'Discussion MediaWiki:$1',
/^dp:(.*)/i, 'Portal talk:$1', 'Discussion Portal:$1',
/^dpj:(.*)/i, 'Wikipedia talk:WikiProject $1', 'Discussion Projècte:$1',
/^dr:(.*)/i, 'Talk:$1', 'Discussion Referéncia:$1',
/^du:(.*)/i, 'User talk:$1', 'Discussion Utilizaire:$1',
/^dw:(.*)/i, 'Project talk:$1', 'Discussion Wikipèdia:$1',
/^a:(.*)/i, 'Help:$1', 'Ajuda:$1',
/^c(?:at)?:(.*)/i, 'Category:$1', 'Categoria:$1',
/^i:(.*)/i, 'Image:$1', 'Imatge:$1',
/^m:(.*)/i, 'Template:$1', 'Modèl:$1',
/^mw:(.*)/i, 'MediaWiki:$1', 'MediaWiki:$1',
/^p:(.*)/i, 'Portal:$1', 'Portal:$1',
/^pj:(.*)/i, 'Wikipedia:WikiProject $1', 'Projècte:$1',
/^u:(.*)/i, 'User:$1', 'Utilizaire:$1',
/^r:(.*)/i, '$1', 'Referéncia:$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', 'Utilizaire:$1/monobook.$2',
/(.*)\/i[aà]s$/i, 'Wikipedia:Images and media for deletion', 'Wikipèdia:Imatges de suprimir/$1',
/(.*)\/lann$/i, '$1', 'Wikipèdia:Lista dels articles non neutres/$1',
/(.*)\/p[aà]s$/i, 'Wikipedia:Articles for deletion/$1', 'Wikipèdia:Paginas de suprimir/$1',
/(.*)\/p[aà]v$/i, '$1', 'Wikipèdia:Paginas de verificar/$1',
/(.*)\/pcp$/i, 'Wikipedia:Copyright problems', 'Wikipèdia:Paginas sospechadas de violacion de copyright/$1'
);
//Serveires Wikimèdia
var serveurs = new Array(
/^(?: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',
/^(.*)\.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 = new Array(
'l', 'http://*prefix*/wiki/$1',
'w', 'http://*prefix*/wiki/Special:Search?fulltext=search&search=$1',
'e', 'http://*prefix*/wiki/$1?action=edit',
'h', 'http://*prefix*/wiki/$1?action=history',
'lp', 'http://*prefix*/wiki/Special:Log?page=$1',
'lu', 'http://*prefix*/wiki/Special:Log?user=$1',
'pi', 'http://*prefix*/wiki/Special:Prefixindex/$1',
'g', 'http://www.google.com/search?num=100&q=$1+site:*prefix*',
'c', 'http://www.google.com/search?num=100&q=%22$1%22',
'gg', 'http://www.google.com/search?num=100&q=$1',
'imdb','http://french.imdb.com/find?s=all&q=$1',
'allo','http://www.allocine.fr/recherche/?motcle=$1',
'lum', 'http://wiki.lumrix.net/*language*/search.php?f=lumrix-search&k=$1'
);
//Lenga
var urllanguage = '';
var urlserver = adSearchProject;
var urlmotor = '';
var motor, i, sortie;
if(document.adsearch[2].checked) { urllanguage = adSearchLang0; urlserver = adSearchLang0project; }
else if(document.adsearch[3].checked) { urllanguage = adSearchLang1; urlserver = adSearchLang1project; }
else if(document.adsearch[4].checked) { urllanguage = adSearchLang2; urlserver = adSearchLang2project; }
else if(document.adsearch[5].checked)
{
urllanguage = document.adsearch.adotherlang.value;
if(!urllanguage) { motor = -1; urlmotor = 'http://www.wikimedia.org/'; }
if(urllanguage == '639') { motor = -1; urlmotor = 'http://oc.wikipedia.org/wiki/Lista_dels_còdes_ISO_639-1'; }
// I a tanben http://www.loc.gov/standards/iso639-2/php/code_list.php
if(urllanguage == 'lista') { motor = -1; urlmotor = '/wiki/Special:SiteMatrix'; }
for(i = 0; i<(serveurs.length)/3; i++)
{
if(serveurs[3*i].test(urllanguage))
{
urllanguage = urllanguage.replace(serveires[3*i], serveires[3*i+1]);
if(urllanguage == '*') urllanguage = '';
urlserver = serveires[3*i+2];
break;
}
}
}
//Serveire
var urlnom = document.adsearch.adinput.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.adsearch.adinput.value = 'erreur de config'; return false; }
var urlprefix = urlserver;
if(urllanguage) urlprefix = urllanguage + '.' + urlserver;
if(!urlnom && motor != -1) { motor = -1; urlmotor = 'http://' + urlprefix; }
// Preparacion del motor
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èsta
var rac = isset(adSearchShortcuts, acorchis);
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 == 'oc') 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 != 'oc')
{
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); }
}
//Preparacion de l'URL
if(motor != -1) sortida = urlmotor.replace(/\$1/gi, mots[u]);
else sortida = urlmotor;
//Pel OmegaWiki
sortida = sortida.replace(/^http\:\/\/www\.omegawiki\.org\/w(?:iki)?\/(.*)/i, 'http://www.omegawiki.org/$1');
//Sortida
if(document.adsearch.mode.checked) { window.location.assign(sortida); break; }
else
{
dat = new Date();
fenèstra = window.open(sortida, 'f'+u+dat.getTime(), adSearchOpenOptions);
if(!document.adsearch.thiswindow.checked) fenèstra.blur();
}
}
if(adSearchClear != -1)
{
if(adSearchClear == 0) document.adsearch.adinput.value = '';
else adSearchDelete = setTimeout("document.adsearch.adinput.value = ''; adSearchDash = 0;", adSearchClear);
}
}
//Fin del còde