MediaWiki:Gadget-catfix.js

/* * dependencies: mediawiki.Title */

jQuery(function {	'use strict';	var wrapper;	// Apply only to pages in the Category namespace	// containing an element with the id "catfix".	// Set window.disableCatfix to true to prevent this script from running.	if (!(!window.disableCatfix	&& mw.config.get('wgNamespaceNumber') === 14	&& (wrapper = document.getElementById("catfix"))))		return;

// Get the language name and script wrapper. var langName = wrapper.className.split("CATFIX-")[1]; wrapper = wrapper.getElementsByTagName("*")[0] || document.createElement("span"); var anchor = ""; if (langName && langName.length > 0) anchor = langName; function isEntry(namespaceName, pageName) { // main, Talk, Citations, Reconstruction, // Appendix if it starts with language name and "/" return ["", "Talk", "Citations", "Reconstruction"].indexOf(namespaceName) != -1 || (namespaceName == "Appendix"				&& pageName.slice(0, langName.length + 1) == langName + "/"); }	var formattedNamespaces = mw.config.get("wgFormattedNamespaces"); function wrapNode(node, wrapper) { var parent = node.parentNode; wrapper.appendChild(node); parent.appendChild(wrapper); }	// Process each link in the category listing. jQuery("#mw-pages > .mw-content-ltr li > a, #newest-and-oldest-pages tr li > a") .each(function {			try {				var titleobj = new mw.Title(this.textContent || this.innerText);				var namespaceName = formattedNamespaces[titleobj.getNamespaceId];				var pageName = titleobj.getMainText;				if (!isEntry(namespaceName, pageName))					return;				var textNodeToWrap;				// Choose the part of the link text to wrap				// - in mainspace, the whole link				// - in Talk and Citations, the part after the namespace prefix				// - in Reconstruction and Appendix, the part after the				//   namespace prefix and language name				// Set window.catfixReconstructedAsterisk to true				// to replace "Reconstruction:langname/" with "*".				if (namespaceName === "") {					textNodeToWrap = this;					// Add the anchor in mainspace, not Reconstruction or Appendix,					// to match linking templates					// (Grease pit/2019/December). this.hash = anchor; } else { if (["Talk", "Citations"].indexOf(namespaceName) !== -1) { textNodeToWrap = document.createTextNode(pageName); $(this).empty .append(titleobj.getNamespacePrefix) .append(textNodeToWrap); } else if (["Reconstruction", "Appendix"].indexOf(namespaceName) !== -1) { var split = pageName.split("/", 2); if (split.length !== 2) { throw new TypeError("Malformed title: " + pageName); }						var langPrefix = split[0]; var prefix = window.catfixReconstructedAsterisk ? "" : titleobj.getNamespacePrefix + langPrefix + "/"; textNodeToWrap = document.createTextNode(							(window.catfixReconstructedAsterisk ? "*" : "")							+ split[1]); $(this).empty .append(prefix) .append(textNodeToWrap); }				}				wrapNode(textNodeToWrap, wrapper.cloneNode(false)); } catch (e) { console.error(e); }		}); });