Vejatz lo contengut

MediaWiki:JSScripts/AdvancedResearch

Un article de Wikipèdia, l'enciclopèdia liura.

//

Recèrca aicí de Special:Recentchangeslinked/Portal:Matematicas.
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 = '//www.wikimedia.org/'; }
  if(urllanguage == '639') { motor = -1; urlmotor = '//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