<?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-categoryTreeLanguageNames.js</id>
	<title>MediaWiki:Gadget-categoryTreeLanguageNames.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-categoryTreeLanguageNames.js"/>
	<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=MediaWiki:Gadget-categoryTreeLanguageNames.js&amp;action=history"/>
	<updated>2026-04-06T02:10:33Z</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-categoryTreeLanguageNames.js&amp;diff=475027&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-categoryTreeLanguageNames.js&amp;diff=475027&amp;oldid=prev"/>
		<updated>2025-11-04T17:52:27Z</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:52, 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-categoryTreeLanguageNames.js&amp;diff=475026&amp;oldid=prev</id>
		<title>wikt&gt;Ioaxxere: convert to ES6 style</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=MediaWiki:Gadget-categoryTreeLanguageNames.js&amp;diff=475026&amp;oldid=prev"/>
		<updated>2024-10-13T06:15:16Z</updated>

		<summary type="html">&lt;p&gt;convert to ES6 style&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// {{documentation}}&lt;br /&gt;
// &amp;lt;nowiki&amp;gt;&lt;br /&gt;
/* global mw */&lt;br /&gt;
&lt;br /&gt;
(function categoryTreeLanguageNamesGadget() {&lt;br /&gt;
	const ALLOWED_NAMESPACES = [&lt;br /&gt;
		0,      // Main&lt;br /&gt;
		14,     // Category&lt;br /&gt;
		100,    // Appendix&lt;br /&gt;
		118     // Reconstruction&lt;br /&gt;
	];&lt;br /&gt;
&lt;br /&gt;
	const CATEGORY_PREFIX = mw.config.get(&amp;quot;wgFormattedNamespaces&amp;quot;)[14] + &amp;quot;:&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	function getLanguageCodeToCanonicalName() {&lt;br /&gt;
		const CACHE_DURATION = 24 * 60 * 60; // 24 hours&lt;br /&gt;
		const KEY = &amp;quot;enwiktLanguageCodeToCanonicalNameJson&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		let timeNow = new Date().getTime() * 1e-3;&lt;br /&gt;
		try {&lt;br /&gt;
			let cachedData = JSON.parse(localStorage.getItem(KEY));&lt;br /&gt;
			if (timeNow - cachedData.timestamp &amp;lt; CACHE_DURATION)&lt;br /&gt;
				return Promise.resolve(cachedData.data);&lt;br /&gt;
		} catch (e) { }&lt;br /&gt;
&lt;br /&gt;
		const actionAPI = new mw.Api({ ajax: { headers: { &amp;quot;Api-User-Agent&amp;quot;: &amp;quot;Gadget developed by [[User:Surjection]]&amp;quot; } } });&lt;br /&gt;
		return actionAPI.get({&lt;br /&gt;
			&amp;quot;action&amp;quot;: &amp;quot;parse&amp;quot;,&lt;br /&gt;
			&amp;quot;page&amp;quot;: &amp;quot;Module:languages/code to canonical name.json&amp;quot;,&lt;br /&gt;
			&amp;quot;prop&amp;quot;: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
			&amp;quot;formatversion&amp;quot;: &amp;quot;2&amp;quot;,&lt;br /&gt;
			&amp;quot;format&amp;quot;: &amp;quot;json&amp;quot;&lt;br /&gt;
		})&lt;br /&gt;
		.then(response =&amp;gt; {&lt;br /&gt;
			let languageData = JSON.parse(response.parse.wikitext);&lt;br /&gt;
			localStorage.setItem(KEY, JSON.stringify({&lt;br /&gt;
				timestamp: timeNow,&lt;br /&gt;
				data: languageData&lt;br /&gt;
			}));&lt;br /&gt;
			return languageData;&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addCategoryTreeLanguageName(codeToCanonicalName, catElement, doNotTagLanguageCode) {&lt;br /&gt;
		// not a category link/name&lt;br /&gt;
		if (!catElement.href.includes(CATEGORY_PREFIX))&lt;br /&gt;
			return;&lt;br /&gt;
&lt;br /&gt;
		// do not duplicate&lt;br /&gt;
		if (catElement.querySelector(&amp;quot;.wikt-category-tree-language-name&amp;quot;))&lt;br /&gt;
			return;&lt;br /&gt;
&lt;br /&gt;
		let firstTextNode = Array.from(catElement.childNodes).find(node =&amp;gt; node.nodeType === Node.TEXT_NODE);&lt;br /&gt;
		if (!firstTextNode)&lt;br /&gt;
			return;&lt;br /&gt;
&lt;br /&gt;
		let categoryName = firstTextNode.textContent;&lt;br /&gt;
		let parseCategoryTreeName = categoryName.match(/^([a-z-]+):(.+)/);&lt;br /&gt;
		if (!parseCategoryTreeName)&lt;br /&gt;
			return;&lt;br /&gt;
&lt;br /&gt;
		let languageCode = parseCategoryTreeName[1];&lt;br /&gt;
		let subcategoryName = parseCategoryTreeName[2];&lt;br /&gt;
		let canonicalName = codeToCanonicalName[languageCode];&lt;br /&gt;
		if (!canonicalName)&lt;br /&gt;
			return;&lt;br /&gt;
&lt;br /&gt;
		if (catElement.title === categoryName || catElement.title === CATEGORY_PREFIX + categoryName)&lt;br /&gt;
			catElement.title += ` [${canonicalName}: ${subcategoryName}]`;&lt;br /&gt;
&lt;br /&gt;
		if (languageCode !== doNotTagLanguageCode) {&lt;br /&gt;
			let langElement = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			langElement.className = &amp;quot;wikt-category-tree-language-name&amp;quot;;&lt;br /&gt;
			langElement.textContent = ` [${canonicalName}]`;&lt;br /&gt;
			catElement.append(langElement);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(() =&amp;gt; {&lt;br /&gt;
		if (mw.config.get(&amp;quot;wgAction&amp;quot;) === &amp;quot;view&amp;quot; &amp;amp;&amp;amp;&lt;br /&gt;
				ALLOWED_NAMESPACES.includes(mw.config.get(&amp;quot;wgNamespaceNumber&amp;quot;))) {&lt;br /&gt;
&lt;br /&gt;
			mw.util.addCSS(`&lt;br /&gt;
				.wikt-category-tree-language-name {&lt;br /&gt;
					font-size: 85%;&lt;br /&gt;
				}&lt;br /&gt;
			`);&lt;br /&gt;
&lt;br /&gt;
			let thisLanguageCode = null;&lt;br /&gt;
			if (mw.config.get(&amp;quot;wgNamespaceNumber&amp;quot;) === 14) {&lt;br /&gt;
				let categoryName = mw.config.get(&amp;quot;wgTitle&amp;quot;);&lt;br /&gt;
				let parseCategoryTreeName = categoryName.match(/^([a-z-]+):(.+)/);&lt;br /&gt;
				if (parseCategoryTreeName)&lt;br /&gt;
					thisLanguageCode = parseCategoryTreeName[1];&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			getLanguageCodeToCanonicalName().then(codeToCanonicalName =&amp;gt; {&lt;br /&gt;
				for (let catElement of document.querySelectorAll(&amp;quot;#catlinks ul &amp;gt; li a&amp;quot;))&lt;br /&gt;
					addCategoryTreeLanguageName(codeToCanonicalName, catElement, thisLanguageCode);&lt;br /&gt;
&lt;br /&gt;
				if (mw.config.get(&amp;quot;wgNamespaceNumber&amp;quot;) === 14) {&lt;br /&gt;
					for (let catElement of document.querySelectorAll(&amp;quot;#mw-subcategories a&amp;quot;))&lt;br /&gt;
						addCategoryTreeLanguageName(codeToCanonicalName, catElement, thisLanguageCode);&lt;br /&gt;
				}&lt;br /&gt;
			});&lt;br /&gt;
		}&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;Ioaxxere</name></author>
	</entry>
</feed>