MediaWiki:Gadget-EnhancedSearch.js/Core.js

Nota: Depois de publicar, poderá ter de contornar a cache do seu navegador para ver as alterações.

  • Firefox / Safari: Pressione Shift enquanto clica Recarregar, ou pressione Ctrl-F5 ou Ctrl-R (⌘-R no Mac)
  • Google Chrome: Pressione Ctrl-Shift-R (⌘-Shift-R no Mac)
  • Internet Explorer / Edge: Pressione Ctrl enquanto clica Recarregar, ou pressione Ctrl-F5
  • Opera: Pressione Ctrl-F5.
/** Change Special:Search to use a radio menu **
 *
 *  Description: Change Special:Search to use a radio menu, with the default being
 *               the internal MediaWiki engine
 *  Created and maintained by: [[:fr:User:Pmartin]]
 */
var site = mw.config.get('wgServer').replace(/^.*\/\//g, '');
var searchEngines = {
	mediawiki: {
		ShortName: "Wikipédia",
		Template: mw.config.get('wgScript') + "?search={searchTerms}"
	},
	wikiwix: {
		ShortName: "Wikiwix",
		Template: "http://www.wikiwix.com/index.php?action={searchTerms}&lang=" + mw.config.get('wgContentLanguage')
	},
	google: {
		ShortName: "Google",
		Template: "http://www.google." + ( {
				'pt-br' : 'com.br',
				'en' : 'com',
				'en-gb' : 'com'
			}[ mw.config.get('wgUserLanguage') ]
			|| mw.config.get('wgUserLanguage') ) +
			"/search?hl=" + mw.config.get('wgUserLanguage') + "&q={searchTerms}&as_sitesearch=" + site
	},
	yahoo: {
		ShortName: "Yahoo!",
		Template: "http://search.yahoo.com/search?p={searchTerms}&vs=" + site
	},
	bing: {
		ShortName: "Bing",
		Template: "http://www.bing.com/search?q={searchTerms}&q1=site:" + site
	}
};

function changeSearchEngine( selectedId, searchTerms ) {
	var	engine, pos, params, form, list, i, param, input,
		$currentRadio = $('#searchengineChoices').find('input[type=radio]:checked');
	if ( !$currentRadio.length ) {
		$( '#searchengineRadio-' + selectedId ).attr( 'checked', 'checked' );
	}
	engine = searchEngines[ selectedId ];
	pos = engine.Template.indexOf( '?' );
	if( pos == -1 ){
		return;
	}
	$( '#search, #powersearch' ).attr( 'action', engine.Template.substr(0, pos) );
	params = engine.Template.substr( pos + 1 );
	list = ( '' + params ).split( '&' );
	for (i = 0; i < list.length; i++) {
		param = list[i].split( '=' );
		if ( param[1] == '{language}' ) {
			continue;
		}
		if ( param[1] == '{searchTerms}' ) {
			$( '#searchText, #powerSearchText' ).attr( 'name', param[0] );
		} else {
			$( '#searchengineextraparam' ).attr( {
				'name': param[0],
				'value': param[1]
			} );
		}
	}
}

function externalSearchEngines() {
	var	defaultEngine = 'mediawiki',
		$mainNode = $('#search, #mw-searchoptions'),
		$lsearchbox = $( '#searchText, #powerSearchText' ),
		$choices = $( '<div id="searchengineChoices" style="text-align:center;"></div>' );
	$.each( searchEngines, function( id, engine ){
		var $radio, $label;
		if ( !engine.ShortName ) {
			return true;
		}
		$radio = $( '<input></input>', {
			type: 'radio',
			name: 'searchengineselect',
			value: id,
			id: 'searchengineRadio-' + id
		} ).change( function( e ){
			changeSearchEngine( this.value );
		});
		$choices.append( $radio );
		$label = $( '<label></label>', {
			'for': 'searchengineRadio-' + id,
			'text': engine.ShortName
		} );
		$choices.append( $label );
	} );
	$mainNode.append( $choices )
		.append( '<input id="searchengineextraparam" type="hidden"></input>' );
	changeSearchEngine( defaultEngine, $lsearchbox.val() );
}

$(externalSearchEngines);