<?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-ShowIDs.js</id>
	<title>MediaWiki:Gadget-ShowIDs.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-ShowIDs.js"/>
	<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=MediaWiki:Gadget-ShowIDs.js&amp;action=history"/>
	<updated>2026-04-11T21:38:52Z</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-ShowIDs.js&amp;diff=474843&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-ShowIDs.js&amp;diff=474843&amp;oldid=prev"/>
		<updated>2025-11-04T17:46:55Z</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:46, 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-ShowIDs.js&amp;diff=474842&amp;oldid=prev</id>
		<title>wikt&gt;Fenakhay at 08:34, 22 September 2025</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=MediaWiki:Gadget-ShowIDs.js&amp;diff=474842&amp;oldid=prev"/>
		<updated>2025-09-22T08:34:11Z</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;
/* jshint maxerr:1048576, strict:true, undef:true, latedef:true, esversion:6 */&lt;br /&gt;
/* global $, mw */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Display sense and etym IDs.&lt;br /&gt;
 * &lt;br /&gt;
 * Note: this gadget also loads ShowIDs-pagestyles, which offers a&lt;br /&gt;
 * CSS-only fallback to this gadget that does not require JavaScript.&lt;br /&gt;
 * The CSS is nevertheless required for this JavaScript gadget&lt;br /&gt;
 * to display correctly.&lt;br /&gt;
 * CSS: [[MediaWiki:Gadget-ShowIDs-pagestyles.css]]&lt;br /&gt;
 *&lt;br /&gt;
 * Author(s): Surjection, Fenakhay&lt;br /&gt;
 * Last updated: 2025-09-22&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
$(document).ready(() =&amp;gt; {&lt;br /&gt;
	&amp;#039;use strict&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	const ID_CLASSES = [&lt;br /&gt;
		{ name: &amp;#039;senseid&amp;#039;, showTooltip: true },&lt;br /&gt;
		{ name: &amp;#039;etymid&amp;#039;, showTooltip: true },&lt;br /&gt;
		{ name: &amp;#039;etymonid&amp;#039;, showTooltip: false }&lt;br /&gt;
	];&lt;br /&gt;
&lt;br /&gt;
	const WIKIDATA_PATTERN = /^Q\d+$/;&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Generate CSS selectors for all ID classes&lt;br /&gt;
	 */&lt;br /&gt;
	function generateSelectors(suffix = &amp;#039;&amp;#039;) {&lt;br /&gt;
		return ID_CLASSES.map(cls =&amp;gt; `.${cls.name}${suffix}`).join(&amp;#039;, &amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Returns the text content of element, excluding children (unlike .text()).&lt;br /&gt;
	 */&lt;br /&gt;
	function getTextOnlyRoot($elem) {&lt;br /&gt;
		return $elem.clone().children().remove().end().text();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Move element (sole child span) into the next visible, non-floated paragraph.&lt;br /&gt;
	 */&lt;br /&gt;
	function moveIntoNextParagraph($elem) {&lt;br /&gt;
		const $parentP = $elem.parent(&amp;#039;p&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
		// Only proceed if parent is a p with single child and no text content&lt;br /&gt;
		if (!$parentP.length ||&lt;br /&gt;
			$parentP.children().length !== 1 ||&lt;br /&gt;
			getTextOnlyRoot($parentP).trim()) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		let $next = $parentP.next();&lt;br /&gt;
		while ($next.length) {&lt;br /&gt;
			// Skip floated or hidden elements&lt;br /&gt;
			if ($next.css(&amp;#039;float&amp;#039;) !== &amp;#039;none&amp;#039; || !$next.is(&amp;#039;:visible&amp;#039;)) {&lt;br /&gt;
				$next = $next.next();&lt;br /&gt;
				continue;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Move content to next paragraph if found&lt;br /&gt;
			if ($next.is(&amp;#039;p&amp;#039;)) {&lt;br /&gt;
				$next.prepend(&amp;#039;\n&amp;#039;);&lt;br /&gt;
				$parentP.children().prependTo($next);&lt;br /&gt;
				$parentP.remove();&lt;br /&gt;
			}&lt;br /&gt;
			break;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Create display element for ID (link for Wikidata, span for others).&lt;br /&gt;
	 */&lt;br /&gt;
	function createDisplayElement(idStr, tooltip) {&lt;br /&gt;
		const isWikidata = WIKIDATA_PATTERN.test(idStr);&lt;br /&gt;
&lt;br /&gt;
		return isWikidata&lt;br /&gt;
			? $(&amp;#039;&amp;lt;a/&amp;gt;&amp;#039;, {&lt;br /&gt;
				href: `https://www.wikidata.org/wiki/${idStr}`,&lt;br /&gt;
				text: idStr,&lt;br /&gt;
				title: tooltip || undefined,&lt;br /&gt;
				target: &amp;#039;_blank&amp;#039;,&lt;br /&gt;
				rel: &amp;#039;noopener noreferrer&amp;#039;&lt;br /&gt;
			})&lt;br /&gt;
			: $(&amp;#039;&amp;lt;span/&amp;gt;&amp;#039;, {&lt;br /&gt;
				text: idStr,&lt;br /&gt;
				title: tooltip || undefined&lt;br /&gt;
			});&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Generate tooltip text for template.&lt;br /&gt;
	 */&lt;br /&gt;
	function generateTooltip(classConfig, lang, idStr) {&lt;br /&gt;
		return (classConfig.showTooltip &amp;amp;&amp;amp; lang &amp;amp;&amp;amp; idStr)&lt;br /&gt;
			? `{{${classConfig.name}|${lang}|${idStr}}}`&lt;br /&gt;
			: &amp;#039;&amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Process each ID element&lt;br /&gt;
	$(generateSelectors()).each(function () {&lt;br /&gt;
		const $elem = $(this);&lt;br /&gt;
&lt;br /&gt;
		// Find the matching class configuration&lt;br /&gt;
		const classConfig = ID_CLASSES.find(cls =&amp;gt; $elem.hasClass(cls.name));&lt;br /&gt;
		if (!classConfig) return;&lt;br /&gt;
&lt;br /&gt;
		const displayedClass = `${classConfig.name}-displayed`;&lt;br /&gt;
&lt;br /&gt;
		// Skip if already processed&lt;br /&gt;
		if ($elem.hasClass(displayedClass)) return;&lt;br /&gt;
&lt;br /&gt;
		// Extract data&lt;br /&gt;
		const lang = $elem.attr(&amp;#039;data-lang&amp;#039;);&lt;br /&gt;
		const rawId = $elem.data(&amp;#039;id&amp;#039;);&lt;br /&gt;
		const idStr = String(rawId);&lt;br /&gt;
		const tooltip = generateTooltip(classConfig, lang, idStr);&lt;br /&gt;
		const hasText = !!$elem.text().trim();&lt;br /&gt;
&lt;br /&gt;
		// Create display element&lt;br /&gt;
		const $content = createDisplayElement(idStr, tooltip);&lt;br /&gt;
&lt;br /&gt;
		if ($elem.is(&amp;#039;li&amp;#039;) || hasText) {&lt;br /&gt;
			// Wrap in new span to preserve existing content&lt;br /&gt;
			const $wrapper = $(&amp;#039;&amp;lt;span/&amp;gt;&amp;#039;, { class: displayedClass }).append($content);&lt;br /&gt;
&lt;br /&gt;
			// Add space if needed&lt;br /&gt;
			if (!hasText || !$elem.text().match(/^\s/)) {&lt;br /&gt;
				$elem.prepend(&amp;#039; &amp;#039;);&lt;br /&gt;
			}&lt;br /&gt;
			$elem.prepend($wrapper);&lt;br /&gt;
		} else {&lt;br /&gt;
			// Replace element content entirely&lt;br /&gt;
			$elem.addClass(displayedClass).empty().append($content);&lt;br /&gt;
			moveIntoNextParagraph($elem);&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	// Prevent CSS-only pseudo-elements from duplicating the display&lt;br /&gt;
	mw.util.addCSS(&lt;br /&gt;
		`${generateSelectors(&amp;#039;::before&amp;#039;)} { content: none !important; display: none !important; }`&lt;br /&gt;
	);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// Ensure CSS fallback is loaded&lt;br /&gt;
mw.loader.load(&amp;#039;ext.gadget.ShowIDs-pagestyles&amp;#039;);&lt;br /&gt;
// &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>wikt&gt;Fenakhay</name></author>
	</entry>
</feed>