Benutzer:Schnark/js/specialinterwiki.js

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
//Dokumentation auf [[Benutzer:Schnark/js/specialinterwiki]] <nowiki>
/*global mediaWiki*/
(function ($, mw) {
"use strict";

function initL10N (l10n, keep) {
	var i, chain = mw.language.getFallbackLanguageChain();
	keep = $.grep(mw.messages.get(keep), function (val) {
		return val !== null;
	});
	for (i = chain.length - 1; i >= 0; i--) {
		if (chain[i] in l10n) {
			mw.messages.set(l10n[chain[i]]);
		}
	}
	mw.messages.set(keep);
}

function go (e) {
	var iw = $('#interwiki-input').val(),
		href = mw.config.get('wgNamespaceNumber') === -1 ? getHrefSpecial(iw) : getHrefMW(iw);
	e.preventDefault();
	if (mw.config.get('wgServer') === 'http://localhost') {
		window.alert(href);
	} else {
		window.location.href = href;
	}
}

function getHrefSpecial (iw) {
	var sp, href, search,
		title, searchParam, index;
	sp = mw.config.get('wgCanonicalSpecialPageName');
	if (!sp) {
		sp = mw.config.get('wgTitle');
	}
	href = mw.config.get('wgScript') + '?title=' + iw + ':Special:' + encodeURIComponent(sp);
	search = window.location.search.replace(/^\?/, '&');
	title = decodeURIComponent(
		(/.*&title=([^&]*)/.exec(search) || [])[1] ||
		window.location.pathname
	);
	searchParam = (/.*&search=([^&]*)/.exec(search) || [])[1];
	search = search.replace(/&title=[^&]*/g, '').replace(/&search=[^&]*/g, ''); //title und search entfernen
	index = title.indexOf(mw.config.get('wgPageName').replace(/\/.*$/, '') + '/');
	if (index > -1) {
		title = encodeURIComponent(title.slice(index + 1 + mw.config.get('wgPageName').replace(/\/.*$/, '').length));
		href += '/' + title;
	} else if (searchParam) {
		href += '/' + searchParam;
	}
	return href + search + window.location.hash;
}
function getHrefMW (iw) {
	return mw.config.get('wgScript') + '?title=' + iw + ':MediaWiki:' +
		encodeURIComponent(mw.config.get('wgTitle'));
}

function makePortlet () {
	var $iw = $('#p-lang'), $tb;
	if ($iw.length) {
		return $iw;
	}
	$tb = $('#p-tb');
	if ($tb.length === 0) {
		return $tb;
	}
	$iw = $tb.clone().attr({
		id: 'p-lang',
		'aria-labelledby': 'p-lang-label'
	});
	$iw.find('h3').attr('id', 'p-lang-label').text(mw.msg('otherlanguages'));
	$iw.find('ul').empty();
	$tb.parent().append($iw);
	return $iw;
}

function init () {
	initL10N({
		en: {
			'otherlanguages': 'In other languages',
			'schnark-specialinterwiki-button': '>'
		},
		de: {
			'otherlanguages': 'In anderen Sprachen'
		}}, ['otherlanguages']);
	var $iw = makePortlet();
	if ($iw.length === 0) {
		return;
	}
	$iw.find('ul').append('<li><form id="schnark-specialinterwiki" style="display: flex;">' +
			mw.html.element('input', {
				id: 'interwiki-input', size: 5, 'class': 'noime',
				value: mw.user.options.get('userjs-schnark-specialinterwiki-iw', 'en')
			}) +
			mw.html.element('input', {
				type: 'submit',
				value: mw.msg('schnark-specialinterwiki-button')
			}) +
		'</form></li>');
	$('#schnark-specialinterwiki').on('submit', go);
}

if (mw.config.get('wgNamespaceNumber') === -1 || mw.config.get('wgNamespaceNumber') === 8) {
	$.when(mw.loader.using(['user.options', 'mediawiki.language']), $.ready).then(init);
}

})(jQuery, mediaWiki);
//</nowiki>