MediaWiki:Gadget-topIcons.js

This is an old revision of this page, as edited by Alex (talk | contribs) at 14:52, 18 October 2024. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

After saving, you may need to bypass your browser's cache to see the changes. For further information, see Wikipedia:Bypass your cache.

  • In most Windows and Linux browsers: Hold down Ctrl and press F5.
  • In Safari: Hold down ⇧ Shift and click the Reload button.
  • In Chrome and Firefox for Mac: Hold down both ⌘ Cmd+⇧ Shift and press R.
/**
 * Moves icons from [[Template:External]] to the top bar, next to "Article" and "Talk" tabs;
 * rewritten from scratch for modern MediaWiki
 */
(function ($, mw) {
	let namespace = mw.config.get('wgNamespaceNumber');

	// automatically show externals on Special and MediaWiki namespaces
	if (namespace === -1 || namespace === 8) {
		let page = mw.config.get('wgPageName');

		addLink('the RuneScape Wiki', 'rsw', page);
		addLink('the RuneScape Classic Wiki', 'classicrsw', page);
		addLink('the Meta Weird Gloop Wiki', 'meta', page);
	}
	else {
		// make this work when "Show preview without reloading the page" is checked
		mw.hook('wikipage.content').add(function ($content) {
			if (!$content.has('.rs-external-header-links').length) return;

			// clear existing externals first so previewing doesn't add an infinite amount
			$('.gadget-external-icon').remove();

			// convert whatever [[Template:External]] gives us
			$('.rs-header-icon').each(function (index, icon) {
				addLink(icon.dataset.wikiname, icon.dataset.interwiki, icon.dataset.page);
			});

			// clean up
			$('.rs-external-header-links').remove();
		});
	}

	function addLink(wikiname, interwiki, page) {
		let url = mw.util.getUrl(interwiki + ':' + page);
		let title = wikiname + ' also has an article on ' + page + '.';

		// wikipedia links aren't forwarded - see [[Special:Interwiki]]
		if (interwiki === 'wikipedia') {
			url = '//en.wikipedia.org/wiki/' + encodeURIComponent(page);
		}

		// Special and MediaWiki namespaces
		if (namespace === -1 || namespace === 8) {
			url += window.location.search; // include url parameters
			title = 'Open this page on ' + wikiname + '.';
		}

		let link = mw.util.addPortletLink(
			'p-namespaces',
			url,
			'', // no text - use background-image instead
			'gadget-external-' + interwiki, // button id
			title // title text shown on hover
		);

		// for styling all links at once - addPortletLink only sets an id
		$(link).addClass('gadget-external-icon');
	}
})(jQuery, mediaWiki);