MediaWiki:Common.js

From Phuketer
Revision as of 20:48, 15 June 2026 by Maintenance script (talk | contribs) (ABC wiki: send missing imported article links to English Wikipedia in new tab)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/**
 * ABC Wiki compatibility:
 * Imported Wikipedia articles should work as entrance pages.
 *
 * Existing local pages stay local.
 * Missing article links (redlinks) open the matching English Wikipedia page in a new tab.
 */
(function () {
	'use strict';

	function getMissingPageTitle(link) {
		var href, url, title;

		href = link.getAttribute('href') || '';
		if (!href) {
			return null;
		}

		try {
			url = new URL(href, window.location.origin);
		} catch (e) {
			return null;
		}

		if (url.searchParams.get('redlink') !== '1') {
			return null;
		}

		title = url.searchParams.get('title');
		if (!title) {
			return null;
		}

		title = title.replace(/_/g, ' ');

		// Only auto-send normal article links to Wikipedia.
		// Avoid Template:, Module:, File:, Category:, User:, Talk:, Special:, etc.
		if (title.indexOf(':') !== -1) {
			return null;
		}

		return title;
	}

	function rewriteMissingWikipediaLinks() {
		var content = document.querySelector('.mw-parser-output');
		if (!content) {
			return;
		}

		content.querySelectorAll('a.new').forEach(function (link) {
			var title = getMissingPageTitle(link);
			var wikipediaUrl;

			if (!title) {
				return;
			}

			wikipediaUrl = 'https://en.wikipedia.org/wiki/' + encodeURIComponent(title.replace(/ /g, '_'));

			link.href = wikipediaUrl;
			link.target = '_blank';
			link.rel = 'noopener noreferrer';
			link.classList.remove('new');
			link.classList.add('abc-wikipedia-missing-link');
			link.title = title + ' — opens on English Wikipedia in a new tab';
		});
	}

	if (document.readyState === 'loading') {
		document.addEventListener('DOMContentLoaded', rewriteMissingWikipediaLinks);
	} else {
		rewriteMissingWikipediaLinks();
	}
}());