Utilisateur:Mah3110/Gadget-ExternalSearch.js

Une page de Wikipédia, l'encyclopédie libre.
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) ;

Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
// {{Catégorisation JS|ExternalSearch}}
//Jqueryfication + Ajout du moteur Qwant + Ouverture dans une nouvel onglet -- Mah3110

/* globals mw, $ */

if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Search' ) {
    $( function ( $ ) {
        'use strict';

        function externalSearchEngines() {
            var $choices = $( '<div>' );
            $choices.attr( 'id', 'searchengineChoices' );
            $choices.css( {
                'clear': 'left',
                'padding-top': '0.3em'
            } );
            var space = '';
            $.each( searchEngines, function ( id, engine ) {
                if ( space ) {
                    $choices.append( space );
                }
                space = ' ';
                var $optionButton = $( '<input type="radio">' );
                $optionButton.attr( 'name', 'searchengineselect' );
                $optionButton.attr( 'value', id );
                $optionButton.attr( 'id', 'searchengineRadio-' + id );
                if ( id === 'mediawiki' ) {
                    $optionButton.attr( 'checked', 'checked' );
                }
                $optionButton.change( function () { changeSearchEngine( this.value ); } );
                $choices.append( $optionButton );
                var $label = $( '<label>' );
                $label.attr( 'for', 'searchengineRadio-' + id );
                if ( engine.Template.indexOf( 'http' ) === 0 ) {
                    var $lienMoteur = $( '<a>' );
                    var hrefMoteur = engine.Template.replace( '{searchTerms}', '' ).replace( '{language}', 'fr' );
                    $lienMoteur.attr( 'href', hrefMoteur );
                    $lienMoteur.text( engine.ShortName );
                    $label.append( $lienMoteur );
                    $lienMoteur.data( 'searchengine', id );
                    $lienMoteur.click( function ( e ) {
                        e.preventDefault();
                        externalSearchRun( $( this ).data( 'searchengine' ) );
                    } );
                } else {
                    $label.text( engine.ShortName );
                }
                $choices.append( $label );
            } );
            $choices.insertAfter( '#mw-search-top-table' );
        }

        function changeSearchEngine( selectedId ) {
            var $form = $( '#search' );
            if ( !$form.length ) {
                $form = $( '#powersearch' );
            }
            $form.off( 'submit.externalSearch' );
            if ( selectedId !== 'mediawiki' ) {
                $form.on( 'submit.externalSearch', function ( e ) {
                    e.preventDefault();
                    externalSearchRun( selectedId.split( 'searchengineRadio-' ).join( '' ) );
                } );
            }
        }

        function externalSearchRun( id ) {
            // OOUI
            var $lsearchbox = $( '#searchText input' );
            if ( !$lsearchbox.length ) {
                // fallback, markup before OOUI
                $lsearchbox = $( 'input#searchText' );
                if ( !$lsearchbox.length ) {
                    return;
                }
            }
            var engine = searchEngines[ id ];
            if ( !engine ) {
                return;
            }
            var searchTerms = $lsearchbox.val();
            if ( !searchTerms ) {
                return;
            }
            var template = engine.Template;
            template = template.split( '{searchTerms}' ).join( searchTerms );
            template = template.split( '{language}' ).join( 'fr' );
            // opening search in a new tab
            window.open( template, '_blank', 'noopener' );
        }

        var domain = mw.config.get( 'wgServer' ).replace( /^.*?\/\//, '' );
        var searchEngines = {
            mediawiki: {
                ShortName: 'Recherche interne',
                Template: mw.config.get( 'wgScript' ) + '?search={searchTerms}'
            },
            exalead: {
                ShortName: 'Exalead',
                Template: 'http://www.exalead.com/search/wikipedia/results/?q={searchTerms}&language=fr'
            },
            qwant: {
                ShortName: 'Qwant',
                Template: 'https://www.qwant.com/?q={searchTerms}&t=all'
            },
            google: {
                ShortName: 'Google',
                Template: 'https://www.google.fr/search?as_sitesearch=' + domain + '&hl={language}&q={searchTerms}'
            },
            wikiwix: {
                ShortName: 'Wikiwix',
                Template: 'http://fr.wikiwix.com/index.php?action={searchTerms}&lang={language}'
            },
            wlive: {
                ShortName: 'Bing',
                Template: 'https://www.bing.com/search?q={searchTerms}&q1=site:' + domain
            },
            yahoo: {
                ShortName: 'Yahoo!',
                Template: 'https://fr.search.yahoo.com/search?p={searchTerms}&vs=' + domain
            },
            globalwpsearch: {
                ShortName: 'Global WP',
                Template: 'http://vs.aka-online.de/cgi-bin/globalwpsearch.pl?timeout=120&search={searchTerms}'
            }
        };

        externalSearchEngines();
    } );
}