MediaWiki:Gadget-AdvancedResearch.js
Apparence
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;
Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5./**
* Recherche avancée
*
* Remplace la boîte de recherche par une avec beaucoup plus de possibilités
* (raccourcis, recherche dans toutes les langues et projets, et quelques autres sites)
*
* Auteur : Seb35
* Version 3.5
* Date de dernière révision : 2 janvier 2011
*
* Documentation de la fonction Recherche avancée : voir [[:w:fr:Utilisateur:Seb35/Scripts]]
* {{Catégorisation JS|AdvancedResearch}}
*/
(function() {
var skin = mw.config.get('skin');
var isVectorSkin = skin === 'vector' || skin === 'vector-2022';
if(skin === 'minerva') {
return;
}
////////////////////// ZONE PERSONNALISABLE //////////////////////
// Voir aussi [[:w:fr:Utilisateur:Seb35/Scripts]]
var adSearchProject; // Projet par défaut, ex : wikipedia.org, meta.wikimedia.org | défaut : projet courant
var adSearchLang; // Tableau des projets wiki contenant des tableaux de 3 cases :
// * langue du projet, vide sinon (exemple : fr, zh-classical)
// * adresse du projet (exemple : wikipedia.org, meta.wikimedia.org)
// * affichage (exemple : fr)
// * (optionel) dossier du script (exemple : /wiki/)
var adSearchDefaultLang; // Langue et projet utilisés par défaut | Array(adSearchLang0,adSearchLang0project)
var adSearchInstantTitle; // Afficher automatiquement le titre de la page en marquant '_' | activé
var adSearchSametab; // Ouvrir dans le même onglet | désactivé
var adSearchShowtab; // Ouvrir l'onglet supplémentaire en avant-plan | activé
var adSearchButtons; // Boutons de recherche, voir le tableau adresses dans le code | Array('l','w','g','reset','c')
var adSearchDefault; // Recherche par défaut lorsqu'on appuie sur Entrée | 'l'
var adSearchClear; // Effacer après x 1/10e secondes (x >= 0), -1 pour ne pas effacer | -1
var adSearchHistoryLength; // Nombre d'entrées à conserver dans l'historique >= 0 | 5
var adSearchAdresses; // Ajouter des adresses, voir le tableau adresses dans le code
var adSearchOpenOptions; // Options passées lors de l'ouverture d'une fenêtre | voir code
var adSearchShortcuts; // Remplacer les raccourcis | rien
var adSearchPanelView; // Tableau permettant l'affichage de : langues - retour à la ligne - autres langues -
// case même fenêtre - case arrière-plan - retour à la ligne - boutons | 1,1,1,1,1,1,1
var adSearchCSS; // CSS régissant la présentation de la boîte de recherche | voir code
var adSearchDisplayOnFocus; // Dans Vector, afficher la boîte de recherche seulement lors du focus de la zone de texte | false
// Raccourcis sur les titres
// Espaces de noms
// une ligne = numéro_de_l'espace_de_nom, tableau_des_raccourcis, objet_contenant_l'espace_de_noms_en_fonction_de_la_langue
var adSearchNamespaces = [
-1, ['sp'], { 'mul': 'Special:$1', 'fr': 'Spécial:$1' },
2, ['u'], { 'mul': 'User:$1', 'fr': 'Utilisateur:$1' },
4, ['w'], { 'mul': 'Project:$1', 'fr': 'Wikipédia:$1' },
6, ['f','i'], { 'mul': 'File:$1', 'fr': 'Fichier:$1' },
8, ['mw'], { 'mul': 'MediaWiki:$1', 'fr': 'MediaWiki:$1' },
10, ['m'], { 'mul': 'Template:$1', 'fr': 'Modèle:$1' },
12, ['a'], { 'mul': 'Help:$1', 'fr': 'Aide:$1' },
14, ['c','cat'], { 'mul': 'Category:$1', 'fr': 'Catégorie:$1' },
1, ['d'], { 'mul': 'Talk:$1', 'fr': 'Discussion:$1' },
3, ['du'], { 'mul': 'User talk:$1', 'fr': 'Discussion utilisateur:$1' },
5, ['dw'], { 'mul': 'Project talk:$1', 'fr': 'Discussion Wikipédia:$1' },
7, ['df','di'], { 'mul': 'File talk:$1', 'fr': 'Discussion fichier:$1' },
9, ['dmw'], { 'mul': 'MediaWiki talk:$1', 'fr': 'Discussion MediaWiki:$1' },
11, ['dm'], { 'mul': 'Template talk:$1', 'fr': 'Discussion modèle:$1' },
13, ['da'], { 'mul': 'Help talk:$1', 'fr': 'Discussion aide:$1' },
15, ['dc','dcat'], { 'mul': 'Category talk:$1', 'fr': 'Discussion catégorie:$1' },
NaN, ['p'], { 'fr': 'Portail:$1', 'en': 'Portal:$1' },
NaN, ['pj'], { 'fr': 'Projet:$1' },
NaN, ['r'], { 'fr': 'Référence:$1' },
NaN, ['dp'], { 'fr': 'Discussion Portail:$1', 'en': 'Portal talk:$1' },
NaN, ['dpj'], { 'fr': 'Discussion Projet:$1' },
NaN, ['dr'], { 'fr': 'Discussion Référence:$1' },
];
var adSearchLocalNamespaces = {
'frwiki': [ 100,['p'], 102,['pj'], 104,['r'], 101,['dp'], 103,['dpj'], 105,['dr'] ]
};
// Raccourcis portant sur autre chose que l'espace de noms
// une ligne = regex, objet_contenant_le_nom_complet_en_fonction_de_la_langue
var adSearchDefaultShortcuts = [
/^#\/redirect$/i, { 'mul': 'Special:Randomredirect' },
/^#(\/.*)?/, { 'mul': 'Special:Random$1' },
/(.*)--$/i, { 'mul': 'Special:Recentchangeslinked/$1' },
/(.*)-$/i, { 'mul': 'Special:Whatlinkshere/$1' },
/(.*)\/c$/i, { 'mul': 'Special:Contributions/$1' },
/(.*)\/u$/i, { 'mul': 'Special:Undelete/$1' },
/(.*)\/(css|js)$/i, { 'mul': 'User:$1/monobook.$2' },
/(.*)\/i[aà]s$/i, { 'en': 'Wikipedia:Images and media for deletion', 'fr': 'Wikipédia:Images à supprimer/$1' },
/(.*)\/lann$/i, { 'fr': '$1/Neutralité' },
/(.*)\/p[aà]s$/i, { 'en': 'Wikipedia:Articles for deletion/$1', 'fr': '$1/Admissibilité' },
/(.*)\/p[aà]v$/i, { 'fr': 'Wikipédia:Pages à vérifier/$1' },
/(.*)\/pcp$/i, { 'en': 'Wikipedia:Copyright problems', 'fr': '$1/Droit d\'auteur' },
];
// Wikis dans lesquels chercher
var adSearchServeurs = [
/^c(ommons)?$/i, '', 'commons.wikimedia.org', '/wiki/', 'commonswiki',
/^f(ou?ndation)?$/i, '', 'wikimediafoundation.org', '/wiki/', 'foundationwiki',
/^i(ncubator)?$/i, '', 'incubator.wikimedia.org', '/wiki/', 'incubatorwiki',
/^m(eta)?$/i, '', 'meta.wikimedia.org', '/wiki/', 'metawiki',
/^(mw|mediawiki)$/i, '', 'www.mediawiki.org', '/wiki/', 'mediawikiwiki',
/^s(pecies)?$/i, '', 'species.wikipedia.org', '/wiki/', 'specieswiki',
/^(wz|wiktionaryz|ow|omegawiki)$/i,'','www.omegawiki.org', '/', '', // non-Wikimédia
/^(.*)\.b$/i, '$1', 'wikibooks.org', '/wiki/', '$1wikibooks',
/^(.*)\.n$/i, '$1', 'wikinews.org', '/wiki/', '$1wikinews',
/^(.*)\.q$/i, '$1', 'wikiquote.org', '/wiki/', '$1wikiquote',
/^(.*)\.s$/i, '$1', 'wikisource.org', '/wiki/', '$1wikisource',
/^(.*)\.v$/i, '$1', 'wikiversity.org', '/wiki/', '$1wikiversity',
/^(.*)\.w(ikt)?$/i, '$1', 'wiktionary.org', '/wiki/', '$1wiktionary',
/^(.*)\.wp$/i, '$1', 'wikipedia.org', '/wiki/', '$1wiki'
];
var adSearchDefaultAdresses = [
'l', 'http://*prefix**script*$1',
'w', 'http://*prefix**script*Special:Search?fulltext=search&search=$1',
'e', 'http://*prefix**script*$1?action=edit',
'h', 'http://*prefix**script*$1?action=history',
'lp', 'http://*prefix**script*Special:Log?page=$1',
'lu', 'http://*prefix**script*Special:Log?user=$1',
'pi', 'http://*prefix**script*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',
];
var adSearchDefaultCSS = '#adotherlang { font-size:95%; }';
if( isVectorSkin )
{
adSearchDefaultCSS = 'div#simpleSearch input#searchInput { width:24em; } #adsearchbuttons { position:relative; top:-3.1em; border:solid 1px #AAAAAA; background-color:white; text-align:center; vertical-align:middle; } #adsearchbuttons input { vertical-align:middle; padding-top:0; padding-bottom:0; margin-top:0; margin-bottom:0; font-size:0.8em; }';
}
// DÉPRÉCIÉ : remplacé par le tableau adSearchLang
var adSearchLang0;
var adSearchLang0project;
var adSearchLang0name;
var adSearchLang1;
var adSearchLang1project;
var adSearchLang1name;
var adSearchLang2;
var adSearchLang2project;
var adSearchLang2name;
///////////////// FIN DE LA ZONE PERSONNALISABLE /////////////////
/*********************************/
/* Recherche avancée multilingue */
/* Auteur : Seb35 */
/*********************************/
function adSearchIsset(va, dv) { if(va != undefined) return va; else return dv; }
var adSearchCompteur, adSearchDelete, adSearchDash = 0, adSearchHistory = Array(), adSearchIndexH, adSearchDefLang = 0;
function adSearch()
{
adSearchProject = adSearchIsset(adSearchProject, mw.config.get('wgServer').replace(/.*\/\/(?:((?:commons|incubator|meta|species|www|wikimania\d{4})\.|wikimediafoundation)|\w*\.)(\w*\.org)/i, '$1$2'));
adSearchLang0 = adSearchIsset(adSearchLang0, mw.config.get('wgServer').indexOf('wikimedia') != -1 ? '' : mw.config.get('wgContentLanguage'));
adSearchLang0project = adSearchIsset(adSearchLang0project, adSearchProject);
adSearchLang0name = adSearchIsset(adSearchLang0name, (adSearchLang0 ? adSearchLang0 : adSearchLang0project.charAt(0)));
adSearchLang1 = adSearchIsset(adSearchLang1, (adSearchLang0 != 'fr' ? 'fr' : 'en'));
adSearchLang1project = adSearchIsset(adSearchLang1project, adSearchProject);
adSearchLang1name = adSearchIsset(adSearchLang1name, (adSearchLang1 ? adSearchLang1 : adSearchLang1project.charAt(0)));
adSearchLang2 = adSearchIsset(adSearchLang2, (adSearchLang0 != 'en' && adSearchLang0 != 'fr' ? 'en' : 'de'));
adSearchLang2project = adSearchIsset(adSearchLang2project, adSearchProject);
adSearchLang2name = adSearchIsset(adSearchLang2name, (adSearchLang2 ? adSearchLang2 : adSearchLang2project.charAt(0)));
adSearchLang = adSearchIsset(adSearchLang, Array(
Array( '', adSearchProject, 'all', '/wiki/' ),
Array( adSearchLang0, adSearchLang0project, adSearchLang0name, '/wiki/' ),
Array( adSearchLang1, adSearchLang1project, adSearchLang1name, '/wiki/' ),
Array( adSearchLang2, adSearchLang2project, adSearchLang2name, '/wiki/' )
));
adSearchDefaultLang = adSearchIsset(adSearchDefaultLang, Array(adSearchLang0,adSearchLang0project));
adSearchInstantTitle = adSearchIsset(adSearchInstantTitle, true);
adSearchSametab = adSearchIsset(adSearchSametab, true);
adSearchShowtab = adSearchIsset(adSearchShowtab, true);
adSearchButtons = adSearchIsset(adSearchButtons, Array('l', 'w', 'g', 'reset', 'c'));
adSearchDefault = adSearchIsset(adSearchDefault, adSearchButtons[0]);
adSearchClear = adSearchIsset(adSearchClear, -1);
adSearchHistoryLength = adSearchIsset(adSearchHistoryLength, 5);
adSearchAdresses = adSearchIsset(adSearchAdresses, Array());
adSearchAdresses = adSearchAdresses.concat(adSearchDefaultAdresses);
adSearchOpenOptions = adSearchIsset(adSearchOpenOptions, 'menubar=yes,location=yes,resizable=yes,scrollbars=yes,status=yes');
adSearchShortcuts = adSearchIsset(adSearchShortcuts, adSearchDefaultShortcuts);
if( isVectorSkin ) adSearchPanelView = adSearchIsset(adSearchPanelView, Array(1, 0, 1, 1, 1, 0, 1));
else adSearchPanelView = adSearchIsset(adSearchPanelView, Array(1, 1, 1, 1, 1, 1, 1));
adSearchCSS = adSearchIsset(adSearchCSS, adSearchDefaultCSS);
adSearchDisplayOnFocus = adSearchIsset(adSearchDisplayOnFocus, false);
var searchform, lab, el, i;
if(adSearchCSS) mw.loader.addStyleTag( adSearchCSS );
searchform = document.getElementById('searchform');
if (!searchform) {
return;
}
if(adSearchLang.length == 0 || adSearchButtons.length == 0) { document.getElementById('searchInput').value = 'erreur de config:aucune langue ou aucun bouton définis'; return false; }
// Zone de texte
$( '#searchInput' ).on( 'focus', function(event) { clearTimeout( adSearchDelete ); } );
$( '#searchInput' ).on( 'keypress', adSearchCheck );
if(adSearchInstantTitle)
{
$( '#searchInput' ).on( 'mouseup', adSearchReplaceUnder );
$( '#searchInput' ).on( 'keyup', adSearchReplaceUnder );
}
// Insertion dans la boîte de recherche
if( !isVectorSkin )
{
searchform.removeAttribute('action');
if( searchform.getElementsByTagName('div').length != 0 ) {
searchform = searchform.getElementsByTagName('div')[0];
}
$( searchform ).empty();
}
else $( searchform ).on( 'submit', adSearchGo );
//document.getElementById('searchform').removeAttribute('action');
if( !adSearchPanelView[0] && !adSearchPanelView[1] && !adSearchPanelView[2] && !adSearchPanelView[2] && !adSearchPanelView[4] && !adSearchPanelView[5] && !adSearchPanelView[6] ) return;
if( isVectorSkin ) {
el = document.createElement('div');
el.id = 'adsearchbuttons';
if( adSearchDisplayOnFocus )
{
el.style.display = 'none';
$( '#searchInput' ).on( 'focus', function(event){document.getElementById('adsearchbuttons').style.display = 'block';} );
}
searchform = searchform.appendChild(el);
}
// Langues rapidement accessibles
if(adSearchPanelView[0])
{
for(i=0; i<adSearchLang.length; i++)
{
lab = document.createElement('label');
el = document.createElement('input');
el.setAttribute('type','radio');
el.setAttribute('id','adlang'+(i+1));
el.setAttribute('name','langselect');
if(adSearchDefaultLang[0] == adSearchLang[i][0] && adSearchDefaultLang[1] == adSearchLang[i][1])
{
el.setAttribute('checked','checked');
adSearchDefLang = 'adlang'+(i+1);
}
lab.appendChild(el);
lab.appendChild(document.createTextNode(adSearchLang[i][2]));
searchform.appendChild(lab);
}
if(adSearchDefLang == 0)
{
document.getElementById('adlang1').setAttribute('checked','checked');
adSearchDefLang = 'adlang1';
}
}
// Retour à la ligne
if(adSearchPanelView[1])
{
el = document.createElement('br');
el.id = 'adbr1';
searchform.appendChild(el);
}
// Langues supplémentaires
if(adSearchPanelView[2])
{
el = document.createElement('input');
el.setAttribute('type','radio');
el.name = 'langselect';
el.id = 'adlangplus';
searchform.appendChild(el);
$( '#adlangplus' ).on( 'focus', function(event){if(!document.getElementById('adotherlang').value) document.getElementById('adotherlang').focus();} );
el = document.createElement('input');
el.setAttribute('type','text');
el.size = 2;
el.maxLength = 12;
el.id = 'adotherlang';
searchform.appendChild(el);
$( '#adotherlang' ).on( 'blur', function(event){if(document.getElementById('adlangplus').checked && !document.getElementById('adotherlang').value) document.getElementById(adSearchDefLang).checked = true;} );
$( '#adotherlang' ).on( 'keypress', adSearchCheck );
}
// Case à cocher pour ouvrir dans la même fenêtre
if(adSearchPanelView[3])
{
el = document.createElement('input');
el.setAttribute('type','checkbox');
el.id = 'adsametab';
if(adSearchSametab) el.setAttribute('checked','checked');
searchform.appendChild(el);
$( '#adsametab' ).on( 'click', function(event){if(document.getElementById('adsametab').checked) document.getElementById('adshowtab').style.visibility = 'hidden'; else document.getElementById('adshowtab').style.visibility = 'visible';} );
}
// Case à cocher pour ouvrir en arrière-plan
if(adSearchPanelView[4])
{
el = document.createElement('input');
el.setAttribute('type','checkbox');
el.id = 'adshowtab';
if(adSearchShowtab) el.setAttribute('checked','checked');
if(adSearchSametab) el.style.visibility = 'hidden';
searchform.appendChild(el);
}
// Retour à la ligne
if(adSearchPanelView[5])
{
el = document.createElement('br');
el.id = 'adbr2';
searchform.appendChild(el);
}
// Boutons de recherche
if(adSearchPanelView[6])
{
for(i=0; i<adSearchButtons.length; i++)
{
el = document.createElement('input');
if(adSearchButtons[i]==adSearchDefault && $.client.profile().layout != 'gecko' && !isVectorSkin) el.setAttribute('type','submit');
else el.setAttribute('type','button');
el.setAttribute('class','searchButton');
el.id = adSearchButtons[i]+'-adSearchButton';
if(adSearchButtons[i]=='reset') el.setAttribute('value','.');
else el.setAttribute('value',adSearchButtons[i].charAt(0));
searchform.appendChild(el);
if(adSearchButtons[i]=='reset') $( '#reset-adSearchButton' ).on( 'click', function(event){if(document.getElementById('searchInput').value) document.getElementById('searchInput').value = ''; else document.getElementById('searchform').reset(); document.getElementById('searchInput').focus(); adSearchDash = 0;} );
else $( '#' + adSearchButtons[i] + '-adSearchButton' ).on( 'click', adSearchGo );
}
}
}
$(adSearch);
/*************************/
/* Fonctions auxiliaires */
/* Auteur : Seb35 */
/*************************/
function adSearchCheck(e)
{
if(e.keyCode == 13) { if(document.getElementById('adlangplus').checked && !document.getElementById('adotherlang').value) document.getElementById(adSearchDefLang).checked = true; if($.client.profile().layout == 'gecko') {adSearchGo(e); e.returnValue = false;} }
else if(e.target.id == 'adotherlang' && !document.getElementById('adlangplus').checked && e.keyCode != 9) document.getElementById('adlangplus').checked = true;
else if(e.target.id == 'searchInput' && (e.keyCode == 35 || e.keyCode == 36) && adSearchHistory.length)
{
if(!document.getElementById('searchInput').value && e.keyCode == 36) { adSearchIndexH = 0; document.getElementById('searchInput').value = adSearchHistory[0]; }
else if(document.getElementById('searchInput').value == adSearchHistory[adSearchIndexH] && e.keyCode == 36 && adSearchIndexH < adSearchHistory.length-1) { adSearchIndexH++; document.getElementById('searchInput').value = adSearchHistory[adSearchIndexH]; }
else if(document.getElementById('searchInput').value == adSearchHistory[adSearchIndexH] && e.keyCode == 35 && adSearchIndexH > 0) { adSearchIndexH--; document.getElementById('searchInput').value = adSearchHistory[adSearchIndexH]; }
}
}
function adSearchReplaceUnder()
{
clearTimeout(adSearchCompteur);
var entree = document.getElementById('searchInput').value;
document.getElementById('searchInput').value = entree.replace(/__/, adSearchTheTitle(false));
if(entree.length - adSearchDash > 1) document.getElementById('searchInput').value = entree.replace(/_/g, ' ');
else if(/_/.test(entree))
{
if(!mw.config.get('wgNamespaceNumber')) document.getElementById('searchInput').value = entree.replace(/_/, adSearchTheTitle(true));
else adSearchCompteur = setTimeout(function () { document.getElementById('searchInput').value = document.getElementById('searchInput').value.replace(/_/, adSearchTheTitle(true)); adSearchDash = document.getElementById('searchInput').value.length; }, 350);
}
adSearchDash = entree.length;
}
function adSearchTheTitle( withnamespace ) {
if( withnamespace ) {
var i;
for( i=0; i<adSearchNamespaces.length/3; i++ ) {
if( mw.config.get('wgNamespaceNumber') == adSearchNamespaces[3*i] ) return adSearchNamespaces[3*i+1][0]+':'+mw.config.get('wgTitle');
}
if( adSearchLocalNamespaces[mw.config.get('wgDBname')] != undefined ) {
for( i=0; i<adSearchLocalNamespaces[mw.config.get('wgDBname')].length/2; i++ ) {
if( mw.config.get('wgNamespaceNumber') == adSearchLocalNamespaces[mw.config.get('wgDBname')][2*i] ) return adSearchLocalNamespaces[mw.config.get('wgDBname')][2*i+1][0]+':'+mw.config.get('wgTitle');
}}
return mw.config.get('wgPageName').replace(/_/g, ' ');
}
else return mw.config.get('wgTitle');
}
function adSearchGetDB(langue, projet) {
var i;
for( i=0; i<adSearchServeurs.length/5; i++ ) {
if( projet == adSearchServeurs[5*i+2] ) {
return langue.replace(/(.*)/, adSearchServeurs[5*i+4]);
}}
return '';
}
function adSearchStoreHistory(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 < adSearchHistoryLength-1 ? adSearchHistory.length : adSearchHistoryLength-1);
for(var i=max;i>0;i--) adSearchHistory[i] = adSearchHistory[i-1];
adSearchHistory[0] = mot;
}
function adSearchExpand(mot, langue, projet, db)
{
var i, tmp;
// Première étape : remplacer les tirets bas s'il y en a
mot = mot.replace(/__/, adSearchTheTitle(false));
mot = mot.replace(/_/, adSearchTheTitle(true));
// Deuxième étape : remplacer l'espace de nom
for( i=0; i<adSearchNamespaces.length/3; i++ ) {
tmp = new RegExp('^(?:'+adSearchNamespaces[3*i+1].join('|')+'):(.*)', 'i');
if( tmp.test(mot) ) {
if( db == mw.config.get('wgDBname') ) {
if( !isNaN(adSearchNamespaces[3*i]) ) mot = mot.replace( tmp, mw.config.get('wgFormattedNamespaces')[adSearchNamespaces[3*i]]+':$1' );
else if( adSearchLocalNamespaces[mw.config.get('wgDBname')] != undefined ) {
for( i=0; i<adSearchLocalNamespaces[mw.config.get('wgDBname')].length/2; i++ ) {
if( RegExp('^(?:'+adSearchLocalNamespaces[mw.config.get('wgDBname')][2*i+1].join('|')+'):(.*)', 'i').test(mot) ) mot = mot.replace( tmp, mw.config.get('wgFormattedNamespaces')[adSearchLocalNamespaces[mw.config.get('wgDBname')][2*i]]+':$1' );
}}
else if( adSearchNamespaces[3*i+2][langue] != undefined ) mot = mot.replace( tmp, adSearchNamespaces[3*i+2][langue] );
else mot = mot.replace(tmp, '$1' );
}
else if( adSearchNamespaces[3*i+2][langue] != undefined ) mot = mot.replace( tmp, adSearchNamespaces[3*i+2][langue] );
else if( adSearchNamespaces[3*i+2]['mul'] != undefined ) mot = mot.replace( tmp, adSearchNamespaces[3*i+2]['mul'] );
else mot = mot.replace(tmp, '$1' );
break;
}}
// Troisième étape : remplacer les postfixes
for(i = 0; i<adSearchShortcuts.length/2; i++) {
if(adSearchShortcuts[2*i].test(mot)) {
if(adSearchShortcuts[2*i+1][langue] != undefined) mot = mot.replace(adSearchShortcuts[2*i], adSearchShortcuts[2*i+1][langue]);
else if(adSearchShortcuts[2*i+1]['mul'] != undefined) mot = mot.replace(adSearchShortcuts[2*i], adSearchShortcuts[2*i+1]['mul']);
else mot = mot.replace(adSearchShortcuts[2*i], '$1');
}}
return mot;
}
function adSearchGo(event)
{
//Langue
var urllanguage = '';
var urlserver = adSearchProject;
var scripte = '/wiki/';
var dbname = '';
var urlengine = '';
var engine, i, sortie;
if(document.getElementById('adlangplus') && document.getElementById('adlangplus').checked)
{
urllanguage = document.getElementById('adotherlang').value;
if(!urllanguage) urlengine = 'http://www.wikimedia.org/';
if(urllanguage == '639') urlengine = 'http://fr.wikipedia.org/wiki/Liste_des_codes_ISO_639-1';
if(urllanguage == '639-2') urlengine = 'http://fr.wikipedia.org/wiki/Liste_des_codes_ISO_639-2';
if(urllanguage == '639-3') urlengine = 'http://www.sil.org/iso639-3/codes.asp';
if(urllanguage == 'liste') urlengine = 'http://wikimediafoundation.org/wiki/Special:SiteMatrix';
for(i = 0; i<(adSearchServeurs.length)/5; i++)
{
if(adSearchServeurs[5*i].test(urllanguage))
{
dbname = urllanguage.replace(adSearchServeurs[5*i], adSearchServeurs[5*i+4]);
urllanguage = urllanguage.replace(adSearchServeurs[5*i], adSearchServeurs[5*i+1]);
if(urllanguage == '*') urllanguage = '';
urlserver = adSearchServeurs[5*i+2];
scripte = adSearchServeurs[5*i+3];
break;
}
}
}
else if(document.getElementById('adlang1'))
{
for(i=0; i<adSearchLang.length;i++)
{
if(document.getElementById('adlang'+(i+1)).checked)
{
urllanguage = adSearchLang[i][0];
urlserver = adSearchLang[i][1];
scripte = adSearchLang[i][3];
dbname = adSearchGetDB( urllanguage, urlserver );
break;
}
}
}
else
{
urllanguage = adSearchDefaultLang[0];
urlserver = adSearchDefaultLang[1];
for(i=0; i<adSearchLang.length;i++)
{
if(urllanguage == adSearchLang[i][0] && urlserver == adSearchLang[i][1])
{
scripte = adSearchLang[i][3];
dbname = adSearchGetDB( urllanguage, urlserver );
}
}
}
if(!document.getElementById('searchInput')) return;
//Serveur
engine = event.target.id.replace(/^(.*)-adSearchButton$/,'$1');
if( adSearchButtons.indexOf(engine) == -1 ) engine = adSearchDefault;
var urlnom = document.getElementById('searchInput').value;
for(i = 0; i<(adSearchAdresses.length)/2; i++)
{
if(adSearchAdresses[2*i] == engine) engine = i;
var tmp = new RegExp('^'+adSearchAdresses[2*i]+';(.*)');
if(tmp.test(urlnom))
{
urlnom = urlnom.replace(tmp, '$1');
engine = i;
break;
}
}
if(isNaN(engine)) { document.getElementById('searchInput').value = 'erreur de config:engine='+engine; return false; }
var urlprefix = urlserver;
if(urllanguage) urlprefix = urllanguage + '.' + urlserver;
if(!urlnom && !urlengine) urlengine = 'http://' + urlprefix;
// Préparation du moteur
if(!urlengine) urlengine = adSearchAdresses[2*engine+1].replace(/\*prefix\*/gi, urlprefix).replace(/\*language\*/gi, urllanguage).replace(/\*server\*/gi, urlserver).replace(/\*script\*/gi, scripte);
//Requête
var mots = urlnom.split('|');
for(var u = 0; u < mots.length; u++)
{
mots[u] = mots[u].replace(/^ */, '').replace(/ *$/, '').replace(/\?/, '%3F');
adSearchStoreHistory(mots[u]);
mots[u] = adSearchExpand( mots[u], urllanguage, urlserver, dbname );
//Préparation de l'URL
sortie = urlengine.replace(/\$1/gi, mots[u]);
//Sortie
if(document.getElementById('adsametab') && document.getElementById('adsametab').checked) { window.location.assign(sortie); break; }
else
{
var dat = new Date();
var fenetre = window.open(sortie, 'f'+u+dat.getTime(), adSearchOpenOptions);
if(document.getElementById('adshowtab') && !document.getElementById('adshowtab').checked) fenetre.blur();
}
}
//Effacement du mot
if(adSearchClear != -1)
{
if(adSearchClear == 0) document.getElementById('searchInput').value = '';
else adSearchDelete = setTimeout(function () { document.getElementById('searchInput').value = ''; adSearchDash = 0; }, adSearchClear*100);
}
event.returnValue = false;
event.preventDefault();
return false;
}
}());