MediaWiki:JSScripts/AdvancedResearch
Aparéncia
/*
* 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 inicial :
* Data de darrièra revision : vejatz l'istoric d'aquesta pagina
*
* 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 afichada - per defaut la lenga
var adSearchLang1; // Idem per la segonda casa
var adSearchLang1project;
var adSearchLang1name;
var adSearchLang2; // Idem 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 abansplan - per defaut desactivat
var adSearchButtons; // Botons de recèrca - per defaut Array('l','w','g','reset','c') - vejatz lo tablèu adreças dins lo còde
var adSearchDefault; // Recèrca per defaut òm quicha sus Entrada - per defaut 'l'
var adSearchAdresses; // Ajustar d'adreças - vejatz lo tablèu adreças dins lo còde
var adSearchShortcuts; // Remplaçar los acorchis
///////////////// FIN DE LA ZÒNA PERSONALISABLA /////////////////
// Code :
/*********************************/ /* Recèrca avançada multilinga */ /* 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' ? 'fr' : 'en')); 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'); adSearchAdresses = isset(adSearchAdresses, Array()); function advancedResearch_main() { a = document.getElementById('p-search').getElementsByTagName('div')[0]; texte = '<form name="adsearch">' + '<input type="text" id="adinput" name="adinput" value="" ' + (adSearchInstantTitle ? 'onkeyup="replaceunder();" ' : '') + 'onkeypress="check(false, event);" accesskey="c" style="font-size:95%;" /><br />' + '<span id="adlangall"><input type="radio" name="langselect" id="adlangalli" /><label for="adlangalli">all</label></span>' + '<span id="adlang0"><input type="radio" checked="checked" name="langselect" id="adlang0i" /><label for="adlang0i">' + adSearchLang0name + '</label></span>' + '<span id="adlang1"' + (adSearchLang1 == false && typeof adSearchLang1 == 'boolean' ? ' style="display:none;"' : '') + '><input type="radio" name="langselect" id="adlang1i" /><label for="adlang1i">' + adSearchLang1name + '</label></span>' + '<span id="adlang2"' + (adSearchLang2 == false && typeof adSearchLang2 == 'boolean' ? ' style="display:none;"' : '') + '><input type="radio" name="langselect" id="adlang2i" /><label for="adlang2i">' + adSearchLang2name + '</label></span>' + (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(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();" style="font-size:95%;" />'; else texte = texte + '<input type="button" id="adbutton' + (i+1) + '" value="' + adSearchButtons[i].charAt(0) + '" onclick="go(\'' + adSearchButtons[i] + '\');" style="font-size:95%;" />'; } texte = texte + '</form>'; a.innerHTML = texte; } 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; go(adSearchDefault); } else if(frombarlang && !document.adsearch[5].checked && e.keyCode != 9) document.adsearch[5].checked = true; } var adSearchComptaire; function replaceunder() { clearTimeout(adSearchComptaire); document.adsearch.adinput.value = document.adsearch.adinput.value.replace(/__/, theTitle(false)); if(/_/.test(document.adsearch.adinput.value)) { adSearchComptaire = setTimeout("document.adsearch.adinput.value = document.adsearch.adinput.value.replace(/_/, theTitle(true))", 350); } } 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 go(motor) { var acorchis = new Array( /^sp:(.*)/i, 'Special:$1', 'Especial:$1', /^d:(.*)/i, 'Talk:$1', 'Discutir:$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', /^dp:(.*)/i, 'Portal talk:$1', 'Discussion Portal:$1', /^dpj:(.*)/i, 'Wikipedia talk:WikiProject $1', 'Discussion Projècte:$1', /^du:(.*)/i, 'User talk:$1', 'Discussion Utilizaire:$1', /^dw:(.*)/i, 'Project talk:$1', 'Discussion Wikipèdia:$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', /^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', 'Utilisateur:$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 Wikimedia var serveires = 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' ); //Langue urllanguage = ''; urlserver = adSearchProject; urlmotor = ''; 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://www.loc.gov/standards/iso639-2/php/code_list.php'; } if(urllanguage == 'lista') { motor = -1; urlmotor = '/wiki/Special:SiteMatrix'; } for(i = 0; i<(serveires.length)/3; i++) { if(serveires[3*i].test(urllanguage)) { urllanguage = urllanguage.replace(serveires[3*i], serveires[3*i+1]); if(urllanguage == '*') urllanguage = ''; urlserver = serveires[3*i+2]; break; } } } //Serveire urlnom = document.adsearch.adinput.value; adr = adSearchAdresses.concat(adresses); for(i = 0; i<(adr.length)/2; i++) { if(adr[2*i] == motor) motor = i; 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'; motor = -1; urlmotor = 'http://www.wikimedia.org'; } 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 if(adSearchShortcuts) rac = adSearchShortcuts; else rac = raccourcis; mots = urlnom.split('|'); for(u = 0; u < mots.length; u++) { if(/^#(\/.*)?/.test(urlnom)) 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])) { title = theTitle(true); if(urllanguage != 'oc') { for(i = 0; i<(rac.length)/3; i++) { tmp = new RegExp(rac[3*i+2].replace('$1', '(.*)'), 'i'); if(tmp.test(title)) title = title.replace(tmp, rac[3*i+1]); } } mots[u] = mots[u].replace(/_/, title); if(!/:/.test(mots[u]) && urlserver == 'wiktionary.org') mots[u] = mots[u].substring(0, 1).toLowerCase() + mots[u].substring(1); } //Préparation de l'URL if(motor != -1) sortida = urlmotor.replace(/\$1/gi, mots[u]); //Per l'OmegaWiki sortie = sortida.replace(/^http\:\/\/www\.omegawiki\.org\/w(?:iki)?\/(.*)/i, 'http://www.omegawiki.org/index.php?title=$1'); //Sortida if(document.adsearch.mode.checked) { window.location = sortida; break; } else { dat = new Date(); fenetre = window.open(sortida, 'f'+u+dat.getTime(), 'menubar=yes,location=yes,resizable=yes,scrollbars=yes,status=yes'); if(!document.adsearch.thiswindow.checked) { fenetre.blur(); this.focus(); } } } return true; } //