Jump to content

MediaWiki:Gadget-SpecialSearch.js

From escforumwiki

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
// {{documentation}}
/** 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 by: [[:fr:User:Pmartin]]
 */

if ((mw.config.get("wgNamespaceNumber") == -1) && (mw.config.get("wgCanonicalSpecialPageName") == "Search")) {
	var searchEngines = {
		mediawiki: {
			ShortName: "MediaWiki search",
			Template: mw.config.get("wgScript") + "?search={searchTerms}"
		},
		google: {
			ShortName: "Google",
			Template: "http://www.google.com/search?hl=" + mw.config.get("wgUserLanguage") + "&q={searchTerms}&as_sitesearch=" + mw.config.get("wgServer").replace(/^.*?\/\//, '')
		},
		wikiwix: {
			ShortName: "Wikiwix",
			Template: "http://www.wikiwix.com/index.php?action={searchTerms}&disp=dict"
		},
		live: {
			ShortName: "Bing",
			Template: "http://search.live.com/results.aspx?q={searchTerms}&q1=site:" + mw.config.get("wgServer").replace(/^.*?\/\//, '')
		},
		yahoo: {
			ShortName: "Yahoo",
			Template: "http://search.yahoo.com/search?p={searchTerms}&vs=" + mw.config.get("wgServer").replace(/^.*?\/\//, '')
		}
	};
	$(externalSearchEngines);
}


function externalSearchEngines()
{
	var mwSearchTopTable = $('#mw-search-top-table');
	if (mwSearchTopTable.length === 0) return;

	var firstEngine = "mediawiki";

	//var initValue = $("#searchText").val();

	var space = null;

	var choices = $('<div>').attr("id", "searchengineChoices").css("clear", "left").css("padding-top", "0.3em");

	for (var id in searchEngines) {
		var engine = searchEngines[id];
		if (engine.ShortName) {
			if (space) choices.append(space);
			space = $("<span>&nbsp;</span>");

			$('<span>')
				.append($('<input />')
					.attr("type", "radio")
					.attr("name", "searchengineselect")
					.val(id)
					.data("engine-name", id)
					.on("focus", changeSearchEngine)
					.attr("id", "searchengineRadio-" + id))
				.append($('<label>')
					.attr("for", "searchengineRadio-" + id)
					.text(engine.ShortName))
				.appendTo(choices);
		}
	}

	$('<input type="hidden" />').attr("id", "searchengineextraparam").appendTo(choices);
	$(choices).insertAfter(mwSearchTopTable);

	$("#searchengineRadio-" + firstEngine).trigger("focus");
}

function changeSearchEngine() 
{
	var radio = $(this).prop("checked", true);
	
	var selectedEngineName = radio.data("engine-name");
	if (selectedEngineName == $("#searchengineChoices").data("currentChoice")) return;

	$("#searchengineChoices").data("currentChoice", selectedEngineName);	

	var engine = searchEngines[selectedEngineName];
	var p = engine.Template.indexOf('?');
	var params = engine.Template.substr(p + 1);

	var form;
	if (document.forms["search"]) {
		form = document.forms["search"];
	} else {
		form = document.getElementById("powersearch");
	}
	form.setAttribute("action", engine.Template.substr(0, p));

	var l = ("" + params).split("&");
	for (var i in l) {
		var pName = l[i].split("=")[0];
		var pValue = l[i].split("=")[1];

		if (pValue == "{language}") {} 
		else if (pValue == "{searchTerms}") {
			var input;
			if (document.forms["search"]) {
				input = document.getElementById("searchText");
			} else {
				input = document.getElementById("powerSearchText");
			}

			if (input.tagName.toUpperCase() != "INPUT") {
				input = input.getElementsByTagName("input")[0];
			}

			input.name = pName;
		} else {
			$("#searchengineextraparam").attr("name", pName).val(pValue);
		}
	}
}

// == Drop-down language preload menu for [[MediaWiki:Searchmenu-new]] ==

function addNogoPreloadMenu() {
	var preloadGuide = document.getElementById('preloadGuide');
	if (preloadGuide) {
		preloadGuide.style.display = 'inline-block';
		var menu = "<select style=\"float: left; display: inline-block; margin: 0 0 0.4em 0.5em;\" onChange=\"showPreloads(selectedIndex)\">";
		menu += "<option>English</option>";
		menu += "<option>American Sign Language</option>";
		menu += "<option>Spanish</option>";
		menu += "<option>Swedish</option>";
		menu += "</select>";
		var menuDiv = document.getElementById('entryTemplateMenu');
		menuDiv.innerHTML = menu;
		showPreloads(0);
	}
}
$(addNogoPreloadMenu);

function showPreloads(selectedIndex) {
	var languageOptions = document.getElementById('preloadGuide').getElementsByTagName('table');
	for (var i = 0; i < languageOptions.length; i++) {
		if (languageOptions[i].className == "language") {
			languageOptions[i].style.display = i == selectedIndex ? 'block' : 'none';
		}
	}
}
MediaWiki spam blocked by CleanTalk.