MediaWiki:Gadget-ExternalSearch.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.// {{Catégorisation JS|ExternalSearch}}
/* globals mw, $ */
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Search' ) {
mw.loader.using( 'mediawiki.util', function () {
'use strict';
var searchbox;
function externalSearchEngines( $ ) {
var $searchbox = $( '#searchText' ).find( 'input' );
if ( !$searchbox.length ) {
return;
}
searchbox = $searchbox[ 0 ];
var language = 'fr';
var domain = mw.config.get( 'wgServer' ).replace( /^.*?\/\//, '' );
var colorExternal = $( '<a class="external">' )
.wrap( '<div class="mw-parser-output">' )
.css( 'color' );
var $choices = $( '<div>' );
$choices.css( {
'clear': 'left',
'padding-top': '0.5em'
} );
$choices.append( 'Moteurs externes : ' );
var space = '';
searchEngines.forEach( function ( engine ) {
if ( space ) {
$choices.append( space );
}
space = ' • ';
var $a = $( '<a>' );
$a.text( engine.Name );
$a.attr( 'target', '_blank' );
$a.css( 'color', colorExternal );
$choices.append( $a );
// préparsage des templates, pour avoir ça de moins à exécuter lors des events "text input"
engine.HomePage = engine.HomePage
.split( '{language}' ).join( language )
.split( '{domain}' ).join( domain );
engine.Template = engine.Template
.split( '{language}' ).join( language )
.split( '{domain}' ).join( domain );
engine.Element = $a[ 0 ];
} );
updateHrefs();
$searchbox.on( 'input', mw.util.debounce( 100, updateHrefs ) );
$choices.insertAfter( '#mw-search-top-table' );
}
function updateHrefs() {
var searchTerms = searchbox.value;
if ( searchTerms === '' ) {
searchEngines.forEach( function ( engine ) {
engine.Element.href = engine.HomePage;
} );
} else {
searchEngines.forEach( function ( engine ) {
engine.Element.href = engine.Template.split( '{searchTerms}' ).join( searchTerms );
} );
}
}
var searchEngines = [
{
Name: 'Bing',
HomePage: 'https://www.bing.com/search?setlang={language}&q=site:{domain}',
Template: 'https://www.bing.com/search?setlang={language}&q=site:{domain} {searchTerms}'
},
{
Name: 'DuckDuckGo',
HomePage: 'https://duckduckgo.com/?q=site:{domain}',
Template: 'https://duckduckgo.com/?q=site:{domain} {searchTerms}'
},
{
Name: 'Google',
HomePage: 'https://www.google.com/search?hl={language}&q=site:{domain}',
Template: 'https://www.google.com/search?hl={language}&q=site:{domain} {searchTerms}'
},
{
Name: 'Qwant',
HomePage: 'https://www.qwant.com/?l={language}&q=site:{domain}',
Template: 'https://www.qwant.com/?l={language}&q=site:{domain} {searchTerms}'
},
{
Name: 'Wikiwix',
HomePage: 'http://fr.wikiwix.com/index.php?lang={language}',
Template: 'http://fr.wikiwix.com/index.php?lang={language}&action={searchTerms}'
},
{
Name: 'Yahoo!',
HomePage: 'https://fr.search.yahoo.com/search?p=site:{domain}',
Template: 'https://fr.search.yahoo.com/search?p=site:{domain} {searchTerms}'
},
{
Name: 'Global WP',
HomePage: 'http://vs.aka-online.de/globalwpsearch/',
Template: 'http://vs.aka-online.de/cgi-bin/globalwpsearch.pl?search={searchTerms}'
}
];
$( externalSearchEngines );
} );
}