Utilisateur:Elemiah/advancedResearch.js

Un article de Wikipédia, l'encyclopédie libre.

Note : Après avoir publié la page, vous devrez forcer son rechargement pour voir les changements : Mozilla / Konqueror / Firefox : Shift-Ctrl-R, Internet Explorer / Opera : Ctrl-F5, Safari : Cmd-R.

/*********************************/
/* Recherche avancée multilingue */
/* Auteur : Seb35                */
/*********************************/
var urlproject, lang0, lang0project, lang0name, lang1, lang1project, lang1name, lang2, lang2project, lang2name, pseudoshortcuts, shortcuts;
function isset(va, dv) { if(va) return (va == 'null' ? '' : va); else return dv; }
function advancedResearch_main()
{
 document.getElementById('searchform').style.display = 'none';
 a = document.getElementById('p-search').getElementsByTagName('div')[0];
 a.innerHTML = a.innerHTML
  + '<form name="adsearch">'
  +  '<input type="text" name="adinput" value="" onkeypress="check(false, event );" accesskey="c" style="font-size:95%;" /><br />'
  +  '<input type="radio" name="langselect" />a<input type="radio" name="langselect" checked="checked" name="langselect" />' + isset(lang0name, 'f')
  +  '<input type="radio" name="langselect" />' + isset(lang1name, 'e')
  +  '<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[4].checked && !document.adsearch.adotherlang.value) document.adsearch[2].checked = true;" style="font-size:95%;" />'
  + '<br />'
  +  '<input type="checkbox" name="mode" style="vertical-align:top;" />'
  +  '<input type="button" value="l" onclick="go(1);" style="font-size:95%;" />'
  +  '<input type="button" value="w" onclick="go(2);" style="font-size:95%;" />'
  +  '<input type="button" value="g" onclick="go(12);" style="font-size:95%;" />'
  +  '<input type="button" value="c" onclick="go(11);" style="font-size:95%;" />'
  + '</form>';
}
addOnloadHook(advancedResearch_main);
 
/*************************/
/* Fonctions auxiliaires */
/* Auteur : Seb35        */
/*************************/
function check(frombarlang, e)
{
 if(e.keyCode == 13)
 {
  event.returnValue = false;
  if(document.adsearch[4].checked && !document.adsearch.adotherlang.value) document.adsearch[2].checked = true;
  go(1);
 }
 else if(frombarlang && !document.adsearch[4].checked && e.keyCode != 9) document.adsearch[4].checked = true;
}
 
function theTitle(withnamespace)
{
 if(wgNamespaceNumber != -1 || wgTitle != 'Movepage')
 {
  if(withnamespace) return wgPageName.replace(/_/, ' ');
  else return wgTitle;
 }
 else return document.getElementById('movepage').wgOldTitle.value;
}
 
function go(motor)
{
 var raccourcis = new Array(
  /^sp:(.*)/i,        'Special:$1',                     'Special:$1',
  /^d:(.*)/i,         'Talk:$1',                        'Discuter:$1',
  /^dc(?:at)?:(.*)/i, 'Category talk:$1',               'Discussion Catégorie:$1',
  /^di:(.*)/i,        'Image talk:$1',                  'Discussion Image:$1',
  /^dm:(.*)/i,        'Template talk:$1',               'Discussion Modèle:$1',
  /^dp:(.*)/i,        'Portal talk:$1',                 'Discussion Portail:$1',
  /^dpj:(.*)/i,       'Wikipedia talk:WikiProject $1',  'Discussion Projet:$1',
  /^du:(.*)/i,        'User talk:$1',                   'Discussion Utilisateur:$1',
  /^dw:(.*)/i,        'Project talk:$1',                'Discussion Wikipédia:$1',
  /^c(?:at)?:(.*)/i,  'Category:$1',                    'Catégorie:$1',
  /^i:(.*)/i,         'Image:$1',                       'Image:$1',
  /^m:(.*)/i,         'Template:$1',                    'Modèle:$1',
  /^mw:(.*)/i,        'MediaWiki:$1',                   'MediaWiki:$1',
  /^p:(.*)/i,         'Portal:$1',                      'Portail:$1',
  /^pj:(.*)/i,        'Wikipedia:WikiProject $1',       'Projet:$1',
  /^u:(.*)/i,         'User:$1',                        'Utilisateur:$1',
  /^w:(.*)/i,         'Project:$1',                     'Wikipédia:$1',
  /(.*)--$/,          'Special:Recentchangeslinked/$1', 'Special:Recentchangeslinked/$1',
  /(.*)-$/,           'Special:Whatlinkshere/$1',       'Special:Whatlinkshere/$1',
  /(.*)\/c$/,         'Special:Contributions/$1',       'Special:Contributions/$1',
  /(.*)\/u$/,         'Special:Undelete/$1',            'Special:Undelete/$1',
  /(.*)\/(css|js)$/,  'User:$1/monobook.$2',            'Utilisateur:$1/monobook.$2',
  /(.*)\/i[]s$/,    'Wikipedia:Images and media for deletion', 'Wikipédia:Images à supprimer/$1',
  /(.*)\/lann$/,      '$1',                             'Wikipédia:Liste des articles non neutres/$1',
  /(.*)\/p[]s$/,    'Wikipedia:Articles for deletion/$1', 'Wikipédia:Pages à supprimer/$1',
  /(.*)\/p[]v$/,    '$1',                             'Wikipédia:Pages à vérifier/$1',
  /(.*)\/pcp$/,       'Wikipedia:Copyright problems',   'Wikipédia:Pages soupçonnées de violation de copyright/$1'
 );
 
 //Serveurs Wikimedia
 var serveurs = new Array(
  /^(?:c|commons)$/i,     '',   'commons.wikimedia.org',
  /^(?:f|fou?ndation)$/i, '',   'wikimediafoundation.org',
  /^(?:m|meta)$/i,        '',   'meta.wikimedia.org',
  /^(?:mw|mediawiki)$/i,  '',   'www.mediawiki.org',
  /^(?:s|species)$/i,     '',   'species.wikipedia.org',
  /^(.*)\.b$/i,           '$1', 'wikibooks.org',
  /^(.*)\.n$/i,           '$1', 'wikinews.org',
  /^(.*)\.q$/i,           '$1', 'wikiquote.org',
  /^(.*)\.s$/i,           '$1', 'wikisource.org',
  /^(.*)\.w(?:ikt)?$/i,   '$1', 'wiktionary.org',
  /^(.*)\.wp$/i,          '$1', 'wikipedia.org'
 );
 
 var lumrix = /^(?:da|de|en|es|fi|fr|hu|it|ja|nl|no|pl|pt|ru|sv|tr|zh)$/i;
 
 var pseudorac = new Array(/^g:(.*)/i, 12, /^gg:(.*)/i, 10, /^imdb:(.*)/i, 14, /^allo:(.*)/i, 15 , /^l:(.*)/i, 13, /^h:(.*)/i, 4, /^e:(.*)/i, 3, /^pi:(.*)/i, 7, /^lp:(.*)/i, 5, /^lu:(.*)/i, 6);
 
 //Serveur
 urlmotor = '';
 nom = document.adsearch.adinput.value;
 pr = isset(pseudoshortcuts, pseudorac);
 for(i = 0; i<(pr.length)/2; i++)
 {
  if(pr[2*i].test(nom))
  {
   nom = nom.replace(pr[2*i], '$1');
   motor = pr[2*i+1];
  }
 }
 
 //Langue
 urllanguage = '';
 urlserver = isset(urlproject, isset(lang0project, 'wikipedia.org'));
 if(document.adsearch[2].checked) { urllanguage = isset(lang0, 'fr'); urlserver = isset(lang0project, isset(urlproject, 'wikipedia.org')); }
 else if(document.adsearch[3].checked) { urllanguage = isset(lang1, 'en'); urlserver = isset(lang1project, isset(urlproject, 'wikipedia.org')); }
 else if(document.adsearch[4].checked)
 {
  urllanguage = document.adsearch.adotherlang.value;
  if(!urllanguage) return;
  if(urllanguage == '639') { motor = 0; urlmotor = 'http://www.loc.gov/standards/iso639-2/langcodes.html'; }
  if(urllanguage == 'liste') { motor = 0; 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;
   }
  }
 }
 
 //Vérifications
 if(motor == 13 && !lumrix.test(urllanguage)) return;
 if(!nom)
 {
  if(motor >= 10 && motor <= 12) { motor = 0; urlmotor = 'http://www.google.com/'; }
  else if(motor == 13) { motor = 0; urlmotor = 'http://wiki.lumrix.net/' + urllanguage + '/'; }
  else if(motor == 14) { motor = 0; urlmotor = 'http://french.imdb.com/'; }
  else if(motor == 15) { motor = 0; urlmotor = 'http://www.allocine.fr/'; }
  else if(motor) motor = 1;
 }
 
 //Requête
 rac = isset(shortcuts, raccourcis);
 if(/^#(\/.*)?/.test(nom)) if(motor == 1) nom = nom.replace(/^#(\/.*)?/, 'Special:Random$1'); else return;
 if(/^Special:Random\/Redirect$/i.test(nom)) nom = 'Special:Randomredirect';
 nom_simple = nom;
 for(i = 0; i<(rac.length)/3; i++)
 {
  if(rac[3*i].test(nom))
  {
   nom_simple = nom_simple.replace(rac[3*i], '$1');
   if(urllanguage == 'fr') nom = nom.replace(rac[3*i], rac[3*i+2]);
   else nom = nom.replace(rac[3*i], rac[3*i+1]);
  }
 }
 if(nom_simple == '__') nom = nom.replace(/__/, theTitle(false));
 if(nom_simple == '_')
 {
  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]);
   }
  }
  nom = nom.replace(/_/, title);
  if(!/:/.test(nom) && urlserver == 'wiktionary.org') nom = nom.substring(0, 1).toLowerCase() + nom.substring(1, nom.length);
 }
 
 //Préparation de l'URL
 if(urllanguage && motor != 13) urllanguage = urllanguage + '.';
 prefix = 'http://' + urllanguage + urlserver;
 if(!urllanguage && !nom && motor < 10) { motor = 0; urlmotor = prefix; }
 switch(motor)
 {
  case 0: open(urlmotor, '_blank', 'menubar=yes,location=yes,resizable=yes,scrollbars=yes,status=yes'); return;
  case 1: urlmotor = prefix + '/wiki/' + nom; break;
  case 2: urlmotor = prefix + '/w/index.php?title=Special%3ASearch&search=' + nom + '&fulltext=Recherche'; break;
  case 3: urlmotor = prefix + '/w/index.php?title=' + nom + '&action=edit'; break;
  case 4: urlmotor = prefix + '/w/index.php?title=' + nom + '&action=history'; break;
  case 5: urlmotor = prefix + '/w/index.php?title=Special%3ALog&page=' + nom; break;
  case 6: urlmotor = prefix + '/w/index.php?title=Special%3ALog&user=' + nom.charAt(0).toUpperCase() + nom.substr(1); break;
  case 7: urlmotor = prefix + '/wiki/Special:Prefixindex/' + nom; break;
  case 10: urlmotor = 'http://www.google.com/search?num=100&q=' + nom; break;
  case 11: urlmotor = 'http://www.google.com/search?num=100&q=%22' + nom + '%22'; break;
  case 12: urlmotor = 'http://www.google.com/search?num=100&q=' + nom + '+site:' + urllanguage + urlserver; break;
  case 13: urlmotor = 'http://wiki.lumrix.net/' + urllanguage + '/search.php?f=lumrix-search&k=' + nom; break;
  case 14: urlmotor = 'http://french.imdb.com/find?s=all&q=' + nom; break;
  case 15: urlmotor = 'http://www.allocine.fr/recherche/?motcle=' + nom; break;
 }
 
 //Sortie
 if(document.adsearch[6].checked) window.location = urlmotor;
 else open(urlmotor, '_blank', 'menubar=yes,location=yes,resizable=yes,scrollbars=yes,status=yes');
}