Vejatz lo contengut

MediaWiki:JSScripts/AdvancedResearch

Un article de Wikipèdia, l'enciclopèdia liura.
Version del 9 genièr de 2007 a 17.55 per Cedric31 (discussion | contribucions)
(dif) ← Version precedenta | vejatz la version correnta (dif) | Version seguenta → (dif)
/*
 * Recèrca avançada
 * 
 * Remplaça la boita de recèrca per una amb plan mai de possibilitats
 * (acorchis, recèrca dins totas las lengas e projèctes, e qualques autres sites)
 * 
 * Autor inicial : 

////////////////////// ZÒNA PERSONALISABLA //////////////////////

adSearchProject = wgServer.replace(/.*\/\/(?:((?:commons|incubator|meta|species|www)\.|wikimediafoundation)|\w*\.)(\w*\.org)/i, '$1$2');

adSearchLang0 = 'oc';
adSearchLang0project = adSearchProject;
adSearchLang0name = 'oc';

adSearchLang1 = 'fr';
adSearchLang1project = adSearchProject;
adSearchLang1name = 'fr';

adSearchLang2 = 'en';
adSearchLang2project = adSearchProject;
adSearchLang2name = 'en';

adSearchInstantTitle = true;
adSearchSametab = false;
adSearchShowtab = false;
adSearchButtons = Array('l', 'w', 'g', 'reset', 'c');
adSearchDefault = 'l';
adSearchAdresses = Array();
var adSearchShortcuts;

///////////////// FIN DE LA ZÒNA PERSONALISABLA /////////////////

// Code :

/*********************************/
/* Recèrca avançada multilinga */
/* Autor : Seb35                */
/*********************************/
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"><input type="radio" name="langselect"' + (adSearchLang1name ? '' : ' style="display:none;"') + ' id="adlang1i" /><label for="adlang1i">' + adSearchLang1name + '</label></span>'
  + '<span id="adlang2"><input type="radio" name="langselect"' + (adSearchLang2name ? '' : ' style="display:none;"') + ' id="adlang2i" /><label for="adlang2i">' + adSearchLang2name + '</label></span>'
  + (adSearchLang1name || adSearchLang2name ? '<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 adSearchCompteur;
function replaceunder()
{
 clearTimeout(adSearchComptaire);
 document.adsearch.adinput.value = document.adsearch.adinput.value.replace(/__/, theTitle(false));
 if(/_/.test(document.adsearch.adinput.value))
 {
  adSearchCompteur = 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 raccourcis = new Array(
  /^sp:(.*)/i,       'Special:$1',                    'Special:$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',           '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 Wikimedia
 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'
 );
 
 //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<(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
 urlnom = document.adsearch.adinput.value;
 adr = adSearchAdresses.concat(adreças);
 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; }
 
 //Requèsta
 if(adSearchShortcuts) rac = adSearchShortcuts; else rac = acorchis;
 if(/^#(\/.*)?/.test(urlnom)) urlnom = urlnom.replace(/^#(\/.*)?/, 'Special:Random$1');
 if(/^Special:Random\/Redirect$/i.test(urlnom)) urlnom = 'Special:Randomredirect';
 for(i = 0; i<(rac.length)/3; i++)
 {
  if(rac[3*i].test(urlnom))
  {
   if(urllanguage == 'fr') urlnom = urlnom.replace(rac[3*i], rac[3*i+2]);
   else urlnom = urlnom.replace(rac[3*i], rac[3*i+1]);
  }
 }
 urlnom = urlnom.replace(/__/, theTitle(false));
 if(/_/.test(urlnom))
 {
  title = theTitle(true);
  if(urllanguage != 'fr')
  {
   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]);
   }
  }
  urlnom = urlnom.replace(/_/, title);
  if(!/:/.test(urlnom) && urlserver == 'wiktionary.org') urlnom = urlnom.substring(0, 1).toLowerCase() + urlnom.substring(1);
 }
 
 //Preparacion de l'URL
 if(motor != -1)
 {
  urlmotor = adr[2*motor+1];
  urlmotor = urlmotor.replace(/\$1/gi, urlnom);
  urlmotor = urlmotor.replace(/\*prefix\*/gi, urlprefix);
  urlmotor = urlmotor.replace(/\*language\*/gi, urllanguage);
  urlmotor = urlmotor.replace(/\*server\*/gi, urlserver);
 }
 
 //Pel WikiccionariZ
 urlmotor = urlmotor.replace(/^http\:\/\/www\.wiktionaryz\.org\/w(?:iki)?\/(.*)/i, 'http://www.wiktionaryz.org/index.php?title=$1');
 
 //Sortida
 if(document.adsearch.mode.checked) window.location = urlmotor;
 else
 {
  fenèstra = open(urlmotor, '_blank', 'menubar=yes,location=yes,resizable=yes,scrollbars=yes,status=yes');
  if(!document.adsearch.thiswindow.checked) { fenèstra.blur(); this.focus(); }
 }
 return true;
}

//