<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Wikipedia  - Recent changes [en]</title>
		<link>https://wiki.tachyony.co.uk/wiki/Special:RecentChanges</link>
		<description>Track the most recent changes to the wiki in this feed.</description>
		<language>en</language>
		<generator>MediaWiki 1.44.0</generator>
		<lastBuildDate>Tue, 30 Jun 2026 19:44:06 GMT</lastBuildDate>
		<item>
			<title>Template:About year</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=Template:About_year&amp;diff=120560&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=Template:About_year&amp;diff=120560&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; protected &lt;a href=&quot;/wiki/Template:About_year&quot; title=&quot;Template:About year&quot;&gt;Template:About year&lt;/a&gt; [Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite) &lt;a href=&quot;/w/index.php?title=WP:High-risk_templates&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;WP:High-risk templates (page does not exist)&quot;&gt;Highly visible template&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#if:{{{2|{{{4|{{{6|{{#ifexist:{{{1|{{PAGENAME}}}}} (disambiguation)|HasDisambig|{{#ifexist:{{{1|{{PAGENAME}}}}} (number)|{{#if:{{#invoke:redirect|isRedirect|{{{1|{{PAGENAME}}}}} (number)}}||NotRedirect}}}}|}}}}}}}}}}}|{{Hatnote|This article is about the year {{{1|{{PAGENAME}}}}}. {{#ifexist:{{{1|{{PAGENAME}}}}} (number)|{{#if:{{#invoke:redirect|isRedirect|{{{1|{{PAGENAME}}}}} (number)}}||For the number, see [[{{{1|{{PAGENAME}}}}} (number)]].}}}} {{#if:{{{2|}}}|For {{{2}}}, see [[{{{3}}}]].}} {{#if:{{{4|}}}|For {{{4}}}, see [[{{{5}}}]].}} {{#if:{{{6|}}}|For {{{6}}}, see [[{{{7}}}]].}} {{#ifexist:{{{1|{{PAGENAME}}}}} (disambiguation)|For other uses, see [[{{{1|{{PAGENAME}}}}} (disambiguation)]].}}}}|}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Sun, 28 Jun 2026 11:31:00 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/Template_talk:About_year</comments>
		</item>
		<item>
			<title>Template:About year</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=Template:About_year&amp;diff=120559&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=Template:About_year&amp;diff=120559&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/WP:AES&quot; class=&quot;mw-redirect&quot; title=&quot;WP:AES&quot;&gt;←&lt;/a&gt;Created page with &amp;#039;&amp;lt;includeonly&amp;gt;{{#if:{{{2|{{{4|{{{6|{{#ifexist:{{{1|{{PAGENAME}}}}} (disambiguation)|HasDisambig|{{#ifexist:{{{1|{{PAGENAME}}}}} (number)|{{#if:{{#invoke:redirect|isRedirect|{{{1|{{PAGENAME}}}}} (number)}}||NotRedirect}}}}|}}}}}}}}}}}|{{Hatnote|This article is about the year {{{1|{{PAGENAME}}}}}. {{#ifexist:{{{1|{{PAGENAME}}}}} (number)|{{#if:{{#invoke:redirect|isRedirect|{{{1|{{PAGENAME}}}}} (number)}}||For the number, see [[{{{1|{{PAGENAME}}}}} (number)]].}...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#if:{{{2|{{{4|{{{6|{{#ifexist:{{{1|{{PAGENAME}}}}} (disambiguation)|HasDisambig|{{#ifexist:{{{1|{{PAGENAME}}}}} (number)|{{#if:{{#invoke:redirect|isRedirect|{{{1|{{PAGENAME}}}}} (number)}}||NotRedirect}}}}|}}}}}}}}}}}|{{Hatnote|This article is about the year {{{1|{{PAGENAME}}}}}. {{#ifexist:{{{1|{{PAGENAME}}}}} (number)|{{#if:{{#invoke:redirect|isRedirect|{{{1|{{PAGENAME}}}}} (number)}}||For the number, see [[{{{1|{{PAGENAME}}}}} (number)]].}}}} {{#if:{{{2|}}}|For {{{2}}}, see [[{{{3}}}]].}} {{#if:{{{4|}}}|For {{{4}}}, see [[{{{5}}}]].}} {{#if:{{{6|}}}|For {{{6}}}, see [[{{{7}}}]].}} {{#ifexist:{{{1|{{PAGENAME}}}}} (disambiguation)|For other uses, see [[{{{1|{{PAGENAME}}}}} (disambiguation)]].}}}}|}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Sun, 28 Jun 2026 11:30:40 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/Template_talk:About_year</comments>
		</item>
		<item>
			<title>Template:Convert abbreviated</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=Template:Convert_abbreviated&amp;diff=120558&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=Template:Convert_abbreviated&amp;diff=120558&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; protected &lt;a href=&quot;/wiki/Template:Convert_abbreviated&quot; title=&quot;Template:Convert abbreviated&quot;&gt;Template:Convert abbreviated&lt;/a&gt; [Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite) &lt;a href=&quot;/w/index.php?title=WP:High-risk_templates&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;WP:High-risk templates (page does not exist)&quot;&gt;Highly visible template&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;includeonly&amp;gt;{{{{{♥|safesubst:}}}#invoke:convert|convert|abbr=on always|warnings=1}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Sun, 28 Jun 2026 11:29:53 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/Template_talk:Convert_abbreviated</comments>
		</item>
		<item>
			<title>Template:Convert abbreviated</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=Template:Convert_abbreviated&amp;diff=120557&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=Template:Convert_abbreviated&amp;diff=120557&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/WP:AES&quot; class=&quot;mw-redirect&quot; title=&quot;WP:AES&quot;&gt;←&lt;/a&gt;Created page with &amp;#039;&amp;lt;includeonly&amp;gt;{{{{{♥|safesubst:}}}#invoke:convert|convert|abbr=on always|warnings=1}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;includeonly&amp;gt;{{{{{♥|safesubst:}}}#invoke:convert|convert|abbr=on always|warnings=1}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Sun, 28 Jun 2026 11:29:32 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/Template_talk:Convert_abbreviated</comments>
		</item>
		<item>
			<title>Template:Cvt</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=Template:Cvt&amp;diff=120556&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=Template:Cvt&amp;diff=120556&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; protected &lt;a href=&quot;/wiki/Template:Cvt&quot; class=&quot;mw-redirect&quot; title=&quot;Template:Cvt&quot;&gt;Template:Cvt&lt;/a&gt; [Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite) [cascading] &lt;a href=&quot;/w/index.php?title=WP:High-risk_templates&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;WP:High-risk templates (page does not exist)&quot;&gt;Highly visible template&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;#REDIRECT [[Template:Convert abbreviated]]&lt;br /&gt;
&lt;br /&gt;
{{Redirect category shell|&lt;br /&gt;
{{R from move}}&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Sun, 28 Jun 2026 11:28:41 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/Template_talk:Cvt</comments>
		</item>
		<item>
			<title>Template:Cvt</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=Template:Cvt&amp;diff=120555&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=Template:Cvt&amp;diff=120555&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/WP:AES&quot; class=&quot;mw-redirect&quot; title=&quot;WP:AES&quot;&gt;←&lt;/a&gt;Redirected page to &lt;a href=&quot;/wiki/Template:Convert_abbreviated&quot; title=&quot;Template:Convert abbreviated&quot;&gt;Template:Convert abbreviated&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;#REDIRECT [[Template:Convert abbreviated]]&lt;br /&gt;
&lt;br /&gt;
{{Redirect category shell|&lt;br /&gt;
{{R from move}}&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Sun, 28 Jun 2026 11:28:08 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/Template_talk:Cvt</comments>
		</item>
		<item>
			<title>Template:Langx</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=Template:Langx&amp;diff=120554&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=Template:Langx&amp;diff=120554&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; changed protection settings for &lt;a href=&quot;/wiki/Template:Langx&quot; title=&quot;Template:Langx&quot;&gt;Template:Langx&lt;/a&gt; [Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite) [cascading] &lt;a href=&quot;/w/index.php?title=WP:High-risk_templates&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;WP:High-risk templates (page does not exist)&quot;&gt;Highly visible template&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:lang|langx}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Sun, 28 Jun 2026 11:26:40 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/Template_talk:Langx</comments>
		</item>
		<item>
			<title>Template:Year nav</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=Template:Year_nav&amp;diff=120553&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=Template:Year_nav&amp;diff=120553&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; protected &lt;a href=&quot;/wiki/Template:Year_nav&quot; title=&quot;Template:Year nav&quot;&gt;Template:Year nav&lt;/a&gt; [Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite) [cascading] &lt;a href=&quot;/w/index.php?title=WP:High-risk_templates&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;WP:High-risk templates (page does not exist)&quot;&gt;Highly visible template&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{short description|Calendar year|2=noreplace}}&lt;br /&gt;
{{sidebar&lt;br /&gt;
|title=[[List of decades, centuries, and millennia|Years]]&lt;br /&gt;
|name=Year nav&lt;br /&gt;
|contentclass=hlist&lt;br /&gt;
&lt;br /&gt;
|heading1=Millennium&lt;br /&gt;
|content1= {{dr|y|m|{{{1|{{PAGENAME}}}}}|0|ys}}&lt;br /&gt;
&lt;br /&gt;
|heading2=Centuries&lt;br /&gt;
|content2=&lt;br /&gt;
* {{dr|y|c|{{{1|{{PAGENAME}}}}}|-1|ys}}&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;{{dr|y|c|{{{1|{{PAGENAME}}}}}|0|ys}} &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* {{dr|y|c|{{{1|{{PAGENAME}}}}}|1|ys}}&lt;br /&gt;
&lt;br /&gt;
|heading3=Decades&lt;br /&gt;
|content3=&lt;br /&gt;
* {{dr|y|d|{{{1|{{PAGENAME}}}}}|-2|ys}}&lt;br /&gt;
* {{dr|y|d|{{{1|{{PAGENAME}}}}}|-1|ys}}&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;{{dr|y|d|{{{1|{{PAGENAME}}}}}|0|ys}} &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* {{dr|y|d|{{{1|{{PAGENAME}}}}}|1|ys}}&lt;br /&gt;
* {{dr|y|d|{{{1|{{PAGENAME}}}}}|2|ys}}&lt;br /&gt;
&lt;br /&gt;
|heading4=[[List of years|Years]]&lt;br /&gt;
|content4=&lt;br /&gt;
* {{dr|y|y|{{{1|{{PAGENAME}}}}}|-3|{{#ifexpr: {{{1|{{PAGENAME}}}}} &amp;lt;= 12 |ysa|ys}}}}&lt;br /&gt;
* {{dr|y|y|{{{1|{{PAGENAME}}}}}|-2|{{#ifexpr: {{{1|{{PAGENAME}}}}} &amp;lt;= 12 |ysa|ys}}}}&lt;br /&gt;
* {{dr|y|y|{{{1|{{PAGENAME}}}}}|-1|{{#ifexpr: {{{1|{{PAGENAME}}}}} &amp;lt;= 12 |ysa|ys}}}}&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;{{dr|y|y|{{{1|{{PAGENAME}}}}}|0|{{#ifexpr: {{{1|{{PAGENAME}}}}} &amp;lt;= 100 |ysa|ys}}}} &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* {{dr|y|y|{{{1|{{PAGENAME}}}}}|1|{{#ifexpr: {{{1|{{PAGENAME}}}}} &amp;lt;= 9 |ysa|ys}}}}&lt;br /&gt;
* {{dr|y|y|{{{1|{{PAGENAME}}}}}|2|{{#ifexpr: {{{1|{{PAGENAME}}}}} &amp;lt;= 8 |ysa|ys}}}}&lt;br /&gt;
* {{dr|y|y|{{{1|{{PAGENAME}}}}}|3|{{#ifexpr: {{{1|{{PAGENAME}}}}} &amp;lt;= 7 |ysa|ys}}}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Sun, 28 Jun 2026 11:26:17 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/Template_talk:Year_nav</comments>
		</item>
		<item>
			<title>Template:Year nav</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=Template:Year_nav&amp;diff=120552&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=Template:Year_nav&amp;diff=120552&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/WP:AES&quot; class=&quot;mw-redirect&quot; title=&quot;WP:AES&quot;&gt;←&lt;/a&gt;Created page with &amp;#039;{{short description|Calendar year|2=noreplace}} {{sidebar |title=&lt;a href=&quot;/wiki/List_of_decades,_centuries,_and_millennia&quot; title=&quot;List of decades, centuries, and millennia&quot;&gt;Years&lt;/a&gt; |name=Year nav |contentclass=hlist  |heading1=Millennium |content1= {{dr|y|m|{{{1|{{PAGENAME}}}}}|0|ys}}  |heading2=Centuries |content2= * {{dr|y|c|{{{1|{{PAGENAME}}}}}|-1|ys}} * &amp;#039;&amp;#039;&amp;#039;{{dr|y|c|{{{1|{{PAGENAME}}}}}|0|ys}} &amp;#039;&amp;#039;&amp;#039; * {{dr|y|c|{{{1|{{PAGENAME}}}}}|1|ys}}  |heading3=Decades |content3= * {{dr|y|d|{{{1|{{PAGENAME}}}}}|-2|ys}} * {{dr|y|d|{...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{short description|Calendar year|2=noreplace}}&lt;br /&gt;
{{sidebar&lt;br /&gt;
|title=[[List of decades, centuries, and millennia|Years]]&lt;br /&gt;
|name=Year nav&lt;br /&gt;
|contentclass=hlist&lt;br /&gt;
&lt;br /&gt;
|heading1=Millennium&lt;br /&gt;
|content1= {{dr|y|m|{{{1|{{PAGENAME}}}}}|0|ys}}&lt;br /&gt;
&lt;br /&gt;
|heading2=Centuries&lt;br /&gt;
|content2=&lt;br /&gt;
* {{dr|y|c|{{{1|{{PAGENAME}}}}}|-1|ys}}&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;{{dr|y|c|{{{1|{{PAGENAME}}}}}|0|ys}} &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* {{dr|y|c|{{{1|{{PAGENAME}}}}}|1|ys}}&lt;br /&gt;
&lt;br /&gt;
|heading3=Decades&lt;br /&gt;
|content3=&lt;br /&gt;
* {{dr|y|d|{{{1|{{PAGENAME}}}}}|-2|ys}}&lt;br /&gt;
* {{dr|y|d|{{{1|{{PAGENAME}}}}}|-1|ys}}&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;{{dr|y|d|{{{1|{{PAGENAME}}}}}|0|ys}} &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* {{dr|y|d|{{{1|{{PAGENAME}}}}}|1|ys}}&lt;br /&gt;
* {{dr|y|d|{{{1|{{PAGENAME}}}}}|2|ys}}&lt;br /&gt;
&lt;br /&gt;
|heading4=[[List of years|Years]]&lt;br /&gt;
|content4=&lt;br /&gt;
* {{dr|y|y|{{{1|{{PAGENAME}}}}}|-3|{{#ifexpr: {{{1|{{PAGENAME}}}}} &amp;lt;= 12 |ysa|ys}}}}&lt;br /&gt;
* {{dr|y|y|{{{1|{{PAGENAME}}}}}|-2|{{#ifexpr: {{{1|{{PAGENAME}}}}} &amp;lt;= 12 |ysa|ys}}}}&lt;br /&gt;
* {{dr|y|y|{{{1|{{PAGENAME}}}}}|-1|{{#ifexpr: {{{1|{{PAGENAME}}}}} &amp;lt;= 12 |ysa|ys}}}}&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;{{dr|y|y|{{{1|{{PAGENAME}}}}}|0|{{#ifexpr: {{{1|{{PAGENAME}}}}} &amp;lt;= 100 |ysa|ys}}}} &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* {{dr|y|y|{{{1|{{PAGENAME}}}}}|1|{{#ifexpr: {{{1|{{PAGENAME}}}}} &amp;lt;= 9 |ysa|ys}}}}&lt;br /&gt;
* {{dr|y|y|{{{1|{{PAGENAME}}}}}|2|{{#ifexpr: {{{1|{{PAGENAME}}}}} &amp;lt;= 8 |ysa|ys}}}}&lt;br /&gt;
* {{dr|y|y|{{{1|{{PAGENAME}}}}}|3|{{#ifexpr: {{{1|{{PAGENAME}}}}} &amp;lt;= 7 |ysa|ys}}}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Sun, 28 Jun 2026 11:25:45 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/Template_talk:Year_nav</comments>
		</item>
		<item>
			<title>Template:Langx</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=Template:Langx&amp;diff=120551&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=Template:Langx&amp;diff=120551&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; protected &lt;a href=&quot;/wiki/Template:Langx&quot; title=&quot;Template:Langx&quot;&gt;Template:Langx&lt;/a&gt; [Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:lang|langx}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Sun, 28 Jun 2026 11:24:57 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/Template_talk:Langx</comments>
		</item>
		<item>
			<title>Template:Langx</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=Template:Langx&amp;diff=120550&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=Template:Langx&amp;diff=120550&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/WP:AES&quot; class=&quot;mw-redirect&quot; title=&quot;WP:AES&quot;&gt;←&lt;/a&gt;Created page with &amp;#039;&amp;lt;includeonly&amp;gt;{{#invoke:lang|langx}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt; {{Documentation}} &amp;lt;/noinclude&amp;gt;&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:lang|langx}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Sun, 28 Jun 2026 11:24:39 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/Template_talk:Langx</comments>
		</item>
		<item>
			<title>User:Tachyony</title>
			<link>https://wiki.tachyony.co.uk/wiki/User:Tachyony</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/wiki/User:Tachyony</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; changed group membership for &lt;a href=&quot;/wiki/User:Tachyony&quot; title=&quot;User:Tachyony&quot;&gt;Tachyony&lt;/a&gt;: granted electionadmin, temporary account IP viewer and push subscription manager; kept bureaucrat, check user, editor, emailconfirmed, interface administrator, reviewer, smwadministrator, smwcurator, smweditor, suppressor and administrator unchanged&lt;/p&gt;
</description>
			<pubDate>Sun, 28 Jun 2026 11:15:33 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/User_talk:Tachyony</comments>
		</item>
		<item>
			<title>User:Bob11</title>
			<link>https://wiki.tachyony.co.uk/wiki/User:Bob11</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/wiki/User:Bob11</guid>
			<description>&lt;p&gt;User account &lt;a href=&quot;/w/index.php?title=User:Bob11&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Bob11 (page does not exist)&quot;&gt;&lt;bdi&gt;Bob11&lt;/bdi&gt;&lt;/a&gt; was created&lt;/p&gt;
</description>
			<pubDate>Sat, 27 Jun 2026 16:31:40 GMT</pubDate>
			<dc:creator>Bob11</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/User_talk:Bob11</comments>
		</item>
		<item>
			<title>User:Bob111</title>
			<link>https://wiki.tachyony.co.uk/wiki/User:Bob111</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/wiki/User:Bob111</guid>
			<description>&lt;p&gt;User account &lt;a href=&quot;/w/index.php?title=User:Bob111&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Bob111 (page does not exist)&quot;&gt;&lt;bdi&gt;Bob111&lt;/bdi&gt;&lt;/a&gt; was created&lt;/p&gt;
</description>
			<pubDate>Sat, 27 Jun 2026 16:30:18 GMT</pubDate>
			<dc:creator>Bob111</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/User_talk:Bob111</comments>
		</item>
		<item>
			<title>Sandbox</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=Sandbox&amp;diff=120549&amp;oldid=120548</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=Sandbox&amp;diff=120549&amp;oldid=120548</guid>
			<description>&lt;p&gt;ip test&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:46, 27 June 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;test&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;test2&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Sat, 27 Jun 2026 15:46:06 GMT</pubDate>
			<dc:creator>78.148.198.206</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/Talk:Sandbox</comments>
		</item>
		<item>
			<title>Sandbox</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=Sandbox&amp;diff=120548&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=Sandbox&amp;diff=120548&amp;oldid=0</guid>
			<description>&lt;p&gt;test&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;test&lt;/div&gt;</description>
			<pubDate>Sat, 27 Jun 2026 13:26:31 GMT</pubDate>
			<dc:creator>172.20.0.8</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/Talk:Sandbox</comments>
		</item>
		<item>
			<title>MediaWiki:Gadget-section-browsing</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-section-browsing&amp;diff=120547&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-section-browsing&amp;diff=120547&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; protected &lt;a href=&quot;/wiki/MediaWiki:Gadget-section-browsing&quot; title=&quot;MediaWiki:Gadget-section-browsing&quot;&gt;MediaWiki:Gadget-section-browsing&lt;/a&gt; [Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite) [cascading] &lt;a href=&quot;/w/index.php?title=WP:High-risk_templates&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;WP:High-risk templates (page does not exist)&quot;&gt;Highly visible template&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Browsing&lt;/div&gt;</description>
			<pubDate>Thu, 25 Jun 2026 10:30:56 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadget-section-browsing</comments>
		</item>
		<item>
			<title>MediaWiki:Gadget-section-browsing</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-section-browsing&amp;diff=120546&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-section-browsing&amp;diff=120546&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/WP:AES&quot; class=&quot;mw-redirect&quot; title=&quot;WP:AES&quot;&gt;←&lt;/a&gt;Created page with &amp;#039;Browsing&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Browsing&lt;/div&gt;</description>
			<pubDate>Thu, 25 Jun 2026 10:30:27 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadget-section-browsing</comments>
		</item>
		<item>
			<title>Template:&#039;, &#039;</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=Template:%27,_%27&amp;diff=120545&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=Template:%27,_%27&amp;diff=120545&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Template:%27,_%27&quot; class=&quot;mw-redirect&quot; title=&quot;Template:&amp;#039;, &amp;#039;&quot;&gt;Template:&amp;#039;, &amp;#039;&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;#REDIRECT [[Template:Void]]&lt;/div&gt;</description>
			<pubDate>Thu, 25 Jun 2026 10:27:39 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/Template_talk:%27,_%27</comments>
		</item>
		<item>
			<title>Template:Void</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=Template:Void&amp;diff=120543&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=Template:Void&amp;diff=120543&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Template:Void&quot; title=&quot;Template:Void&quot;&gt;Template:Void&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 25 Jun 2026 10:27:39 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/Template_talk:Void</comments>
		</item>
		<item>
			<title>MediaWiki:Gadget-navpop.css</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-navpop.css&amp;diff=120541&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-navpop.css&amp;diff=120541&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/MediaWiki:Gadget-navpop.css&quot; title=&quot;MediaWiki:Gadget-navpop.css&quot;&gt;MediaWiki:Gadget-navpop.css&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;.popupMoreLink {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ins.popupDiff {&lt;br /&gt;
  background: #afe;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
del.popupDiff {&lt;br /&gt;
  background: #ffe6e6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Dark mode fixes */&lt;br /&gt;
html.skin-theme-clientpref-night ins.popupDiff {&lt;br /&gt;
  background: #026c5f;&lt;br /&gt;
}&lt;br /&gt;
html.skin-theme-clientpref-night del.popupDiff {&lt;br /&gt;
  background: #89474b;&lt;br /&gt;
}&lt;br /&gt;
@media (prefers-color-scheme: dark) {&lt;br /&gt;
  html.skin-theme-clientpref-os ins.popupDiff {&lt;br /&gt;
    background: #026c5f;&lt;br /&gt;
  }&lt;br /&gt;
  html.skin-theme-clientpref-os del.popupDiff {&lt;br /&gt;
    background: #89474b;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#selectionPreview {&lt;br /&gt;
  border: 2px solid var(--border-color-subtle, #c8ccd1);&lt;br /&gt;
  background-color: var(--background-color-progressive-subtle, #eaf3ff);&lt;br /&gt;
  padding: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navpopup {&lt;br /&gt;
  border: 1px solid var(--border-color-base, #a2a9b1);&lt;br /&gt;
  background-color: var(--background-color-base, #fff);&lt;br /&gt;
  color: var(--color-base, #202122);&lt;br /&gt;
  padding: 10px;&lt;br /&gt;
  padding-bottom: 5px;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  box-shadow: 0 3px 8px rgba( 50, 50, 50, 0.35 );&lt;br /&gt;
  word-wrap: break-word;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navpopup hr {&lt;br /&gt;
  color: #aaa !important;&lt;br /&gt;
  background-color: #aaa !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Configure Drag bar color */&lt;br /&gt;
.popupDrag {&lt;br /&gt;
  background-color: #ffbe20;&lt;br /&gt;
  height: 5px;&lt;br /&gt;
  margin-top: -5px;&lt;br /&gt;
  margin-bottom: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.popupDragHandle {&lt;br /&gt;
  cursor: move;&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* menu magic - many thanks to [[User:Zocky]]! */&lt;br /&gt;
&lt;br /&gt;
/* popups */&lt;br /&gt;
.popup_menu {&lt;br /&gt;
  display: none;&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  margin-top: 1.4em;&lt;br /&gt;
  line-height: 1.25em;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  z-index: 2;&lt;br /&gt;
  width: 10em;&lt;br /&gt;
  background: var(--background-color-base, #fff);&lt;br /&gt;
  border: 1px solid grey;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  margin-left: -6px;&lt;br /&gt;
  border-width: 1px 1px 1px 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.popup_menu li { /* both: popup_menu_row and popup_menu_item */&lt;br /&gt;
  list-style: none;&lt;br /&gt;
  margin:0;&lt;br /&gt;
  padding:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.popup_menu a {&lt;br /&gt;
  display: block;&lt;br /&gt;
  padding: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.popup_menu_row a {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.popup_menu_row {&lt;br /&gt;
  color: #aaa;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.popup_drop {&lt;br /&gt;
  display: inline;&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.popup_drop a,&lt;br /&gt;
.popup_drop a:visited {&lt;br /&gt;
  padding: 3px;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.popup_drop:hover .popup_menu,&lt;br /&gt;
.popup_drop .popup_menu:hover {&lt;br /&gt;
  display: inline;&lt;br /&gt;
  padding: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.popup_drop:hover {&lt;br /&gt;
  background: #ccf;&lt;br /&gt;
  color: #44f;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* other colours, styles and so on */&lt;br /&gt;
.popup_menu a:hover {&lt;br /&gt;
  background: grey;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.popup_mainlink {&lt;br /&gt;
  font-size: 140%;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.popup_mainlink a {&lt;br /&gt;
  color: var(--color-emphasized, #000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a.popup_change_title_link {&lt;br /&gt;
  color: #152;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Dark mode fixes */&lt;br /&gt;
html.skin-theme-clientpref-night a.popup_change_title_link {&lt;br /&gt;
  color: #25b84a;&lt;br /&gt;
}&lt;br /&gt;
@media (prefers-color-scheme: dark) {&lt;br /&gt;
  html.skin-theme-clientpref-os a.popup_change_title_link {&lt;br /&gt;
    color: #25b84a;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.popup_diff_dates {&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  background: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.popup_menu_item a {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.popup_history_row_even {&lt;br /&gt;
  background: var(--background-color-neutral, #eaecf0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.popup_history_date {&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  font-size: 120%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
	Important for history preview when summaries are all empty;&lt;br /&gt;
	e.g. https://en.wikipedia.org/w/index.php?title=User:GWicke/sw.js&lt;br /&gt;
	The path is:&lt;br /&gt;
	.popupPreview &amp;gt; table &amp;gt; tbody &amp;gt; tr:is(.popup_history_row_odd, .popup_history_row_even)&lt;br /&gt;
*/&lt;br /&gt;
.popupPreview &amp;gt; table,&lt;br /&gt;
.popupPreview &amp;gt; table &amp;gt; tbody {&lt;br /&gt;
	display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.popup_history_row_odd,&lt;br /&gt;
.popup_history_row_even {&lt;br /&gt;
	display: flex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.popup_history_row_even td:nth-child(3),&lt;br /&gt;
.popup_history_row_odd td:nth-child(3) {&lt;br /&gt;
	flex: 3;&lt;br /&gt;
	word-break: break-word;&lt;br /&gt;
}&lt;br /&gt;
.popup_history_row_even td:nth-child(4),&lt;br /&gt;
.popup_history_row_odd td:nth-child(4) {&lt;br /&gt;
	flex: 7;&lt;br /&gt;
	word-break: break-word;&lt;br /&gt;
}&lt;br /&gt;
.popup_history_row_even &amp;gt; td:not(:last-child),&lt;br /&gt;
.popup_history_row_odd &amp;gt; td:not(:last-child) {&lt;br /&gt;
	margin-right: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* disable interwiki styling */&lt;br /&gt;
.popupPreview a.extiw,&lt;br /&gt;
.popupPreview a.extiw:active {&lt;br /&gt;
  color: #36b;&lt;br /&gt;
  background: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.popupPreview .external {&lt;br /&gt;
  color: #36b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* this can be used in the content area to switch off&lt;br /&gt;
special external link styling */&lt;br /&gt;
.popupPreview .plainlinks a {&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
	Mouse safe zones for popup menu.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
/* eye guide suggestion */	&lt;br /&gt;
.popup_menu:hover {&lt;br /&gt;
	box-shadow: 0 0 5px 5px rgba(179, 179, 255, 0.3);&lt;br /&gt;
}&lt;br /&gt;
/* Dark mode fixes */&lt;br /&gt;
html.skin-theme-clientpref-night .popup_menu:hover {&lt;br /&gt;
	box-shadow: 0 0 5px 5px rgba(0, 0, 90, 0.3);&lt;br /&gt;
}&lt;br /&gt;
@media (prefers-color-scheme: dark) {&lt;br /&gt;
	html.skin-theme-clientpref-os .popup_menu:hover {&lt;br /&gt;
		box-shadow: 0 0 5px 5px rgba(0, 0, 90, 0.3);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* trapezoid guide for the cursor */	&lt;br /&gt;
.popup_menu::before {&lt;br /&gt;
	content: &amp;#039;&amp;#039;;&lt;br /&gt;
	display: block;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	height: 1.5em;&lt;br /&gt;
	top: -1.4em;&lt;br /&gt;
	left: -1.2em;&lt;br /&gt;
	width: calc(2 * var(--navpop-m-len, 6ch));&lt;br /&gt;
	transform: perspective(1px) rotateX(1deg);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* make the trapezoid go behing menu items */&lt;br /&gt;
.popup_menu::before {&lt;br /&gt;
	z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.popup_menu li {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	z-index: 2;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* additional hover margin on the sides */&lt;br /&gt;
.popup_menu li::before {&lt;br /&gt;
	content: &amp;#039;&amp;#039;;&lt;br /&gt;
	display: block;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	top: 0;&lt;br /&gt;
	height: calc(100% + .5em);&lt;br /&gt;
	left: -1.7em;&lt;br /&gt;
	width: 1.7em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.popup_menu li::after {&lt;br /&gt;
	content: &amp;#039;&amp;#039;;&lt;br /&gt;
	display: block;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	top: 0;&lt;br /&gt;
	height: calc(100% + .5em);&lt;br /&gt;
	left: calc(10em - 1px);	/* depends on the width of the menu */&lt;br /&gt;
	width: 1em;&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Thu, 25 Jun 2026 10:27:39 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadget-navpop.css</comments>
		</item>
		<item>
			<title>MediaWiki:Gadget-popups.js</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-popups.js&amp;diff=120539&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-popups.js&amp;diff=120539&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/MediaWiki:Gadget-popups.js&quot; title=&quot;MediaWiki:Gadget-popups.js&quot;&gt;MediaWiki:Gadget-popups.js&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;a href=&quot;https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-popups.js&amp;amp;diff=120539&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Thu, 25 Jun 2026 10:27:39 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadget-popups.js</comments>
		</item>
		<item>
			<title>MediaWiki:Gadget-Navigation popups</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-Navigation_popups&amp;diff=120537&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-Navigation_popups&amp;diff=120537&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/MediaWiki:Gadget-Navigation_popups&quot; title=&quot;MediaWiki:Gadget-Navigation popups&quot;&gt;MediaWiki:Gadget-Navigation popups&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Wikipedia:Tools/Navigation popups|Navigation popups]]: article previews and editing functions pop up when hovering over links&lt;/div&gt;</description>
			<pubDate>Thu, 25 Jun 2026 10:27:38 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadget-Navigation_popups</comments>
		</item>
		<item>
			<title>Template:ImageNoteEnd</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=Template:ImageNoteEnd&amp;diff=120535&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=Template:ImageNoteEnd&amp;diff=120535&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Template:ImageNoteEnd&quot; title=&quot;Template:ImageNoteEnd&quot;&gt;Template:ImageNoteEnd&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation|content=See [[Template:ImageWithNotes]].}}&lt;br /&gt;
[[Category:File namespace templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 25 Jun 2026 10:27:28 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/Template_talk:ImageNoteEnd</comments>
		</item>
		<item>
			<title>Template:ImageNote</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=Template:ImageNote&amp;diff=120533&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=Template:ImageNote&amp;diff=120533&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Template:ImageNote&quot; title=&quot;Template:ImageNote&quot;&gt;Template:ImageNote&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{#if: {{{style|}}} |&amp;lt;div id=&amp;quot;image_annotation_note_{{{id|{{{1}}}}}}&amp;quot; class=&amp;quot;image_annotation&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;image_annotation_view_x_{{{id|{{{1}}}}}}&amp;quot; id=&amp;quot;image_annotation_view_x_{{{id|{{{1}}}}}}&amp;quot;&amp;gt;{{{x|{{{2}}}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;image_annotation_view_y_{{{id|{{{1}}}}}}&amp;quot; id=&amp;quot;image_annotation_view_y_{{{id|{{{1}}}}}}&amp;quot;&amp;gt;{{{y|{{{3}}}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;image_annotation_view_w_{{{id|{{{1}}}}}}&amp;quot; id=&amp;quot;image_annotation_view_w_{{{id|{{{1}}}}}}&amp;quot;&amp;gt;{{{w|{{{4}}}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;image_annotation_view_h_{{{id|{{{1}}}}}}&amp;quot; id=&amp;quot;image_annotation_view_h_{{{id|{{{1}}}}}}&amp;quot;&amp;gt;{{{h|{{{5}}}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;image_annotation_full_width_{{{id|{{{1}}}}}}&amp;quot; id=&amp;quot;image_annotation_full_width_{{{id|{{{1}}}}}}&amp;quot;&amp;gt;{{{dimx|{{{6}}}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;image_annotation_full_height_{{{id|{{{1}}}}}}&amp;quot; id=&amp;quot;image_annotation_full_height_{{{id|{{{1}}}}}}&amp;quot;&amp;gt;{{{dimy|{{{7}}}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{#switch:{{NAMESPACE}}|File=[[Category:Images with annotations|{{PAGENAME}}]]}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
{{#if: {{{style|}}} |&amp;lt;div class=&amp;quot;image_annotation_content_{{{id|{{{1}}}}}}&amp;quot; id=&amp;quot;image_annotation_content_{{{id|{{{1}}}}}}&amp;quot;&amp;gt;}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:File namespace templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 25 Jun 2026 10:27:28 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/Template_talk:ImageNote</comments>
		</item>
		<item>
			<title>MediaWiki:Gadget-ImageAnnotator.js</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-ImageAnnotator.js&amp;diff=120531&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-ImageAnnotator.js&amp;diff=120531&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/MediaWiki:Gadget-ImageAnnotator.js&quot; title=&quot;MediaWiki:Gadget-ImageAnnotator.js&quot;&gt;MediaWiki:Gadget-ImageAnnotator.js&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;a href=&quot;https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-ImageAnnotator.js&amp;amp;diff=120531&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Thu, 25 Jun 2026 10:27:28 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadget-ImageAnnotator.js</comments>
		</item>
		<item>
			<title>MediaWiki:Gadget-ImageAnnotator</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-ImageAnnotator&amp;diff=120529&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-ImageAnnotator&amp;diff=120529&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/MediaWiki:Gadget-ImageAnnotator&quot; title=&quot;MediaWiki:Gadget-ImageAnnotator&quot;&gt;MediaWiki:Gadget-ImageAnnotator&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[:commons:Help:Gadget-ImageAnnotator|ImageAnnotator]]: view image notes and comments on file description pages&lt;/div&gt;</description>
			<pubDate>Thu, 25 Jun 2026 10:27:27 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadget-ImageAnnotator</comments>
		</item>
		<item>
			<title>MediaWiki:Gadget-GoogleTrans.js</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-GoogleTrans.js&amp;diff=120527&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-GoogleTrans.js&amp;diff=120527&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/MediaWiki:Gadget-GoogleTrans.js&quot; title=&quot;MediaWiki:Gadget-GoogleTrans.js&quot;&gt;MediaWiki:Gadget-GoogleTrans.js&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;//  _________________________________________________________________________________________&lt;br /&gt;
// |                                                                                         |&lt;br /&gt;
// |                    === WARNING: GLOBAL GADGET FILE ===                                  |&lt;br /&gt;
// |                  Changes to this page affect many users.                                |&lt;br /&gt;
// | Please discuss changes on the talk page or on [[Wikipedia_talk:Gadget]] before editing. |&lt;br /&gt;
// |_________________________________________________________________________________________|&lt;br /&gt;
//&lt;br /&gt;
// Translation tool that uses the &amp;quot;Google Translate&amp;quot; API.&lt;br /&gt;
// Opens a translation popup for selected text or word under the cursor when pushing the shift button.&lt;br /&gt;
&lt;br /&gt;
// imports [[User:Endo999/GoogleTrans.js]]&lt;br /&gt;
mw.loader.load(&amp;#039;//en.wikipedia.org/w/index.php?title=User:Endo999/GoogleTrans.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;#039;);&lt;/div&gt;</description>
			<pubDate>Thu, 25 Jun 2026 10:27:13 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadget-GoogleTrans.js</comments>
		</item>
		<item>
			<title>MediaWiki:Gadget-GoogleTrans</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-GoogleTrans&amp;diff=120525&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-GoogleTrans&amp;diff=120525&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/MediaWiki:Gadget-GoogleTrans&quot; title=&quot;MediaWiki:Gadget-GoogleTrans&quot;&gt;MediaWiki:Gadget-GoogleTrans&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;sup&amp;gt;&amp;lt;abbr title=&amp;quot;{{int:gadgets-external}}&amp;quot;&amp;gt;(E)&amp;lt;/abbr&amp;gt;&amp;lt;/sup&amp;gt; &amp;lt;sup&amp;gt;&amp;lt;abbr title=&amp;quot;{{int:gadgets-user}}&amp;quot;&amp;gt;(U)&amp;lt;/abbr&amp;gt;&amp;lt;/sup&amp;gt; [[User:Endo999/GoogleTrans|GoogleTrans]]: open a translation popup for the selected text or the word under the cursor when pushing the shift button&lt;/div&gt;</description>
			<pubDate>Thu, 25 Jun 2026 10:27:13 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadget-GoogleTrans</comments>
		</item>
		<item>
			<title>MediaWiki:Gadget-searchFocus.js</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-searchFocus.js&amp;diff=120523&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-searchFocus.js&amp;diff=120523&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/MediaWiki:Gadget-searchFocus.js&quot; title=&quot;MediaWiki:Gadget-searchFocus.js&quot;&gt;MediaWiki:Gadget-searchFocus.js&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;//  _________________________________________________________________________________________&lt;br /&gt;
// |                                                                                         |&lt;br /&gt;
// |                    === WARNING: GLOBAL GADGET FILE ===                                  |&lt;br /&gt;
// |                  Changes to this page affect many users.                                |&lt;br /&gt;
// | Please discuss changes on the talk page or on [[Wikipedia_talk:Gadget]] before editing. |&lt;br /&gt;
// |_________________________________________________________________________________________|&lt;br /&gt;
//&lt;br /&gt;
// Imported from [[Wikipedia:FAQ/Main Page]] as of April 1, 2008&lt;br /&gt;
&lt;br /&gt;
if ( mw.config.get( &amp;#039;wgIsMainPage&amp;#039; ) ) {&lt;br /&gt;
  $( function () {&lt;br /&gt;
    $( &amp;#039;#searchInput&amp;#039; ).focus();&lt;br /&gt;
  } );&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Thu, 25 Jun 2026 10:27:00 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadget-searchFocus.js</comments>
		</item>
		<item>
			<title>MediaWiki:Gadget-searchFocus</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-searchFocus&amp;diff=120521&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-searchFocus&amp;diff=120521&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/MediaWiki:Gadget-searchFocus&quot; title=&quot;MediaWiki:Gadget-searchFocus&quot;&gt;MediaWiki:Gadget-searchFocus&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Focus the cursor in the search bar on loading the Main Page&lt;/div&gt;</description>
			<pubDate>Thu, 25 Jun 2026 10:26:59 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadget-searchFocus</comments>
		</item>
		<item>
			<title>MediaWiki:Gadget-exlinks.js</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-exlinks.js&amp;diff=120519&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-exlinks.js&amp;diff=120519&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/MediaWiki:Gadget-exlinks.js&quot; title=&quot;MediaWiki:Gadget-exlinks.js&quot;&gt;MediaWiki:Gadget-exlinks.js&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;// **********************************************************************&lt;br /&gt;
// **                 ***WARNING GLOBAL GADGET FILE***                 **&lt;br /&gt;
// **             changes to this file affect many users.              **&lt;br /&gt;
// **           please discuss on the talk page before editing         **&lt;br /&gt;
// **                                                                  **&lt;br /&gt;
// **********************************************************************&lt;br /&gt;
/**&lt;br /&gt;
 * @source mediawiki.org/wiki/Snippets/Open_external_links_in_new_window&lt;br /&gt;
 * @version 5&lt;br /&gt;
 */&lt;br /&gt;
mw.hook(&amp;#039;wikipage.content&amp;#039;).add(function($content) {&lt;br /&gt;
	// Second selector is for external links in Parsoid HTML+RDFa output (bug 65243).&lt;br /&gt;
	$content.find(&amp;#039;a.external, a[rel=&amp;quot;mw:ExtLink&amp;quot;]&amp;#039;).each(function () {&lt;br /&gt;
		// Can&amp;#039;t use wgServer because it can be protocol relative&lt;br /&gt;
		// Use this.href property instead of this.getAttribute(&amp;#039;href&amp;#039;)  because the property&lt;br /&gt;
		// is converted to a full URL (including protocol)&lt;br /&gt;
		if (this.href.indexOf(location.protocol + &amp;#039;//&amp;#039; + location.hostname) !== 0) {&lt;br /&gt;
			this.target = &amp;#039;_blank&amp;#039;;&lt;br /&gt;
			if ( this.rel.indexOf( &amp;#039;noopener&amp;#039; ) &amp;lt; 0 ) {&lt;br /&gt;
				this.rel += &amp;#039; noopener&amp;#039;; // the leading space matters, rel attributes have space-separated tokens&lt;br /&gt;
			}&lt;br /&gt;
			if ( this.rel.indexOf( &amp;#039;noreferrer&amp;#039; ) &amp;lt; 0 ) {&lt;br /&gt;
				this.rel += &amp;#039; noreferrer&amp;#039;; // the leading space matters, rel attributes have space-separated tokens&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;/div&gt;</description>
			<pubDate>Thu, 25 Jun 2026 10:24:39 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadget-exlinks.js</comments>
		</item>
		<item>
			<title>MediaWiki:Gadget-exlinks</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-exlinks&amp;diff=120517&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-exlinks&amp;diff=120517&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/MediaWiki:Gadget-exlinks&quot; title=&quot;MediaWiki:Gadget-exlinks&quot;&gt;MediaWiki:Gadget-exlinks&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Open external links in a new tab or window&lt;/div&gt;</description>
			<pubDate>Thu, 25 Jun 2026 10:24:38 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadget-exlinks</comments>
		</item>
		<item>
			<title>MediaWiki:Gadget-removeAccessKeys.js</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-removeAccessKeys.js&amp;diff=120515&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-removeAccessKeys.js&amp;diff=120515&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/MediaWiki:Gadget-removeAccessKeys.js&quot; title=&quot;MediaWiki:Gadget-removeAccessKeys.js&quot;&gt;MediaWiki:Gadget-removeAccessKeys.js&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;// **********************************************************************&lt;br /&gt;
// **                 ***WARNING GLOBAL GADGET FILE***                 **&lt;br /&gt;
// **             changes to this file affect many users.              **&lt;br /&gt;
// **           please discuss on the talk page before editing         **&lt;br /&gt;
// **                                                                  **&lt;br /&gt;
// **********************************************************************&lt;br /&gt;
// Imported from version as of: 2007-04-17T22:22:27&lt;br /&gt;
// Deactivating access keys, see [[Wikipedia talk:WikiProject User scripts/Scripts/removeAccessKeys|talk page]]&lt;br /&gt;
jQuery(document).ready(function($) {&lt;br /&gt;
    if (mw.config.get(&amp;#039;skin&amp;#039;) == &amp;#039;vector&amp;#039;) {&lt;br /&gt;
        var head = document.getElementById(&amp;#039;mw-head&amp;#039;);&lt;br /&gt;
        if (head) removeKeys(head.getElementsByTagName(&amp;#039;a&amp;#039;));&lt;br /&gt;
        var panel = document.getElementById(&amp;#039;mw-panel&amp;#039;);&lt;br /&gt;
        if (panel) removeKeys(panel.getElementsByTagName(&amp;#039;a&amp;#039;));&lt;br /&gt;
    } else {&lt;br /&gt;
        var columnOne = document.getElementById(&amp;#039;column-one&amp;#039;);&lt;br /&gt;
        if (!columnOne) columnOne = document.getElementById(&amp;#039;mw_portlets&amp;#039;);&lt;br /&gt;
        if (!columnOne) return;&lt;br /&gt;
        removeKeys(columnOne.getElementsByTagName(&amp;#039;a&amp;#039;));&lt;br /&gt;
        var cactions = document.getElementById(&amp;#039;p-cactions&amp;#039;);&lt;br /&gt;
        if (cactions) removeKeys(cactions.getElementsByTagName(&amp;#039;a&amp;#039;));&lt;br /&gt;
        var personal = document.getElementById(&amp;#039;p-personal&amp;#039;);&lt;br /&gt;
        if (personal) removeKeys(personal.getElementsByTagName(&amp;#039;a&amp;#039;));&lt;br /&gt;
    }&lt;br /&gt;
    removeKeys(document.getElementsByTagName(&amp;#039;input&amp;#039;));&lt;br /&gt;
    removeKeys(document.getElementsByTagName(&amp;#039;label&amp;#039;));&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
function removeKeys(nodeList) {&lt;br /&gt;
    var el;&lt;br /&gt;
    for (var i = 0; i &amp;lt; nodeList.length; i++) {&lt;br /&gt;
        el = nodeList[i];&lt;br /&gt;
        if (!el.accessKey) continue;&lt;br /&gt;
        if (!window.removeAccessKeys || removeAccessKeys.indexOf(el.accessKey) &amp;gt;= 0) {&lt;br /&gt;
            el.accessKey = &amp;#039;&amp;#039;; // el.setAttribute(&amp;#039;accessKey&amp;#039;, &amp;#039;&amp;#039;); &lt;br /&gt;
            $(el).updateTooltipAccessKeys();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Thu, 25 Jun 2026 10:24:28 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadget-removeAccessKeys.js</comments>
		</item>
		<item>
			<title>MediaWiki:Gadget-removeAccessKeys</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-removeAccessKeys&amp;diff=120513&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-removeAccessKeys&amp;diff=120513&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/MediaWiki:Gadget-removeAccessKeys&quot; title=&quot;MediaWiki:Gadget-removeAccessKeys&quot;&gt;MediaWiki:Gadget-removeAccessKeys&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Disable [[Wikipedia:Keyboard shortcuts|access key]]s&lt;/div&gt;</description>
			<pubDate>Thu, 25 Jun 2026 10:24:28 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadget-removeAccessKeys</comments>
		</item>
		<item>
			<title>MediaWiki:Gadget-confirmationRollback-mobile.js</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-confirmationRollback-mobile.js&amp;diff=120511&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-confirmationRollback-mobile.js&amp;diff=120511&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/MediaWiki:Gadget-confirmationRollback-mobile.js&quot; title=&quot;MediaWiki:Gadget-confirmationRollback-mobile.js&quot;&gt;MediaWiki:Gadget-confirmationRollback-mobile.js&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/********************************************************************&lt;br /&gt;
**                ***WARNING: GLOBAL GADGET FILE***                **&lt;br /&gt;
** Any changes to this file will affect many users. Please discuss **&lt;br /&gt;
**    changes on the talk page or at [[WP:VPT]] before editing.    **&lt;br /&gt;
********************************************************************/&lt;br /&gt;
&lt;br /&gt;
//&amp;lt;nowiki&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
	if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {&lt;br /&gt;
		$(&amp;quot;.mw-rollback-link&amp;quot;).on(&amp;#039;click&amp;#039;, function(e) {&lt;br /&gt;
			var linkText = $(e.target).text(),&lt;br /&gt;
				count = linkText.match(/\d/) ? linkText.match(/\d+/)[0] : null,&lt;br /&gt;
				message = &amp;#039;Rollback &amp;#039; + (count ? count + &amp;#039; edits&amp;#039; : &amp;#039;edit&amp;#039;) + &amp;#039; by &amp;#039; + mw.util.getParamValue(&amp;#039;from&amp;#039;,e.target.href) + &amp;#039;?&amp;#039;;&lt;br /&gt;
			if(!confirm(message)) return e.preventDefault();&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
}());&lt;br /&gt;
//&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 25 Jun 2026 10:24:21 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadget-confirmationRollback-mobile.js</comments>
		</item>
		<item>
			<title>MediaWiki:Gadget-confirmationRollback-mobile</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-confirmationRollback-mobile&amp;diff=120509&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-confirmationRollback-mobile&amp;diff=120509&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/MediaWiki:Gadget-confirmationRollback-mobile&quot; title=&quot;MediaWiki:Gadget-confirmationRollback-mobile&quot;&gt;MediaWiki:Gadget-confirmationRollback-mobile&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;sup&amp;gt;&amp;lt;abbr title=&amp;quot;{{int:gadgets-default}}&amp;quot;&amp;gt;(D)&amp;lt;/abbr&amp;gt;&amp;lt;/sup&amp;gt; Require confirmation before performing rollback on mobile devices&lt;/div&gt;</description>
			<pubDate>Thu, 25 Jun 2026 10:24:20 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadget-confirmationRollback-mobile</comments>
		</item>
		<item>
			<title>MediaWiki:Gadget-modrollback.js</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-modrollback.js&amp;diff=120507&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-modrollback.js&amp;diff=120507&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/MediaWiki:Gadget-modrollback.js&quot; title=&quot;MediaWiki:Gadget-modrollback.js&quot;&gt;MediaWiki:Gadget-modrollback.js&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;mw.loader.load( &amp;#039;//www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-modrollback.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;#039; );&lt;/div&gt;</description>
			<pubDate>Thu, 25 Jun 2026 10:23:57 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadget-modrollback.js</comments>
		</item>
		<item>
			<title>MediaWiki:Gadget-modrollback</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-modrollback&amp;diff=120505&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-modrollback&amp;diff=120505&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/MediaWiki:Gadget-modrollback&quot; title=&quot;MediaWiki:Gadget-modrollback&quot;&gt;MediaWiki:Gadget-modrollback&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;sup&amp;gt;&amp;lt;abbr title=&amp;quot;{{int:gadgets-sister}}&amp;quot;&amp;gt;(S)&amp;lt;/abbr&amp;gt;&amp;lt;/sup&amp;gt; After rolling back a user&amp;#039;s edit, automatically open their contributions page. (Note: Incompatible with the &amp;quot;{{int:Tog-showrollbackconfirmation}}&amp;quot; appearance preference).&lt;/div&gt;</description>
			<pubDate>Thu, 25 Jun 2026 10:23:56 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadget-modrollback</comments>
		</item>
		<item>
			<title>Module:Gadgets</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=Module:Gadgets&amp;diff=120503&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=Module:Gadgets&amp;diff=120503&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:Gadgets&quot; title=&quot;Module:Gadgets&quot;&gt;Module:Gadgets&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
p.parse = function()&lt;br /&gt;
	local text = mw.title.new(&amp;#039;MediaWiki:Gadgets-definition&amp;#039;):getContent()&lt;br /&gt;
	local lines = mw.text.split(text, &amp;#039;\n&amp;#039;, false)&lt;br /&gt;
	&lt;br /&gt;
	local repo = {}&lt;br /&gt;
	for _, line in ipairs(lines) do&lt;br /&gt;
		if line:sub(1, 1) == &amp;#039;*&amp;#039; then&lt;br /&gt;
			local name, options, pages = p.parse_line(line)&lt;br /&gt;
			if name and #pages ~= 0 then&lt;br /&gt;
				repo[name] = { options = options, pages = pages }&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return repo&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.parse_line = function(def) &lt;br /&gt;
	local pattern = &amp;quot;^%*%s*(.+)%s*(%b[])%s*(.-)$&amp;quot;&lt;br /&gt;
	local name, opts, pageList = string.match(def, pattern)&lt;br /&gt;
	&lt;br /&gt;
	if name then&lt;br /&gt;
		name = mw.text.trim(name)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Process options string into a Lua table&lt;br /&gt;
    local options = {}	&lt;br /&gt;
	if opts then&lt;br /&gt;
	    -- Extracting the options without square brackets and trimming spaces&lt;br /&gt;
	    opts = opts:sub(2, -2):gsub(&amp;quot;%s+&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	    &lt;br /&gt;
	    for pair in opts:gmatch(&amp;quot;%s*([^|]+)%s*|?&amp;quot;) do&lt;br /&gt;
		    local key, value = pair:match(&amp;quot;%s*([^=]+)%s*=%s*([^=|]+)%s*&amp;quot;)&lt;br /&gt;
		    if key and value then&lt;br /&gt;
		        options[key:match(&amp;quot;%s*(.-)%s*$&amp;quot;)] = value:match(&amp;quot;^%s*(.-)%s*$&amp;quot;)&lt;br /&gt;
		    else&lt;br /&gt;
		        key = pair:match(&amp;quot;%s*(.-)%s*$&amp;quot;)&lt;br /&gt;
		        options[key] = true&lt;br /&gt;
		    end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Process page list into an array&lt;br /&gt;
	local pages = {}&lt;br /&gt;
	if pageList then&lt;br /&gt;
	    for page in pageList:gmatch(&amp;quot;[^|]+&amp;quot;) do&lt;br /&gt;
	        table.insert(pages, mw.text.trim(page))&lt;br /&gt;
	    end&lt;br /&gt;
    end&lt;br /&gt;
    return name, options, pages&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.get_type = function(def) &lt;br /&gt;
	if def.options.type == &amp;#039;general&amp;#039; or def.options.type == &amp;#039;styles&amp;#039; then&lt;br /&gt;
		return def.options.type&lt;br /&gt;
	end&lt;br /&gt;
	if def.options.dependencies ~= nil then&lt;br /&gt;
		return &amp;#039;general&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	for _, page in ipairs(def.pages) do&lt;br /&gt;
		if not string.match(page, &amp;#039;%.css$&amp;#039;) then&lt;br /&gt;
			return &amp;#039;general&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;styles&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.get_usage = function(name)&lt;br /&gt;
	-- escape name for use in pattern&lt;br /&gt;
	name = name:gsub(&amp;quot;[%-%.%+%[%]%(%)%$%^%%%?%*]&amp;quot;, &amp;quot;%%%1&amp;quot;):gsub(&amp;quot;_&amp;quot;, &amp;quot; &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	-- rely on [[Project:GUS2Wiki]] until [[phab:T354890]] is implemented&lt;br /&gt;
	local _, _, count = mw.title.new(&amp;#039;Project:GUS2Wiki&amp;#039;):getContent():find(&amp;#039;\n&amp;#039;..name..&amp;#039;,(%d+)&amp;#039;)&lt;br /&gt;
	return tonumber(count) or -1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Wed, 24 Jun 2026 20:29:38 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/Module_talk:Gadgets</comments>
		</item>
		<item>
			<title>Module:Validate gadgets</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=Module:Validate_gadgets&amp;diff=120501&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=Module:Validate_gadgets&amp;diff=120501&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:Validate_gadgets&quot; title=&quot;Module:Validate gadgets&quot;&gt;Module:Validate gadgets&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local MessageBox = require(&amp;#039;Module:Message box&amp;#039;)&lt;br /&gt;
local Gadgets = require(&amp;#039;Module:Gadgets&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function arr_contains(array, val)&lt;br /&gt;
    for _, value in ipairs(array) do&lt;br /&gt;
        if value == val then&lt;br /&gt;
            return true&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local BOOLEAN_OPTIONS = {&lt;br /&gt;
	&amp;#039;ResourceLoader&amp;#039;, &amp;#039;default&amp;#039;, &amp;#039;package&amp;#039;, &amp;#039;hidden&amp;#039;, &amp;#039;supportsUrlLoad&amp;#039;, &amp;#039;requiresES6&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
local STRING_OPTIONS = {&lt;br /&gt;
	&amp;#039;type&amp;#039;, &amp;#039;dependencies&amp;#039;, &amp;#039;peers&amp;#039;, &amp;#039;namespaces&amp;#039;, &amp;#039;actions&amp;#039;, &lt;br /&gt;
	&amp;#039;contentModels&amp;#039;, &amp;#039;categories&amp;#039;, &amp;#039;targets&amp;#039;, &amp;#039;skins&amp;#039;, &amp;#039;rights&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Lists of valid options for things that aren&amp;#039;t exposed to lua &lt;br /&gt;
-- (unlike namespaces that can be accessed from mw.site.namespaces)&lt;br /&gt;
local VALID_CONTENT_MODELS = {&amp;#039;wikitext&amp;#039;, &amp;#039;javascript&amp;#039;, &amp;#039;css&amp;#039;, &amp;#039;json&amp;#039;, &amp;#039;vue&amp;#039;, &amp;#039;MassMessageListContent&amp;#039;, &amp;#039;Scribunto&amp;#039;, &amp;#039;sanitized-css&amp;#039;, &amp;#039;SecurePoll&amp;#039;}&lt;br /&gt;
local VALID_ACTIONS = {&amp;#039;view&amp;#039;, &amp;#039;edit&amp;#039;, &amp;#039;history&amp;#039;, &amp;#039;info&amp;#039;, &amp;#039;move&amp;#039;, &amp;#039;delete&amp;#039;, &amp;#039;undelete&amp;#039;, &amp;#039;protect&amp;#039;, &amp;#039;block&amp;#039; } -- not exhaustive&lt;br /&gt;
&lt;br /&gt;
p.validate = function ()&lt;br /&gt;
	local text = mw.title.new(&amp;#039;MediaWiki:Gadgets-definition&amp;#039;):getContent()&lt;br /&gt;
	local lines = mw.text.split(text, &amp;#039;\n&amp;#039;, false)&lt;br /&gt;
	&lt;br /&gt;
	local repo = {}&lt;br /&gt;
	local allWarnings = {}	&lt;br /&gt;
	&lt;br /&gt;
	-- A bit of parsing is reimplemented here as [[Module:Gadgets]] doesn&amp;#039;t raise warnings&lt;br /&gt;
	-- for invalid lines&lt;br /&gt;
	for _, line in ipairs(lines) do&lt;br /&gt;
		if line:sub(1, 1) == &amp;#039;*&amp;#039; then&lt;br /&gt;
			local name, options, pages = Gadgets.parse_line(line)&lt;br /&gt;
			if not name or #pages == 0 then&lt;br /&gt;
				table.insert(allWarnings, &amp;#039;* Invalid definition: &amp;#039;..line)&lt;br /&gt;
			else&lt;br /&gt;
				repo[name] = { options = options, pages = pages }&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for name, conf in pairs(repo) do&lt;br /&gt;
		local warnings = p.create_warnings(name, conf.options, conf.pages, repo)&lt;br /&gt;
		for _, warning in ipairs(warnings) do&lt;br /&gt;
			table.insert(allWarnings, &amp;#039;*&amp;#039;..name..&amp;#039;: &amp;#039;..warning)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if #allWarnings ~= 0 then&lt;br /&gt;
		return MessageBox.main(&amp;#039;ombox&amp;#039;, {&lt;br /&gt;
			text = &amp;#039;&amp;lt;b&amp;gt;Issues in gadget definitions:&amp;lt;/b&amp;gt;\n&amp;#039; .. table.concat(allWarnings, &amp;#039;\n&amp;#039;),&lt;br /&gt;
			type = &amp;#039;delete&amp;#039;,&lt;br /&gt;
			class = &amp;#039;gadgets-validation&amp;#039;&lt;br /&gt;
		})&lt;br /&gt;
	elseif require(&amp;#039;Module:If preview/configuration&amp;#039;).preview then&lt;br /&gt;
		return MessageBox.main(&amp;#039;ombox&amp;#039;, {&lt;br /&gt;
			text = &amp;#039;&amp;lt;b&amp;gt;Issues in gadget definitions:&amp;lt;/b&amp;gt; &amp;lt;i&amp;gt;No issues found!&amp;lt;/i&amp;gt;&amp;#039;,&lt;br /&gt;
			type = &amp;#039;notice&amp;#039;,&lt;br /&gt;
			image = &amp;#039;[[File:Check-green.svg|30px]]&amp;#039;,&lt;br /&gt;
			class = &amp;#039;gadgets-validation&amp;#039;&lt;br /&gt;
		})&lt;br /&gt;
	else &lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.create_warnings = function(name, options, pages, repo)&lt;br /&gt;
	local warnings = {}&lt;br /&gt;
	&lt;br /&gt;
	-- RL module name (ext.gadget.&amp;lt;name&amp;gt;) should not exceed 255 bytes&lt;br /&gt;
	-- so a limit of 255 - 11 = 244 bytes for gadget name&lt;br /&gt;
	if string.len(name) &amp;gt; 244 then&lt;br /&gt;
		table.insert(warnings, &amp;#039;Gadget name must not exceed 244 bytes&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Per ResourceLoader::isValidModuleName&lt;br /&gt;
	if name:gsub(&amp;#039;[|,!]&amp;#039;, &amp;#039;&amp;#039;) ~= name then&lt;br /&gt;
		table.insert(warnings, &amp;#039;Gadget name must not contain pipes (|), commas (,) or exclamation marks (!)&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Pattern per MediaWikiGadgetDefinitionsRepo::newFromDefinition&lt;br /&gt;
	if not string.match(name, &amp;quot;^[a-zA-Z][-_:%.%w ]*[a-zA-Z0-9]?$&amp;quot;) then&lt;br /&gt;
		table.insert(warnings, &amp;#039;Gadget name is used as part of the name of a form field, and must follow the rules defined in https://www.w3.org/TR/html4/types.html#type-cdata&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Look for invalid options&lt;br /&gt;
	for key, value in pairs(options) do &lt;br /&gt;
		if arr_contains(BOOLEAN_OPTIONS, key) then&lt;br /&gt;
			if value ~= true then &lt;br /&gt;
				table.insert(warnings, &amp;#039;Option &amp;#039;..key..&amp;#039; is a boolean: should have no value&amp;#039;)&lt;br /&gt;
			end &lt;br /&gt;
		elseif arr_contains(STRING_OPTIONS, key) then &lt;br /&gt;
			if value == true then &lt;br /&gt;
				table.insert(warnings, &amp;#039;Option &amp;#039;..key..&amp;#039; must have a value&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(warnings, &amp;#039;Option &amp;#039;..key..&amp;#039; is unrecognised&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    if options.type ~= nil and options.type ~= &amp;#039;general&amp;#039; and options.type ~= &amp;#039;styles&amp;#039; then&lt;br /&gt;
    	table.insert(warnings, &amp;#039;Allowed values for type are: general, styles&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    if options.targets ~= nil then&lt;br /&gt;
    	table.insert(warnings, &amp;#039;Setting targets in gadget defintion is deprecated and no longer has any effect&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    if options.namespaces ~= nil then&lt;br /&gt;
    	for _, id in ipairs(mw.text.split(options.namespaces, &amp;#039;,&amp;#039;, false)) do&lt;br /&gt;
    		if not string.match(id, &amp;#039;^-?%d+$&amp;#039;) then&lt;br /&gt;
    			table.insert(warnings, &amp;#039;Invalid namespace id: &amp;#039;..id..&amp;#039; - must be numeric&amp;#039;)&lt;br /&gt;
    		elseif mw.site.namespaces[tonumber(id)] == nil then&lt;br /&gt;
    			table.insert(warnings, &amp;#039;Namespace id &amp;#039;..id..&amp;#039; is invalid&amp;#039;)&lt;br /&gt;
    		end&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    if options.actions ~= nil then&lt;br /&gt;
    	for _, action in ipairs(mw.text.split(options.actions, &amp;#039;,&amp;#039;, false)) do&lt;br /&gt;
			if not arr_contains(VALID_ACTIONS, action) then&lt;br /&gt;
    			table.insert(warnings, &amp;#039;Action &amp;#039;..action..&amp;#039; is unrecognised&amp;#039;)&lt;br /&gt;
    		end&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    if options.contentModels ~= nil then&lt;br /&gt;
    	for _, model in ipairs(mw.text.split(options.contentModels, &amp;#039;,&amp;#039;, false)) do&lt;br /&gt;
    		if not arr_contains(VALID_CONTENT_MODELS, model) then&lt;br /&gt;
    			table.insert(warnings, &amp;#039;Content model &amp;#039;..model..&amp;#039; is unrecognised&amp;#039;)&lt;br /&gt;
    		end&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    if options.skins ~= nil then&lt;br /&gt;
    	for _, skin in ipairs(mw.text.split(options.skins, &amp;#039;,&amp;#039;, false)) do&lt;br /&gt;
    		if not mw.message.new(&amp;#039;skinname-&amp;#039; .. skin):exists() then&lt;br /&gt;
    			table.insert(warnings, &amp;#039;Skin &amp;#039;..skin..&amp;#039; is not available&amp;#039;)&lt;br /&gt;
    		end&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    if options.rights ~= nil then&lt;br /&gt;
    	for _, right in ipairs(mw.text.split(options.rights, &amp;#039;,&amp;#039;, false)) do&lt;br /&gt;
    		if not mw.message.new(&amp;#039;right-&amp;#039; .. right):exists() then&lt;br /&gt;
    			table.insert(warnings, &amp;#039;User right &amp;#039;..right..&amp;#039; does not exist&amp;#039;)&lt;br /&gt;
    		end&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    -- TODO: check that pages in options.categories exist, but Gadgets.parse_line removes &lt;br /&gt;
	-- whitespaces in options, mangling the category names&lt;br /&gt;
&lt;br /&gt;
    local hasScripts = false&lt;br /&gt;
    local hasJsons = false&lt;br /&gt;
    local hasVues = false&lt;br /&gt;
    for _, page in ipairs(pages) do&lt;br /&gt;
    	page = &amp;#039;MediaWiki:Gadget-&amp;#039; .. page&lt;br /&gt;
    	local title = mw.title.new(page)&lt;br /&gt;
    	if title == nil or not title.exists then&lt;br /&gt;
    		table.insert(warnings, &amp;#039;Page [[&amp;#039;..page..&amp;#039;]] does not exist&amp;#039;)&lt;br /&gt;
    	else &lt;br /&gt;
	    	local ext = title.text:match(&amp;quot;%.([^%.]+)$&amp;quot;)&lt;br /&gt;
	    	if ext == &amp;#039;js&amp;#039; then&lt;br /&gt;
	    		if title.contentModel ~= &amp;#039;javascript&amp;#039; then&lt;br /&gt;
	    			table.insert(warnings, &amp;#039;Page [[&amp;#039;..page..&amp;#039;]] is not of JavaScript content model&amp;#039;)&lt;br /&gt;
	    		else&lt;br /&gt;
	    			hasScripts = true&lt;br /&gt;
	    		end&lt;br /&gt;
	    	elseif ext == &amp;#039;css&amp;#039; then&lt;br /&gt;
	    		if title.contentModel ~= &amp;#039;css&amp;#039; then&lt;br /&gt;
	    			table.insert(warnings, &amp;#039;Page [[&amp;#039;..page..&amp;#039;]] is not of CSS content model&amp;#039;)&lt;br /&gt;
	    		end&lt;br /&gt;
	    	elseif ext == &amp;#039;json&amp;#039; then&lt;br /&gt;
	    		if title.contentModel ~= &amp;#039;json&amp;#039; then&lt;br /&gt;
	    			table.insert(warnings, &amp;#039;Page [[&amp;#039;..page..&amp;#039;]] is not of JSON content model&amp;#039;)&lt;br /&gt;
	    		else&lt;br /&gt;
	    			hasJsons = true&lt;br /&gt;
	    		end&lt;br /&gt;
	    	elseif ext == &amp;#039;vue&amp;#039; then&lt;br /&gt;
	    		if title.contentModel ~= &amp;#039;vue&amp;#039; then&lt;br /&gt;
	    			table.insert(warnings, &amp;#039;Page [[&amp;#039;..page..&amp;#039;]] is not of Vue content model&amp;#039;)&lt;br /&gt;
	    		else&lt;br /&gt;
	    			hasVues = true&lt;br /&gt;
	    		end&lt;br /&gt;
	    	else&lt;br /&gt;
	    		table.insert(warnings, &amp;#039;Page [[&amp;#039;..page..&amp;#039;]] is not JS/CSS/JSON/Vue, will be ignored&amp;#039;)&lt;br /&gt;
	    	end&lt;br /&gt;
	    end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if not options.hidden then&lt;br /&gt;
	    local description_page = mw.title.new(&amp;#039;MediaWiki:Gadget-&amp;#039;..name)&lt;br /&gt;
	    if description_page == nil or not description_page.exists then&lt;br /&gt;
	    	table.insert(warnings, &amp;#039;Description [[&amp;#039;..description_page.fullText..&amp;#039;]] for use in Special:Preferences does not exist&amp;#039;)&lt;br /&gt;
	    end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    if options.package == nil and hasJsons then&lt;br /&gt;
    	table.insert(warnings, &amp;#039;JSON pages cannot be used in non-package gadgets&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
	if options.package == nil and hasVues then &lt;br /&gt;
		table.insert(warnings, &amp;#039;Vue pages cannot be used in non-package gadgets&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    if options.requiresES6 ~= nil and options.default ~= nil then&lt;br /&gt;
    	table.insert(warnings, &amp;#039;Default gadget cannot use requiresES6 flag&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    if options.type == &amp;#039;styles&amp;#039; and hasScripts then&lt;br /&gt;
    	table.insert(warnings, &amp;#039;JS pages will be ignored as gadget sets type=styles&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    if options.type == &amp;#039;styles&amp;#039; and options.peers ~= nil then&lt;br /&gt;
    	table.insert(warnings, &amp;#039;Styles-only gadget cannot have peers&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    if options.type == &amp;#039;styles&amp;#039; and options.dependencies ~= nil then&lt;br /&gt;
    	table.insert(warnings, &amp;#039;Styles-only gadget cannot have dependencies&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    if options.package ~= nil and not hasScripts then&lt;br /&gt;
    	table.insert(warnings, &amp;#039;Package gadget must have at least one JS page&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    if options.ResourceLoader == nil and hasScripts then&lt;br /&gt;
    	table.insert(warnings, &amp;#039;ResourceLoader option must be set&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    -- Causes warnings on styles-only gadgets using skins param &lt;br /&gt;
    -- if options.hidden ~= nil and (options.namespaces ~= nil or options.actions ~= nil or options.rights ~= nil or options.contentModels ~= nil or options.skins ~= nil) then&lt;br /&gt;
    -- 	table.insert(warnings, &amp;#039;Conditional load options are not applicable for hidden gadget&amp;#039;)&lt;br /&gt;
    -- end&lt;br /&gt;
&lt;br /&gt;
	if options.peers ~= nil then&lt;br /&gt;
		for _, peer in ipairs(mw.text.split(options.peers, &amp;#039;,&amp;#039;, false)) do &lt;br /&gt;
			if repo[peer] == nil then&lt;br /&gt;
				table.insert(warnings, &amp;#039;Peer gadget &amp;#039;..peer..&amp;#039; is not defined&amp;#039;)&lt;br /&gt;
			elseif Gadgets.get_type(repo[peer]) == &amp;#039;general&amp;#039; then&lt;br /&gt;
				table.insert(warnings, &amp;#039;Peer gadget &amp;#039;..peer..&amp;#039; must be styles-only gadget&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if options.dependencies ~= nil then&lt;br /&gt;
		for _, dep in ipairs(mw.text.split(options.dependencies, &amp;#039;,&amp;#039;, false)) do&lt;br /&gt;
			if dep:sub(1, 11) == &amp;#039;ext.gadget.&amp;#039; then&lt;br /&gt;
				local dep_gadget = dep:sub(12)&lt;br /&gt;
				if repo[dep_gadget] == nil then&lt;br /&gt;
					table.insert(warnings, &amp;#039;Dependency gadget &amp;#039;..dep_gadget..&amp;#039; is not defined&amp;#039;)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return warnings&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Wed, 24 Jun 2026 20:29:38 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/Module_talk:Validate_gadgets</comments>
		</item>
		<item>
			<title>Module:If preview/styles.css</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=Module:If_preview/styles.css&amp;diff=120499&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=Module:If_preview/styles.css&amp;diff=120499&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:If_preview/styles.css&quot; title=&quot;Module:If preview/styles.css&quot;&gt;Module:If preview/styles.css&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* {{pp|small=yes}} */&lt;br /&gt;
.preview-warning {&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	padding-left: 1.6em;&lt;br /&gt;
	margin-bottom: 0.5em;&lt;br /&gt;
	color: var(--color-error, red);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* The templatestyles causes an &amp;#039;empty&amp;#039; span between hatnotes */&lt;br /&gt;
.preview-warning + span.mw-empty-elt + .preview-warning,&lt;br /&gt;
/* remove this selector when Parsoid is the only parser, see also [[phab:T200206]] */&lt;br /&gt;
.preview-warning + link + .preview-warning {&lt;br /&gt;
	margin-top: -0.5em;&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Wed, 24 Jun 2026 20:29:38 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/Module_talk:If_preview/styles.css</comments>
		</item>
		<item>
			<title>Module:If preview/configuration</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=Module:If_preview/configuration&amp;diff=120497&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=Module:If_preview/configuration&amp;diff=120497&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:If_preview/configuration&quot; title=&quot;Module:If preview/configuration&quot;&gt;Module:If preview/configuration&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[&lt;br /&gt;
We perform the actual check for whether this is a preview here since&lt;br /&gt;
preprocessing is relatively expensive.&lt;br /&gt;
]]&lt;br /&gt;
local frame = mw.getCurrentFrame()&lt;br /&gt;
&lt;br /&gt;
local function is_preview()&lt;br /&gt;
	local revision_id = frame:preprocess(&amp;#039;{{REVISIONID}}&amp;#039;)&lt;br /&gt;
	-- {{REVISIONID}} is usually the empty string when previewed.&lt;br /&gt;
	-- I don&amp;#039;t know why we&amp;#039;re checking for nil but hey, maybe someday things&lt;br /&gt;
	-- would have broken&lt;br /&gt;
	return revision_id == nil or revision_id == &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function templatestyles()&lt;br /&gt;
	return frame:extensionTag{&lt;br /&gt;
		name = &amp;#039;templatestyles&amp;#039;, args = { src = &amp;#039;Module:If preview/styles.css&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	preview = is_preview(),&lt;br /&gt;
	templatestyles = templatestyles(),&lt;br /&gt;
	warning_infrastructure = &amp;#039;%s&amp;lt;div class=&amp;quot;preview-warning&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Preview warning:&amp;lt;/strong&amp;gt; %s&amp;lt;/div&amp;gt;&amp;#039;,&lt;br /&gt;
	missing_warning = &amp;#039;The template has no warning text. Please add a warning.&amp;#039;&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Wed, 24 Jun 2026 20:29:38 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/Module_talk:If_preview/configuration</comments>
		</item>
		<item>
			<title>Module:Message box</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=Module:Message_box&amp;diff=120495&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=Module:Message_box&amp;diff=120495&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:Message_box&quot; title=&quot;Module:Message box&quot;&gt;Module:Message box&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
local getArgs&lt;br /&gt;
local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
local lang = mw.language.getContentLanguage()&lt;br /&gt;
&lt;br /&gt;
local CONFIG_MODULE = &amp;#039;Module:Message box/configuration&amp;#039;&lt;br /&gt;
local DEMOSPACES = {talk = &amp;#039;tmbox&amp;#039;, image = &amp;#039;imbox&amp;#039;, file = &amp;#039;imbox&amp;#039;, category = &amp;#039;cmbox&amp;#039;, article = &amp;#039;ambox&amp;#039;, main = &amp;#039;ambox&amp;#039;}&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Helper functions&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function getTitleObject(...)&lt;br /&gt;
	-- Get the title object, passing the function through pcall&lt;br /&gt;
	-- in case we are over the expensive function count limit.&lt;br /&gt;
	local success, title = pcall(mw.title.new, ...)&lt;br /&gt;
	if success then&lt;br /&gt;
		return title&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function union(t1, t2)&lt;br /&gt;
	-- Returns the union of two arrays.&lt;br /&gt;
	local vals = {}&lt;br /&gt;
	for i, v in ipairs(t1) do&lt;br /&gt;
		vals[v] = true&lt;br /&gt;
	end&lt;br /&gt;
	for i, v in ipairs(t2) do&lt;br /&gt;
		vals[v] = true&lt;br /&gt;
	end&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k in pairs(vals) do&lt;br /&gt;
		table.insert(ret, k)&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(ret)&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getArgNums(args, prefix)&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local num = mw.ustring.match(tostring(k), &amp;#039;^&amp;#039; .. prefix .. &amp;#039;([1-9]%d*)$&amp;#039;)&lt;br /&gt;
		if num then&lt;br /&gt;
			table.insert(nums, tonumber(num))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Box class definition&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local MessageBox = {}&lt;br /&gt;
MessageBox.__index = MessageBox&lt;br /&gt;
&lt;br /&gt;
function MessageBox.new(boxType, args, cfg)&lt;br /&gt;
	args = args or {}&lt;br /&gt;
	local obj = {}&lt;br /&gt;
&lt;br /&gt;
	-- Set the title object and the namespace.&lt;br /&gt;
	obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()&lt;br /&gt;
&lt;br /&gt;
	-- Set the config for our box type.&lt;br /&gt;
	obj.cfg = cfg[boxType]&lt;br /&gt;
	if not obj.cfg then&lt;br /&gt;
		local ns = obj.title.namespace&lt;br /&gt;
		-- boxType is &amp;quot;mbox&amp;quot; or invalid input&lt;br /&gt;
		if args.demospace and args.demospace ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			-- implement demospace parameter of mbox&lt;br /&gt;
			local demospace = string.lower(args.demospace)&lt;br /&gt;
			if DEMOSPACES[demospace] then&lt;br /&gt;
				-- use template from DEMOSPACES&lt;br /&gt;
				obj.cfg = cfg[DEMOSPACES[demospace]]&lt;br /&gt;
			elseif string.find( demospace, &amp;#039;talk&amp;#039; ) then&lt;br /&gt;
				-- demo as a talk page&lt;br /&gt;
				obj.cfg = cfg.tmbox&lt;br /&gt;
			else&lt;br /&gt;
				-- default to ombox&lt;br /&gt;
				obj.cfg = cfg.ombox&lt;br /&gt;
			end&lt;br /&gt;
		elseif ns == 0 then&lt;br /&gt;
			obj.cfg = cfg.ambox -- main namespace&lt;br /&gt;
		elseif ns == 6 then&lt;br /&gt;
			obj.cfg = cfg.imbox -- file namespace&lt;br /&gt;
		elseif ns == 14 then&lt;br /&gt;
			obj.cfg = cfg.cmbox -- category namespace&lt;br /&gt;
		else&lt;br /&gt;
			local nsTable = mw.site.namespaces[ns]&lt;br /&gt;
			if nsTable and nsTable.isTalk then&lt;br /&gt;
				obj.cfg = cfg.tmbox -- any talk namespace&lt;br /&gt;
			else&lt;br /&gt;
				obj.cfg = cfg.ombox -- other namespaces or invalid input&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set the arguments, and remove all blank arguments except for the ones&lt;br /&gt;
	-- listed in cfg.allowBlankParams.&lt;br /&gt;
	do&lt;br /&gt;
		local newArgs = {}&lt;br /&gt;
		for k, v in pairs(args) do&lt;br /&gt;
			if v ~= &amp;#039;&amp;#039; then&lt;br /&gt;
				newArgs[k] = v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for i, param in ipairs(obj.cfg.allowBlankParams or {}) do&lt;br /&gt;
			newArgs[param] = args[param]&lt;br /&gt;
		end&lt;br /&gt;
		obj.args = newArgs&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Define internal data structure.&lt;br /&gt;
	obj.categories = {}&lt;br /&gt;
	obj.classes = {}&lt;br /&gt;
	-- For lazy loading of [[Module:Category handler]].&lt;br /&gt;
	obj.hasCategories = false&lt;br /&gt;
&lt;br /&gt;
	return setmetatable(obj, MessageBox)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:addCat(ns, cat, sort)&lt;br /&gt;
	if not cat then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if sort then&lt;br /&gt;
		cat = string.format(&amp;#039;[[Category:%s|%s]]&amp;#039;, cat, sort)&lt;br /&gt;
	else&lt;br /&gt;
		cat = string.format(&amp;#039;[[Category:%s]]&amp;#039;, cat)&lt;br /&gt;
	end&lt;br /&gt;
	self.hasCategories = true&lt;br /&gt;
	self.categories[ns] = self.categories[ns] or {}&lt;br /&gt;
	table.insert(self.categories[ns], cat)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:addClass(class)&lt;br /&gt;
	if not class then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(self.classes, class)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setParameters()&lt;br /&gt;
	local args = self.args&lt;br /&gt;
	local cfg = self.cfg&lt;br /&gt;
&lt;br /&gt;
	-- Get type data.&lt;br /&gt;
	self.type = args.type&lt;br /&gt;
	local typeData = cfg.types[self.type]&lt;br /&gt;
	self.invalidTypeError = cfg.showInvalidTypeError&lt;br /&gt;
		and self.type&lt;br /&gt;
		and not typeData&lt;br /&gt;
	typeData = typeData or cfg.types[cfg.default]&lt;br /&gt;
	self.typeClass = typeData.class&lt;br /&gt;
	self.typeImage = typeData.image&lt;br /&gt;
	self.typeImageNeedsLink = typeData.imageNeedsLink&lt;br /&gt;
&lt;br /&gt;
	-- Find if the box has been wrongly substituted.&lt;br /&gt;
	self.isSubstituted = cfg.substCheck and args.subst == &amp;#039;SUBST&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	-- Find whether we are using a small message box.&lt;br /&gt;
	self.isSmall = cfg.allowSmall and (&lt;br /&gt;
		cfg.smallParam and args.small == cfg.smallParam&lt;br /&gt;
		or not cfg.smallParam and yesno(args.small)&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
	-- Set the below row.&lt;br /&gt;
	self.below = cfg.below and args.below&lt;br /&gt;
	&lt;br /&gt;
	-- Add attributes, classes and styles.&lt;br /&gt;
	self.id = args.id&lt;br /&gt;
	self.name = args.name&lt;br /&gt;
	if self.name then&lt;br /&gt;
		self:addClass(&amp;#039;box-&amp;#039; .. string.gsub(self.name,&amp;#039; &amp;#039;,&amp;#039;_&amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
	if yesno(args.plainlinks) ~= false then&lt;br /&gt;
		self:addClass(&amp;#039;plainlinks&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if self.below then&lt;br /&gt;
		self:addClass(&amp;#039;mbox-with-below&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	for _, class in ipairs(cfg.classes or {}) do&lt;br /&gt;
		self:addClass(class)&lt;br /&gt;
	end&lt;br /&gt;
	if self.isSmall then&lt;br /&gt;
		self:addClass(cfg.smallClass or &amp;#039;mbox-small&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	self:addClass(self.typeClass)&lt;br /&gt;
	self:addClass(args.class)&lt;br /&gt;
	self.style = args.style&lt;br /&gt;
	self.attrs = args.attrs&lt;br /&gt;
&lt;br /&gt;
	-- Set text style.&lt;br /&gt;
	self.textstyle = args.textstyle&lt;br /&gt;
&lt;br /&gt;
	-- Set image classes.&lt;br /&gt;
	self.imageRightClass = args.imagerightclass or args.imageclass&lt;br /&gt;
	self.imageLeftClass = args.imageleftclass or args.imageclass&lt;br /&gt;
&lt;br /&gt;
	-- Find if we are on the template page or not. This functionality is only&lt;br /&gt;
	-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory&lt;br /&gt;
	-- and cfg.templateCategoryRequireName are set.&lt;br /&gt;
	self.useCollapsibleTextFields = cfg.useCollapsibleTextFields&lt;br /&gt;
	if self.useCollapsibleTextFields&lt;br /&gt;
		or cfg.templateCategory&lt;br /&gt;
		and cfg.templateCategoryRequireName&lt;br /&gt;
	then&lt;br /&gt;
		if self.name then&lt;br /&gt;
			local templateName = mw.ustring.match(&lt;br /&gt;
				self.name,&lt;br /&gt;
				&amp;#039;^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$&amp;#039;&lt;br /&gt;
			) or self.name&lt;br /&gt;
			templateName = &amp;#039;Template:&amp;#039; .. templateName&lt;br /&gt;
			self.templateTitle = getTitleObject(templateName)&lt;br /&gt;
		end&lt;br /&gt;
		self.isTemplatePage = self.templateTitle&lt;br /&gt;
			and mw.title.equals(self.title, self.templateTitle)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Process data for collapsible text fields. At the moment these are only&lt;br /&gt;
	-- used in {{ambox}}.&lt;br /&gt;
	if self.useCollapsibleTextFields then&lt;br /&gt;
		-- Get the self.issue value.&lt;br /&gt;
		if self.isSmall and args.smalltext then&lt;br /&gt;
			self.issue = args.smalltext&lt;br /&gt;
		else&lt;br /&gt;
			local sect&lt;br /&gt;
			if args.sect == &amp;#039;&amp;#039; then&lt;br /&gt;
				sect = &amp;#039;This &amp;#039; .. (cfg.sectionDefault or &amp;#039;page&amp;#039;)&lt;br /&gt;
			elseif type(args.sect) == &amp;#039;string&amp;#039; then&lt;br /&gt;
				sect = &amp;#039;This &amp;#039; .. args.sect&lt;br /&gt;
			end&lt;br /&gt;
			local issue = args.issue&lt;br /&gt;
			issue = type(issue) == &amp;#039;string&amp;#039; and issue ~= &amp;#039;&amp;#039; and issue or nil&lt;br /&gt;
			local text = args.text&lt;br /&gt;
			text = type(text) == &amp;#039;string&amp;#039; and text or nil&lt;br /&gt;
			local issues = {}&lt;br /&gt;
			table.insert(issues, sect)&lt;br /&gt;
			table.insert(issues, issue)&lt;br /&gt;
			table.insert(issues, text)&lt;br /&gt;
			self.issue = table.concat(issues, &amp;#039; &amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Get the self.talk value.&lt;br /&gt;
		local talk = args.talk&lt;br /&gt;
		-- Show talk links on the template page or template subpages if the talk&lt;br /&gt;
		-- parameter is blank.&lt;br /&gt;
		if talk == &amp;#039;&amp;#039;&lt;br /&gt;
			and self.templateTitle&lt;br /&gt;
			and (&lt;br /&gt;
				mw.title.equals(self.templateTitle, self.title)&lt;br /&gt;
				or self.title:isSubpageOf(self.templateTitle)&lt;br /&gt;
			)&lt;br /&gt;
		then&lt;br /&gt;
			talk = &amp;#039;#&amp;#039;&lt;br /&gt;
		elseif talk == &amp;#039;&amp;#039; then&lt;br /&gt;
			talk = nil&lt;br /&gt;
		end&lt;br /&gt;
		if talk then&lt;br /&gt;
			-- If the talk value is a talk page, make a link to that page. Else&lt;br /&gt;
			-- assume that it&amp;#039;s a section heading, and make a link to the talk&lt;br /&gt;
			-- page of the current page with that section heading.&lt;br /&gt;
			local talkTitle = getTitleObject(talk)&lt;br /&gt;
			local talkArgIsTalkPage = true&lt;br /&gt;
			if not talkTitle or not talkTitle.isTalkPage then&lt;br /&gt;
				talkArgIsTalkPage = false&lt;br /&gt;
				talkTitle = getTitleObject(&lt;br /&gt;
					self.title.text,&lt;br /&gt;
					mw.site.namespaces[self.title.namespace].talk.id&lt;br /&gt;
				)&lt;br /&gt;
			end&lt;br /&gt;
			if talkTitle and talkTitle.exists then&lt;br /&gt;
                local talkText&lt;br /&gt;
                if self.isSmall then&lt;br /&gt;
                    local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. (talk == &amp;#039;#&amp;#039; and &amp;#039;&amp;#039; or &amp;#039;#&amp;#039;) .. talk)&lt;br /&gt;
                    talkText = string.format(&amp;#039;([[%s|talk]])&amp;#039;, talkLink)&lt;br /&gt;
                else&lt;br /&gt;
                    talkText = &amp;#039;Relevant discussion may be found on&amp;#039;&lt;br /&gt;
                    if talkArgIsTalkPage then&lt;br /&gt;
                        talkText = string.format(&lt;br /&gt;
                            &amp;#039;%s [[%s|%s]].&amp;#039;,&lt;br /&gt;
                            talkText,&lt;br /&gt;
                            talk,&lt;br /&gt;
                            talkTitle.prefixedText&lt;br /&gt;
                        )&lt;br /&gt;
                    else&lt;br /&gt;
                        talkText = string.format(&lt;br /&gt;
                            &amp;#039;%s the [[%s&amp;#039; .. (talk == &amp;#039;#&amp;#039; and &amp;#039;&amp;#039; or &amp;#039;#&amp;#039;) .. &amp;#039;%s|talk page]].&amp;#039;,&lt;br /&gt;
                            talkText,&lt;br /&gt;
                            talkTitle.prefixedText,&lt;br /&gt;
                            talk&lt;br /&gt;
                        )&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
				self.talk = talkText&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Get other values.&lt;br /&gt;
		self.fix = args.fix ~= &amp;#039;&amp;#039; and args.fix or nil&lt;br /&gt;
		local date&lt;br /&gt;
		if args.date and args.date ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			date = args.date&lt;br /&gt;
		elseif args.date == &amp;#039;&amp;#039; and self.isTemplatePage then&lt;br /&gt;
			date = lang:formatDate(&amp;#039;F Y&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		if date then&lt;br /&gt;
			self.date = string.format(&amp;quot; &amp;lt;span class=&amp;#039;date-container&amp;#039;&amp;gt;&amp;lt;i&amp;gt;(&amp;lt;span class=&amp;#039;date&amp;#039;&amp;gt;%s&amp;lt;/span&amp;gt;)&amp;lt;/i&amp;gt;&amp;lt;/span&amp;gt;&amp;quot;, date)&lt;br /&gt;
		end&lt;br /&gt;
		self.info = args.info&lt;br /&gt;
		if yesno(args.removalnotice) then&lt;br /&gt;
			self.removalNotice = cfg.removalNotice&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set the non-collapsible text field. At the moment this is used by all box&lt;br /&gt;
	-- types other than ambox, and also by ambox when small=yes.&lt;br /&gt;
	if self.isSmall then&lt;br /&gt;
		self.text = args.smalltext or args.text&lt;br /&gt;
	else&lt;br /&gt;
		self.text = args.text&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- General image settings.&lt;br /&gt;
	self.imageCellDiv = not self.isSmall and cfg.imageCellDiv&lt;br /&gt;
	self.imageEmptyCell = cfg.imageEmptyCell&lt;br /&gt;
&lt;br /&gt;
	-- Left image settings.&lt;br /&gt;
	local imageLeft = self.isSmall and args.smallimage or args.image&lt;br /&gt;
	if cfg.imageCheckBlank and imageLeft ~= &amp;#039;blank&amp;#039; and imageLeft ~= &amp;#039;none&amp;#039;&lt;br /&gt;
		or not cfg.imageCheckBlank and imageLeft ~= &amp;#039;none&amp;#039;&lt;br /&gt;
	then&lt;br /&gt;
		self.imageLeft = imageLeft&lt;br /&gt;
		if not imageLeft then&lt;br /&gt;
			local imageSize = self.isSmall&lt;br /&gt;
				and (cfg.imageSmallSize or &amp;#039;30x30px&amp;#039;)&lt;br /&gt;
				or &amp;#039;40x40px&amp;#039;&lt;br /&gt;
			self.imageLeft = string.format(&amp;#039;[[File:%s|%s%s|alt=]]&amp;#039;, self.typeImage&lt;br /&gt;
				or &amp;#039;Information icon4.svg&amp;#039;, imageSize, self.typeImageNeedsLink and &amp;quot;&amp;quot; or &amp;quot;|link=&amp;quot; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Right image settings.&lt;br /&gt;
	local imageRight = self.isSmall and args.smallimageright or args.imageright&lt;br /&gt;
	if not (cfg.imageRightNone and imageRight == &amp;#039;none&amp;#039;) then&lt;br /&gt;
		self.imageRight = imageRight&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- set templatestyles&lt;br /&gt;
	self.base_templatestyles = cfg.templatestyles&lt;br /&gt;
	self.templatestyles = args.templatestyles&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setMainspaceCategories()&lt;br /&gt;
	local args = self.args&lt;br /&gt;
	local cfg = self.cfg&lt;br /&gt;
&lt;br /&gt;
	if not cfg.allowMainspaceCategories then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for _, prefix in ipairs{&amp;#039;cat&amp;#039;, &amp;#039;category&amp;#039;, &amp;#039;all&amp;#039;} do&lt;br /&gt;
		args[prefix .. &amp;#039;1&amp;#039;] = args[prefix]&lt;br /&gt;
		nums = union(nums, getArgNums(args, prefix))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- The following is roughly equivalent to the old {{Ambox/category}}.&lt;br /&gt;
	local date = args.date&lt;br /&gt;
	date = type(date) == &amp;#039;string&amp;#039; and date&lt;br /&gt;
	local preposition = &amp;#039;from&amp;#039;&lt;br /&gt;
	for _, num in ipairs(nums) do&lt;br /&gt;
		local mainCat = args[&amp;#039;cat&amp;#039; .. tostring(num)]&lt;br /&gt;
			or args[&amp;#039;category&amp;#039; .. tostring(num)]&lt;br /&gt;
		local allCat = args[&amp;#039;all&amp;#039; .. tostring(num)]&lt;br /&gt;
		mainCat = type(mainCat) == &amp;#039;string&amp;#039; and mainCat&lt;br /&gt;
		allCat = type(allCat) == &amp;#039;string&amp;#039; and allCat&lt;br /&gt;
		if mainCat and date and date ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			local catTitle = string.format(&amp;#039;%s %s %s&amp;#039;, mainCat, preposition, date)&lt;br /&gt;
			self:addCat(0, catTitle)&lt;br /&gt;
			catTitle = getTitleObject(&amp;#039;Category:&amp;#039; .. catTitle)&lt;br /&gt;
			if not catTitle or not catTitle.exists then&lt;br /&gt;
				self:addCat(0, &amp;#039;Articles with invalid date parameter in template&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
		elseif mainCat and (not date or date == &amp;#039;&amp;#039;) then&lt;br /&gt;
			self:addCat(0, mainCat)&lt;br /&gt;
		end&lt;br /&gt;
		if allCat then&lt;br /&gt;
			self:addCat(0, allCat)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setTemplateCategories()&lt;br /&gt;
	local args = self.args&lt;br /&gt;
	local cfg = self.cfg&lt;br /&gt;
&lt;br /&gt;
	-- Add template categories.&lt;br /&gt;
	if cfg.templateCategory then&lt;br /&gt;
		if cfg.templateCategoryRequireName then&lt;br /&gt;
			if self.isTemplatePage then&lt;br /&gt;
				self:addCat(10, cfg.templateCategory)&lt;br /&gt;
			end&lt;br /&gt;
		elseif not self.title.isSubpage then&lt;br /&gt;
			self:addCat(10, cfg.templateCategory)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add template error categories.&lt;br /&gt;
	if cfg.templateErrorCategory then&lt;br /&gt;
		local templateErrorCategory = cfg.templateErrorCategory&lt;br /&gt;
		local templateCat, templateSort&lt;br /&gt;
		if not self.name and not self.title.isSubpage then&lt;br /&gt;
			templateCat = templateErrorCategory&lt;br /&gt;
		elseif self.isTemplatePage then&lt;br /&gt;
			local paramsToCheck = cfg.templateErrorParamsToCheck or {}&lt;br /&gt;
			local count = 0&lt;br /&gt;
			for i, param in ipairs(paramsToCheck) do&lt;br /&gt;
				if not args[param] then&lt;br /&gt;
					count = count + 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if count &amp;gt; 0 then&lt;br /&gt;
				templateCat = templateErrorCategory&lt;br /&gt;
				templateSort = tostring(count)&lt;br /&gt;
			end&lt;br /&gt;
			if self.categoryNums and #self.categoryNums &amp;gt; 0 then&lt;br /&gt;
				templateCat = templateErrorCategory&lt;br /&gt;
				templateSort = &amp;#039;C&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		self:addCat(10, templateCat, templateSort)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setAllNamespaceCategories()&lt;br /&gt;
	-- Set categories for all namespaces.&lt;br /&gt;
	if self.invalidTypeError then&lt;br /&gt;
		local allSort = (self.title.namespace == 0 and &amp;#039;Main:&amp;#039; or &amp;#039;&amp;#039;) .. self.title.prefixedText&lt;br /&gt;
		self:addCat(&amp;#039;all&amp;#039;, &amp;#039;Wikipedia message box parameter needs fixing&amp;#039;, allSort)&lt;br /&gt;
	end&lt;br /&gt;
	if self.isSubstituted then&lt;br /&gt;
		self:addCat(&amp;#039;all&amp;#039;, &amp;#039;Pages with incorrectly substituted templates&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setCategories()&lt;br /&gt;
	if self.title.namespace == 0 then&lt;br /&gt;
		self:setMainspaceCategories()&lt;br /&gt;
	elseif self.title.namespace == 10 then&lt;br /&gt;
		self:setTemplateCategories()&lt;br /&gt;
	end&lt;br /&gt;
	self:setAllNamespaceCategories()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:renderCategories()&lt;br /&gt;
	if not self.hasCategories then&lt;br /&gt;
		-- No categories added, no need to pass them to Category handler so,&lt;br /&gt;
		-- if it was invoked, it would return the empty string.&lt;br /&gt;
		-- So we shortcut and return the empty string.&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	-- Convert category tables to strings and pass them through&lt;br /&gt;
	-- [[Module:Category handler]].&lt;br /&gt;
	return require(&amp;#039;Module:Category handler&amp;#039;)._main{&lt;br /&gt;
		main = table.concat(self.categories[0] or {}),&lt;br /&gt;
		template = table.concat(self.categories[10] or {}),&lt;br /&gt;
		all = table.concat(self.categories.all or {}),&lt;br /&gt;
		nocat = self.args.nocat,&lt;br /&gt;
		page = self.args.page&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:exportDiv()&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
&lt;br /&gt;
	-- Add the subst check error.&lt;br /&gt;
	if self.isSubstituted and self.name then&lt;br /&gt;
		root:tag(&amp;#039;b&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;error&amp;#039;)&lt;br /&gt;
			:wikitext(string.format(&lt;br /&gt;
				&amp;#039;Template &amp;lt;code&amp;gt;%s[[Template:%s|%s]]%s&amp;lt;/code&amp;gt; has been incorrectly substituted.&amp;#039;,&lt;br /&gt;
				mw.text.nowiki(&amp;#039;{{&amp;#039;), self.name, self.name, mw.text.nowiki(&amp;#039;}}&amp;#039;)&lt;br /&gt;
			))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	root:wikitext(frame:extensionTag{&lt;br /&gt;
		name = &amp;#039;templatestyles&amp;#039;,&lt;br /&gt;
		args = { src = self.base_templatestyles },&lt;br /&gt;
	})&lt;br /&gt;
	-- Add support for a single custom templatestyles sheet. Undocumented as&lt;br /&gt;
	-- need should be limited and many templates using mbox are substed; we&lt;br /&gt;
	-- don&amp;#039;t want to spread templatestyles sheets around to arbitrary places&lt;br /&gt;
	if self.templatestyles then&lt;br /&gt;
		root:wikitext(frame:extensionTag{&lt;br /&gt;
			name = &amp;#039;templatestyles&amp;#039;,&lt;br /&gt;
			args = { src = self.templatestyles },&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Create the box.&lt;br /&gt;
	local mbox = root:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
	mbox:attr(&amp;#039;id&amp;#039;, self.id or nil)&lt;br /&gt;
	for i, class in ipairs(self.classes or {}) do&lt;br /&gt;
		mbox:addClass(class or nil)&lt;br /&gt;
	end&lt;br /&gt;
	mbox&lt;br /&gt;
		:cssText(self.style or nil)&lt;br /&gt;
&lt;br /&gt;
	if self.attrs then&lt;br /&gt;
		mbox:attr(self.attrs)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local flex_container&lt;br /&gt;
	if self.below then&lt;br /&gt;
		-- we need to wrap the flex components (`image(right)` and `text`) in their&lt;br /&gt;
		-- own container div to support the `below` parameter&lt;br /&gt;
		flex_container = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
		flex_container:addClass(&amp;#039;mbox-flex&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		-- the mbox itself is the parent, so we need no HTML flex_container&lt;br /&gt;
		flex_container = mw.html.create()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the left-hand image.&lt;br /&gt;
	if self.imageLeft then&lt;br /&gt;
		local imageLeftCell = flex_container:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;mbox-image&amp;#039;)&lt;br /&gt;
		imageLeftCell&lt;br /&gt;
			:addClass(self.imageLeftClass)&lt;br /&gt;
			:wikitext(self.imageLeft or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the text.&lt;br /&gt;
	local textCell = flex_container:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;mbox-text&amp;#039;)&lt;br /&gt;
	if self.useCollapsibleTextFields then&lt;br /&gt;
		-- The message box uses advanced text parameters that allow things to be&lt;br /&gt;
		-- collapsible. At the moment, only ambox uses this.&lt;br /&gt;
		textCell:cssText(self.textstyle or nil)&lt;br /&gt;
		local textCellDiv = textCell:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
		textCellDiv&lt;br /&gt;
			:addClass(&amp;#039;mbox-text-span&amp;#039;)&lt;br /&gt;
			:wikitext(self.issue or nil)&lt;br /&gt;
		if (self.talk or self.fix) then&lt;br /&gt;
			textCellDiv:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;hide-when-compact&amp;#039;)&lt;br /&gt;
				:wikitext(self.talk and (&amp;#039; &amp;#039; .. self.talk) or nil)&lt;br /&gt;
				:wikitext(self.fix and (&amp;#039; &amp;#039; .. self.fix) or nil)&lt;br /&gt;
		end&lt;br /&gt;
		textCellDiv:wikitext(self.date and (&amp;#039; &amp;#039; .. self.date) or nil)&lt;br /&gt;
		if self.info and not self.isSmall then&lt;br /&gt;
			textCellDiv&lt;br /&gt;
				:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;hide-when-compact&amp;#039;)&lt;br /&gt;
				:wikitext(self.info and (&amp;#039; &amp;#039; .. self.info) or nil)&lt;br /&gt;
		end&lt;br /&gt;
		if self.removalNotice then&lt;br /&gt;
			textCellDiv:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;hide-when-compact&amp;#039;)&lt;br /&gt;
				:tag(&amp;#039;i&amp;#039;)&lt;br /&gt;
					:wikitext(string.format(&amp;quot; (%s)&amp;quot;, self.removalNotice))&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- Default text formatting - anything goes.&lt;br /&gt;
		textCell&lt;br /&gt;
			:cssText(self.textstyle or nil)&lt;br /&gt;
			:wikitext(self.text or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the right-hand image.&lt;br /&gt;
	if self.imageRight then&lt;br /&gt;
		local imageRightCell = flex_container:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;mbox-imageright&amp;#039;)&lt;br /&gt;
		imageRightCell&lt;br /&gt;
			:addClass(self.imageRightClass)&lt;br /&gt;
			:wikitext(self.imageRight or nil)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	mbox:node(flex_container)&lt;br /&gt;
&lt;br /&gt;
	-- Add the below row.&lt;br /&gt;
	if self.below then&lt;br /&gt;
		mbox:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;mbox-text mbox-below&amp;#039;)&lt;br /&gt;
			:cssText(self.textstyle or nil)&lt;br /&gt;
			:wikitext(self.below or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add error message for invalid type parameters.&lt;br /&gt;
	if self.invalidTypeError then&lt;br /&gt;
		root:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;mbox-invalid-type&amp;#039;)&lt;br /&gt;
			:wikitext(string.format(&lt;br /&gt;
				&amp;#039;This message box is using an invalid &amp;quot;type=%s&amp;quot; parameter and needs fixing.&amp;#039;,&lt;br /&gt;
				self.type or &amp;#039;&amp;#039;&lt;br /&gt;
			))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add categories.&lt;br /&gt;
	root:wikitext(self:renderCategories() or nil)&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:export()&lt;br /&gt;
&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
&lt;br /&gt;
	-- Add the subst check error.&lt;br /&gt;
	if self.isSubstituted and self.name then&lt;br /&gt;
		root:tag(&amp;#039;b&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;error&amp;#039;)&lt;br /&gt;
			:wikitext(string.format(&lt;br /&gt;
				&amp;#039;Template &amp;lt;code&amp;gt;%s[[Template:%s|%s]]%s&amp;lt;/code&amp;gt; has been incorrectly substituted.&amp;#039;,&lt;br /&gt;
				mw.text.nowiki(&amp;#039;{{&amp;#039;), self.name, self.name, mw.text.nowiki(&amp;#039;}}&amp;#039;)&lt;br /&gt;
			))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	root:wikitext(frame:extensionTag{&lt;br /&gt;
		name = &amp;#039;templatestyles&amp;#039;,&lt;br /&gt;
		args = { src = self.base_templatestyles },&lt;br /&gt;
	})&lt;br /&gt;
	-- Add support for a single custom templatestyles sheet. Undocumented as&lt;br /&gt;
	-- need should be limited and many templates using mbox are substed; we&lt;br /&gt;
	-- don&amp;#039;t want to spread templatestyles sheets around to arbitrary places&lt;br /&gt;
	if self.templatestyles then&lt;br /&gt;
		root:wikitext(frame:extensionTag{&lt;br /&gt;
			name = &amp;#039;templatestyles&amp;#039;,&lt;br /&gt;
			args = { src = self.templatestyles },&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Create the box table.&lt;br /&gt;
	local boxTable = root:tag(&amp;#039;table&amp;#039;)&lt;br /&gt;
	boxTable:attr(&amp;#039;id&amp;#039;, self.id or nil)&lt;br /&gt;
	for i, class in ipairs(self.classes or {}) do&lt;br /&gt;
		boxTable:addClass(class or nil)&lt;br /&gt;
	end&lt;br /&gt;
	boxTable&lt;br /&gt;
		:cssText(self.style or nil)&lt;br /&gt;
		:attr(&amp;#039;role&amp;#039;, &amp;#039;presentation&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	if self.attrs then&lt;br /&gt;
		boxTable:attr(self.attrs)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the left-hand image.&lt;br /&gt;
	local row = boxTable:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
	if self.imageLeft then&lt;br /&gt;
		local imageLeftCell = row:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;mbox-image&amp;#039;)&lt;br /&gt;
		if self.imageCellDiv then&lt;br /&gt;
			-- If we are using a div, redefine imageLeftCell so that the image&lt;br /&gt;
			-- is inside it. Divs use style=&amp;quot;width: 52px;&amp;quot;, which limits the&lt;br /&gt;
			-- image width to 52px. If any images in a div are wider than that,&lt;br /&gt;
			-- they may overlap with the text or cause other display problems.&lt;br /&gt;
			imageLeftCell = imageLeftCell:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;mbox-image-div&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		imageLeftCell&lt;br /&gt;
			:addClass(self.imageLeftClass)&lt;br /&gt;
			:wikitext(self.imageLeft or nil)&lt;br /&gt;
	elseif self.imageEmptyCell then&lt;br /&gt;
		-- Some message boxes define an empty cell if no image is specified, and&lt;br /&gt;
		-- some don&amp;#039;t. The old template code in templates where empty cells are&lt;br /&gt;
		-- specified gives the following hint: &amp;quot;No image. Cell with some width&lt;br /&gt;
		-- or padding necessary for text cell to have 100% width.&amp;quot;&lt;br /&gt;
		row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;mbox-empty-cell&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the text.&lt;br /&gt;
	local textCell = row:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;mbox-text&amp;#039;)&lt;br /&gt;
	if self.useCollapsibleTextFields then&lt;br /&gt;
		-- The message box uses advanced text parameters that allow things to be&lt;br /&gt;
		-- collapsible. At the moment, only ambox uses this.&lt;br /&gt;
		textCell:cssText(self.textstyle or nil)&lt;br /&gt;
		local textCellDiv = textCell:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
		textCellDiv&lt;br /&gt;
			:addClass(&amp;#039;mbox-text-span&amp;#039;)&lt;br /&gt;
			:wikitext(self.issue or nil)&lt;br /&gt;
		if (self.talk or self.fix) then&lt;br /&gt;
			textCellDiv:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;hide-when-compact&amp;#039;)&lt;br /&gt;
				:wikitext(self.talk and (&amp;#039; &amp;#039; .. self.talk) or nil)&lt;br /&gt;
				:wikitext(self.fix and (&amp;#039; &amp;#039; .. self.fix) or nil)&lt;br /&gt;
		end&lt;br /&gt;
		textCellDiv:wikitext(self.date and (&amp;#039; &amp;#039; .. self.date) or nil)&lt;br /&gt;
		if self.info and not self.isSmall then&lt;br /&gt;
			textCellDiv&lt;br /&gt;
				:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;hide-when-compact&amp;#039;)&lt;br /&gt;
				:wikitext(self.info and (&amp;#039; &amp;#039; .. self.info) or nil)&lt;br /&gt;
		end&lt;br /&gt;
		if self.removalNotice then&lt;br /&gt;
			textCellDiv:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;hide-when-compact&amp;#039;)&lt;br /&gt;
				:tag(&amp;#039;i&amp;#039;)&lt;br /&gt;
					:wikitext(string.format(&amp;quot; (%s)&amp;quot;, self.removalNotice))&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- Default text formatting - anything goes.&lt;br /&gt;
		textCell&lt;br /&gt;
			:cssText(self.textstyle or nil)&lt;br /&gt;
			:wikitext(self.text or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the right-hand image.&lt;br /&gt;
	if self.imageRight then&lt;br /&gt;
		local imageRightCell = row:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;mbox-imageright&amp;#039;)&lt;br /&gt;
		if self.imageCellDiv then&lt;br /&gt;
			-- If we are using a div, redefine imageRightCell so that the image&lt;br /&gt;
			-- is inside it.&lt;br /&gt;
			imageRightCell = imageRightCell:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;mbox-image-div&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		imageRightCell&lt;br /&gt;
			:addClass(self.imageRightClass)&lt;br /&gt;
			:wikitext(self.imageRight or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the below row.&lt;br /&gt;
	if self.below then&lt;br /&gt;
		boxTable:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
			:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:attr(&amp;#039;colspan&amp;#039;, self.imageRight and &amp;#039;3&amp;#039; or &amp;#039;2&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;mbox-text&amp;#039;)&lt;br /&gt;
				:cssText(self.textstyle or nil)&lt;br /&gt;
				:wikitext(self.below or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add error message for invalid type parameters.&lt;br /&gt;
	if self.invalidTypeError then&lt;br /&gt;
		root:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;mbox-invalid-type&amp;#039;)&lt;br /&gt;
			:wikitext(string.format(&lt;br /&gt;
				&amp;#039;This message box is using an invalid &amp;quot;type=%s&amp;quot; parameter and needs fixing.&amp;#039;,&lt;br /&gt;
				self.type or &amp;#039;&amp;#039;&lt;br /&gt;
			))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add categories.&lt;br /&gt;
	root:wikitext(self:renderCategories() or nil)&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Exports&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local p, mt = {}, {}&lt;br /&gt;
&lt;br /&gt;
function p._exportClasses()&lt;br /&gt;
	-- For testing.&lt;br /&gt;
	return {&lt;br /&gt;
		MessageBox = MessageBox&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(boxType, args, cfgTables)&lt;br /&gt;
	local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))&lt;br /&gt;
	box:setParameters()&lt;br /&gt;
	box:setCategories()&lt;br /&gt;
	-- DIV MIGRATION CONDITIONAL&lt;br /&gt;
	if box.cfg.div_structure then&lt;br /&gt;
		return box:exportDiv()&lt;br /&gt;
	end&lt;br /&gt;
	-- END DIV MIGRATION CONDITIONAL&lt;br /&gt;
	return box:export()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mt.__index(t, k)&lt;br /&gt;
	return function (frame)&lt;br /&gt;
		if not getArgs then&lt;br /&gt;
			getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
		end&lt;br /&gt;
		return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return setmetatable(p, mt)&lt;/div&gt;</description>
			<pubDate>Wed, 24 Jun 2026 20:29:38 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/Module_talk:Message_box</comments>
		</item>
		<item>
			<title>Module:Yesno</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=Module:Yesno&amp;diff=120493&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=Module:Yesno&amp;diff=120493&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:Yesno&quot; title=&quot;Module:Yesno&quot;&gt;Module:Yesno&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Function allowing for consistent treatment of boolean-like wikitext input.&lt;br /&gt;
-- It works similarly to the template {{yesno}}.&lt;br /&gt;
&lt;br /&gt;
return function (val, default)&lt;br /&gt;
	-- If your wiki uses non-ascii characters for any of &amp;quot;yes&amp;quot;, &amp;quot;no&amp;quot;, etc., you&lt;br /&gt;
	-- should replace &amp;quot;val:lower()&amp;quot; with &amp;quot;mw.ustring.lower(val)&amp;quot; in the&lt;br /&gt;
	-- following line.&lt;br /&gt;
	val = type(val) == &amp;#039;string&amp;#039; and val:lower() or val&lt;br /&gt;
	if val == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	elseif val == true &lt;br /&gt;
		or val == &amp;#039;yes&amp;#039;&lt;br /&gt;
		or val == &amp;#039;y&amp;#039;&lt;br /&gt;
		or val == &amp;#039;true&amp;#039;&lt;br /&gt;
		or val == &amp;#039;t&amp;#039;&lt;br /&gt;
		or val == &amp;#039;on&amp;#039;&lt;br /&gt;
		or tonumber(val) == 1&lt;br /&gt;
	then&lt;br /&gt;
		return true&lt;br /&gt;
	elseif val == false&lt;br /&gt;
		or val == &amp;#039;no&amp;#039;&lt;br /&gt;
		or val == &amp;#039;n&amp;#039;&lt;br /&gt;
		or val == &amp;#039;false&amp;#039;&lt;br /&gt;
		or val == &amp;#039;f&amp;#039;&lt;br /&gt;
		or val == &amp;#039;off&amp;#039;&lt;br /&gt;
		or tonumber(val) == 0&lt;br /&gt;
	then&lt;br /&gt;
		return false&lt;br /&gt;
	else&lt;br /&gt;
		return default&lt;br /&gt;
	end&lt;br /&gt;
end&lt;/div&gt;</description>
			<pubDate>Wed, 24 Jun 2026 20:29:38 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/Module_talk:Yesno</comments>
		</item>
		<item>
			<title>MediaWiki:Gadgets-definition</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadgets-definition&amp;diff=120491&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadgets-definition&amp;diff=120491&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/MediaWiki:Gadgets-definition&quot; title=&quot;MediaWiki:Gadgets-definition&quot;&gt;MediaWiki:Gadgets-definition&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;#039;&amp;#039;&amp;#039;Changes to this page should first be discussed on [[Wikipedia:Village pump (technical)]] or [[Wikipedia talk:Gadget]].&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Links to view and manage the gadget descriptions appear on [[Special:Gadgets]].&lt;br /&gt;
{{#invoke:Validate gadgets|validate}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== browsing ==&lt;br /&gt;
* modrollback [ResourceLoader |rights=rollback] |modrollback.js&lt;br /&gt;
* confirmationRollback-mobile [ResourceLoader |default |rights=rollback |dependencies=mediawiki.util] |confirmationRollback-mobile.js&lt;br /&gt;
* removeAccessKeys [ResourceLoader |dependencies=user, mediawiki.util] |removeAccessKeys.js&lt;br /&gt;
* searchFocus [ResourceLoader] |searchFocus.js&lt;br /&gt;
* GoogleTrans [ResourceLoader] |GoogleTrans.js&lt;br /&gt;
* ImageAnnotator [ResourceLoader] |ImageAnnotator.js&lt;br /&gt;
* imagelinks [ResourceLoader |dependencies=mediawiki.util] |imagelinks.js&lt;br /&gt;
* Navigation_popups [ResourceLoader |dependencies=mediawiki.api, mediawiki.user, mediawiki.util, user.options, mediawiki.jqueryMsg |type=general] |popups.js |navpop.css&lt;br /&gt;
* exlinks [ResourceLoader |dependencies=mediawiki.util] |exlinks.js&lt;br /&gt;
* search-new-tab [ResourceLoader] |search-new-tab.js&lt;br /&gt;
* PrintOptions [ResourceLoader] |PrintOptions.js&lt;br /&gt;
* revisionjumper [ResourceLoader] |revisionjumper.js&lt;br /&gt;
* Twinkle [ResourceLoader |dependencies=ext.gadget.morebits, ext.gadget.select2, mediawiki.language |rights=autoconfirmed |type=general |peers=Twinkle-pagestyles] |Twinkle.js |Twinkle.css |twinklearv.js |twinklewarn.js |twinkleblock.js |twinklewelcome.js |twinkletalkback.js |twinklespeedy.js |twinkleprod.js |twinklexfd.js |twinkleimage.js |twinkleprotect.js |twinkletag.js |twinklediff.js |twinkleunlink.js |twinklerollback.js |twinkledeprod.js |twinklebatchdelete.js |twinklebatchprotect.js |twinklebatchundelete.js |twinkleconfig.js&lt;br /&gt;
* morebits [ResourceLoader |dependencies=mediawiki.user, mediawiki.util, mediawiki.Title, mediawiki.api |hidden] |morebits.js |morebits.css&lt;br /&gt;
* Twinkle-pagestyles [hidden |skins=vector, vector-2022] |Twinkle-pagestyles.css&lt;br /&gt;
* select2 [ResourceLoader |hidden] |select2.min.js |select2.min.css&lt;br /&gt;
* HideCentralNotice [ResourceLoader |type=general] |HideCentralNotice.js |HideCentralNotice.css&lt;br /&gt;
* ReferenceTooltips [ResourceLoader |default |skins=vector, vector-2022, monobook, timeless, modern, cologneblue |type=general |dependencies=mediawiki.cookie, jquery.client] |ReferenceTooltips.js |ReferenceTooltips.css&lt;br /&gt;
* formWizard [ResourceLoader |default |rights=minoredit |namespaces=4] |formWizard.js&lt;br /&gt;
* formWizard-core [ResourceLoader |hidden |dependencies=mediawiki.api, mediawiki.cookie, mediawiki.user, jquery.chosen, jquery.ui, user.options] |formWizard-core.js |formWizard.css&lt;br /&gt;
* Prosesize [ResourceLoader |dependencies=mediawiki.api, mediawiki.util] |Prosesize.js |Prosesize.css&lt;br /&gt;
* find-archived-section [ResourceLoader] |find-archived-section.js&lt;br /&gt;
&lt;br /&gt;
== watchlist ==&lt;br /&gt;
&amp;lt;!-- rights=viewmywatchlist limits these default gadgets to logged-in users. --&amp;gt;&lt;br /&gt;
* geonotice [ResourceLoader |default |rights=viewmywatchlist] |geonotice.js&lt;br /&gt;
* geonotice-core [ResourceLoader |dependencies=mediawiki.util, mediawiki.storage |hidden] |geonotice-list.js |geonotice-core.js |geonotice-core.css&lt;br /&gt;
* watchlist-notice [ResourceLoader |default |rights=viewmywatchlist |namespaces=-1] |watchlist-notice.js&lt;br /&gt;
* watchlist-notice-core [ResourceLoader |dependencies=mediawiki.storage |hidden] |watchlist-notice-core.js&lt;br /&gt;
* WatchlistBase [ResourceLoader |default |rights=viewmywatchlist |skins=vector, vector-2022, monobook, modern |namespaces=-1] |WatchlistBase.css&lt;br /&gt;
* WatchlistGreenIndicators [ResourceLoader |default |rights=viewmywatchlist |peers=WatchlistBase |skins=vector, vector-2022 |namespaces=-1] |WatchlistGreenIndicators.css&lt;br /&gt;
* WatchlistGreenIndicatorsMono [ResourceLoader |default |rights=viewmywatchlist |peers=WatchlistBase |skins=monobook, modern |namespaces=-1] |WatchlistGreenIndicatorsMono.css&lt;br /&gt;
* WatchlistChangesBold [ResourceLoader |peers=WatchlistBase |namespaces=-1] |WatchlistChangesBold.css&lt;br /&gt;
* SubtleUpdatemarker [ResourceLoader |default |rights=viewmywatchlist |skins=vector, vector-2022, monobook, modern] |SubtleUpdatemarker.css&lt;br /&gt;
&lt;br /&gt;
== editing ==&lt;br /&gt;
* defaultsummaries [ResourceLoader |dependencies=oojs-ui-core] |defaultsummaries.js&lt;br /&gt;
* citations [ResourceLoader |dependencies=mediawiki.util] |citations.js&lt;br /&gt;
* DotsSyntaxHighlighter [ResourceLoader |actions=edit] |DotsSyntaxHighlighter.js&lt;br /&gt;
* HotCat [ResourceLoader |rights=edit, minoredit] |HotCat.js&lt;br /&gt;
* wikEdDiff [ResourceLoader] |wikEdDiff.js&lt;br /&gt;
* ProveIt [ResourceLoader |namespaces=0, 2, 10, 118] |ProveIt.js&lt;br /&gt;
* ProveIt-classic [ResourceLoader |type=general |dependencies=jquery.ui, jquery.textSelection, mediawiki.util |actions=edit] |ProveIt-classic.css |ProveIt-classic.js&lt;br /&gt;
* Shortdesc-helper [ResourceLoader |dependencies=mediawiki.api, user.options, mediawiki.util, ext.gadget.libSettings |skins=vector, vector-2022, monobook, modern, timeless |peers=Shortdesc-helper-pagestyles-vector] |Shortdesc-helper.js |Shortdesc-helper.css&lt;br /&gt;
* Shortdesc-helper-pagestyles-vector [hidden |skins=vector, vector-2022] |Shortdesc-helper-pagestyles-vector.css&lt;br /&gt;
* libSettings [ResourceLoader |hidden |dependencies=user.options] |libSettings.js&lt;br /&gt;
* wikEd [ResourceLoader |dependencies=jquery.textSelection, user.options] |wikEd.js&lt;br /&gt;
* afchelper [ResourceLoader |dependencies=mediawiki.api, mediawiki.util, mediawiki.user, jquery.chosen, jquery.spinner, jquery.ui |namespaces=2, 118] |afchelper.js |afchelper.css&lt;br /&gt;
* charinsert [ResourceLoader |default |actions=edit] |charinsert.js&lt;br /&gt;
* charinsert-core [ResourceLoader |hidden |dependencies=jquery.textSelection, user, mediawiki.storage] |charinsert-styles.css |charinsert-core.js&lt;br /&gt;
* legacyToolbar [ResourceLoader] |legacyToolbar.js |extra-toolbar-buttons-core.js &lt;br /&gt;
* refToolbar [ResourceLoader |default |dependencies=mediawiki.util |actions=edit |contentModels=wikitext] |refToolbar.js&lt;br /&gt;
* refToolbarBase [ResourceLoader |hidden] |refToolbarBase.js&lt;br /&gt;
&lt;br /&gt;
== appearance ==&lt;br /&gt;
* edittop [ResourceLoader |dependencies=user.options, mediawiki.util |type=general] |edittop.js |edittop.css&lt;br /&gt;
* UTCLiveClock [ResourceLoader |supportsUrlLoad |type=general |dependencies=mediawiki.util, mediawiki.api |peers=UTCLiveClock-pagestyles] |UTCLiveClock.js |UTCLiveClock.css&lt;br /&gt;
* UTCLiveClock-pagestyles [hidden |skins=vector, vector-2022, monobook] |UTCLiveClock-pagestyles.css&lt;br /&gt;
* purgetab [ResourceLoader |dependencies=mediawiki.util, mediawiki.api] |purgetab.js&lt;br /&gt;
* ExternalSearch [ResourceLoader |namespaces=-1] |externalsearch.js&lt;br /&gt;
* CollapsibleNav [ResourceLoader |dependencies=jquery.makeCollapsible, mediawiki.storage |skins=vector, vector-2022] |CollapsibleNav.js |CollapsibleNav.css&lt;br /&gt;
* MenuTabsToggle [ResourceLoader |dependencies=mediawiki.cookie |skins=vector, vector-2022 |type=general] |MenuTabsToggle.js |MenuTabsToggle.css&lt;br /&gt;
* dropdown-menus [ResourceLoader |dependencies=mediawiki.api, mediawiki.util, mediawiki.Title, user.options |peers=dropdown-menus-pagestyles |skins=vector, vector-2022, monobook, timeless, modern, cologneblue] |MoreMenu.enwiki.js |dropdown-menus.js&lt;br /&gt;
* dropdown-menus-pagestyles [hidden] |dropdown-menus-pagestyles.css&lt;br /&gt;
* CategoryAboveAll [ResourceLoader |skins=monobook] |CategoryAboveAll.js&lt;br /&gt;
* addsection-plus [ResourceLoader] |addsection-plus.js&lt;br /&gt;
* CommentsInLocalTime [ResourceLoader] |CommentsInLocalTime.js&lt;br /&gt;
* OldDiff [ResourceLoader] |OldDiff.css&lt;br /&gt;
* NoAnimations [ResourceLoader] |NoAnimations.js&lt;br /&gt;
* disablesuggestions [ResourceLoader] |disablesuggestions.js&lt;br /&gt;
* NoSmallFonts [ResourceLoader] |NoSmallFonts.css&lt;br /&gt;
* topalert [ResourceLoader |type=general] |topalert.js |topalert.css&lt;br /&gt;
* metadata [ResourceLoader |dependencies=mediawiki.util |type=general] |metadata.js |metadata.css&lt;br /&gt;
* JustifyParagraphs [ResourceLoader] |JustifyParagraphs.css&lt;br /&gt;
* righteditlinks [ResourceLoader] |righteditlinks.css&lt;br /&gt;
* PrettyLog [ResourceLoader |dependencies=mediawiki.util |type=general] |PrettyLog.js |PrettyLog.css&lt;br /&gt;
* switcher [ResourceLoader |default] |switcher.js&lt;br /&gt;
* SidebarTranslate [ResourceLoader |type=general] |SidebarTranslate.js |SidebarTranslate.css&lt;br /&gt;
* Blackskin [ResourceLoader |skins=monobook, vector, vector-2022 |supportsUrlLoad] |Blackskin.css&lt;br /&gt;
* dark-mode-toggle [ResourceLoader |dependencies=mediawiki.util, mediawiki.api, mediawiki.storage |peers=dark-mode-toggle-pagestyles] |dark-mode-toggle.js&lt;br /&gt;
* dark-mode-toggle-pagestyles [hidden |skins=vector, vector-2022, minerva, monobook] |dark-mode-toggle-pagestyles.css&lt;br /&gt;
* VectorClassic [ResourceLoader |skins=vector, vector-2022] |VectorClassic.css&lt;br /&gt;
* widensearch [ResourceLoader |skins=vector, vector-2022] |widensearch.css&lt;br /&gt;
* DisambiguationLinks [ResourceLoader] |DisambiguationLinks.css&lt;br /&gt;
* markblocked [ResourceLoader |dependencies=mediawiki.util, mediawiki.page.ready, mediawiki.Title] |markblocked.js&lt;br /&gt;
* responsiveContent [ResourceLoader |type=general |skins=vector|peers=responsiveContentBase] |responsiveContent.js&lt;br /&gt;
* responsiveContentTimeless [ResourceLoader |type=general |skins=timeless |default |peers=responsiveContentBaseTimeless] |responsiveContentTimeless.js&lt;br /&gt;
* responsiveContentBase [ResourceLoader |type=styles |hidden |skins=vector] |responsiveContentBase.css&lt;br /&gt;
* responsiveContentBaseTimeless [ResourceLoader |type=styles |hidden |skins=timeless] |responsiveContentBaseTimeless.css&lt;br /&gt;
* HideInterwikiSearchResults [ResourceLoader |type=styles] |HideInterwikiSearchResults.css&lt;br /&gt;
* XTools-ArticleInfo [ResourceLoader] |XTools-ArticleInfo.js&lt;br /&gt;
* remove-sticky-decoration [ResourceLoader]|remove-sticky-decoration.css&lt;br /&gt;
* InterProjectLinks[ResourceLoader|type=general|skins=vector,vector-2022,monobook,timeless,modern,cologneblue]|InterProjectLinks.js|InterProjectLinks.css&lt;br /&gt;
&lt;br /&gt;
== advanced ==&lt;br /&gt;
* RegexMenuFramework [ResourceLoader |hidden] |RegexMenuFramework.js&lt;br /&gt;
* ShowMessageNames [ResourceLoader |dependencies=mediawiki.util] |ShowMessageNames.js&lt;br /&gt;
* DebugMode [ResourceLoader |dependencies=mediawiki.util] |DebugMode.js&lt;br /&gt;
* contribsrange [ResourceLoader |dependencies=mediawiki.util, jquery.spinner] |contribsrange.js&lt;br /&gt;
* BugStatusUpdate [ResourceLoader] |BugStatusUpdate.js&lt;br /&gt;
* RTRC [ResourceLoader] |RTRC.js&lt;br /&gt;
* script-installer [ResourceLoader |dependencies=mediawiki.ui.button] |script-installer.js&lt;br /&gt;
&lt;br /&gt;
== maintenance ==&lt;br /&gt;
* XFDcloser [ResourceLoader |dependencies=mediawiki.user |rights=extendedconfirmed |type=general] |XFDcloser.js&lt;br /&gt;
* XFDcloser-core [ResourceLoader |dependencies=mediawiki.util, mediawiki.api, mediawiki.Title, oojs-ui-core, oojs-ui-widgets, oojs-ui-windows, oojs-ui.styles.icons-interactions, oojs-ui.styles.icons-content, oojs-ui.styles.icons-moderation, oojs-ui.styles.icons-alerts |hidden |type=general] |XFDcloser-core.js |XFDcloser-core.css&lt;br /&gt;
* XFDcloser-core-beta [ResourceLoader |dependencies=mediawiki.util, mediawiki.api, mediawiki.Title, oojs-ui-core, oojs-ui-widgets, oojs-ui-windows, oojs-ui.styles.icons-interactions, oojs-ui.styles.icons-content, oojs-ui.styles.icons-moderation, oojs-ui.styles.icons-alerts |hidden |type=general] |XFDcloser-core-beta.js |XFDcloser-core-beta.css&lt;br /&gt;
* libExtraUtil [ResourceLoader |hidden] |libExtraUtil.js&lt;br /&gt;
&lt;br /&gt;
== test ==&lt;br /&gt;
* mobile-sidebar [ResourceLoader |skins=vector, vector-2022] |mobile-sidebar.js |mobile-sidebar.css&lt;br /&gt;
* addMe [ResourceLoader] |addMe.js |addMe.css&lt;br /&gt;
* NewImageThumb [ResourceLoader |skins=vector, vector-2022] |NewImageThumb.js |NewImageThumb.css&lt;br /&gt;
* StickyTableHeaders [ResourceLoader |type=general] |StickyTableHeaders.js |StickyTableHeaders.css&lt;br /&gt;
* MobileMaps [ResourceLoader |skins=minerva] |mobilemaps.js&lt;br /&gt;
* ShowJavascriptErrors [ResourceLoader |type=general] |ShowJavascriptErrors.js&lt;br /&gt;
* PageDescriptions [ResourceLoader |type=general |dependencies=mediawiki.api |skins=vector, vector-2022, monobook, modern] |Page_descriptions.js&lt;br /&gt;
* autonum [ResourceLoader] |autonum.css |autonum.js&lt;br /&gt;
&lt;br /&gt;
== template-gadgets ==&lt;br /&gt;
* Vivarium[ResourceLoader|default|categories=Pages using gadget Vivarium]|Vivarium.js|Vivarium.css&lt;br /&gt;
* WikiMiniAtlas [ ResourceLoader | default | categories = Pages using gadget WikiMiniAtlas] | WikiMiniAtlas.js&lt;br /&gt;
* ImageStackPopup [ ResourceLoader | default | categories = Pages using gadget ImageStackPopup ] | ImageStackPopup.js | ImageStackPopup.css&lt;br /&gt;
* Calculator [ResourceLoader | default | categories = Pages using gadget Calculator ] | calculator.js |calculator.css&lt;br /&gt;
* owidslider [ResourceLoader|default|categories=Pages using gadget owidslider]|owidslider.js|owidslider.css&lt;br /&gt;
&lt;br /&gt;
== modules ==&lt;br /&gt;
* libLua  [ResourceLoader |dependencies=mediawiki.api |hidden] |libLua.js&lt;br /&gt;
* libSensitiveIPs  [ResourceLoader |dependencies=ext.gadget.libLua |hidden] |libSensitiveIPs.js&lt;br /&gt;
* dark-mode [ResourceLoader |supportsUrlLoad |skins=vector, vector-2022, monobook, modern, minerva, timeless] |dark-mode.css&lt;/div&gt;</description>
			<pubDate>Wed, 24 Jun 2026 20:29:38 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadgets-definition</comments>
		</item>
		<item>
			<title>MediaWiki:Gadget-externalsearch.js</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-externalsearch.js&amp;diff=120489&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-externalsearch.js&amp;diff=120489&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Tachyony&quot; class=&quot;mw-userlink&quot; title=&quot;User:Tachyony&quot;&gt;&lt;bdi&gt;Tachyony&lt;/bdi&gt;&lt;/a&gt; protected &lt;a href=&quot;/wiki/MediaWiki:Gadget-externalsearch.js&quot; title=&quot;MediaWiki:Gadget-externalsearch.js&quot;&gt;MediaWiki:Gadget-externalsearch.js&lt;/a&gt; [Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite) [cascading]&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/** Change Special:Search to use a drop-down menu *******************************************************&lt;br /&gt;
  *&lt;br /&gt;
  *  Description: Change Special:Search to use a drop-down menu, with the default being&lt;br /&gt;
  *               the internal MediaWiki engine&lt;br /&gt;
  *  Created by: [[User:Gracenotes]]&lt;br /&gt;
  */&lt;br /&gt;
&lt;br /&gt;
function SpecialSearchEnhanced() {&lt;br /&gt;
    var createOption = function(site, action, mainQ, addQ, addV) {&lt;br /&gt;
        var opt = document.createElement(&amp;#039;option&amp;#039;);&lt;br /&gt;
        opt.appendChild(document.createTextNode(site));&lt;br /&gt;
        window.searchEngines.push([action, mainQ, addQ, addV]);&lt;br /&gt;
        return opt;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.forms.powersearch)&lt;br /&gt;
        var searchForm = document.forms.powersearch;&lt;br /&gt;
    if (document.forms.search)&lt;br /&gt;
        var searchForm = document.forms.search;&lt;br /&gt;
&lt;br /&gt;
    if (searchForm.lsearchbox) {&lt;br /&gt;
        var searchBox = searchForm.lsearchbox;&lt;br /&gt;
    } else {&lt;br /&gt;
        var searchBox = searchForm.search;&lt;br /&gt;
    }&lt;br /&gt;
    var selectBox = document.createElement(&amp;#039;select&amp;#039;);&lt;br /&gt;
    selectBox.id = &amp;#039;searchEngine&amp;#039;;&lt;br /&gt;
    searchForm.onsubmit = function() {&lt;br /&gt;
        var optSelected = window.searchEngines[document.getElementById(&amp;#039;searchEngine&amp;#039;).selectedIndex];&lt;br /&gt;
        searchForm.action = optSelected[0];&lt;br /&gt;
        searchBox.name = optSelected[1];&lt;br /&gt;
        searchForm.title.value = optSelected[3];&lt;br /&gt;
        searchForm.title.name = optSelected[2];&lt;br /&gt;
    }&lt;br /&gt;
    selectBox.appendChild(createOption(&amp;#039;English Wikipedia&amp;#039;, mw.config.get( &amp;#039;wgScript&amp;#039; ), &amp;#039;search&amp;#039;, &amp;#039;title&amp;#039;, &amp;#039;Special:Search&amp;#039;));&lt;br /&gt;
    selectBox.appendChild(createOption(&amp;#039;Google&amp;#039;, &amp;#039;https://www.google.com/search&amp;#039;, &amp;#039;q&amp;#039;, &amp;#039;sitesearch&amp;#039;, &amp;#039;en.wikipedia.org&amp;#039;));&lt;br /&gt;
    selectBox.appendChild(createOption(&amp;#039;Yahoo&amp;#039;, &amp;#039;https://search.yahoo.com/search&amp;#039;, &amp;#039;p&amp;#039;, &amp;#039;vs&amp;#039;, &amp;#039;en.wikipedia.org&amp;#039;));&lt;br /&gt;
    selectBox.appendChild(createOption(&amp;#039;Bing&amp;#039;, &amp;#039;https://www.bing.com/search&amp;#039;, &amp;#039;q&amp;#039;, &amp;#039;q1&amp;#039;, &amp;#039;site:https://en.wikipedia.org&amp;#039;));&lt;br /&gt;
    selectBox.appendChild(createOption(&amp;#039;Wikiwix&amp;#039;, &amp;#039;https://www.wikiwix.com/&amp;#039;, &amp;#039;action&amp;#039;, &amp;#039;lang&amp;#039;, &amp;#039;en&amp;#039;));&lt;br /&gt;
    selectBox.appendChild(createOption(&amp;#039;Exalead&amp;#039;, &amp;#039;https://www.exalead.com/wikipedia/results&amp;#039;, &amp;#039;q&amp;#039;, &amp;#039;language&amp;#039;, &amp;#039;en&amp;#039;));&lt;br /&gt;
    searchBox.style.marginLeft = &amp;#039;0px&amp;#039;;&lt;br /&gt;
    if (document.getElementById(&amp;#039;loadStatus&amp;#039;)) {&lt;br /&gt;
        var lStat = document.getElementById(&amp;#039;loadStatus&amp;#039;);&lt;br /&gt;
    } else {&lt;br /&gt;
        var lStat = searchForm.title;&lt;br /&gt;
        if( typeof lStat === &amp;#039;object&amp;#039;  &amp;amp;&amp;amp; typeof lStat.length === &amp;#039;number&amp;#039; ) lStat = lStat[0];&lt;br /&gt;
    }&lt;br /&gt;
    lStat.parentNode.insertBefore(selectBox, lStat);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.searchEngines = [];&lt;br /&gt;
&lt;br /&gt;
// Script is specific to Special:Search&lt;br /&gt;
if ( mw.config.get( &amp;#039;wgCanonicalSpecialPageName&amp;#039; ) === &amp;#039;Search&amp;#039;){&lt;br /&gt;
  $(SpecialSearchEnhanced);&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Wed, 24 Jun 2026 20:26:57 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadget-externalsearch.js</comments>
		</item>
		<item>
			<title>MediaWiki:Gadget-externalsearch.js</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-externalsearch.js&amp;diff=120488&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-externalsearch.js&amp;diff=120488&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/WP:AES&quot; class=&quot;mw-redirect&quot; title=&quot;WP:AES&quot;&gt;←&lt;/a&gt;Created page with &amp;#039;&lt;span class=&quot;autocomment&quot;&gt;* Change Special:Search to use a drop-down menu *******************************************************   *   *  Description: Change Special:Search to use a drop-down menu, with the default being   *               the internal MediaWiki engine   *  Created by: &lt;a href=&quot;/w/index.php?title=User:Gracenotes&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User:Gracenotes (page does not exist)&quot;&gt;User:Gracenotes&lt;/a&gt;: &lt;/span&gt;  function SpecialSearchEnhanced() {     var createOption = function(site, action, mainQ, addQ, addV) {         var opt = document.createElement(&amp;#039;option&amp;#039;);         opt.append...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/** Change Special:Search to use a drop-down menu *******************************************************&lt;br /&gt;
  *&lt;br /&gt;
  *  Description: Change Special:Search to use a drop-down menu, with the default being&lt;br /&gt;
  *               the internal MediaWiki engine&lt;br /&gt;
  *  Created by: [[User:Gracenotes]]&lt;br /&gt;
  */&lt;br /&gt;
&lt;br /&gt;
function SpecialSearchEnhanced() {&lt;br /&gt;
    var createOption = function(site, action, mainQ, addQ, addV) {&lt;br /&gt;
        var opt = document.createElement(&amp;#039;option&amp;#039;);&lt;br /&gt;
        opt.appendChild(document.createTextNode(site));&lt;br /&gt;
        window.searchEngines.push([action, mainQ, addQ, addV]);&lt;br /&gt;
        return opt;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.forms.powersearch)&lt;br /&gt;
        var searchForm = document.forms.powersearch;&lt;br /&gt;
    if (document.forms.search)&lt;br /&gt;
        var searchForm = document.forms.search;&lt;br /&gt;
&lt;br /&gt;
    if (searchForm.lsearchbox) {&lt;br /&gt;
        var searchBox = searchForm.lsearchbox;&lt;br /&gt;
    } else {&lt;br /&gt;
        var searchBox = searchForm.search;&lt;br /&gt;
    }&lt;br /&gt;
    var selectBox = document.createElement(&amp;#039;select&amp;#039;);&lt;br /&gt;
    selectBox.id = &amp;#039;searchEngine&amp;#039;;&lt;br /&gt;
    searchForm.onsubmit = function() {&lt;br /&gt;
        var optSelected = window.searchEngines[document.getElementById(&amp;#039;searchEngine&amp;#039;).selectedIndex];&lt;br /&gt;
        searchForm.action = optSelected[0];&lt;br /&gt;
        searchBox.name = optSelected[1];&lt;br /&gt;
        searchForm.title.value = optSelected[3];&lt;br /&gt;
        searchForm.title.name = optSelected[2];&lt;br /&gt;
    }&lt;br /&gt;
    selectBox.appendChild(createOption(&amp;#039;English Wikipedia&amp;#039;, mw.config.get( &amp;#039;wgScript&amp;#039; ), &amp;#039;search&amp;#039;, &amp;#039;title&amp;#039;, &amp;#039;Special:Search&amp;#039;));&lt;br /&gt;
    selectBox.appendChild(createOption(&amp;#039;Google&amp;#039;, &amp;#039;https://www.google.com/search&amp;#039;, &amp;#039;q&amp;#039;, &amp;#039;sitesearch&amp;#039;, &amp;#039;en.wikipedia.org&amp;#039;));&lt;br /&gt;
    selectBox.appendChild(createOption(&amp;#039;Yahoo&amp;#039;, &amp;#039;https://search.yahoo.com/search&amp;#039;, &amp;#039;p&amp;#039;, &amp;#039;vs&amp;#039;, &amp;#039;en.wikipedia.org&amp;#039;));&lt;br /&gt;
    selectBox.appendChild(createOption(&amp;#039;Bing&amp;#039;, &amp;#039;https://www.bing.com/search&amp;#039;, &amp;#039;q&amp;#039;, &amp;#039;q1&amp;#039;, &amp;#039;site:https://en.wikipedia.org&amp;#039;));&lt;br /&gt;
    selectBox.appendChild(createOption(&amp;#039;Wikiwix&amp;#039;, &amp;#039;https://www.wikiwix.com/&amp;#039;, &amp;#039;action&amp;#039;, &amp;#039;lang&amp;#039;, &amp;#039;en&amp;#039;));&lt;br /&gt;
    selectBox.appendChild(createOption(&amp;#039;Exalead&amp;#039;, &amp;#039;https://www.exalead.com/wikipedia/results&amp;#039;, &amp;#039;q&amp;#039;, &amp;#039;language&amp;#039;, &amp;#039;en&amp;#039;));&lt;br /&gt;
    searchBox.style.marginLeft = &amp;#039;0px&amp;#039;;&lt;br /&gt;
    if (document.getElementById(&amp;#039;loadStatus&amp;#039;)) {&lt;br /&gt;
        var lStat = document.getElementById(&amp;#039;loadStatus&amp;#039;);&lt;br /&gt;
    } else {&lt;br /&gt;
        var lStat = searchForm.title;&lt;br /&gt;
        if( typeof lStat === &amp;#039;object&amp;#039;  &amp;amp;&amp;amp; typeof lStat.length === &amp;#039;number&amp;#039; ) lStat = lStat[0];&lt;br /&gt;
    }&lt;br /&gt;
    lStat.parentNode.insertBefore(selectBox, lStat);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window.searchEngines = [];&lt;br /&gt;
&lt;br /&gt;
// Script is specific to Special:Search&lt;br /&gt;
if ( mw.config.get( &amp;#039;wgCanonicalSpecialPageName&amp;#039; ) === &amp;#039;Search&amp;#039;){&lt;br /&gt;
  $(SpecialSearchEnhanced);&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Wed, 24 Jun 2026 20:26:46 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadget-externalsearch.js</comments>
		</item>
		<item>
			<title>MediaWiki:Gadget-select2.min.css</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-select2.min.css&amp;diff=120487&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-select2.min.css&amp;diff=120487&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/WP:AES&quot; class=&quot;mw-redirect&quot; title=&quot;WP:AES&quot;&gt;←&lt;/a&gt;Created page with &amp;#039;&lt;span class=&quot;autocomment&quot;&gt;! Select2 4.0.12 | https://github.com/select2/select2/blob/master/LICENSE.md: &lt;/span&gt; .select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-rig...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/*! Select2 4.0.12 | https://github.com/select2/select2/blob/master/LICENSE.md */&lt;br /&gt;
.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir=&amp;quot;rtl&amp;quot;] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir=&amp;quot;rtl&amp;quot;] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir=&amp;quot;rtl&amp;quot;] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px;padding:1px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir=&amp;quot;rtl&amp;quot;] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir=&amp;quot;rtl&amp;quot;] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir=&amp;quot;rtl&amp;quot;] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir=&amp;quot;rtl&amp;quot;] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results&amp;gt;.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=&amp;#039;#FFFFFFFF&amp;#039;, endColorstr=&amp;#039;#FFEEEEEE&amp;#039;, GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=&amp;#039;#FFEEEEEE&amp;#039;, endColorstr=&amp;#039;#FFCCCCCC&amp;#039;, GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir=&amp;quot;rtl&amp;quot;] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir=&amp;quot;rtl&amp;quot;] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=&amp;#039;#FFFFFFFF&amp;#039;, endColorstr=&amp;#039;#FFEEEEEE&amp;#039;, GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=&amp;#039;#FFEEEEEE&amp;#039;, endColorstr=&amp;#039;#FFFFFFFF&amp;#039;, GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir=&amp;quot;rtl&amp;quot;] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir=&amp;quot;rtl&amp;quot;] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results&amp;gt;.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}&lt;/div&gt;</description>
			<pubDate>Wed, 24 Jun 2026 20:26:02 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadget-select2.min.css</comments>
		</item>
		<item>
			<title>MediaWiki:Gadget-select2.min.js</title>
			<link>https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-select2.min.js&amp;diff=120486&amp;oldid=0</link>
			<guid isPermaLink="false">https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-select2.min.js&amp;diff=120486&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/WP:AES&quot; class=&quot;mw-redirect&quot; title=&quot;WP:AES&quot;&gt;←&lt;/a&gt;Created page with &amp;#039;// &amp;lt;nowiki&amp;gt;  &lt;span class=&quot;autocomment&quot;&gt;! Select2 4.0.12 | https://github.com/select2/select2/blob/master/LICENSE.md: &lt;/span&gt; !function(n){&amp;quot;function&amp;quot;==typeof define&amp;amp;&amp;amp;define.amd?define([&amp;quot;jquery&amp;quot;],n):&lt;span class=&quot;autocomment&quot;&gt;&amp;quot;object&amp;quot;==typeof module&amp;amp;&amp;amp;module.exports?module.exports=function(e,t){return void 0===t&amp;amp;&amp;amp;(t=&amp;quot;undefined&amp;quot;!=typeof window?require(&amp;quot;jquery&amp;quot;):require(&amp;quot;jquery&amp;quot;)(e)),n(t),t}:: &lt;/span&gt;n(jQuery)}(function(u){var e=function(){if(u&amp;amp;&amp;amp;u.fn&amp;amp;&amp;amp;u.fn.select2&amp;amp;&amp;amp;u.fn.select2.amd)var e=u.fn.select2.amd;var t,n,r,h,o,s,f,...&amp;#039;&lt;/p&gt;
&lt;a href=&quot;https://wiki.tachyony.co.uk/w/index.php?title=MediaWiki:Gadget-select2.min.js&amp;amp;diff=120486&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Wed, 24 Jun 2026 20:25:31 GMT</pubDate>
			<dc:creator>Tachyony</dc:creator>
			<comments>https://wiki.tachyony.co.uk/wiki/MediaWiki_talk:Gadget-select2.min.js</comments>
		</item>
</channel></rss>