<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://linguifex.com/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-catfix.js</id>
	<title>MediaWiki:Gadget-catfix.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://linguifex.com/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-catfix.js"/>
	<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=MediaWiki:Gadget-catfix.js&amp;action=history"/>
	<updated>2026-04-10T08:32:23Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://linguifex.com/w/index.php?title=MediaWiki:Gadget-catfix.js&amp;diff=475167&amp;oldid=prev</id>
		<title>Sware: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=MediaWiki:Gadget-catfix.js&amp;diff=475167&amp;oldid=prev"/>
		<updated>2025-11-04T17:55:25Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 17:55, 4 November 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Sware</name></author>
	</entry>
	<entry>
		<id>https://linguifex.com/w/index.php?title=MediaWiki:Gadget-catfix.js&amp;diff=475166&amp;oldid=prev</id>
		<title>wikt&gt;Surjection at 19:58, 29 May 2025</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=MediaWiki:Gadget-catfix.js&amp;diff=475166&amp;oldid=prev"/>
		<updated>2025-05-29T19:58:16Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;// &amp;lt;nowiki&amp;gt;&lt;br /&gt;
// Makes tweaks to links in language-specific categories, where we would normally&lt;br /&gt;
// be wrapping them in {{l}}.&lt;br /&gt;
&lt;br /&gt;
for (let catfix of document.getElementsByClassName(&amp;quot;catfix&amp;quot;)) {&lt;br /&gt;
	// Catfix looks something like this:&lt;br /&gt;
	// &amp;lt;ul class=&amp;quot;catfix&amp;quot; data-anchor=&amp;quot;Russian&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Cyrl&amp;quot; lang=&amp;quot;ru&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
	// The outer element records the anchor that we need to use, while the child element is used as the wrapper.&lt;br /&gt;
&lt;br /&gt;
	// Applies a language-specific wrapper to the link based on the information from `catfix`.&lt;br /&gt;
	// If the link is something like `Appendix:Toki Pona/nasin`,&lt;br /&gt;
	// we need to wrap it like this: `Appendix:Toki Pona/&amp;lt;span prop=&amp;quot;blah blah&amp;quot;&amp;gt;nasin&amp;lt;/span&amp;gt;`.&lt;br /&gt;
	// Otherwise, put the span around the link and add an anchor.&lt;br /&gt;
	function processLink(link) {&lt;br /&gt;
		if (link.catfixed) return;&lt;br /&gt;
&lt;br /&gt;
		let wrapper = catfix.firstElementChild.cloneNode();&lt;br /&gt;
		let pageName = link.textContent;&lt;br /&gt;
		let ns = (new mw.Title(pageName)).getNamespaceId();&lt;br /&gt;
&lt;br /&gt;
		if (ns === 0) { // Mainspace&lt;br /&gt;
			link.parentElement.append(wrapper);&lt;br /&gt;
			wrapper.append(link);&lt;br /&gt;
			link.hash = catfix.dataset.anchor;&lt;br /&gt;
		} else if (ns === 100 &amp;amp;&amp;amp; pageName.includes(&amp;quot;/&amp;quot;)) { // Appendix&lt;br /&gt;
			let [prefix, ...title] = pageName.split(&amp;quot;/&amp;quot;);&lt;br /&gt;
			// only do Appendix:ABC/def if ABC matches the catfix language&lt;br /&gt;
			if (prefix.replace(&amp;#039;Appendix:&amp;#039;, &amp;#039;&amp;#039;) === catfix.dataset.anchor.replaceAll(&amp;#039;_&amp;#039;, &amp;#039; &amp;#039;)) {&lt;br /&gt;
				title = title.join(&amp;#039;/&amp;#039;);&lt;br /&gt;
				wrapper.textContent = title;&lt;br /&gt;
				link.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
				link.append(prefix + &amp;quot;/&amp;quot;, wrapper);&lt;br /&gt;
			}&lt;br /&gt;
		} else if (ns === 118) { // Reconstruction&lt;br /&gt;
			// experiment: try replacing Reconstruction:XYZ/ with * for a cleaner layout&lt;br /&gt;
			// (but only if XYZ matches the catfix&amp;#039;s language!)&lt;br /&gt;
			let [prefix, ...title] = pageName.split(&amp;quot;/&amp;quot;);&lt;br /&gt;
			if (prefix.replace(&amp;#039;Reconstruction:&amp;#039;, &amp;#039;&amp;#039;) === catfix.dataset.anchor.replaceAll(&amp;#039;_&amp;#039;, &amp;#039; &amp;#039;)) {&lt;br /&gt;
				title = title.join(&amp;#039;/&amp;#039;);&lt;br /&gt;
				link.textContent = &amp;quot;*&amp;quot; + title;&lt;br /&gt;
				link.parentElement.append(wrapper);&lt;br /&gt;
				wrapper.append(link);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		link.catfixed = true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// There are currently two types of catfixes: those which apply to an entire category page,&lt;br /&gt;
	// And those applying to a single category tree.&lt;br /&gt;
	// This is a bit of a hack to tell the two kinds apart.&lt;br /&gt;
	let categoryTree = catfix.nextElementSibling;&lt;br /&gt;
&lt;br /&gt;
	if (&lt;br /&gt;
		categoryTree &amp;amp;&amp;amp; &lt;br /&gt;
		(categoryTree.matches(&amp;quot;.CategoryTreeTag&amp;quot;) || categoryTree.querySelector(&amp;quot;.CategoryTreeTag&amp;quot;))&lt;br /&gt;
	) {&lt;br /&gt;
		// Skip known empty CategoryTrees&lt;br /&gt;
		var children = categoryTree.querySelector(&amp;quot;.CategoryTreeChildren&amp;quot;);&lt;br /&gt;
		if (children) {&lt;br /&gt;
			// Process category tree elements already present on the page.&lt;br /&gt;
			categoryTree.querySelectorAll(&amp;quot;.CategoryTreeChildren a&amp;quot;).forEach(processLink);&lt;br /&gt;
			&lt;br /&gt;
			// Also deal with any category tree data loaded dynamically using a MutationObserver.&lt;br /&gt;
			(new MutationObserver(events =&amp;gt; events&lt;br /&gt;
				.flatMap(event =&amp;gt; [...event.addedNodes])&lt;br /&gt;
				.flatMap(node =&amp;gt; [...node.querySelectorAll(&amp;quot;a&amp;quot;)])&lt;br /&gt;
				.forEach(processLink)&lt;br /&gt;
			)).observe(children, {&lt;br /&gt;
				childList: true,&lt;br /&gt;
				subtree: true&lt;br /&gt;
			});&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	} else {&lt;br /&gt;
		document.querySelectorAll(&amp;quot;.mw-category li &amp;gt; a&amp;quot;).forEach(processLink);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>wikt&gt;Surjection</name></author>
	</entry>
</feed>