Advertisement
Guest User

Untitled

a guest
Feb 28th, 2022
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // {{documentation}}
  2. /** Change Special:Search to use a radio menu
  3.  *
  4.  *  Description: Change Special:Search to use a radio menu, with the default being
  5.  *               the internal MediaWiki engine
  6.  *  Created by: [[:fr:User:Pmartin]]
  7.  */
  8.  
  9. if ((mw.config.get("wgNamespaceNumber") == -1) && (mw.config.get("wgCanonicalSpecialPageName") == "Search")) {
  10.     var searchEngines = {
  11.         mediawiki: {
  12.             ShortName: "MediaWiki search",
  13.             Template: mw.config.get("wgScript") + "?search={searchTerms}"
  14.         },
  15.         google: {
  16.             ShortName: "Google",
  17.             Template: "https://www.google.com/search?q=site:" + mw.config.get("wgServer").replace(/^.*?\/\//, '') + "&q={searchTerms}"
  18.         },
  19.         wikiwix: {
  20.             ShortName: "Wikiwix",
  21.             Template: "http://www.wikiwix.com/index.php?action={searchTerms}"
  22.         },
  23.         live: {
  24.             ShortName: "Bing",
  25.             Template: "https://www.bing.com/search?q1=site:" + mw.config.get("wgServer").replace(/^.*?\/\//, '') + "&q={searchTerms}"
  26.         },
  27.         yahoo: {
  28.             ShortName: "Yahoo",
  29.             Template: "https://search.yahoo.com/search?p={searchTerms}&vs=" + mw.config.get("wgServer").replace(/^.*?\/\//, '')
  30.         }
  31.     };
  32.     $(externalSearchEngines);
  33. }
  34.  
  35. function externalSearchEngines()
  36. {
  37.     var mwSearchTopTable = $('#mw-search-top-table');
  38.     if (mwSearchTopTable.length === 0) return;
  39.  
  40.     var firstEngine = "mediawiki";
  41.     var choices = $('<div>').attr("id", "searchengineChoices").css("clear", "left").css("padding-top", "0.3em");
  42.  
  43.     for (var id in searchEngines) {
  44.         var engine = searchEngines[id];
  45.         if (engine.ShortName) {
  46.             choices.append(" " );
  47.  
  48.             $('<label>')
  49.                 .attr("for", "searchengineRadio-" + id)
  50.                 .append(
  51.                     $('<input>')
  52.                     .attr("type", "radio")
  53.                     .val(id)
  54.                     .data("engine-name", id)
  55.                     .on("focus", changeSearchEngine)
  56.                     .attr("id", "searchengineRadio-" + id)
  57.                 )
  58.                 .append(" " + engine.ShortName)
  59.                 .appendTo(choices);
  60.         }
  61.     }
  62.  
  63.     $('<input type="hidden" />').attr("id", "searchengineextraparam").appendTo(choices);
  64.     $(choices).insertAfter(mwSearchTopTable);
  65.  
  66.     $("[id^='searchengineRadio-']").click(function() {
  67.         $("[id^='searchengineRadio-']").not(this).prop('checked', false);
  68.     });
  69.  
  70.     $("#searchengineRadio-" + firstEngine).prop("checked", true);
  71. }
  72.  
  73. function changeSearchEngine()
  74. {
  75.     $("#searchengineextraparam").removeAttr("name");
  76.    
  77.     var radio = $(this).prop("checked", true);
  78.    
  79.     var selectedEngineName = radio.data("engine-name");
  80.     if (selectedEngineName == $("#searchengineChoices").data("currentChoice")) return;
  81.  
  82.     $("#searchengineChoices").data("currentChoice", selectedEngineName);   
  83.  
  84.     var engine = searchEngines[selectedEngineName];
  85.     var p = engine.Template.indexOf('?');
  86.     var params = engine.Template.substr(p + 1);
  87.  
  88.     var form;
  89.     if (document.forms["search"]) {
  90.         form = document.forms["search"];
  91.     } else {
  92.         form = document.getElementById("powersearch");
  93.     }
  94.     form.setAttribute("action", engine.Template.substr(0, p));
  95.  
  96.     var l = ("" + params).split("&");
  97.     for (var i in l) {
  98.         var pName = l[i].split("=")[0];
  99.         var pValue = l[i].split("=")[1];
  100.  
  101.         if (pValue == "{language}") {}
  102.         else if (pValue == "{searchTerms}") {
  103.             var input;
  104.             if (document.forms["search"]) {
  105.                 input = document.getElementById("searchText");
  106.             } else {
  107.                 input = document.getElementById("ooui-php-1") || form.querySelectorAll("[type='search']")[0];
  108.             }
  109.  
  110.             if (input) {
  111.                 if (input.tagName.toUpperCase() != "INPUT") {
  112.                     input = input.getElementsByTagName("input")[0];
  113.                 }
  114.    
  115.                 input.name = pName;
  116.             }
  117.         } else {
  118.             $("#searchengineextraparam").attr("name", pName).val(pValue);
  119.         }
  120.     }
  121.     $(form).find("input:not(#searchengineextraparam):not([type='search']):not([id^='searchengineRadio-']").prop("disabled", selectedEngineName != "mediawiki");
  122. }
  123.  
  124. // == Drop-down language preload menu for [[MediaWiki:Searchmenu-new]] ==
  125.  
  126. function addNogoPreloadMenu() {
  127.     var preloadGuide = document.getElementById('preloadGuide');
  128.     if (preloadGuide) {
  129.         preloadGuide.style.display = 'inline-block';
  130.         var menu = "<select style=\"float: left; display: inline-block; margin: 0 0 0.4em 0.5em;\" onChange=\"showPreloads(selectedIndex)\">";
  131.         menu += "<option>English</option>";
  132.         var languages = document.getElementsByClassName("searchmenu-language-name");
  133.         for (var i = 0; i < languages.length; ++i) {
  134.             var languageName = languages[i].textContent.trim();
  135.             if (languageName[languageName.length - 1] == ":") {
  136.                 languageName = languageName.substring(0, languageName.length - 1);
  137.             }
  138.             menu += "<option>" + languageName + "</option>";
  139.         }
  140.         menu += "</select>";
  141.         var menuDiv = document.getElementById('entryTemplateMenu');
  142.         menuDiv.innerHTML = menu;
  143.         showPreloads(0);
  144.     }
  145. }
  146. $(addNogoPreloadMenu);
  147.  
  148. window.showPreloads = function (selectedIndex) {
  149.     var languageOptions = document.getElementById('preloadGuide').getElementsByTagName('table');
  150.     for (var i = 0; i < languageOptions.length; i++) {
  151.         if (languageOptions[i].className == "language") {
  152.             languageOptions[i].style.display = i == selectedIndex ? 'block' : 'none';
  153.         }
  154.     }
  155. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement