مدیاویکی:Gadget-SearchEngines.js

از ویکی باریستا

نکته: پس از انتشار ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.

  • فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلید‌های Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-R)
  • گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-Shift-R)
  • اینترنت اکسپلورر/ Edge: کلید Ctrl را نگه‌دارید و روی دکمهٔ Refresh کلیک کنید، یا کلید‌های Ctrl-F5 را با هم فشار دهید
  • اپرا: Ctrl-F5 را بفشارید.
/**
 * افزودن موتورهای جستجو بهجستجو پیشرفته
 */
/*jshint curly:false */
/*global mw */
(function () {
	if (typeof SpecialSearchEnhanced2Disabled !== 'undefined')
		return;

	if (mw.config.get('wgCanonicalSpecialPageName') !== 'Search')
		return;

	var choices, searchEngines;

	searchEngines = {
		mediawiki: {
			ShortName: "جستجو در اینترنت",
			Template: mw.config.get('wgScript') + "?search={searchTerms}"
		},
		google: {
			ShortName: "گوگل",
			Template: "http://www.google.com/search?as_sitesearch=baristas.ir&hl={language}&q={searchTerms}"
		},
		wikiwix: {
			ShortName: "ویکی‌ویکس",
			Template: "http://baristas.ir/index.php?action={searchTerms}&lang={language}"
		},
		wlive: {
			ShortName: "بینگ",
			Template: "http://www.bing.com/search?q={searchTerms}&q1=site:http://fa.wikipedia.org"
		},
		yahoo: {
			ShortName: "یاهو!",
			Template: "http://search.yahoo.com/search?p={searchTerms}&vs=baristas.ir"
		},
		globalwpsearch: {
			ShortName: "ویکی‌کافه",
			Template: "http://bariats.ir/index.php=/ویژه:آمار{searchTerms}"
		}
	};

	function changeSearchEngine(selectedId, searchTerms) {
		var currentId, radio, engine, p, params, form,
			l, idx, pValue, input;

		currentId = choices.currentChoice;
		if (selectedId == currentId) return;

		choices.currentChoice = selectedId;
		radio = document.getElementById('searchengineRadio-'  + selectedId);
		radio.checked = true;

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

		form = document.forms.search || document.getElementById("powersearch");
		form.setAttribute("action", engine.Template.substr(0, p));

		l = ("" + params).split("&");
		for (idx = 0; idx < l.length; idx++) {
			p = l[idx].split("=");
			pValue = p[1];

			if (pValue == "{searchTerms}") {
				input = document.getElementById("searchText");

				input.name = p[0];
			} else if (pValue !== "{language}") {
				input = document.getElementById("searchengineextraparam");

				input.name = p[0];
				input.value = pValue;
			}
		}
	}

	function handleRadioChoiseFocus(e) {
		changeSearchEngine(this.value);
	}

	$(function () {
		var mainNode, beforeNode, firstEngine;

		mainNode = document.getElementById("powersearch");
		if (!mainNode)
			mainNode = document.getElementById("search");
		if (!mainNode)
			return;

		beforeNode = document.getElementById("mw-search-top-table");
		if (!beforeNode)
			return;

		beforeNode = beforeNode.nextSibling;
		if (!beforeNode)
			return;

		firstEngine = "mediawiki";

		choices = document.createElement("div");
		choices.style.textAlign = "center";

		var lsearchbox = document.getElementById("searchText");
		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 span = document.createElement("span");
				var $choice = $('<input type="radio" />')
					.attr({
						name: "searchengineselect",
						value: id,
						id: "searchengineRadio-" + id
					})
					.on('focus', handleRadioChoiseFocus);

				$(span).append($choice);

				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}", "fa");
					lienMoteur.appendChild( document.createTextNode( engine.ShortName ) );
					label.appendChild(lienMoteur);
				} else {
					label.appendChild( document.createTextNode( engine.ShortName ) );
				}

				choices.appendChild( label );
			}
		}
		mainNode.insertBefore(choices, beforeNode);

		var input = document.createElement("input");
		input.id = "searchengineextraparam";
		input.type = "hidden";

		mainNode.insertBefore(input, beforeNode);

		changeSearchEngine(firstEngine, initValue);
	});

}());