MediaWiki:Common.js/search.js

Definition från Wiktionary, den fria ordlistan.
Hoppa till navigering Hoppa till sök

OBS: Efter du har publicerat sidan kan du behöva tömma din webbläsares cache för att se ändringarna.

  • Firefox / Safari: Håll ned Skift och klicka på Uppdatera sidan eller tryck Ctrl-F5 eller Ctrl-R (⌘-R på Mac)
  • Google Chrome: Tryck Ctrl-Skift-R (⌘-Skift-R på Mac)
  • Internet Explorer / Edge: Håll ned Ctrl och klicka på Uppdatera eller tryck Ctrl-F5
  • Opera: Tryck Ctrl-F5.
/*
== Sökning efter sidtitlar som inte stöds ==
*/
/**
 * Omdirigera till [[Övriga tecken]] vid sökning efter sidtitlar som inte stöds.
 * Uppslag på [[Övriga uppslagsord]] omdirigeras automatiskt till andra wikier.
 */
if (mw.config.get('wgCanonicalSpecialPageName') === 'Search' && location.search.indexOf('fulltext=1') === -1) {
	var search_term = /[\?&]search=([^&]+)/.exec(location.search);
	if (search_term) {
		search_term = decodeURIComponent(search_term[1].replace(/\+/g, ' '));
		search_term = ({
			'.': 'punkt',
			':': 'kolon',
			'<': 'mindre_än',
			'>': 'större_än',
			'[': 'inledande_rak_parentes',
			']': 'avslutande_rak_parentes',
			'{': 'inledande_klammerparentes',
			'}': 'avslutande_klammerparentes',
			'|': 'lodstreck',
			'#': 'nummertecken',
			' ': 'hårt_blanksteg',
			'\xa0': 'hårt_blanksteg',
			'_': 'understreck',
			'<3': 'hjärta'
		})[search_term];
		if (search_term) {
			location.href = '/wiki/Övriga_tecken#' +
				encodeURIComponent(search_term);
		}
	}
}


/*
== Hitta översättningar vid sökning ==
*/

// Inspired by and functionally equivalent to
// https://en.wiktionary.org/wiki/User:Yair_rand/FindTrans.js
//
// Informs if the search term is found in other pages' translation sections

if (mw.config.get('wgCanonicalSpecialPageName') === 'Search') $(function () {
	var $a = $('.mw-search-createlink .new');
	if (!$a.length) return;

	var
		re_top = /\{\{ö\-topp(\|[^\}]*)?\}\}/g,
		re_trans = new RegExp(
			/\n\*([^*:]+):[^\n]*?(\n\*\*[^\n]+?)*?/.source +
			/\{\{ö\+?\|[^\|]*\|/.source +
			// escape chars that can be in titles
			$a.text().replace(/([.?*+^$\\()-])/g, '\\$1') +
			/(\|[^\}]+)?\}\}/.source,
			'g');

	new mw.Api().get({
		action: 'query',
		generator: 'backlinks',
		gbltitle: $a.text(),
		gblnamespace: 0,
		prop: 'revisions',
		rvprop: 'content'
	}).done(function (data) {
		if ( !data.query ) {
			return;
		}
		mw.loader.load( ['mediawiki.util'] );
		$.each(data.query.pages, function (id, page) {
			re_top.lastIndex = 0;
			re_trans.lastIndex = 0;

			var nil, top, trans, last_gloss,
				text = page.revisions[0]['*'];

			// re.exec() returns null if no match is found (as opposed to undefined)
			while (top !== null || trans !== null) {
				if (top === nil) top = re_top.exec(text);
				if (trans === nil) trans = re_trans.exec(text);

				if (top && (!trans || top.index < trans.index)) {
					last_gloss = top[1] && top[1].replace(/^[\s\|]+/, '');
					top = nil;
				} else if (trans) {
					$('<p>')
						.append(
							$a.clone().css({fontWeight: 'bold'}),
							' är en översättning av ordet ',
							$('<a>', {
								href: mw.util.getUrl(page.title),
								text: page.title,
								css: { fontWeight: 'bold' }
							}),
							' på ',
							trans[1],
							last_gloss ? ' ("' + last_gloss + '")' : '',
							'.'
						)
						.prependTo('.searchresults');
					trans = nil;
				}
			}
		});
	});
});