MediaWiki:Gadget-SpecialSearch.js
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> </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';
}
}
}