User:Dsm.wiki/gadget-searchEngines.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)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
/* Modifies Special:Search to be able to use different search engines
* Copied and adapted from [[fr:MediaWiki:Gadget-searchEngines.js]] (oldid=22149484)
*
* Author : [[fr:User:Darkdadaah]]
* Adaptation : [[en:User:Vvs-dm]]
*
* 2017-03-29 -- last modified by Vvs-dm
* <pre><nowiki>
*/
function externalSearchEngines() {
if (typeof SpecialSearchEnhanced2Disabled != 'undefined') return;
if (mw.config.get('wgPageName') != "Special:Search") return;
var mwSearchTopTable = document.getElementById("mw-search-top-table");
if (!mwSearchTopTable) return;
var firstEngine = "mediawiki";
var choices = document.createElement("div");
choices.setAttribute("id", "searchengineChoices");
choices.style.clear = "left";
choices.style.paddingTop = "0.3em";
var lsearchbox = document.getElementById("searchText");
if (!lsearchbox) lsearchbox = document.getElementById("powerSearchText");
if (!lsearchbox) return;
var initValue = lsearchbox.value;
var space = "";
for (var id in searchEngines) {
var engine = searchEngines[id];
if (engine.ShortName)
{
if (space) choices.appendChild(space);
space = document.createTextNode(" ");
var attr = {
type: "radio",
name: "searchengineselect",
value: id,
onFocus: "changeSearchEngine(this.value)",
id: "searchengineRadio-"+id
};
var html = "<input";
for (var a in attr) html += " " + a + "='" + attr[a] + "'";
html += " />";
var span = document.createElement("span");
span.innerHTML = html;
choices.appendChild( span );
var label = document.createElement("label");
label.htmlFor = "searchengineRadio-" + id;
if (engine.Template.indexOf('http') === 0) {
var lienMoteur = document.createElement("a");
lienMoteur.href = engine.Template.replace("{searchTerms}", initValue).replace("{language}", "cu");
lienMoteur.appendChild( document.createTextNode( engine.ShortName ) );
label.appendChild(lienMoteur);
} else {
label.appendChild( document.createTextNode( engine.ShortName ) );
}
choices.appendChild( label );
}
}
var input = document.createElement("input");
input.id = "searchengineextraparam";
input.type = "hidden";
$(mwSearchTopTable).after(choices, input);
changeSearchEngine(firstEngine, initValue);
}
window.changeSearchEngine = function (selectedId, searchTerms) {
var currentId = document.getElementById("searchengineChoices").currentChoice;
if (selectedId == currentId) return;
document.getElementById("searchengineChoices").currentChoice = selectedId;
var radio = document.getElementById('searchengineRadio-' + selectedId);
radio.checked = "checked";
var engine = searchEngines[selectedId];
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 idx = 0; idx < l.length; idx++) {
var peng = l[idx].split("=");
var pValue = peng[1];
if (pValue == "{language}") {
} else if (pValue == "{searchTerms}") {
var input = $( "#searchText" );
if ( ! input.is('input')) {
input = input.find('input').first();
}
input.attr('name', peng[0]);
} else {
$( "#searchengineextraparam" ).attr('name', peng[0]).val(pValue);
}
}
};
// Add
if ( mw.config.get( 'wgPageName' ) === "Special:Search" ) {
jQuery( externalSearchEngines );
}
// </nowiki></pre>