<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://middleseadirectory.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lightfall</id>
	<title>Unofficial Rhythm Doctor Custom Level Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://middleseadirectory.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lightfall"/>
	<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php/Special:Contributions/Lightfall"/>
	<updated>2026-04-10T08:37:23Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Main_Page&amp;diff=367</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Main_Page&amp;diff=367"/>
		<updated>2026-01-18T15:28:05Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Welcome to the Unofficial Rhythm Doctor Custom Level Wiki (The Middlesea Directory)&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Welcome! Here you can create pages about the custom levels and characters you create!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pages:&lt;br /&gt;
&lt;br /&gt;
[[Characters]]&lt;br /&gt;
&lt;br /&gt;
[[Levels]]&lt;br /&gt;
&lt;br /&gt;
Consult the [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Main_Page&amp;diff=366</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Main_Page&amp;diff=366"/>
		<updated>2025-12-11T13:38:17Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: removed the default template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Welcome to the Unofficial Rhythm Doctor Wiki (The Middlesea Directory)&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pages:&lt;br /&gt;
&lt;br /&gt;
[[Characters]]&lt;br /&gt;
&lt;br /&gt;
[[Levels]]&lt;br /&gt;
&lt;br /&gt;
Consult the [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Module_talk:Yesno&amp;diff=357</id>
		<title>Module talk:Yesno</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Module_talk:Yesno&amp;diff=357"/>
		<updated>2025-12-11T06:09:00Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{permprot}}&lt;br /&gt;
{{copied|from=Module:Yesno|from_oldid=828075573|to=:incubator:Module:Wp/nod/Yesno|to_diff=4237022}}&lt;br /&gt;
==Testcases and documentation==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Test Cases (via [[Template:Yesno/doc]])&lt;br /&gt;
|-&lt;br /&gt;
! Module output&lt;br /&gt;
! Template output&lt;br /&gt;
! Expected&lt;br /&gt;
|-&lt;br /&gt;
| {{#invoke:Yesno|yesno|yes}}&lt;br /&gt;
| {{yesno|yes}}&lt;br /&gt;
| yes&lt;br /&gt;
|-&lt;br /&gt;
| {{#invoke:Yesno|yesno|YeS}}&lt;br /&gt;
| {{yesno|YeS}}&lt;br /&gt;
| yes&lt;br /&gt;
|-&lt;br /&gt;
| {{#invoke:Yesno|yesno|Y}}&lt;br /&gt;
| {{yesno|Y}}&lt;br /&gt;
| yes&lt;br /&gt;
|-&lt;br /&gt;
| {{#invoke:Yesno|yesno|y}}&lt;br /&gt;
| {{yesno|y}}&lt;br /&gt;
| yes&lt;br /&gt;
|-&lt;br /&gt;
| {{#invoke:Yesno|yesno|no}}&lt;br /&gt;
| {{yesno|no}}&lt;br /&gt;
| &#039;&#039;(blank)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| {{#invoke:Yesno|yesno|}}&lt;br /&gt;
| {{yesno|}}&lt;br /&gt;
| &#039;&#039;(blank)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| {{#invoke:Yesno|yesno}}&lt;br /&gt;
| {{yesno}}&lt;br /&gt;
| &#039;&#039;(blank)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| {{#invoke:Yesno|yesno|¬}}&lt;br /&gt;
| {{yesno|¬}}&lt;br /&gt;
| &#039;&#039;(blank)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| {{#invoke:Yesno|yesno|purplemonkeydishwasher}}&lt;br /&gt;
| {{yesno|purplemonkeydishwasher}}&lt;br /&gt;
| yes&lt;br /&gt;
|-&lt;br /&gt;
| {{#invoke:Yesno|yesno|yes|yes=bacon}}&lt;br /&gt;
| {{yesno|yes|yes=bacon}}&lt;br /&gt;
| bacon&lt;br /&gt;
|-&lt;br /&gt;
| {{#invoke:Yesno|yesno|no|no=ham}}&lt;br /&gt;
| {{yesno|no|no=ham}}&lt;br /&gt;
| ham&lt;br /&gt;
|-&lt;br /&gt;
| {{#invoke:Yesno|yesno|blank= eggs}}&lt;br /&gt;
| {{yesno|blank= eggs}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| {{#invoke:Yesno|yesno|no=ham}}&lt;br /&gt;
| {{yesno|no=ham}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| {{#invoke:Yesno|yesno|blank= eggs|no=ham}}&lt;br /&gt;
| {{yesno|blank= eggs|no=ham}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| {{#invoke:Yesno|yesno|¬|¬=sausage}}&lt;br /&gt;
| {{yesno|¬|¬=sausage}}&lt;br /&gt;
| sausage&lt;br /&gt;
|-&lt;br /&gt;
| {{#invoke:Yesno|yesno|purplemonkeydishwasher|def=cup-of-tea}}&lt;br /&gt;
| {{yesno|purplemonkeydishwasher|def=cup-of-tea}}&lt;br /&gt;
| cup-of-tea&lt;br /&gt;
|-&lt;br /&gt;
| {{#invoke:Yesno|yesno|purplemonkeydishwasher|yes=bacon}}&lt;br /&gt;
| {{yesno|purplemonkeydishwasher|yes=bacon}}&lt;br /&gt;
| bacon&lt;br /&gt;
|-&lt;br /&gt;
| {{#invoke:Yesno|yesno|purplemonkeydishwasher|def=cup-of-tea|yes=bacon}}&lt;br /&gt;
| {{yesno|purplemonkeydishwasher|def=cup-of-tea|yes=bacon}}&lt;br /&gt;
| cup-of-tea&lt;br /&gt;
|-&lt;br /&gt;
| {{#invoke:Yesno|yesno|yes|yes=no|no=yes}}&lt;br /&gt;
| {{yesno|yes|yes=no|no=yes}}&lt;br /&gt;
| no&lt;br /&gt;
|-&lt;br /&gt;
| {{#invoke:Yesno|yesno|no|yes=no|no=yes}}&lt;br /&gt;
| {{yesno|no|yes=no|no=yes}}&lt;br /&gt;
| yes&lt;br /&gt;
|-&lt;br /&gt;
| {{#invoke:Yesno|yesno| no |no=no}}&lt;br /&gt;
| {{yesno| no |no=no}}&lt;br /&gt;
| no&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;small&amp;gt;Note: Pre tags added to suppress script errors. — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 14:25, 20 September 2013 (UTC)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see, the template does not behave exactly as its documentation claims it does. I was not sure which to regard as authoritative: the ideal or actual implementation. I ultimately went with the former. Removing &amp;lt;code&amp;gt;and not any&amp;lt;/code&amp;gt; from the Lua code will make the module behave like exactly like the template.&lt;br /&gt;
&lt;br /&gt;
--[[User:Ori.livneh|Ori.livneh]] ([[User talk:Ori.livneh|talk]]) 10:46, 28 February 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Just needs to handle spaces in the params better. -- [[User:WOSlinker|WOSlinker]] ([[User talk:WOSlinker|talk]]) 11:41, 2 March 2013 (UTC)&lt;br /&gt;
::Thanks. Fixed. I moved your test case to the table above. --[[User:Ori.livneh|Ori.livneh]] ([[User talk:Ori.livneh|talk]]) 05:58, 3 March 2013 (UTC)&lt;br /&gt;
:::Yesno has ~8M transclusions. No question it should handle the legacy 1:1. Test it. -[[User:DePiep|DePiep]] ([[User talk:DePiep|talk]]) 22:31, 11 March 2013 (UTC)&lt;br /&gt;
The documentation is wrong. The &amp;quot;egg&amp;quot; example assumes thet the input value is &#039;&#039;blank&#039;&#039;. But in the code examples the input parameter is &#039;&#039;omitted&#039;&#039;. Compare: &lt;br /&gt;
* &amp;lt;nowiki&amp;gt;{{yesno|blank= eggs|no=ham}}&amp;lt;/nowiki&amp;gt; →  {{yesno|blank= eggs|no=ham}} &lt;br /&gt;
* &amp;lt;nowiki&amp;gt;{{yesno||blank= eggs|no=ham}}&amp;lt;/nowiki&amp;gt; →  {{yesno||blank= eggs|no=ham}} &lt;br /&gt;
This is what is actually documented:&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;{{yesno|blank= eggs|no=ham|¬=bread}}&amp;lt;/nowiki&amp;gt; →  {{yesno|blank= eggs|no=ham|¬=bread}}&lt;br /&gt;
:I have changed the documentation. Not the table above. -[[User:DePiep|DePiep]] ([[User talk:DePiep|talk]]) 13:16, 23 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Why? ==&lt;br /&gt;
&lt;br /&gt;
{{tl|yesno}} is quite simple, so I&#039;m not sure if there is a point in replacing it with functionally equivalent Lua.  There are many cases where Lua can be much faster and easier to read, but I&#039;m not sure that is the case here.  In fact, because of the slight overhead with #invoke, simple parser functions can actually be slightly faster than the equivalent Lua.  I haven&#039;t tested that here, but I wouldn&#039;t be surprised if there is no performance advantage in a case like this.  Seems like a strange template to target for Lua conversion.  [[User:Dragons flight|Dragons flight]] ([[User talk:Dragons flight|talk]]) 14:57, 12 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
It’s just for compatibility. For some weird reason, yesno might not work and this will.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;font-family:&#039;Arial&#039;;&amp;quot;&amp;gt;[[User:E Super Maker|E Super Maker]]&amp;lt;/span&amp;gt; ([[User talk:E Super Maker|😲 shout]]) 15:47, 23 November 2019 (UTC)&lt;br /&gt;
&lt;br /&gt;
== test failed ==&lt;br /&gt;
{{resolved}}&lt;br /&gt;
One fail found in unit test: value &amp;quot;1= ¬ &amp;quot; (with whitespace). Reason:whitespace not removed before this check. Possible solution; treat &#039;¬&#039; as a character, separate from nil. &lt;br /&gt;
(if val == nil or val == &#039;¬&#039; then ...). -[[User:DePiep|DePiep]] ([[User talk:DePiep|talk]]) 11:54, 23 March 2013 (UTC)&lt;br /&gt;
* Another fail: input value=&amp;quot;00&amp;quot;. See [[Module talk:Yesno/testcases]]. -[[User:DePiep|DePiep]] ([[User talk:DePiep|talk]]) 12:56, 23 March 2013 (UTC)&lt;br /&gt;
: also fails when 1=0.0&lt;br /&gt;
: Suggestion: change &amp;lt;code&amp;gt;val = args[1]&amp;lt;/code&amp;gt; into &amp;lt;code&amp;gt;val = tostring(args[1])&amp;lt;/code&amp;gt;. To prevent treating &amp;quot;000&amp;quot; as number. -[[User:DePiep|DePiep]] ([[User talk:DePiep|talk]]) 14:09, 23 March 2013 (UTC)&lt;br /&gt;
Solved. Module is changed, although the numeric issue different from my (incorrect) suggestion. -[[User:DePiep|DePiep]] ([[User talk:DePiep|talk]]) 14:19, 23 March 2013 (UTC)&lt;br /&gt;
:Thanks for putting the test cases up. I learned something new about ParserFunctions. :) Still seems to be slower than the old template version though. — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 14:38, 23 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Null? ==&lt;br /&gt;
&lt;br /&gt;
The code now says {{code|1=&amp;lt;nowiki&amp;gt;no    = &amp;quot;&amp;lt;!-- null --&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;}}. But a &amp;quot;&amp;quot; (nullstring) is not the same as ASCII NULL (0x0000). Also I see no use for adding wiki comment to code this way. -[[User:DePiep|DePiep]] ([[User talk:DePiep|talk]]) 17:47, 23 March 2013 (UTC)&lt;br /&gt;
:Yes, I agree that it doesn&#039;t really make sense. It&#039;s just in there to be 100% backwards-compatible with the current template. Those html comments should really have been removed from {{tl|yesno}} when it was made subst-able, which would have prevented us from having to second-guess whether they actually affect the output of any substitutions in any meaningful way. I suppose it&#039;s possible to download a database dump and to run a search on it to find out, but that&#039;s probably a bit much for my poor ailing laptop. Or we could just remove the comments and hope nothing breaks - I&#039;m fairly sure that no-one would have written any template code that purposefully used them. There&#039;s no way to be sure that there is no code that was inadvertently written to be dependent on the error, though, and that worries me. — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 18:24, 23 March 2013 (UTC)&lt;br /&gt;
::Drop it. Come what may. -[[User:DePiep|DePiep]] ([[User talk:DePiep|talk]]) 00:17, 24 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Rewrite ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve rewritten this as a pure Lua function. The new version is a lot simpler, and is also designed to work with Lua data types such as booleans, tables, and functions. Dragons flight&#039;s criticism above is well-founded, and giving up on the idea of replacing {{tl|yesno}} seemed like the best answer. The new version should hopefully retain the basics of {{tl|yesno}} while playing well with Lua, and allow meta-modules that deal with boolean-style wikitext input to be consistent with each other. (In other words, users won&#039;t have to remember whether it was &amp;quot;category=yes&amp;quot; or &amp;quot;category=true&amp;quot; - it should Just Work&amp;lt;sup&amp;gt;TM&amp;lt;/sup&amp;gt;.) — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 14:37, 20 September 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== All testcases failed ==&lt;br /&gt;
&lt;br /&gt;
is there some issue with the module, all tests on the [[Module talk:Yesno/testcases]] has failed. --[[User:Jarekt|Jarekt]] ([[User talk:Jarekt|talk]]) 16:37, 20 December 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Protected edit request on 24 February 2014 ==&lt;br /&gt;
&lt;br /&gt;
{{edit protected|&amp;lt;!-- Page to be edited --&amp;gt;|answered=yes}}&lt;br /&gt;
&amp;lt;!-- Begin request --&amp;gt;the information is deceptive&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- End request --&amp;gt;please delete&lt;br /&gt;
[[Special:Contributions/2600:1013:B018:986F:4493:7A2A:52E2:103A|2600:1013:B018:986F:4493:7A2A:52E2:103A]] ([[User talk:2600:1013:B018:986F:4493:7A2A:52E2:103A|talk]]) 04:21, 24 February 2014 (UTC)&lt;br /&gt;
:[[File:Red question icon with gradient background.svg|20px|link=|alt=]] &#039;&#039;&#039;Not done:&#039;&#039;&#039; please be more specific about what needs to be changed.&amp;lt;!-- Template:EP --&amp;gt; Note that this is the talk page for [[Module:Yesno]] and there is no information here.  What information on which page do you think is deceptive? — &amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&amp;amp;#123;&amp;amp;#123;U&amp;amp;#124;[[User:Technical 13|Technical 13]]&amp;amp;#125;&amp;amp;#125;&amp;lt;/span&amp;gt; &amp;lt;sup&amp;gt;([[User talk:Technical 13|t]] • [[Special:EmailUser/Technical 13|e]] • [[Special:Contributions/Technical 13|c]])&amp;lt;/sup&amp;gt; 04:27, 24 February 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== New version ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve put a new version of this module in the sandbox. The new version uses the native Lua string.lower function instead of the Scribunto mw.ustring.lower function. According to my tests it is about 25x faster this way. Would anyone object to me updating the module? — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 15:22, 7 April 2014 (UTC)&lt;br /&gt;
:I see no issue with it. [[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 18:57, 7 April 2014 (UTC)&lt;br /&gt;
::The new version is live as of the 18th. — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 12:33, 22 April 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Doc questions (blank string true/false) ==&lt;br /&gt;
&lt;br /&gt;
# In the documentation, I changed the &amp;quot;nil&amp;quot; example into singular. Or are there are other forms of nil covered and to be documented? (uppercase?, a non-initialised variable?).&lt;br /&gt;
# The last paragraph is about the &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; value (blank string). It says:&lt;br /&gt;
:&#039;&#039;Although the blank string usually evaluates to false in wikitext, it evaluates to true in Lua.&#039;&#039; Is this correct here?&lt;br /&gt;
&lt;br /&gt;
:According to this same documentation, it is treated as &amp;quot;not a boolean&amp;quot;. It says it returns the default (parameter) value, not the &#039;true&#039; value. That is: not recognised as a boolean, iic. And elsewhere the doc says &amp;quot;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;yesno(&#039;&#039;)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; returns nil&amp;quot;. (I did not test any). -[[User:DePiep|DePiep]] ([[User talk:DePiep|talk]]) 09:06, 8 April 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
::On nil: there is only one kind of nil. However, there may be many variables in any given module whose value may be nil, hence &amp;quot;nil values&amp;quot;. There is no &amp;quot;uppercase nil&amp;quot;, and in Lua there is no such thing as a non-initialised variable, as variables are initialised when they are first used. On the blank string: saying that it &amp;quot;evaluates to true&amp;quot; is talking about when it is used in if/then statements or with the &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt; operators. For example, the following code will return true:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
if &#039;&#039; then&lt;br /&gt;
	return true&lt;br /&gt;
else&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::Does that clear things up? — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 09:26, 8 April 2014 (UTC)&lt;br /&gt;
:::Does it clear things up? Don&#039;t know. Documentation did not change. -[[User:DePiep|DePiep]] ([[User talk:DePiep|talk]]) 12:10, 8 April 2014 (UTC)&lt;br /&gt;
::::I mean, do you understand it now? — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 12:34, 8 April 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Render T as true as well? ==&lt;br /&gt;
&lt;br /&gt;
I have seen some applications use T as an option for true as well. It might, therefore, be useful to have the letter T (t) represent a true value as well. &amp;lt;span style=&amp;quot;border:1px solid maroon; padding:0 2px&amp;quot;&amp;gt;[[User:CRwikiCA|&amp;lt;span style=&amp;quot;font-family:&#039;Courier&#039;;color:maroon&amp;quot;&amp;gt;CRwikiCA&amp;lt;/span&amp;gt;]]&amp;amp;nbsp;[[User talk:CRwikiCA|&amp;lt;i style=&amp;quot;color:navy&amp;quot;&amp;gt;talk&amp;lt;/i&amp;gt;]]&amp;lt;/span&amp;gt; 15:15, 14 April 2015 (UTC)&lt;br /&gt;
;Request&lt;br /&gt;
{{edit protected|ans=y}}&lt;br /&gt;
I request a change to the module to recognize T or t and F or f as true and false entries. This would make the full code the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;br /&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) == &#039;string&#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 == &#039;yes&#039;&lt;br /&gt;
		or val == &#039;y&#039;&lt;br /&gt;
		or val == &#039;true&#039;&lt;br /&gt;
		or val == &#039;t&#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 == &#039;no&#039;&lt;br /&gt;
		or val == &#039;n&#039;&lt;br /&gt;
		or val == &#039;false&#039;&lt;br /&gt;
		or val == &#039;f&#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;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Where lines 15 and 23 are new compared to the current code. &amp;lt;span style=&amp;quot;border:1px solid maroon; padding:0 2px&amp;quot;&amp;gt;[[User:CRwikiCA|&amp;lt;span style=&amp;quot;font-family:&#039;Courier&#039;;color:maroon&amp;quot;&amp;gt;CRwikiCA&amp;lt;/span&amp;gt;]]&amp;amp;nbsp;[[User talk:CRwikiCA|&amp;lt;i style=&amp;quot;color:navy&amp;quot;&amp;gt;talk&amp;lt;/i&amp;gt;]]&amp;lt;/span&amp;gt; 18:17, 23 April 2015 (UTC)&lt;br /&gt;
:No opposition, so {{done}} &amp;amp;mdash;&amp;amp;nbsp;Martin &amp;lt;small&amp;gt;([[User:MSGJ|MSGJ]]&amp;amp;nbsp;·&amp;amp;nbsp;[[User talk:MSGJ|talk]])&amp;lt;/small&amp;gt; 10:43, 27 April 2015 (UTC)&lt;br /&gt;
::I would be interested to know cases where such &amp;quot;t/f&amp;quot; values may be encountered. I know that in command prompts we may encounter &amp;quot;y/n&amp;quot; choices. But I cannot recall having ever encountered &amp;quot;t/f&amp;quot;.&lt;br /&gt;
::Refs [[phab:T137584|T137584]] (« Allow Scribunto code to add a category without changing output »), which would allow to know on what (and how many) pages these values are actually used.&lt;br /&gt;
::[[User:Od1n|Od1n]] ([[User talk:Od1n|talk]]) 00:05, 20 October 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Support on/off detection ==&lt;br /&gt;
&lt;br /&gt;
{{edit fully-protected|answered=yes}}&lt;br /&gt;
Please add support for {{kbd|on}} and {{kbd|off}} values (as equivalents of {{kbd|1}} and {{kbd|0}}, respectively), for consistency with the regular-template version {{tlx|Yesno}}, per RfC at [[Template talk:Yesno#Support on/off detection]]. &amp;lt;span style=&amp;quot;white-space:nowrap;font-family:&#039;Trebuchet MS&#039;&amp;quot;&amp;gt; — [[User:SMcCandlish|&#039;&#039;&#039;SMcCandlish&#039;&#039;&#039;]] [[User talk:SMcCandlish|☏]] [[Special:Contributions/SMcCandlish|¢]] 😼 &amp;lt;/span&amp;gt; 23:44, 22 February 2018 (UTC)&lt;br /&gt;
:Very simple change, but i&#039;ve [[Module:Yesno/sandbox|sandboxed]] the change and ran the testcases.. [[User:Galobtter|Galobtter]] ([[User talk:Galobtter|pingó mió]]) 07:52, 25 February 2018 (UTC)&lt;br /&gt;
:[[File:Yes check.svg|20px|link=|alt=]] &#039;&#039;&#039;Done&#039;&#039;&#039;&amp;lt;!-- Template:EP --&amp;gt; &amp;amp;mdash;&amp;amp;nbsp;Martin &amp;lt;small&amp;gt;([[User:MSGJ|MSGJ]]&amp;amp;nbsp;·&amp;amp;nbsp;[[User talk:MSGJ|talk]])&amp;lt;/small&amp;gt; 12:14, 28 February 2018 (UTC)&lt;br /&gt;
::Thank you {{U|Galobtter}}, for the coding work (Lua gives me a headache), and {{U|MSGJ}}, for just getting it implemented, instead of either of you being a thorn in the side about it like several parties were for no defensible reason at the RfC. I&#039;ve never encountered so much &amp;quot;resist sensible change just because I feel like it&amp;quot; nonsense on a minor technical matter as I did in this particular case.  It was weird, verging on inexplicable. &amp;lt;span style=&amp;quot;white-space:nowrap;font-family:&#039;Trebuchet MS&#039;&amp;quot;&amp;gt; — [[User:SMcCandlish|&#039;&#039;&#039;SMcCandlish&#039;&#039;&#039;]] [[User talk:SMcCandlish|☏]] [[Special:Contributions/SMcCandlish|¢]] 😼 &amp;lt;/span&amp;gt; 18:37, 26 May 2018 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Upgrade of protection level ==&lt;br /&gt;
&lt;br /&gt;
I believe we should make this template editor protected (I&#039;ve seen templates with way less of the amount of transclusions than this one being template protected). Just a suggestion before I would put it up in the list. [[User:KylieInTheSkylie|KylieInTheSkylie]] ([[User talk:KylieInTheSkylie|talk]]) 02:23, 6 April 2020 (UTC)&lt;br /&gt;
:Just realized that full protection is not [[wp:ECP| Extended confirmed protection.]] Please disregard this. [[User:KylieInTheSkylie|KylieInTheSkylie]] ([[User talk:KylieInTheSkylie|talk]]) 02:23, 6 April 2020 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Multilingual version? ==&lt;br /&gt;
&lt;br /&gt;
What about a multilingual version? Would there be any conflicts? [[User:Trigenibinion|Trigenibinion]] ([[User talk:Trigenibinion|talk]]) 17:21, 12 March 2021 (UTC)&lt;br /&gt;
:It seems this is normally called the same in other languages, where they appear to tend to support English as well as the translation, so this should be usable in a multilingual module. [[User:Trigenibinion|Trigenibinion]] ([[User talk:Trigenibinion|talk]]) 17:57, 12 March 2021 (UTC)&lt;br /&gt;
:: There is no need for a multilingual version of this module to exist on this wiki, since its content is in only one language. Furthermore, were one created, it would be a recreation of [[Module:YesnoTNT]], which was deleted per [[Wikipedia:Templates for discussion/Log/2019 December 11#Module:YesnoTNT]], and I would move for it to be speedy deleted per [[WP:CSD#G4]] [[User:Pppery|* Pppery *]] [[User talk:Pppery|&amp;lt;sub style=&amp;quot;color:#800000&amp;quot;&amp;gt;it has begun...&amp;lt;/sub&amp;gt;]] 20:36, 13 March 2021 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Option: Binary-only? ==&lt;br /&gt;
&lt;br /&gt;
I want to &amp;quot;propose&amp;quot; to add an option (feature) that makes the module return &#039;&#039;&#039;{{code|T/F}} only, never {{code|nil}}&#039;&#039;&#039;. For example, it could have para {{para|whennil|&amp;amp;lt;True or False&amp;gt;}}.&lt;br /&gt;
&lt;br /&gt;
The background is that there are many situations (I meet in programming Lua) where a &#039;nil&#039; return value is not helpful and still has to be handled separately into binary logic.&lt;br /&gt;
&lt;br /&gt;
But even better, maybe I can &#039;&#039;learn&#039;&#039; why this was not added from the start, or why it could be considered bad design/coding. Maybe it could be solved by creating a wrapper like &amp;quot;Module:YesnoNevernil&amp;quot;, or is that bad design again? -[[User:DePiep|DePiep]] ([[User talk:DePiep|talk]]) 04:56, 23 December 2021 (UTC)&lt;br /&gt;
&lt;br /&gt;
:It&#039;s easy enough to just handle the nil in your own code, for example: &amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; inline&amp;gt;myvariable = yesno(value) or false&amp;lt;/syntaxhighlight&amp;gt; -- [[User:WOSlinker|WOSlinker]] ([[User talk:WOSlinker|talk]]) 20:09, 23 December 2021 (UTC)&lt;br /&gt;
::This can also mostly be handled by specifying the default parameter (i.e. &amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; inline&amp;gt;myvariable = yesno(value, false)&amp;lt;/syntaxhighlight&amp;gt;), although this does leave the case &amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; inline&amp;gt;yesno(nil, false)&amp;lt;/syntaxhighlight&amp;gt;, which evaluates to &amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; inline&amp;gt;nil&amp;lt;/syntaxhighlight&amp;gt;. The reason I originally programmed the module this way is so that it can be mostly backwards-compatible with [[Template:Yesno]], which it is intended to replace. Originally the plan was to do a straight conversion of [[Template:Yesno]] to Lua, but it turned out that doing that was actually slower than just using the template, given the template&#039;s simplicity and the initial cost of switching between PHP and Lua. So instead this module became Lua-only, with most of the behaviour of [[Template:Yesno]]. The intention there was that module writers could easily incorporate it into modules that convert more complex templates without having to change the template logic too much. — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr.&amp;amp;nbsp;Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪&amp;amp;nbsp;talk&amp;amp;nbsp;♪]]&amp;lt;/sup&amp;gt; 22:11, 23 December 2021 (UTC)&lt;br /&gt;
:::OK, thx. I can use this code solution with confidence now, no research-&amp;amp;-test needed. Might as well add it to the /doc. -[[User:DePiep|DePiep]] ([[User talk:DePiep|talk]]) 16:35, 24 December 2021 (UTC)&lt;br /&gt;
::::The abovementioned &amp;lt;code&amp;gt;yesno(value) or true/false&amp;lt;/code&amp;gt; has a common pitfall and should be avoided: if value is &amp;quot;false&amp;quot;, &amp;lt;code&amp;gt;yesno(value) or true&amp;lt;/code&amp;gt; would gives &amp;quot;true&amp;quot;, instead of the presumably expected &amp;quot;false&amp;quot;. See section « Standard solution: and/or » on [http://lua-users.org/wiki/TernaryOperator this page]. [[User:Od1n|Od1n]] ([[User talk:Od1n|talk]]) 18:15, 22 September 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Edit request 25 September 2025 ==&lt;br /&gt;
&lt;br /&gt;
{{Edit fully-protected|answered=yes}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description of suggested change:&#039;&#039;&#039; Please merge [[Module:Yesno/sandbox]]. Uses a [[lookup table]] instead of an if-elseif-else statment which is almost 50% as fast as a lookup table as table lookups in Lua are O(1) average case.&lt;br /&gt;
&lt;br /&gt;
I made a benchmark comparing exact current module with the new one: [[Module:Sandbox/Waddie96]]. To run, [https://en.wikipedia.org/w/index.php?title=Module:Sandbox/Waddie96&amp;amp;action=edit go into edit mode], in the LuaConsole type &amp;lt;code&amp;gt;&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:darkblue;&amp;quot;&amp;gt;=p.main()&amp;lt;/span&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;. Output compares the two with 500,000 iterations. My output showed almost 30–50% speed improvement which is a lot for a module transcluded [https://en.wikipedia.org/wiki/Special:WhatLinksHere/Module:Yesno on 31,723,438 pages].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code style=&amp;quot;display:block;&amp;quot; class=&amp;quot;mw-code mw-highlight mw-highlight-lang-bash pre&amp;quot;&amp;gt;&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:darkblue;&amp;quot;&amp;gt;=p.main()&amp;lt;/span&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
Running benchmarks with &amp;lt;span style=&amp;quot;color:var(--color-subtle);&amp;quot;&amp;gt;500000&amp;lt;/span&amp;gt; iterations...&lt;br /&gt;
Lookup table took &amp;lt;span style=&amp;quot;color:maroon;&amp;quot;&amp;gt;3.6897&amp;lt;/span&amp;gt; seconds for &amp;lt;span style=&amp;quot;color:var(--color-subtle);&amp;quot;&amp;gt;8500000&amp;lt;/span&amp;gt; operations &lt;br /&gt;
If-elseif chain took &amp;lt;span style=&amp;quot;color:maroon;&amp;quot;&amp;gt;5.0883&amp;lt;/span&amp;gt; seconds for &amp;lt;span style=&amp;quot;color:var(--color-subtle);&amp;quot;&amp;gt;8500000&amp;lt;/span&amp;gt; operations&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Diff:&#039;&#039;&#039; [https://en.wikipedia.org/w/index.php?title=Module%3AYesno%2Fsandbox&amp;amp;diff=1313227532&amp;amp;oldid=1313226214 Diff here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;fn nickname&amp;quot; style=&amp;quot;color:#CD0000&amp;quot;&amp;gt;[[User:Waddie96|waddie96]] ★ ([[User talk:Waddie96|talk]])&amp;lt;/span&amp;gt; 01:36, 25 September 2025 (UTC)&lt;br /&gt;
: So you&#039;re saving about 165 nanoseconds per call, and it&#039;s unlikely this is getting called so many thousands of times that that really adds up? That&#039;s not terribly convincing. OTOH, other than oddly assigning &amp;lt;code&amp;gt;TO_NUMBER = tonumber&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;TYPE = type&amp;lt;/code&amp;gt; without any explanation, it seems like an ok increase in clarity to have almost all the accepted values together at the top. You might go a little further and stick boolean true and false into &amp;lt;code&amp;gt;BOOLEAN_MAP&amp;lt;/code&amp;gt; and skip checking types at all, as Lua doesn&#039;t do any type conversion on table keys and allows anything except nil and NaN. [[User:Anomie|Anomie]][[User talk:Anomie|⚔]] 01:58, 25 September 2025 (UTC)&lt;br /&gt;
:: [[WP:PERF]]. Probably the amount of time it would take for the parser to reparse almost every page on the project triggered by this edit would greatly exceed the time saved for the forseeable future. And the code as is seems plenty clear enough, so I&#039;m not seeing the clarity argument either. I&#039;m contesting this request. [[User:Pppery|* Pppery *]] [[User talk:Pppery|&amp;lt;sub style=&amp;quot;color:#800000&amp;quot;&amp;gt;it has begun...&amp;lt;/sub&amp;gt;]] 02:25, 25 September 2025 (UTC)&lt;br /&gt;
:::This benchmark case isn&#039;t perfectly representitive. Generally, the average template call or invoke from a page will use Yesno just a few times, repeated among a bunch of different template calls. That means, if a singular call ends up using YesNo ~5 times or less in total, the lookup table version technically has &#039;&#039;more&#039;&#039; overhead than the current simplistic implementation (upwards of ~2x slower, though that means little at this scale), due to the time it takes to create the lookup table and localise the globals every time. Also, as mentioned above, this is fighting to save milliseconds (if even that much) in the wrong place - it definitely won&#039;t be fixing any multi-second or 10s timeout pages, which is where optimisations matter. [[User:Aidan9382|Aidan9382]] &amp;lt;sub&amp;gt;([[User talk:Aidan9382|talk]])&amp;lt;/sub&amp;gt; 08:19, 25 September 2025 (UTC)&lt;br /&gt;
::::Yes, you make an excellent point, so lets break it down: &#039;&#039;&#039;The economics of optimization at scale:&#039;&#039;&#039;&lt;br /&gt;
::::Saving time or indefinite use of the slower iteration?&lt;br /&gt;
::::[[Module:Yesno/sandbox]] refactored to use a lookup table &amp;lt;code&amp;gt;(BOOLEAN_MAP) → O(1)&amp;lt;/code&amp;gt;, instead of nested if-elseif-else statements. This reduces the number of operations per call from ~7 to ~2.&lt;br /&gt;
::::If speedup per call is ~70%, you only need a few pageviews per page to amortize the reparse.&lt;br /&gt;
::::&#039;&#039;&#039;Impact on Wikimedia at scale:&#039;&#039;&#039;&lt;br /&gt;
::::* Pages affected: ~32 million transclusions&lt;br /&gt;
::::* Estimated calls per year: ~32 billion&lt;br /&gt;
::::* Aggregate operations saved: ~160 billion operations/year&lt;br /&gt;
::::* Speedup per call: 71%&lt;br /&gt;
::::* Even if we consider just one pageview per page, the benefit already exceeds the cost.&lt;br /&gt;
::::&#039;&#039;&#039;Ongoing benefit:&#039;&#039;&#039;&lt;br /&gt;
::::That doesn&#039;t only affect the next child down that uses this module, but:&lt;br /&gt;
::::* Every single page view that uses this module gets the speedup&lt;br /&gt;
::::* Every edit that triggers reparsing gets the speedup&lt;br /&gt;
::::* Every template expansion gets the speedup&lt;br /&gt;
::::&#039;&#039;&#039;Savings (rough estimates):&#039;&#039;&#039;&lt;br /&gt;
::::* &#039;&#039;&#039;Time saved per CPU:&#039;&#039;&#039; ~80 seconds/year (per CPU handling pageviews)&lt;br /&gt;
::::* &#039;&#039;&#039;Real-world effect:&#039;&#039;&#039; reduced CPU load, faster page loads for millions of pageviews&lt;br /&gt;
::::&#039;&#039;&#039;Break-even on one-time reparse cost:&#039;&#039;&#039;&lt;br /&gt;
::::* Only &#039;&#039;&#039;2–3 pageviews per transcluded page&#039;&#039;&#039; are required to offset the one-time parsing cost&lt;br /&gt;
::::* For Wikimedia’s scale (~4,500 views/second), the break-even is achieved in &#039;&#039;&#039;~3 hours&#039;&#039;&#039; for the first affected pages{{efn|Each page using the yesno module only needs to be viewed/edited 2-3 times after the optimization to break even. Approx. 1 day = 391 million views. ~= &#039;&#039;3 hours&#039;&#039; for 3 pageviews to break even on the reparse cost. As currently enwiki receives ~4,500 views per second. Estimate: 69 million edits and 143 billion page views in the previous year divided by (86,400 sec/day * 365 days).[https://stats.wikimedia.org/#/en.wikipedia.org/reading/total-page-views/normal|bar|1-year|~total|monthly] 12 billion page views just in Aug-Sept 2025 see [https://stats.wikimedia.org/#/en.wikipedia.org WikiStats].}}&lt;br /&gt;
::::&#039;&#039;&#039;Technical benefits:&#039;&#039;&#039;&lt;br /&gt;
::::* O(1) lookup vs O(n) linear search&lt;br /&gt;
::::* Function caching avoids repeated global access overhead&lt;br /&gt;
::::* Cleaner, more maintainable code&lt;br /&gt;
::::* Adding new values now only requires updating the lookup table&lt;br /&gt;
::::This optimization demonstrates how small changes in module logic can lead to aggregate performance improvements.&lt;br /&gt;
:::: &amp;lt;span class=&amp;quot;fn nickname&amp;quot; style=&amp;quot;color:#CD0000&amp;quot;&amp;gt;[[User:Waddie96|waddie96]] ★ ([[User talk:Waddie96|talk]])&amp;lt;/span&amp;gt; 05:44, 27 September 2025 (UTC)&lt;br /&gt;
::::@[[User:Aidan9382|Aidan9382]] I&#039;m happy to fix those latter cases too going forward, point me in the right direction 😄 &amp;lt;span class=&amp;quot;fn nickname&amp;quot; style=&amp;quot;color:#CD0000&amp;quot;&amp;gt;[[User:Waddie96|waddie96]] ★ ([[User talk:Waddie96|talk]])&amp;lt;/span&amp;gt; 05:46, 27 September 2025 (UTC)&lt;br /&gt;
:::::Some comments:&lt;br /&gt;
:::::* The point is that there is no way to &amp;quot;fix&amp;quot; this, because nothing&#039;s broken. At the end of the day, you are trying to optimise 14 equality checks. Infact, the time it takes to require this module &#039;&#039;after it&#039;s been cached&#039;&#039; is longer than an average-case use of the if-else chain function. Even if this would technically improve the performance to the degree of nanoseconds on a bunch of pages (which isn&#039;t guaranteed per below), that is the wrong place to be looking for optimisations as a wikipedia editor. The focus should be on pages that spend a significant amount of time (upwards of multiple seconds) on lua evaluation, since that&#039;s when it can start to disrupt editing and reading, which is what we care about.&lt;br /&gt;
:::::* {{tq|Speedup per call: 71%}} is &#039;&#039;best case&#039;&#039; scenario, and as I&#039;ve described above, is not always the case. Let&#039;s say you have a page that has &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{T1|param=yes}}{{T2|param=no}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; on it, and that each of these template calls eventually call into this module to check the value of &amp;lt;code&amp;gt;param&amp;lt;/code&amp;gt;. Since both will create seperate lua states, both have to complete the initial uncached require on this module. That time increases significantly when adding a table creation, to the point where this specific setup would have Yesno spending ~2x more time executing than the current version.&lt;br /&gt;
:::::* The idea of {{tq|Every single page view that uses this module gets the speedup}} is incorrect - the evaluated state of pages are cached, and the majority of views will not cause a reevaluation, so the scale that you suggest this improvement is running at isn&#039;t accurate. Also, {{tq|Every template expansion gets the speedup}} is essentially the prior two points reiterated.&lt;br /&gt;
:::::[[User:Aidan9382|Aidan9382]] &amp;lt;sub&amp;gt;([[User talk:Aidan9382|talk]])&amp;lt;/sub&amp;gt; 12:21, 27 September 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
{{notelist-talk}}&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Module:Yesno/doc&amp;diff=355</id>
		<title>Module:Yesno/doc</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Module:Yesno/doc&amp;diff=355"/>
		<updated>2025-12-11T06:08:59Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{pp|small=yes}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;{{used in system}}&lt;br /&gt;
{{Module rating|protected}}&lt;br /&gt;
{{cascade-protected template|page=module}}&lt;br /&gt;
This module provides a consistent interface for processing boolean or boolean-style string input. While Lua allows the &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; boolean values, wikicode templates can only express boolean values through strings such as &amp;quot;yes&amp;quot;, &amp;quot;no&amp;quot;, etc. This module processes these kinds of strings and turns them into boolean input for Lua to process. It also returns &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; values as &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;, to allow for distinctions between &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;. The module also accepts other Lua structures as input, i.e. booleans, numbers, tables, and functions. If it is passed input that it does not recognise as boolean or &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;, it is possible to specify a default value to return.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;yesno(value, default)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is the value to be tested. Boolean input or boolean-style input (see below) always evaluates to either &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; always evaluates to &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;. Other values evaluate to &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
First, load the module. Note that it can only be loaded from other Lua modules, not from normal wiki pages. For normal wiki pages you can use {{tl|yesno}} instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some input values always return &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;, and some always return &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; values always return &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- These always return true:&lt;br /&gt;
yesno(&#039;yes&#039;)&lt;br /&gt;
yesno(&#039;y&#039;)&lt;br /&gt;
yesno(&#039;true&#039;)&lt;br /&gt;
yesno(&#039;t&#039;)&lt;br /&gt;
yesno(&#039;on&#039;)&lt;br /&gt;
yesno(&#039;1&#039;)&lt;br /&gt;
yesno(1)&lt;br /&gt;
yesno(true)&lt;br /&gt;
&lt;br /&gt;
-- These always return false:&lt;br /&gt;
yesno(&#039;no&#039;)&lt;br /&gt;
yesno(&#039;n&#039;)&lt;br /&gt;
yesno(&#039;false&#039;)&lt;br /&gt;
yesno(&#039;f&#039;)&lt;br /&gt;
yesno(&#039;off&#039;)&lt;br /&gt;
yesno(&#039;0&#039;)&lt;br /&gt;
yesno(0)&lt;br /&gt;
yesno(false)&lt;br /&gt;
&lt;br /&gt;
-- A nil value always returns nil:&lt;br /&gt;
yesno(nil)&lt;br /&gt;
yesno()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
String values are converted to lower case before they are matched:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- These always return true:&lt;br /&gt;
yesno(&#039;Yes&#039;)&lt;br /&gt;
yesno(&#039;YES&#039;)&lt;br /&gt;
yesno(&#039;yEs&#039;)&lt;br /&gt;
yesno(&#039;Y&#039;)&lt;br /&gt;
yesno(&#039;tRuE&#039;)&lt;br /&gt;
&lt;br /&gt;
-- These always return false:&lt;br /&gt;
yesno(&#039;No&#039;)&lt;br /&gt;
yesno(&#039;NO&#039;)&lt;br /&gt;
yesno(&#039;nO&#039;)&lt;br /&gt;
yesno(&#039;N&#039;)&lt;br /&gt;
yesno(&#039;fALsE&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Undefined input (&#039;foo&#039;)===&lt;br /&gt;
You can specify a default value if yesno receives input other than that listed above. If you don&#039;t supply a default, the module will return &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; for these inputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- These return nil:&lt;br /&gt;
yesno(nil)&lt;br /&gt;
yesno(&#039;foo&#039;)&lt;br /&gt;
yesno({})&lt;br /&gt;
yesno(5)&lt;br /&gt;
yesno(&#039;&#039;)&lt;br /&gt;
yesno(function() return &#039;This is a function.&#039; end)&lt;br /&gt;
yesno(nil, true)&lt;br /&gt;
yesno(nil, &#039;bar&#039;)&lt;br /&gt;
&lt;br /&gt;
-- These return true:&lt;br /&gt;
yesno(&#039;foo&#039;, true)&lt;br /&gt;
yesno({}, true)&lt;br /&gt;
yesno(5, true)&lt;br /&gt;
yesno(&#039;&#039;, true)&lt;br /&gt;
yesno(function() return &#039;This is a function.&#039; end, true)&lt;br /&gt;
&lt;br /&gt;
-- These return &amp;quot;bar&amp;quot;:&lt;br /&gt;
yesno(&#039;foo&#039;, &#039;bar&#039;)&lt;br /&gt;
yesno({}, &#039;bar&#039;)&lt;br /&gt;
yesno(5, &#039;bar&#039;)&lt;br /&gt;
yesno(&#039;&#039;, &#039;bar&#039;)&lt;br /&gt;
yesno(function() return &#039;This is a function.&#039; end, &#039;bar&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Although the empty string usually evaluates to false in wikitext, it evaluates to true in Lua. This module prefers the Lua behaviour over the wikitext behaviour. If treating the empty string as false is important for your module, you will need to convert empty strings to a value that evaluates to false before passing them to this module. In the case of arguments received from wikitext, this can be done by using [[Module:Arguments]].&lt;br /&gt;
&lt;br /&gt;
===Handling nil results===&lt;br /&gt;
By definition:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
yesno(nil)         -- Returns nil.&lt;br /&gt;
yesno(&#039;foo&#039;)       -- Returns nil.&lt;br /&gt;
yesno(nil, true)   -- Returns nil.&lt;br /&gt;
yesno(nil, false)  -- Returns nil.&lt;br /&gt;
yesno(&#039;foo&#039;, true) -- Returns true.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the binary &amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; inline&amp;gt;true/false&amp;lt;/syntaxhighlight&amp;gt;-only values, use code like:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
myvariable = yesno(value or false) -- When value is nil, result is false.&lt;br /&gt;
myvariable = yesno(value or true)  -- When value is nil, result is true. (XXX: when value is false, result is true...)&lt;br /&gt;
myvariable = yesno(&#039;foo&#039;) or false  -- Unknown string returns nil, result is false.&lt;br /&gt;
myvariable = yesno(&#039;foo&#039;, true) or false  -- Default value (here: true) applies, result is true.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Better suggestions:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local myvariable = yesno(value)&lt;br /&gt;
if myvariable == nil then -- value is nil or an unrecognized string&lt;br /&gt;
    myvariable = true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- more efficient when value is nil, but more verbose&lt;br /&gt;
-- (note the default result has to be written twice)&lt;br /&gt;
local myvariable&lt;br /&gt;
if value == nil then&lt;br /&gt;
    myvariable = true&lt;br /&gt;
else&lt;br /&gt;
    myvariable = yesno(value, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Terse coding when the default is false:&lt;br /&gt;
myvariable = yesno(value or false, false)&lt;br /&gt;
-- if value is nil, yesno() is called with false instead; result is false.&lt;br /&gt;
-- If value is &#039;foo&#039;, yesno() is called with &#039;foo&#039;; &#039;foo&#039; makes no sense, so the default (false) is returned.&lt;br /&gt;
-- if value is &#039;yes&#039; or &#039;no&#039;, yesno() is called with &#039;yes&#039; or &#039;no&#039;; result is true or false.&lt;br /&gt;
&lt;br /&gt;
-- Terse coding when the default is true:&lt;br /&gt;
myvariable = yesno(value or true, true)&lt;br /&gt;
-- if value is nil, yesno() is called with true instead; result is true.&lt;br /&gt;
-- If value is &#039;foo&#039;, yesno() is called with &#039;foo&#039;; &#039;foo&#039; makes no sense, so the default (true) is returned.&lt;br /&gt;
-- if value is &#039;yes&#039; or &#039;no&#039;, yesno() is called with &#039;yes&#039; or &#039;no&#039;; result is true or false.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;includeonly&amp;gt;{{sandbox other||&lt;br /&gt;
[[Category:Lua metamodules]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Module documentation pages]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Module:Transclusion_count/data/Y&amp;diff=353</id>
		<title>Module:Transclusion count/data/Y</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Module:Transclusion_count/data/Y&amp;diff=353"/>
		<updated>2025-12-11T06:08:59Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
[&amp;quot;Y&amp;quot;] = 7200,&lt;br /&gt;
[&amp;quot;YEAR&amp;quot;] = 104000,&lt;br /&gt;
[&amp;quot;YUG&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;YYYY_crimes_in_countryname_category_header&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;YYYY_crimes_in_countryname_category_header/inner_core&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;YYYY_crimes_in_countryname_category_header/outer_core&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;YYYY_disasters_in_countryname_category_header&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;YYYY_disasters_in_countryname_category_header/inner_core&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;YYYY_disasters_in_countryname_category_header/outer_core&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;YYYY_elections_in_countryname_category_header&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;YYYY_elections_in_countryname_category_header/inner_core&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;YYYY_elections_in_countryname_category_header/outer_core&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;YYYY_foos_category_header&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;YYYY_foos_category_header/core&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;YYYY_in_nationality_sport_category_header&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;YYYY_in_nationality_sport_category_header/inner_core&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;YYYY_in_nationality_sport_category_header/outer_core&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;YYYY_in_nationality_women&#039;s_sport_category_header&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;YYYY_in_nationality_women&#039;s_sport_category_header/core&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;YYYY_in_sport_category_header&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;YYYY_in_sport_category_header/inner_core&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;YYYY_in_sport_category_header/outer_core&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;Ya&amp;quot;] = 4600,&lt;br /&gt;
[&amp;quot;Year&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;Year2range&amp;quot;] = 7700,&lt;br /&gt;
[&amp;quot;YearInCountryPortalBox&amp;quot;] = 51000,&lt;br /&gt;
[&amp;quot;Year_article&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Year_births_or_deaths_category_header&amp;quot;] = 4500,&lt;br /&gt;
[&amp;quot;Year_births_or_deaths_category_header/core&amp;quot;] = 4500,&lt;br /&gt;
[&amp;quot;Year_category_header&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Year_category_header/core&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Year_category_name&amp;quot;] = 7000,&lt;br /&gt;
[&amp;quot;Year_category_name/AD_year&amp;quot;] = 6400,&lt;br /&gt;
[&amp;quot;Year_in_Europe&amp;quot;] = 6000,&lt;br /&gt;
[&amp;quot;Year_in_Europe/expr&amp;quot;] = 6000,&lt;br /&gt;
[&amp;quot;Year_in_US_state_category&amp;quot;] = 9500,&lt;br /&gt;
[&amp;quot;Year_in_US_state_category/core&amp;quot;] = 9500,&lt;br /&gt;
[&amp;quot;Year_in_continent/expr&amp;quot;] = 8900,&lt;br /&gt;
[&amp;quot;Year_in_continent/link&amp;quot;] = 8900,&lt;br /&gt;
[&amp;quot;Year_in_continent_category&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Year_in_continent_category/core&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Year_in_country_by_month&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Year_in_country_by_month/core&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Year_in_country_category&amp;quot;] = 38000,&lt;br /&gt;
[&amp;quot;Year_in_country_category/inner_core&amp;quot;] = 38000,&lt;br /&gt;
[&amp;quot;Year_in_country_category/outer_core&amp;quot;] = 38000,&lt;br /&gt;
[&amp;quot;Year_in_country_portal_box&amp;quot;] = 91000,&lt;br /&gt;
[&amp;quot;Year_in_country_portal_box/make&amp;quot;] = 91000,&lt;br /&gt;
[&amp;quot;Year_in_country_portal_box/parse&amp;quot;] = 91000,&lt;br /&gt;
[&amp;quot;Year_in_football&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Year_in_nationality_television_category&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Year_in_nationality_television_category/core&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Year_in_region&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Year_in_region/link&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Year_in_various_calendars&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Year_nationality_television_series_debuts_or_endings_category&amp;quot;] = 5000,&lt;br /&gt;
[&amp;quot;Year_nationality_television_series_debuts_or_endings_category/core&amp;quot;] = 5000,&lt;br /&gt;
[&amp;quot;Year_nav&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Year_nav_topic5&amp;quot;] = 6100,&lt;br /&gt;
[&amp;quot;Year_topic_navigation&amp;quot;] = 7200,&lt;br /&gt;
[&amp;quot;Yearly_archive_list&amp;quot;] = 820000,&lt;br /&gt;
[&amp;quot;Yearly_archive_list/display&amp;quot;] = 820000,&lt;br /&gt;
[&amp;quot;Years_or_months_ago&amp;quot;] = 104000,&lt;br /&gt;
[&amp;quot;Yel&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Yellow_card&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Yes&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Yes2&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;YesNo&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;YesNo-Yes&amp;quot;] = 57000,&lt;br /&gt;
[&amp;quot;Yesno&amp;quot;] = 9850000,&lt;br /&gt;
[&amp;quot;Yesno-no&amp;quot;] = 2130000,&lt;br /&gt;
[&amp;quot;Yesno-yes&amp;quot;] = 671000,&lt;br /&gt;
[&amp;quot;Yo&amp;quot;] = 24000,&lt;br /&gt;
[&amp;quot;You&#039;ve_got_mail&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;YouTube&amp;quot;] = 72000,&lt;br /&gt;
[&amp;quot;Youtube&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Yy&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Yycat&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Yyend&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Yytop&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Module:Year_category_type&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Module:Year_in_various_calendars&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Module:Yesno&amp;quot;] = 32100000,&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Category_link/core&amp;diff=351</id>
		<title>Template:Category link/core</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Category_link/core&amp;diff=351"/>
		<updated>2025-12-11T06:08:59Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[:Category:{{{1}}}|{{{2}}}]]{{#if:{{Yesno|1={{{count|no}}}}}|&amp;amp;nbsp;&amp;lt;small style=&amp;quot;{{#ifexpr:{{{page_count}}}&amp;gt;={{{backlog}}}|font-weight: bold; color: #DD0000;}}&amp;quot;&amp;gt;(&amp;amp;thinsp;{{formatnum:{{{page_count}}}}}&amp;amp;thinsp;)&amp;lt;/small&amp;gt;}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation|Template:Category link/doc}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Category_link_without_namespace&amp;diff=349</id>
		<title>Template:Category link without namespace</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Category_link_without_namespace&amp;diff=349"/>
		<updated>2025-12-11T06:08:59Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[:Category:{{PAGENAME:{{{1}}}}}|{{{2|{{PAGENAME:{{{1}}}}}}}}]]&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Template_link_bare&amp;diff=347</id>
		<title>Template:Template link bare</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Template_link_bare&amp;diff=347"/>
		<updated>2025-12-11T06:08:59Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#if:{{str endswith|{{{1}}}|%}} &amp;lt;!--(i.e. if {{{1}}} is a percentage)--&amp;gt;&lt;br /&gt;
 | [[Template:{{{2}}}|&amp;lt;span style=&amp;quot;font-size:{{{1}}};&amp;quot;&amp;gt;{{{3|{{{2}}}}}}&amp;lt;/span&amp;gt;]]&lt;br /&gt;
 | [[Template:{{{1}}}|{{{2|{{{1}}}}}}]]&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Module:Formatnum/doc&amp;diff=345</id>
		<title>Module:Formatnum/doc</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Module:Formatnum/doc&amp;diff=345"/>
		<updated>2025-12-11T06:08:59Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This module provides a number formatting function. This function can be used from #invoke or from other Lua modules.&lt;br /&gt;
&lt;br /&gt;
This module is used by [[Module:Complex date]]&lt;br /&gt;
&lt;br /&gt;
== Use from other Lua modules ==&lt;br /&gt;
To use the module from normal wiki pages, no special preparation is needed. If you are using the module from another Lua module, first you need to load it, like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local mf = require(&#039;Module:Formatnum&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(The &amp;lt;code&amp;gt;mf&amp;lt;/code&amp;gt; variable stands for &#039;&#039;&#039;M&#039;&#039;&#039;odule &#039;&#039;&#039;F&#039;&#039;&#039;ormatnum; you can choose something more descriptive if you prefer.)&lt;br /&gt;
&lt;br /&gt;
Most functions in the module have a version for Lua and a version for #invoke. It is possible to use the #invoke functions from other Lua modules, but using the Lua functions has the advantage that you do not need to access a Lua [[mw:Extension:Scribunto/Lua reference manual#Frame object|frame object]]. Lua functions are preceded by &amp;lt;code&amp;gt;_&amp;lt;/code&amp;gt;, whereas #invoke functions are not.&lt;br /&gt;
&lt;br /&gt;
== main ==&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;#123;{#invoke:Formatnum|main|&#039;&#039;x&#039;&#039;|&#039;&#039;lang=&#039;&#039;|&#039;&#039;prec=&#039;&#039;|&#039;&#039;sep=&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
mf.formatNum(x, lang, prec, sep)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
{{Math templates}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{#ifeq:{{SUBPAGENAME}}|sandbox | |&lt;br /&gt;
&amp;lt;!-- Categories below this line, please; interwikis at Wikidata --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Module documentation pages]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Tlbare&amp;diff=343</id>
		<title>Template:Tlbare</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Tlbare&amp;diff=343"/>
		<updated>2025-12-11T06:08:59Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Template:Template link bare]]&lt;br /&gt;
&lt;br /&gt;
{{Redirect category shell|&lt;br /&gt;
{{R from move}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Math_templates&amp;diff=341</id>
		<title>Template:Math templates</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Math_templates&amp;diff=341"/>
		<updated>2025-12-11T06:08:59Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- This template uses British English. --&amp;gt;&lt;br /&gt;
{{Navbox with collapsible groups&lt;br /&gt;
| name = Math templates&lt;br /&gt;
| state = {{{state|expanded}}}&lt;br /&gt;
| bodyclass = hlist&lt;br /&gt;
| title = Math templates&lt;br /&gt;
| liststyle = font-size:110%;&amp;lt;!--(as some templates&#039; descriptions include links)--&amp;gt;&lt;br /&gt;
| selected = {{{selected|{{{expanded|{{{1|}}}}}}}}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-------------- Functions / Numeral systems --------------&amp;gt;&lt;br /&gt;
| abbr1 = FN&lt;br /&gt;
| group1 =&lt;br /&gt;
*Functions&lt;br /&gt;
*Numeral systems&lt;br /&gt;
| state1 = &amp;lt;noinclude&amp;gt;expanded&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| list1 =&lt;br /&gt;
 {{Navbox |child&lt;br /&gt;
  | group1 = Functions&lt;br /&gt;
  | list1 =&lt;br /&gt;
*{{tlbare|elementary arithmetic}}&lt;br /&gt;
*{{tlbare|precision}}&lt;br /&gt;
*{{tlbare|val}}&amp;amp;nbsp;(value formatting)&lt;br /&gt;
*{{tlbare|percentage}}&lt;br /&gt;
  | group2 = Numeral systems&lt;br /&gt;
  | list2 =&lt;br /&gt;
*{{ml|BaseConvert|&#039;&#039;X&#039;&#039;to&#039;&#039;Y&#039;&#039;}}&lt;br /&gt;
*{{tlbare|binary}}&lt;br /&gt;
*{{tlbare|decimal2Base}}&lt;br /&gt;
*{{tlbare|hex2dec}}&lt;br /&gt;
*{{tlbare|hexadecimal}}&lt;br /&gt;
*{{tlbare|octal}}&lt;br /&gt;
*{{tlbare|quaternary}}&lt;br /&gt;
*{{tlbare|rn}}&lt;br /&gt;
*{{tlbare|roman}}&lt;br /&gt;
*{{tlbare|ternary}}&lt;br /&gt;
*{{tlbare|vigesimal}}&lt;br /&gt;
 }}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!---------------------- Conversions ----------------------&amp;gt;&lt;br /&gt;
| abbr2 = conversions&lt;br /&gt;
| group2 = Conversions&lt;br /&gt;
| state2 = &amp;lt;noinclude&amp;gt;expanded&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| list2 =&lt;br /&gt;
 {{Aligned table&lt;br /&gt;
  |style=margin:0 auto 0;text-align:left;&lt;br /&gt;
  | {{Aligned table&lt;br /&gt;
     |style=padding-right:2.5em;&lt;br /&gt;
     |col1style=text-align:right;white-space:nowrap;padding-right:1.0em;&lt;br /&gt;
     |col2style=font-size:90%;&amp;lt;!--(see liststyle above)--&amp;gt; vertical-align:middle;line-height:1.3em;font-style:italic;&lt;br /&gt;
     | {{tlbare|convert}}       | many units (see: [[Template:Convert/list_of_units |list]])&lt;br /&gt;
     | {{tlbare|cvt}}           | abbreviated {{tl|convert}}&lt;br /&gt;
     | {{tlbare|convinfobox}}   | {{tl|convert}} for infoboxes&lt;br /&gt;
     | {{tlbare|bbl to t}}      | barrels of oil to tonnes&lt;br /&gt;
     | {{tlbare|long ton}}      | long hundredweights, quarters and pounds to kilograms;&amp;lt;br/&amp;gt;long tons and hundredweights to pounds and metric tons&lt;br /&gt;
     | {{tlbare|miles-chains}}  | miles and chains to kilometres linking &amp;quot;chains&amp;quot;&lt;br /&gt;
   }}&lt;br /&gt;
  | {{Aligned table&lt;br /&gt;
     |col1style=text-align:right;white-space:nowrap;padding-right:1.0em;&lt;br /&gt;
     |col2style=font-size:90%;&amp;lt;!--(as above)--&amp;gt; vertical-align:middle;line-height:1.3em;font-style:italic;&lt;br /&gt;
     | {{tlbare|decdeg}}          | degrees, minutes, and seconds to [[decimal degrees]]&lt;br /&gt;
     | {{tlbare|deg2DMS|deg2dms}} | decimal degrees to degrees, minutes, and seconds&lt;br /&gt;
     | {{tlbare|deg2HMS|deg2hms}} | decimal degrees to [[hour angle]] (in hours, minutes, and seconds)&lt;br /&gt;
     | {{tlbare|HMS2Deg|hms2deg}} | [[hour angle]] (in hours, minutes, and seconds) to decimal degrees&lt;br /&gt;
     | {{tlbare|inflation}}       | calculate inflation of Consumer Price Index-related prices&lt;br /&gt;
     | {{tlbare|pop density}}     | population density in an area&lt;br /&gt;
     | {{tlbare|track gauge}}     | railway track gauges&lt;br /&gt;
    }}&lt;br /&gt;
 }}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!----------------------- Notation &amp;amp; formatting ------------------------&amp;gt;&lt;br /&gt;
| group3 = Notation and {{Category link|Mathematical formatting templates|formatting}}&lt;br /&gt;
| abbr3 = notation&lt;br /&gt;
| state3 = &amp;lt;noinclude&amp;gt;expanded&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| list3 =&lt;br /&gt;
{{Aligned table&lt;br /&gt;
  |style=margin:0 auto 0;text-align:left;&lt;br /&gt;
  |cols=4&lt;br /&gt;
  |col1style=text-align:right;white-space:nowrap;padding-right:1.0em;&lt;br /&gt;
  |col2style=font-size:90%;&amp;lt;!--(as above)--&amp;gt; vertical-align:top;line-height:1.3em;font-style:italic;padding-right:2.5em;&lt;br /&gt;
  |col3style=text-align:right;white-space:nowrap;padding-right:1.0em;&lt;br /&gt;
  |col4style=font-size:90%;&amp;lt;!--(as above)--&amp;gt; vertical-align:top;line-height:1.3em;font-style:italic;&lt;br /&gt;
  |row1style=border-bottom:1px solid #777;&lt;br /&gt;
  |row4style=border-bottom:1px solid #777;&lt;br /&gt;
  |row7style=border-bottom:1px solid #777;&lt;br /&gt;
  |row10style=border-bottom:1px solid #777;&lt;br /&gt;
  &amp;lt;!-- This is a bit awkward to sort. Basically within a group of size 8 we go in the order of 1|1|5|5|2|2|6|6|3|3|7|7|4|4|8|8 --&amp;gt;&lt;br /&gt;
  &amp;lt;!-- Group 1. The essential texhtml --&amp;gt;&lt;br /&gt;
  | {{tlbare|bigmath}} | bigger font to match {{noitalic|[[TeX]]}} {{noitalic|&amp;lt;samp&amp;gt;&amp;lt;nowiki&amp;gt;\&amp;lt;/nowiki&amp;gt;displaystyle&amp;lt;/samp&amp;gt;}} (standalone formulas only)&lt;br /&gt;
  | {{tlbare|math}}    | short text-based formulas&lt;br /&gt;
  &amp;lt;!-- Group 2. Other inline typographical --&amp;gt;&lt;br /&gt;
  | {{tlbare|mathcal}} | [mathematical] calligraphic font; alternative to {{noitalic|[[LaTeX]]}}  {{noitalic|&amp;lt;samp&amp;gt;&amp;lt;nowiki&amp;gt;\&amp;lt;/nowiki&amp;gt;mathcal{...}&amp;lt;/samp&amp;gt;}}&lt;br /&gt;
  | {{tlbare|tombstone}} | symbol indicating the [[Tombstone (typography)|end of a proof]]&lt;br /&gt;
  &amp;lt;!-- Row --&amp;gt;&lt;br /&gt;
  | {{tlbare|mvar}}    | individual italicized maths variables in normal text&lt;br /&gt;
  | {{tlbare|val}}     | measurement values, uncertainties and units&lt;br /&gt;
  &amp;lt;!-- Row --&amp;gt;&lt;br /&gt;
  | &lt;br /&gt;
*{{tlbare|overline}}&lt;br /&gt;
*{{tlbare|underline}} | a line set above/below a sequence of characters&lt;br /&gt;
  | {{tlbare|vec}}     | various overarrows, underarrows, etc.&amp;lt;!--pointing left, right or both ways--&amp;gt;&lt;br /&gt;
  &amp;lt;!-- Row --&lt;br /&gt;
  | {{tlbare|overarc}} | an arc set above a sequence of characters&lt;br /&gt;
  | &amp;amp;nbsp; | &amp;amp;nbsp;&lt;br /&gt;
  |row5style=border-bottom:1px solid #333;&lt;br /&gt;
  &amp;lt;!-- Group 3. The deliminators --&amp;gt;&lt;br /&gt;
  | {{tlbare|abs}}     | absolute values (paired vertical lines)&lt;br /&gt;
  | &lt;br /&gt;
*{{tlbare|langle}}&lt;br /&gt;
*{{tlbare|rangle}}&lt;br /&gt;
*{{tlbare|Angle bracket|angbr}} | [[Bracket#Angular brackets|angular bracket]]s&lt;br /&gt;
  &amp;lt;!-- Row --&amp;gt;&lt;br /&gt;
  | &lt;br /&gt;
*{{tlbare|bra-ket}}&lt;br /&gt;
*{{tlbare|braket}}&lt;br /&gt;
*{{tlbare|bra}}&lt;br /&gt;
*{{tlbare|ket}} | [[bra–ket notation]]&lt;br /&gt;
  | &lt;br /&gt;
*{{tlbare|ldelim}}&lt;br /&gt;
*{{tlbare|rdelim}} | multiline delimiters (2–5 lines inclusive) &lt;br /&gt;
  &amp;lt;!-- Row --&amp;gt;&lt;br /&gt;
  | {{tlbare|ceil}}, {{tlbare|floor}}  | calculations [[:mw:Help:Extension:ParserFunctions##expr|:mw:Help:#expr]]; formatting indicators {{noitalic|1={{ceil|3.14}}&amp;lt;!-- --&amp;gt;}}, {{noitalic|1={{floor|3.14}}&amp;lt;!-- --&amp;gt;}} (no calculation performed)&lt;br /&gt;
  | {{tlbare|pars}}    | parentheses that can be resized {{noitalic|1={{math|{{pars|s=150|{{large|∑}}&amp;lt;!-- --&amp;gt;}}&amp;lt;!-- --&amp;gt;}}&amp;lt;!-- --&amp;gt;}}&lt;br /&gt;
  &amp;lt;!-- Group 4. The taller-than-one-line (composites, etc) --&amp;gt;&lt;br /&gt;
  &amp;lt;!-- Row --&amp;gt;&lt;br /&gt;
  | {{tlbare|fraction}}    | slant fractions {{frac|3|5}}  (not for maths/science articles; use &#039;&#039;standing&#039;&#039; or upright fractions {{noitalic|{{tlx|sfrac}}&amp;lt;!-- --&amp;gt;}} instead)&lt;br /&gt;
  | {{tlbare|sfrac}}   | &amp;quot;standing&amp;quot; or upright fractions {{sfrac|3|5}} (use in maths/science articles instead of{{noitalic|{{tlx|fraction}}&amp;lt;!-- --&amp;gt;}})&lt;br /&gt;
  &amp;lt;!-- Row --&amp;gt;&lt;br /&gt;
  | {{tlbare|intmath}} | [[integral symbol]]s&lt;br /&gt;
  | &lt;br /&gt;
*{{tlbare|sub}}&lt;br /&gt;
*{{tlbare|sup}}&lt;br /&gt;
*{{tlbare|su}} | subscripts and superscripts&lt;br /&gt;
  &amp;lt;!-- Row --&amp;gt;&lt;br /&gt;
  | &lt;br /&gt;
*{{tlbare|overset}}&lt;br /&gt;
*{{tlbare|underset}} | arbitrary characters/diacritics set above/below one another&lt;br /&gt;
  | &amp;amp;nbsp; | &amp;amp;nbsp;&lt;br /&gt;
  |row13style=border-bottom:1px solid #333;&lt;br /&gt;
  &amp;lt;!-- Group 5. For interfacing with &amp;lt;math&amp;gt;, not the texhtml stuff --&amp;gt;&lt;br /&gt;
| {{tlbare|tmath}}&lt;br /&gt;
  | Wrap {{noitalic|[[TeX]]}} in {{noitalic|&amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;&amp;lt;/nowiki&amp;gt;}} tags&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;!---------------- Boxes / Tags / Notices -----------------&amp;gt;&lt;br /&gt;
| abbr4 = BTN&lt;br /&gt;
| group4 =&lt;br /&gt;
*Boxes&lt;br /&gt;
*Tags&lt;br /&gt;
*Notices&lt;br /&gt;
| state4 = &amp;lt;noinclude&amp;gt;expanded&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| list4 =&lt;br /&gt;
 {{Navbox with columns |child&lt;br /&gt;
  |colstyle=text-align:center;&lt;br /&gt;
  | col1header = Boxes&lt;br /&gt;
  | col1 =&lt;br /&gt;
*{{tlbare|arithmetic operations}}&lt;br /&gt;
*{{tlbare|calculus}}&lt;br /&gt;
*{{tlbare|Infobox mathematical function}}&lt;br /&gt;
*{{tlbare|functions}}&lt;br /&gt;
  | col2header = Tags&lt;br /&gt;
  | col2 =&lt;br /&gt;
*{{tlbare|metricate}}&lt;br /&gt;
*{{tlbare|undue precision}}&lt;br /&gt;
*{{tlbare|units attention}}&lt;br /&gt;
 }}&lt;br /&gt;
&lt;br /&gt;
| below =&lt;br /&gt;
*{{icon|Category}} {{c|Mathematics templates|Category}}&lt;br /&gt;
*[[:Module:Math]]&lt;br /&gt;
&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Ceil&amp;diff=339</id>
		<title>Template:Ceil</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Ceil&amp;diff=339"/>
		<updated>2025-12-11T06:08:59Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&amp;lt;span style=&amp;quot;font-size: {{{2|1em}}}&amp;quot;&amp;gt;&amp;amp;lceil;&amp;lt;/span&amp;gt;{{{1}}}&amp;lt;span style=&amp;quot;font-size: {{{2|1em}}}&amp;quot;&amp;gt;&amp;amp;rceil;&amp;lt;/span&amp;gt;&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Pars&amp;diff=337</id>
		<title>Template:Pars</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Pars&amp;diff=337"/>
		<updated>2025-12-11T06:08:59Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{&lt;br /&gt;
  #if: {{{2|}}}&lt;br /&gt;
     |{{font | size={{{2}}} | text=(}}&amp;lt;span class=&amp;quot;nowrap&amp;quot; style=&amp;quot;padding-left:0.1em; padding-right:0.1em;&amp;quot;&amp;gt;{{{1|&amp;amp;nbsp;&amp;amp;nbsp;}}}&amp;lt;/span&amp;gt;{{font | size={{{2}}} | text=)}}|{{#if: {{{s|}}}&lt;br /&gt;
           |{{font | size={{{s}}} | text=(}}|(}}{{&lt;br /&gt;
                #if: {{{1|}}}&lt;br /&gt;
                   |&amp;lt;span class=&amp;quot;nowrap&amp;quot; style=&amp;quot;padding-left:0.1em; padding-right:0.1em;&amp;quot;&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;|&amp;amp;nbsp;&amp;amp;nbsp;}}{{&lt;br /&gt;
                #if: {{{s|}}}&lt;br /&gt;
                   |{{font | size={{{s}}} | text=)}}|)}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!------- &lt;br /&gt;
&lt;br /&gt;
Below, we add spacing to the above code to make it more readable: &lt;br /&gt;
&lt;br /&gt;
-------&amp;gt;&lt;br /&gt;
{{#if: {{{2|}}}  |   &amp;lt;!--- Start case where 2 is defined ---&amp;gt;&lt;br /&gt;
{{font | {{{2}}} | text=(}}&amp;lt;span class=&amp;quot;nowrap&amp;quot; style=&amp;quot;padding-left:0.1em; padding-right:0.1em;&amp;quot;&amp;gt;{{{1|&amp;amp;nbsp;&amp;amp;nbsp;}}}&amp;lt;/span&amp;gt;{{font | {{{2}}} | text=)}}      &amp;lt;!--- End case where 2 is defined --&amp;gt;&lt;br /&gt;
|                  &amp;lt;!-- Start case where 2 is NOT defined --&amp;gt;&lt;br /&gt;
{{#if: {{{s|}}} |{{font | size={{{s}}} | text=(}}|(}} &amp;lt;!--- If s is defined then font ( otherwise, print a normal ( ---&amp;gt;&lt;br /&gt;
{{#if: {{{1|}}} |   &amp;lt;!--- Start case where 1 is defined ---&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;nowrap&amp;quot; style=&amp;quot;padding-left:0.1em; padding-right:0.1em;&amp;quot;&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
|                  &amp;lt;!--- Start case where 1 is NOT defined ---&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;}}&lt;br /&gt;
{{#if: {{{s|}}} |{{font | size={{{s}}} | text=)}}|)}} &amp;lt;!--- If s is defined then font ) otherwise, else print a normal ) ---&amp;gt;&lt;br /&gt;
}}&amp;lt;!--- End the if statement: {{#if: {{{2|}}} | ...  ---&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Floor&amp;diff=335</id>
		<title>Template:Floor</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Floor&amp;diff=335"/>
		<updated>2025-12-11T06:08:58Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;font-size:{{{2|1em}}}&amp;quot;&amp;gt;⌊&amp;lt;/span&amp;gt;{{{1}}}&amp;lt;span style=&amp;quot;font-size:{{{2|1em}}}&amp;quot;&amp;gt;⌋&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;{{Documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Font&amp;diff=333</id>
		<title>Template:Font</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Font&amp;diff=333"/>
		<updated>2025-12-11T06:08:58Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;span style=&amp;quot;{{ {{{|safesubst:}}}#if: {{{font|}}} |font-family:{{{font}}};}}{{ {{{|safesubst:}}}#if: {{{size|}}} |font-size:{{{size}}};}}{{ {{{|safesubst:}}}#if: {{{color|}}} |color:{{{color}}};}}{{ {{{|safesubst:}}}#if: {{{bgcolor|}}} |background-color:{{{bgcolor}}};}}{{ {{{|safesubst:}}}#if: {{{css|}}} |{{{css}}}}}&amp;quot;&amp;gt;{{ {{{|safesubst:}}}#if: {{{1|}}} |{{{1}}}|{{{text}}}}}&amp;lt;/span&amp;gt;&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;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Large&amp;diff=331</id>
		<title>Template:Large</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Large&amp;diff=331"/>
		<updated>2025-12-11T06:08:58Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;font-size:120%&amp;quot;&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Category_link&amp;diff=329</id>
		<title>Template:Category link</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Category_link&amp;diff=329"/>
		<updated>2025-12-11T06:08:58Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Category link/core|1={{PAGENAME:{{{1}}}}}|2={{{2|Category:{{PAGENAME:{{{1}}}}}}}}|count={{{count|no}}}|page_count={{PAGESINCAT:{{PAGENAME:{{{1}}}}}|{{UC:{{{count_type|ALL}}}}}|R}}|backlog={{{backlog|{{formatnum:{{NUMBEROFPAGES}}|R}}}}}}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Module:Aligned_table&amp;diff=327</id>
		<title>Module:Aligned table</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Module:Aligned_table&amp;diff=327"/>
		<updated>2025-12-11T06:08:58Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements {{aligned table}}&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function isnotempty(s)&lt;br /&gt;
	return s and s:match( &#039;^%s*(.-)%s*$&#039; ) ~= &#039;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.table(frame)&lt;br /&gt;
	local args = (frame.args[3] ~= nil) and frame.args or frame:getParent().args&lt;br /&gt;
	local entries = {}&lt;br /&gt;
	local colclass = {}&lt;br /&gt;
	local colstyle = {}&lt;br /&gt;
	local cols = tonumber(args[&#039;cols&#039;]) or 2&lt;br /&gt;
&lt;br /&gt;
	-- create the root table&lt;br /&gt;
	local root = mw.html.create(&#039;table&#039;)&lt;br /&gt;
&lt;br /&gt;
	-- add table style for fullwidth&lt;br /&gt;
	if isnotempty(args[&#039;fullwidth&#039;]) then&lt;br /&gt;
		root&lt;br /&gt;
			:css(&#039;width&#039;, &#039;100%&#039;)&lt;br /&gt;
			:css(&#039;border-collapse&#039;, &#039;collapse&#039;)&lt;br /&gt;
			:css(&#039;border-spacing&#039;, &#039;0px 0px&#039;)&lt;br /&gt;
			:css(&#039;border&#039;, &#039;none&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- add table classes&lt;br /&gt;
	if isnotempty(args[&#039;class&#039;]) then&lt;br /&gt;
		root:addClass(args[&#039;class&#039;])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- add table style&lt;br /&gt;
	if isnotempty(args[&#039;style&#039;]) then&lt;br /&gt;
		root:cssText(args[&#039;style&#039;])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- build arrays with the column styles and classes&lt;br /&gt;
	if isnotempty(args[&#039;leftright&#039;]) then&lt;br /&gt;
		colstyle[1] = &#039;text-align:left;&#039;&lt;br /&gt;
		colstyle[2] = &#039;text-align:right;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	if isnotempty(args[&#039;rightleft&#039;]) then&lt;br /&gt;
		colstyle[1] = &#039;text-align:right;&#039;&lt;br /&gt;
		colstyle[2] = &#039;text-align:left;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	for i = 1,cols do&lt;br /&gt;
		colclass[ i ] = colclass[ i ] or &#039;&#039;&lt;br /&gt;
		colstyle[ i ] = colstyle[ i ] or &#039;&#039;&lt;br /&gt;
		if isnotempty(args[&#039;colstyle&#039;]) then&lt;br /&gt;
			colstyle[ i ] = args[&#039;colstyle&#039;] .. &#039;;&#039; .. colstyle[ i ]&lt;br /&gt;
		end&lt;br /&gt;
		if isnotempty(args[&#039;colalign&#039; .. tostring(i)]) then&lt;br /&gt;
			colstyle[ i ] = &#039;text-align:&#039; .. args[&#039;colalign&#039; .. tostring(i)] .. &#039;;&#039; .. colstyle[ i ]&lt;br /&gt;
		elseif isnotempty(args[&#039;col&#039; .. tostring(i) .. &#039;align&#039;]) then&lt;br /&gt;
			colstyle[ i ] = &#039;text-align:&#039; .. args[&#039;col&#039; .. tostring(i) .. &#039;align&#039;] .. &#039;;&#039; .. colstyle[ i ]&lt;br /&gt;
		elseif isnotempty(args[&#039;align&#039; .. tostring(i)]) then&lt;br /&gt;
			colstyle[ i ] = &#039;text-align:&#039; .. args[&#039;align&#039; .. tostring(i)] .. &#039;;&#039; .. colstyle[ i ]&lt;br /&gt;
		end&lt;br /&gt;
		if isnotempty(args[&#039;colnowrap&#039; .. tostring(i)]) then&lt;br /&gt;
			colstyle[ i ] = &#039;white-space:nowrap;&#039; .. colstyle[ i ]&lt;br /&gt;
		elseif isnotempty(args[&#039;col&#039; .. tostring(i) .. &#039;nowrap&#039;]) then&lt;br /&gt;
			colstyle[ i ] = &#039;white-space:nowrap;&#039; .. colstyle[ i ]&lt;br /&gt;
		elseif isnotempty(args[&#039;nowrap&#039; .. tostring(i)]) then&lt;br /&gt;
			colstyle[ i ] = &#039;white-space:nowrap;&#039; .. colstyle[ i ]&lt;br /&gt;
		end&lt;br /&gt;
		if isnotempty(args[&#039;colwidth&#039; .. tostring(i)]) then&lt;br /&gt;
			colstyle[ i ] = &#039;width:&#039; .. args[&#039;colwidth&#039; .. tostring(i)] .. &#039;;&#039; .. colstyle[ i ]&lt;br /&gt;
		elseif isnotempty(args[&#039;col&#039; .. tostring(i) .. &#039;width&#039;]) then&lt;br /&gt;
			colstyle[ i ] = &#039;width:&#039; .. args[&#039;col&#039; .. tostring(i) .. &#039;width&#039;] .. &#039;;&#039; .. colstyle[ i ]&lt;br /&gt;
		elseif isnotempty(args[&#039;colwidth&#039;]) then&lt;br /&gt;
			colstyle[ i ] = &#039;width:&#039; .. args[&#039;colwidth&#039;] .. &#039;;&#039; .. colstyle[ i ]&lt;br /&gt;
		end&lt;br /&gt;
		if isnotempty(args[&#039;colstyle&#039; .. tostring(i)]) then&lt;br /&gt;
			colstyle[ i ] = colstyle[ i ] .. args[&#039;colstyle&#039; .. tostring(i)]&lt;br /&gt;
		elseif isnotempty(args[&#039;col&#039; .. tostring(i) .. &#039;style&#039;]) then&lt;br /&gt;
			colstyle[ i ] = colstyle[ i ] .. args[&#039;col&#039; .. tostring(i) .. &#039;style&#039;]&lt;br /&gt;
		elseif isnotempty(args[&#039;style&#039; .. tostring(i)]) then&lt;br /&gt;
			colstyle[ i ] = colstyle[ i ] .. args[&#039;style&#039; .. tostring(i)]&lt;br /&gt;
		end&lt;br /&gt;
		if isnotempty(args[&#039;colclass&#039; .. tostring(i)]) then&lt;br /&gt;
			colclass[ i ] =  args[&#039;colclass&#039; .. tostring(i)]&lt;br /&gt;
		elseif isnotempty(args[&#039;col&#039; .. tostring(i) .. &#039;class&#039;]) then&lt;br /&gt;
			colclass[ i ] =  args[&#039;col&#039; .. tostring(i) .. &#039;class&#039;]&lt;br /&gt;
		elseif isnotempty(args[&#039;class&#039; .. tostring(i)]) then&lt;br /&gt;
			colclass[ i ] =  args[&#039;class&#039; .. tostring(i)]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- compute the maximum cell index&lt;br /&gt;
	local cellcount = 0&lt;br /&gt;
	for k, v in pairs( args ) do&lt;br /&gt;
		if type( k ) == &#039;number&#039; then&lt;br /&gt;
			cellcount = math.max(cellcount, k)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- compute the number of rows&lt;br /&gt;
	local rows = math.ceil(cellcount / cols)&lt;br /&gt;
&lt;br /&gt;
	-- build the table content&lt;br /&gt;
	if isnotempty(args[&#039;title&#039;]) then&lt;br /&gt;
		local caption = root:tag(&#039;caption&#039;)&lt;br /&gt;
		caption:cssText(args[&#039;titlestyle&#039;])&lt;br /&gt;
		caption:wikitext(args[&#039;title&#039;])&lt;br /&gt;
	end&lt;br /&gt;
	if isnotempty(args[&#039;above&#039;]) then&lt;br /&gt;
		local row = root:tag(&#039;tr&#039;)&lt;br /&gt;
		local cell = row:tag(&#039;th&#039;)&lt;br /&gt;
		cell:attr(&#039;colspan&#039;, cols)&lt;br /&gt;
		cell:cssText(args[&#039;abovestyle&#039;])&lt;br /&gt;
		cell:wikitext(args[&#039;above&#039;])&lt;br /&gt;
	end&lt;br /&gt;
	for j=1,rows do&lt;br /&gt;
		-- start a new row&lt;br /&gt;
		local row = root:tag(&#039;tr&#039;)&lt;br /&gt;
		if isnotempty(args[&#039;rowstyle&#039;]) then&lt;br /&gt;
			row:cssText(args[&#039;rowstyle&#039;])&lt;br /&gt;
		else&lt;br /&gt;
			row:css(&#039;vertical-align&#039;, &#039;top&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		if isnotempty(args[&#039;rowclass&#039;]) then&lt;br /&gt;
			row:addClass(args[&#039;rowclass&#039;])&lt;br /&gt;
		end&lt;br /&gt;
		-- loop over the cells in the row&lt;br /&gt;
		for i=1,cols do&lt;br /&gt;
			local cell&lt;br /&gt;
			if isnotempty(args[&#039;row&#039; .. tostring(j) .. &#039;header&#039;]) then&lt;br /&gt;
				cell = row:tag(&#039;th&#039;):attr(&#039;scope&#039;,&#039;col&#039;)&lt;br /&gt;
			elseif isnotempty(args[&#039;col&#039; .. tostring(i) .. &#039;header&#039;]) then&lt;br /&gt;
				cell = row:tag(&#039;th&#039;):attr(&#039;scope&#039;,&#039;row&#039;)&lt;br /&gt;
			else&lt;br /&gt;
				cell = row:tag(&#039;td&#039;)&lt;br /&gt;
			end&lt;br /&gt;
			if args[&#039;class&#039; .. tostring(j) .. &#039;.&#039; .. tostring(i)] then&lt;br /&gt;
				cell:addClass(args[&#039;class&#039; .. tostring(j) .. &#039;.&#039; .. tostring(i)])&lt;br /&gt;
			else&lt;br /&gt;
				if args[&#039;rowclass&#039; .. tostring(j)] then&lt;br /&gt;
					cell:addClass(args[&#039;rowclass&#039; .. tostring(j)])&lt;br /&gt;
				elseif args[&#039;row&#039; .. tostring(j) .. &#039;class&#039;] then&lt;br /&gt;
					cell:addClass(args[&#039;row&#039; .. tostring(j) .. &#039;class&#039;])&lt;br /&gt;
				elseif args[&#039;rowevenclass&#039;] and math.fmod(j,2) == 0 then&lt;br /&gt;
					cell:addClass(args[&#039;rowevenclass&#039;])&lt;br /&gt;
				elseif args[&#039;rowoddclass&#039;] and math.fmod(j,2) == 1 then	&lt;br /&gt;
					cell:addClass(args[&#039;rowoddclass&#039;])&lt;br /&gt;
				end&lt;br /&gt;
				if colclass[i] ~= &#039;&#039; then&lt;br /&gt;
					cell:addClass(colclass[i])&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if args[&#039;style&#039; .. tostring(j) .. &#039;.&#039; .. tostring(i)] then&lt;br /&gt;
				cell:cssText(args[&#039;style&#039; .. tostring(j) .. &#039;.&#039; .. tostring(i)])&lt;br /&gt;
			else&lt;br /&gt;
				if args[&#039;rowstyle&#039; .. tostring(j)] then&lt;br /&gt;
					cell:cssText(args[&#039;rowstyle&#039; .. tostring(j)])&lt;br /&gt;
				elseif args[&#039;rowevenstyle&#039;] and math.fmod(j,2) == 0 then&lt;br /&gt;
					cell:cssText(args[&#039;rowevenstyle&#039;])&lt;br /&gt;
				elseif args[&#039;rowoddstyle&#039;] and math.fmod(j,2) == 1 then	&lt;br /&gt;
					cell:cssText(args[&#039;rowoddstyle&#039;])&lt;br /&gt;
				elseif args[&#039;row&#039; .. tostring(j) .. &#039;style&#039;] then&lt;br /&gt;
					cell:cssText(args[&#039;row&#039; .. tostring(j) .. &#039;style&#039;])&lt;br /&gt;
				end&lt;br /&gt;
				if isnotempty(colstyle[i]) then&lt;br /&gt;
					cell:cssText(colstyle[i])&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			cell:wikitext(mw.ustring.gsub(args[cols*(j - 1) + i] or &#039;&#039;, &#039;^(.-)%s*$&#039;, &#039;%1&#039;) or &#039;&#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- return the root table&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Aligned_table&amp;diff=325</id>
		<title>Template:Aligned table</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Aligned_table&amp;diff=325"/>
		<updated>2025-12-11T06:08:58Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#invoke:aligned table|table}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Add categories to the /doc subpage, interwikis to Wikidata, not here --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Fraction&amp;diff=323</id>
		<title>Template:Fraction</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Fraction&amp;diff=323"/>
		<updated>2025-12-11T06:08:58Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;templatestyles src=&amp;quot;Fraction/styles.css&amp;quot; /&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;span class=&amp;quot;frac&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{3|}}}&amp;lt;!-- if 3&lt;br /&gt;
  --&amp;gt;|{{{1}}}&amp;lt;span class=&amp;quot;sr-only&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;num&amp;quot;&amp;gt;{{{2}}}&amp;lt;/span&amp;gt;&amp;amp;frasl;&amp;lt;span class=&amp;quot;den&amp;quot;&amp;gt;{{{3}}}&amp;lt;/span&amp;gt;&amp;lt;!-- then 1 2/3&lt;br /&gt;
  --&amp;gt;|{{#if:{{{2|}}}&amp;lt;!-- elseif 2&lt;br /&gt;
    --&amp;gt;|&amp;lt;span class=&amp;quot;num&amp;quot;&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;amp;frasl;&amp;lt;span class=&amp;quot;den&amp;quot;&amp;gt;{{{2}}}&amp;lt;/span&amp;gt;&amp;lt;!-- then 1/2&lt;br /&gt;
    --&amp;gt;|{{#if:{{{1|}}}&amp;lt;!-- elseif 1&lt;br /&gt;
      --&amp;gt;|&amp;lt;span class=&amp;quot;num&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;amp;frasl;&amp;lt;span class=&amp;quot;den&amp;quot;&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;lt;!-- then 1/1&lt;br /&gt;
      --&amp;gt;|&amp;amp;frasl;&amp;lt;!-- else 0, a slash&lt;br /&gt;
    --&amp;gt;}}&amp;lt;!-- endif 1&lt;br /&gt;
  --&amp;gt;}}&amp;lt;!-- endif 2&lt;br /&gt;
--&amp;gt;}}&amp;lt;!-- endif 3&lt;br /&gt;
--&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Frac&amp;diff=321</id>
		<title>Template:Frac</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Frac&amp;diff=321"/>
		<updated>2025-12-11T06:08:58Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Template:Fraction]]&lt;br /&gt;
&lt;br /&gt;
{{Rcat shell|&lt;br /&gt;
{{R from move}}&lt;br /&gt;
{{R from modification}}&lt;br /&gt;
{{R from template shortcut}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Math&amp;diff=319</id>
		<title>Template:Math</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Math&amp;diff=319"/>
		<updated>2025-12-11T06:08:58Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span class=&amp;quot;texhtml {{#if:{{{big|}}}{{{size|}}}|texhtml-big}}&amp;quot; {{#if:{{{big|}}}{{{size|}}}|style=&amp;quot;font-size:{{{size|165%}}};&amp;quot;}}&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#invoke:Check for unknown parameters|check&lt;br /&gt;
| unknown = {{main other|[[Category:Pages using Math with unknown parameters|_VALUE_]]}}&lt;br /&gt;
| showblankpositional=1&lt;br /&gt;
| preview = unknown parameter &amp;quot;_VALUE_&amp;quot; (consider using &amp;lt;code&amp;gt;{{!}}1=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{!}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{=}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
| 1 | big | size&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Navbox_with_columns&amp;diff=317</id>
		<title>Template:Navbox with columns</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Navbox_with_columns&amp;diff=317"/>
		<updated>2025-12-11T06:08:58Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:Navbox|with columns}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!---Please add metadata to the &amp;lt;includeonly&amp;gt; section at the bottom of the /doc subpage---&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Sfrac/styles.css&amp;diff=315</id>
		<title>Template:Sfrac/styles.css</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Sfrac/styles.css&amp;diff=315"/>
		<updated>2025-12-11T06:08:58Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* {{pp|small=y}} */&lt;br /&gt;
.sfrac {&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sfrac.tion,&lt;br /&gt;
.sfrac .tion {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	vertical-align: -0.5em;&lt;br /&gt;
	font-size: 85%;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sfrac .num {&lt;br /&gt;
	display: block;&lt;br /&gt;
	line-height: 1em;&lt;br /&gt;
	margin: 0.0em 0.1em;&lt;br /&gt;
	border-bottom: 1px solid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sfrac .den {&lt;br /&gt;
	display: block;&lt;br /&gt;
	line-height: 1em;&lt;br /&gt;
	margin: 0.1em 0.1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* [[Template:Screen reader-only]] is canonical implementation onwiki */&lt;br /&gt;
.sr-only {&lt;br /&gt;
	border: 0;&lt;br /&gt;
	clip: rect(0, 0, 0, 0); /* removed from CSS */&lt;br /&gt;
	clip-path: polygon(0px 0px, 0px 0px, 0px 0px);&lt;br /&gt;
	height: 1px;&lt;br /&gt;
	margin: -1px;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	width: 1px;&lt;br /&gt;
	/* white-space: nowrap; /* already have nowrap above */&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Sfrac&amp;diff=313</id>
		<title>Template:Sfrac</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Sfrac&amp;diff=313"/>
		<updated>2025-12-11T06:08:58Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ {{{|safesubst:}}}#invoke:Unsubst||$B=&amp;lt;templatestyles src=&amp;quot;Sfrac/styles.css&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;sfrac&amp;quot;&amp;gt;&amp;amp;NoBreak;{{#if:{{{3|}}}|{{{1}}}&amp;lt;span class=&amp;quot;sr-only&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;}}&amp;lt;!--&lt;br /&gt;
 --&amp;gt;&amp;lt;span class=&amp;quot;tion&amp;quot; {{#if:{{{font-size|}}}|style=&amp;quot;font-size:{{{font-size}}}&amp;quot;}}&amp;gt;&amp;lt;!--&lt;br /&gt;
  --&amp;gt;&amp;lt;span class=&amp;quot;num&amp;quot;&amp;gt;{{#if:{{{3|}}}|{{{2}}}|{{#if:{{{2|}}}|{{{1}}}|1}}}}&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
  --&amp;gt;&amp;lt;span class=&amp;quot;sr-only&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
  --&amp;gt;&amp;lt;span class=&amp;quot;den&amp;quot;&amp;gt;{{{3|{{{2|{{{1|1}}}}}}}}}&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
 --&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;NoBreak;&amp;lt;/span&amp;gt;}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Add categories to /doc subpage, not here. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Fraction/styles.css&amp;diff=311</id>
		<title>Template:Fraction/styles.css</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Fraction/styles.css&amp;diff=311"/>
		<updated>2025-12-11T06:08:58Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* {{pp|small=y}} */&lt;br /&gt;
.frac {&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.frac .num,&lt;br /&gt;
.frac .den {&lt;br /&gt;
	font-size: 80%;&lt;br /&gt;
	line-height: 0; /* we want this inline */&lt;br /&gt;
	vertical-align: super;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.frac .den {&lt;br /&gt;
	vertical-align: sub;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* [[Template:Screen reader-only]] is canonical implementation onwiki */&lt;br /&gt;
.sr-only {&lt;br /&gt;
	border: 0;&lt;br /&gt;
	clip: rect(0, 0, 0, 0);&lt;br /&gt;
	clip-path: polygon(0px 0px, 0px 0px, 0px 0px);&lt;br /&gt;
	height: 1px;&lt;br /&gt;
	margin: -1px;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	width: 1px;&lt;br /&gt;
	/* white-space: nowrap; /* already have nowrap above */&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Noitalic/styles.css&amp;diff=309</id>
		<title>Template:Noitalic/styles.css</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Noitalic/styles.css&amp;diff=309"/>
		<updated>2025-12-11T06:08:58Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* {{pp-template}} */&lt;br /&gt;
/* Styling for Template:Noitalic */&lt;br /&gt;
.noitalic {&lt;br /&gt;
	font-style: normal;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Noitalic&amp;diff=307</id>
		<title>Template:Noitalic</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Noitalic&amp;diff=307"/>
		<updated>2025-12-11T06:08:58Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;templatestyles src=&amp;quot;Noitalic/styles.css&amp;quot;/&amp;gt;&amp;lt;span class=&amp;quot;noitalic&amp;quot;&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- PLEASE ADD CATEGORIES AND INTERWIKIS TO THE /doc SUBPAGE, THANKS --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:C&amp;diff=305</id>
		<title>Template:C</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:C&amp;diff=305"/>
		<updated>2025-12-11T06:08:58Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Template:Category link without namespace]]&lt;br /&gt;
&lt;br /&gt;
{{Redirect category shell|&lt;br /&gt;
{{R from move}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Module:Navbox/styles.css&amp;diff=303</id>
		<title>Module:Navbox/styles.css</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Module:Navbox/styles.css&amp;diff=303"/>
		<updated>2025-12-11T06:08:58Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* {{pp|small=y}} */&lt;br /&gt;
.navbox {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	border: 1px solid #a2a9b1;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	clear: both;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 1px;&lt;br /&gt;
	margin: 1em auto 0; /* Prevent preceding content from clinging to navboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox .navbox {&lt;br /&gt;
	margin-top: 0; /* No top margin for nested navboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox + .navbox, /* TODO: remove first line after transclusions have updated */&lt;br /&gt;
.navbox + .navbox-styles + .navbox {&lt;br /&gt;
	margin-top: -1px; /* Single pixel border between adjacent navboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-inner,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
	width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-group,&lt;br /&gt;
.navbox-title,&lt;br /&gt;
.navbox-abovebelow {&lt;br /&gt;
	padding: 0.25em 1em;&lt;br /&gt;
	line-height: 1.5em;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-group {&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: right;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
	background-color: #fdfdfd;&lt;br /&gt;
    color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-list {&lt;br /&gt;
	line-height: 1.5em;&lt;br /&gt;
	border-color: #fdfdfd; /* Must match background color */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-list-with-group {&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	border-left-width: 2px;&lt;br /&gt;
	border-left-style: solid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* cell spacing for navbox cells */&lt;br /&gt;
/* Borders above 2nd, 3rd, etc. rows */&lt;br /&gt;
/* TODO: figure out how to replace tr as structure;&lt;br /&gt;
 * with div structure it should be just a matter of first-child */&lt;br /&gt;
tr + tr &amp;gt; .navbox-abovebelow,&lt;br /&gt;
tr + tr &amp;gt; .navbox-group,&lt;br /&gt;
tr + tr &amp;gt; .navbox-image,&lt;br /&gt;
tr + tr &amp;gt; .navbox-list {&lt;br /&gt;
	border-top: 2px solid #fdfdfd; /* Must match background color */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-title {&lt;br /&gt;
	background-color: #ccf; /* Level 1 color */&lt;br /&gt;
    color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-abovebelow,&lt;br /&gt;
.navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-title {&lt;br /&gt;
	background-color: #ddf; /* Level 2 color */&lt;br /&gt;
    color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-subgroup .navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-abovebelow {&lt;br /&gt;
	background-color: #e6e6ff; /* Level 3 color */&lt;br /&gt;
    color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-even {&lt;br /&gt;
	background-color: #f7f7f7;&lt;br /&gt;
    color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-odd {&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
    color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* TODO: figure out how to remove reliance on td as structure */&lt;br /&gt;
.navbox .hlist td dl,&lt;br /&gt;
.navbox .hlist td ol,&lt;br /&gt;
.navbox .hlist td ul,&lt;br /&gt;
.navbox td.hlist dl,&lt;br /&gt;
.navbox td.hlist ol,&lt;br /&gt;
.navbox td.hlist ul {&lt;br /&gt;
	padding: 0.125em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox .navbar {&lt;br /&gt;
	display: block;&lt;br /&gt;
	font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-title .navbar {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	float: left;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	margin-right: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/** T367463 */&lt;br /&gt;
body.skin--responsive .navbox-image img {&lt;br /&gt;
	max-width: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media print {&lt;br /&gt;
	body.ns-0 .navbox {&lt;br /&gt;
		display: none !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Module:Navbox/configuration&amp;diff=301</id>
		<title>Module:Navbox/configuration</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Module:Navbox/configuration&amp;diff=301"/>
		<updated>2025-12-11T06:08:58Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
	aria_label = &#039;Navbox&#039;,&lt;br /&gt;
	nowrap_item = &#039;%s&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
	templatestyles = mw.getCurrentFrame():extensionTag{&lt;br /&gt;
		name = &#039;templatestyles&#039;, args = { src = &#039;Module:Navbox/styles.css&#039; }&lt;br /&gt;
	},&lt;br /&gt;
	hlist_templatestyles = &#039;Hlist/styles.css&#039;,&lt;br /&gt;
	plainlist_templatestyles = &#039;Plainlist/styles.css&#039;,&lt;br /&gt;
	-- do not localize marker table&lt;br /&gt;
	marker = {&lt;br /&gt;
		oddeven = &#039;\127_ODDEVEN_\127&#039;,&lt;br /&gt;
		restart = &#039;\127_ODDEVEN0_\127&#039;,&lt;br /&gt;
		regex = &#039;\127_ODDEVEN(%d?)_\127&#039;&lt;br /&gt;
	},&lt;br /&gt;
	category = {&lt;br /&gt;
		orphan = &#039;[[Category:Navbox orphans]]&#039;,&lt;br /&gt;
		horizontal_lists = &#039;Navigational boxes without horizontal lists&#039;,&lt;br /&gt;
		background_colors = &#039;Navboxes using background colours&#039;,&lt;br /&gt;
		illegible = &#039;Potentially illegible navboxes&#039;,&lt;br /&gt;
		borders = &#039;Navboxes using borders&#039;,&lt;br /&gt;
		without_first_col = &#039;[[Category:Pages using navbox columns without the first column]]&#039;&lt;br /&gt;
	},&lt;br /&gt;
	keyword = {&lt;br /&gt;
		border_subgroup = &#039;subgroup&#039;,&lt;br /&gt;
		border_child = &#039;child&#039;,&lt;br /&gt;
		border_none = &#039;none&#039;,&lt;br /&gt;
		evenodd_swap = &#039;swap&#039;,&lt;br /&gt;
		navbar_off = &#039;off&#039;,&lt;br /&gt;
		navbar_plain = &#039;plain&#039;,&lt;br /&gt;
		nocat_false = &#039;false&#039;,&lt;br /&gt;
		nowrapitems_yes = &#039;yes&#039;,&lt;br /&gt;
		orphan_yes = &#039;yes&#039;,&lt;br /&gt;
		state_collapsed = &#039;collapsed&#039;,&lt;br /&gt;
		state_off = &#039;off&#039;,&lt;br /&gt;
		state_plain = &#039;plain&#039;,&lt;br /&gt;
		state_uncollapsed = &#039;uncollapsed&#039;,&lt;br /&gt;
		subgroups = {&#039;subgroup&#039;, &#039;child&#039;, &#039;&#039;},&lt;br /&gt;
		subpage_doc = &#039;doc&#039;,&lt;br /&gt;
		subpage_sandbox = &#039;sandbox&#039;,&lt;br /&gt;
		subpage_testcases = &#039;testcases&#039;,&lt;br /&gt;
		tracking_no = &#039;no&#039;,&lt;br /&gt;
		with_collapsible_groups = &#039;with collapsible groups&#039;,&lt;br /&gt;
		with_columns = &#039;with columns&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	class = {&lt;br /&gt;
		autocollapse = &#039;autocollapse&#039;,&lt;br /&gt;
		collapsible = &#039;mw-collapsible&#039;,&lt;br /&gt;
		collapsed = &#039;mw-collapsed&#039;,&lt;br /&gt;
		-- Warning&lt;br /&gt;
		navbox = &#039;navbox&#039;, -- WMF currently hides &#039;navbox&#039; from mobile,&lt;br /&gt;
		-- so you probably shouldn&#039;t change the navbox class.&lt;br /&gt;
		navbox_abovebelow = &#039;navbox-abovebelow&#039;,&lt;br /&gt;
		navbox_group = &#039;navbox-group&#039;,&lt;br /&gt;
		navbox_image = &#039;navbox-image&#039;,&lt;br /&gt;
		navbox_inner = &#039;navbox-inner&#039;,&lt;br /&gt;
		navbox_list = &#039;navbox-list&#039;,&lt;br /&gt;
		navbox_list_with_group = &#039;navbox-list-with-group&#039;,&lt;br /&gt;
		navbox_part = &#039;navbox-&#039;, -- do not l10n&lt;br /&gt;
		navbox_styles = &#039;navbox-styles&#039;,&lt;br /&gt;
		navbox_subgroup = &#039;navbox-subgroup&#039;,&lt;br /&gt;
		navbox_title = &#039;navbox-title&#039;, -- l10n only if you change pattern.navbox_title below&lt;br /&gt;
		navbox_odd_part = &#039;odd&#039;, -- do not l10n&lt;br /&gt;
		navbox_even_part = &#039;even&#039;, -- do not l10n&lt;br /&gt;
		nomobile = &#039;nomobile&#039;,&lt;br /&gt;
		nowraplinks = &#039;nowraplinks&#039;,&lt;br /&gt;
		noviewer = &#039;noviewer&#039;, -- used to remove images from MediaViewer&lt;br /&gt;
		notheme = &#039;notheme&#039;&lt;br /&gt;
	},&lt;br /&gt;
	pattern = {&lt;br /&gt;
		class = &#039;class&#039;,&lt;br /&gt;
		colnum = &#039;^col(%d+)$&#039;,&lt;br /&gt;
		colheadernum = &#039;^col(%d+)header$&#039;,&lt;br /&gt;
		colfooternum = &#039;^col(%d+)footer$&#039;,&lt;br /&gt;
		contentnum = &#039;^content(%d+)$&#039;,&lt;br /&gt;
		groupnum = &#039;^group(%d+)$&#039;,&lt;br /&gt;
		hlist = &#039;hlist&#039;,&lt;br /&gt;
		listnum = &#039;^list(%d+)$&#039;,&lt;br /&gt;
		navbox = &#039;Template:Navbox&#039;,&lt;br /&gt;
		navbox_title = &#039;&amp;lt;th[^&amp;gt;]*&amp;quot;navbox%-title&amp;quot;&#039;,&lt;br /&gt;
		nowrap = &#039;^&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
		num = &#039;^%a+(%d+)$&#039;,&lt;br /&gt;
		plainlist = &#039;plainlist&#039;,&lt;br /&gt;
		sandbox = &#039;/sandbox$&#039;,&lt;br /&gt;
		sectionnum = &#039;^section(%d+)$&#039;,&lt;br /&gt;
		sectnum = &#039;^sect(%d+)$&#039;,&lt;br /&gt;
		style = &#039;style$&#039;,&lt;br /&gt;
		with_collapsible_groups = &#039;Template:Navbox with collapsible groups&#039;,&lt;br /&gt;
		with_columns = &#039;Template:Navbox with columns&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	arg = {&lt;br /&gt;
		abbr_and_num = &#039;abbr%d&#039;,&lt;br /&gt;
		above = &#039;above&#039;,&lt;br /&gt;
		aboveclass = &#039;aboveclass&#039;,&lt;br /&gt;
		abovestyle = &#039;abovestyle&#039;,&lt;br /&gt;
		basestyle = &#039;basestyle&#039;,&lt;br /&gt;
		below = &#039;below&#039;,&lt;br /&gt;
		belowclass = &#039;belowclass&#039;,&lt;br /&gt;
		belowstyle = &#039;belowstyle&#039;,&lt;br /&gt;
		bodyclass = &#039;bodyclass&#039;,&lt;br /&gt;
		bodystyle = &#039;bodystyle&#039;,&lt;br /&gt;
		border = &#039;border&#039;,&lt;br /&gt;
		content_and_num = &#039;content%d&#039;,&lt;br /&gt;
		contentstyle = &#039;contentstyle&#039;,&lt;br /&gt;
		contentstyle_and_num = &#039;content%dstyle&#039;,&lt;br /&gt;
		colheaderstyle = &#039;colheaderstyle&#039;,&lt;br /&gt;
		colheader_and_num = &#039;col%dheader&#039;,&lt;br /&gt;
		colheaderstyle_and_num = &#039;col%dheaderstyle&#039;,&lt;br /&gt;
		colheadercolspan_and_num = &#039;col%dheadercolspan&#039;,&lt;br /&gt;
		colstyle = &#039;colstyle&#039;,&lt;br /&gt;
		col_and_num = &#039;col%d&#039;,&lt;br /&gt;
		colstyle_and_num = &#039;col%dstyle&#039;,&lt;br /&gt;
		colwidth = &#039;colwidth&#039;,&lt;br /&gt;
		colwidth_and_num = &#039;col%dwidth&#039;,&lt;br /&gt;
		colfooterstyle = &#039;colfooterstyle&#039;,&lt;br /&gt;
		colfooter_and_num = &#039;col%dfooter&#039;,&lt;br /&gt;
		colfooterstyle_and_num = &#039;col%dfooterstyle&#039;,&lt;br /&gt;
		colfootercolspan_and_num = &#039;col%dfootercolspan&#039;,&lt;br /&gt;
		coltablestyle = &#039;coltablestyle&#039;,&lt;br /&gt;
		evencolstyle = &#039;evencolstyle&#039;,&lt;br /&gt;
		evenodd = &#039;evenodd&#039;,&lt;br /&gt;
		evenstyle = &#039;evenstyle&#039;,&lt;br /&gt;
		fullwidth = &#039;fullwidth&#039;,&lt;br /&gt;
		group1 = &#039;group1&#039;,&lt;br /&gt;
		group2 = &#039;group2&#039;,&lt;br /&gt;
		group_and_num = &#039;group%d&#039;,&lt;br /&gt;
		groupclass = &#039;groupclass&#039;,&lt;br /&gt;
		groupstyle = &#039;groupstyle&#039;,&lt;br /&gt;
		groupstyle_and_num = &#039;group%dstyle&#039;,&lt;br /&gt;
		groupwidth = &#039;groupwidth&#039;,&lt;br /&gt;
		image = &#039;image&#039;,&lt;br /&gt;
		image_and_num = &#039;image%d&#039;,&lt;br /&gt;
		imageclass = &#039;imageclass&#039;,&lt;br /&gt;
		imageleft = &#039;imageleft&#039;,&lt;br /&gt;
		imageleft_and_num = &#039;imageleft%d&#039;,&lt;br /&gt;
		imageleftstyle = &#039;imageleftstyle&#039;,&lt;br /&gt;
		imagestyle = &#039;imagestyle&#039;,&lt;br /&gt;
		innerstyle = &#039;innerstyle&#039;,&lt;br /&gt;
		list1padding = &#039;list1padding&#039;,&lt;br /&gt;
		list_and_num = &#039;list%d&#039;,&lt;br /&gt;
		listclass = &#039;listclass&#039;,&lt;br /&gt;
		listclass_and_num = &#039;list%dclass&#039;,&lt;br /&gt;
		listpadding = &#039;listpadding&#039;,&lt;br /&gt;
		liststyle = &#039;liststyle&#039;,&lt;br /&gt;
		liststyle_and_num = &#039;list%dstyle&#039;,&lt;br /&gt;
		name = &#039;name&#039;,&lt;br /&gt;
		navbar = &#039;navbar&#039;,&lt;br /&gt;
		navboxclass = &#039;navboxclass&#039;,&lt;br /&gt;
		nocat = &#039;nocat&#039;,&lt;br /&gt;
		nowrapitems = &#039;nowrapitems&#039;,&lt;br /&gt;
		oddcolstyle = &#039;oddcolstyle&#039;,&lt;br /&gt;
		oddstyle = &#039;oddstyle&#039;,&lt;br /&gt;
		orphan = &#039;orphan&#039;,&lt;br /&gt;
		padding = &#039;padding&#039;,&lt;br /&gt;
		sect_and_num = &#039;sect%d&#039;,&lt;br /&gt;
		section_and_num = &#039;section%d&#039;,&lt;br /&gt;
		sectiontitlestyle_and_num = &#039;section%dtitlestyle&#039;,&lt;br /&gt;
		secttitlestyle = &#039;secttitlestyle&#039;,&lt;br /&gt;
		selected = &#039;selected&#039;,&lt;br /&gt;
		state = &#039;state&#039;,&lt;br /&gt;
		state_and_num = &#039;state%d&#039;,&lt;br /&gt;
		style = &#039;style&#039;,&lt;br /&gt;
		subgroups_and_num = {&#039;subgroup%d&#039;, &#039;child%d&#039;, &#039;%d&#039;},&lt;br /&gt;
		templatestyles = &#039;templatestyles&#039;,&lt;br /&gt;
		child_templatestyles = &#039;child templatestyles&#039;,&lt;br /&gt;
		title = &#039;title&#039;,&lt;br /&gt;
		titleclass = &#039;titleclass&#039;,&lt;br /&gt;
		titlestyle = &#039;titlestyle&#039;,&lt;br /&gt;
		tracking = &#039;tracking&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	-- names of navbar arguments&lt;br /&gt;
	navbar = {&lt;br /&gt;
		name = 1,&lt;br /&gt;
		fontstyle = &#039;fontstyle&#039;,&lt;br /&gt;
		mini = &#039;mini&#039;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Module:Navbox&amp;diff=299</id>
		<title>Module:Navbox</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Module:Navbox&amp;diff=299"/>
		<updated>2025-12-11T06:08:58Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;require(&#039;strict&#039;)&lt;br /&gt;
local p = {}&lt;br /&gt;
local cfg = mw.loadData(&#039;Module:Navbox/configuration&#039;)&lt;br /&gt;
local inArray = require(&amp;quot;Module:TableTools&amp;quot;).inArray&lt;br /&gt;
local getArgs -- lazily initialized&lt;br /&gt;
local hiding_templatestyles = {} &lt;br /&gt;
&lt;br /&gt;
-- global passthrough variables&lt;br /&gt;
local passthrough = {&lt;br /&gt;
	[cfg.arg.above]=true,[cfg.arg.aboveclass]=true,[cfg.arg.abovestyle]=true,&lt;br /&gt;
	[cfg.arg.basestyle]=true,&lt;br /&gt;
	[cfg.arg.below]=true,[cfg.arg.belowclass]=true,[cfg.arg.belowstyle]=true,&lt;br /&gt;
	[cfg.arg.bodyclass]=true,&lt;br /&gt;
	[cfg.arg.groupclass]=true,&lt;br /&gt;
	[cfg.arg.image]=true,[cfg.arg.imageclass]=true,[cfg.arg.imagestyle]=true,&lt;br /&gt;
	[cfg.arg.imageleft]=true,[cfg.arg.imageleftstyle]=true,&lt;br /&gt;
	[cfg.arg.listclass]=true,&lt;br /&gt;
	[cfg.arg.name]=true,&lt;br /&gt;
	[cfg.arg.navbar]=true,&lt;br /&gt;
	[cfg.arg.state]=true,&lt;br /&gt;
	[cfg.arg.title]=true,[cfg.arg.titleclass]=true,[cfg.arg.titlestyle]=true,&lt;br /&gt;
	argHash=true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- helper functions&lt;br /&gt;
local andnum = function(s, n) return string.format(cfg.arg[s .. &#039;_and_num&#039;], n) end&lt;br /&gt;
local isblank = function(v) return (v or &#039;&#039;) == &#039;&#039; end&lt;br /&gt;
&lt;br /&gt;
local function concatstrings(s)&lt;br /&gt;
	local r = table.concat(s, &#039;&#039;)&lt;br /&gt;
	if r:match(&#039;^%s*$&#039;) then return nil end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function concatstyles(s)&lt;br /&gt;
	local r = &#039;&#039;&lt;br /&gt;
	for _, v in ipairs(s) do&lt;br /&gt;
		v = mw.text.trim(v, &amp;quot;%s;&amp;quot;)&lt;br /&gt;
		if not isblank(v) then r = r .. v .. &#039;;&#039; end&lt;br /&gt;
	end&lt;br /&gt;
	if isblank(r) then return nil end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getSubgroup(args, listnum, listText, prefix)&lt;br /&gt;
	local subArgs = {&lt;br /&gt;
		[cfg.arg.border] = cfg.keyword.border_subgroup,&lt;br /&gt;
		[cfg.arg.navbar] = cfg.keyword.navbar_plain,&lt;br /&gt;
		argHash = 0&lt;br /&gt;
	}&lt;br /&gt;
	local hasSubArgs = false&lt;br /&gt;
	local subgroups_and_num = prefix and {prefix} or cfg.arg.subgroups_and_num&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		k = tostring(k)&lt;br /&gt;
		for _, w in ipairs(subgroups_and_num) do&lt;br /&gt;
			w = string.format(w, listnum) .. &amp;quot;_&amp;quot;&lt;br /&gt;
			if (#k &amp;gt; #w) and (k:sub(1, #w) == w) then&lt;br /&gt;
				subArgs[k:sub(#w + 1)] = v&lt;br /&gt;
				hasSubArgs = true&lt;br /&gt;
				subArgs.argHash = subArgs.argHash + (v and #v or 0)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return hasSubArgs and p._navbox(subArgs) or listText&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Main functions&lt;br /&gt;
function p._navbox(args)&lt;br /&gt;
	if args.type == cfg.keyword.with_collapsible_groups then&lt;br /&gt;
		return p._withCollapsibleGroups(args)&lt;br /&gt;
	elseif args.type == cfg.keyword.with_columns then&lt;br /&gt;
		return p._withColumns(args)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function striped(wikitext, border)&lt;br /&gt;
		-- Return wikitext with markers replaced for odd/even striping.&lt;br /&gt;
		-- Child (subgroup) navboxes are flagged with a category that is removed&lt;br /&gt;
		-- by parent navboxes. The result is that the category shows all pages&lt;br /&gt;
		-- where a child navbox is not contained in a parent navbox.&lt;br /&gt;
		local orphanCat = cfg.category.orphan&lt;br /&gt;
		if border == cfg.keyword.border_subgroup and args[cfg.arg.orphan] ~= cfg.keyword.orphan_yes then&lt;br /&gt;
			-- No change; striping occurs in outermost navbox.&lt;br /&gt;
			return wikitext .. orphanCat&lt;br /&gt;
		end&lt;br /&gt;
		local first, second = cfg.class.navbox_odd_part, cfg.class.navbox_even_part&lt;br /&gt;
		if args[cfg.arg.evenodd] then&lt;br /&gt;
			if args[cfg.arg.evenodd] == cfg.keyword.evenodd_swap then&lt;br /&gt;
				first, second = second, first&lt;br /&gt;
			else&lt;br /&gt;
				first = args[cfg.arg.evenodd]&lt;br /&gt;
				second = first&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local changer&lt;br /&gt;
		if first == second then&lt;br /&gt;
			changer = first&lt;br /&gt;
		else&lt;br /&gt;
			local index = 0&lt;br /&gt;
			changer = function (code)&lt;br /&gt;
				if code == &#039;0&#039; then&lt;br /&gt;
					-- Current occurrence is for a group before a nested table.&lt;br /&gt;
					-- Set it to first as a valid although pointless class.&lt;br /&gt;
					-- The next occurrence will be the first row after a title&lt;br /&gt;
					-- in a subgroup and will also be first.&lt;br /&gt;
					index = 0&lt;br /&gt;
					return first&lt;br /&gt;
				end&lt;br /&gt;
				index = index + 1&lt;br /&gt;
				return index % 2 == 1 and first or second&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local regex = orphanCat:gsub(&#039;([%[%]])&#039;, &#039;%%%1&#039;)&lt;br /&gt;
		return (wikitext:gsub(regex, &#039;&#039;):gsub(cfg.marker.regex, changer)) -- () omits gsub count&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function processItem(item, nowrapitems)&lt;br /&gt;
		if item:sub(1, 2) == &#039;{|&#039; then&lt;br /&gt;
			-- Applying nowrap to lines in a table does not make sense.&lt;br /&gt;
			-- Add newlines to compensate for trim of x in |parm=x in a template.&lt;br /&gt;
			return &#039;\n&#039; .. item .. &#039;\n&#039;&lt;br /&gt;
		end&lt;br /&gt;
		if nowrapitems == cfg.keyword.nowrapitems_yes then&lt;br /&gt;
			local lines = {}&lt;br /&gt;
			for line in (item .. &#039;\n&#039;):gmatch(&#039;([^\n]*)\n&#039;) do&lt;br /&gt;
				local prefix, content = line:match(&#039;^([*:;#]+)%s*(.*)&#039;)&lt;br /&gt;
				if prefix and not content:match(cfg.pattern.nowrap) then&lt;br /&gt;
					line = string.format(cfg.nowrap_item, prefix, content)&lt;br /&gt;
				end&lt;br /&gt;
				table.insert(lines, line)&lt;br /&gt;
			end&lt;br /&gt;
			item = table.concat(lines, &#039;\n&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		if item:match(&#039;^[*:;#]&#039;) then&lt;br /&gt;
			return &#039;\n&#039; .. item .. &#039;\n&#039;&lt;br /&gt;
		end&lt;br /&gt;
		return item&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function has_navbar()&lt;br /&gt;
		return args[cfg.arg.navbar] ~= cfg.keyword.navbar_off&lt;br /&gt;
			and args[cfg.arg.navbar] ~= cfg.keyword.navbar_plain&lt;br /&gt;
			and (&lt;br /&gt;
				args[cfg.arg.name]&lt;br /&gt;
				or mw.getCurrentFrame():getParent():getTitle():gsub(cfg.pattern.sandbox, &#039;&#039;)&lt;br /&gt;
					~= cfg.pattern.navbox&lt;br /&gt;
			)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- extract text color from css, which is the only permitted inline CSS for the navbar&lt;br /&gt;
	local function extract_color(css_str)&lt;br /&gt;
		-- return nil because navbar takes its argument into mw.html which handles&lt;br /&gt;
		-- nil gracefully, removing the associated style attribute&lt;br /&gt;
		return mw.ustring.match(&#039;;&#039; .. css_str .. &#039;;&#039;, &#039;.*;%s*([Cc][Oo][Ll][Oo][Rr]%s*:%s*.-)%s*;&#039;) or nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderNavBar(titleCell)&lt;br /&gt;
		if has_navbar() then&lt;br /&gt;
			local navbar = require(&#039;Module:Navbar&#039;)._navbar&lt;br /&gt;
			titleCell:wikitext(navbar{&lt;br /&gt;
				[cfg.navbar.name] = args[cfg.arg.name],&lt;br /&gt;
				[cfg.navbar.mini] = 1,&lt;br /&gt;
				[cfg.navbar.fontstyle] = extract_color(&lt;br /&gt;
					(args[cfg.arg.basestyle] or &#039;&#039;) .. &#039;;&#039; .. (args[cfg.arg.titlestyle] or &#039;&#039;)&lt;br /&gt;
				)&lt;br /&gt;
			})&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderTitleRow(tbl)&lt;br /&gt;
		if not args[cfg.arg.title] then return end&lt;br /&gt;
&lt;br /&gt;
		local titleRow = tbl:tag(&#039;tr&#039;)&lt;br /&gt;
&lt;br /&gt;
		local titleCell = titleRow:tag(&#039;th&#039;):attr(&#039;scope&#039;, &#039;col&#039;)&lt;br /&gt;
&lt;br /&gt;
		local titleColspan = 2&lt;br /&gt;
		if args[cfg.arg.imageleft] then titleColspan = titleColspan + 1 end&lt;br /&gt;
		if args[cfg.arg.image] then titleColspan = titleColspan + 1 end&lt;br /&gt;
&lt;br /&gt;
		titleCell&lt;br /&gt;
			:cssText(args[cfg.arg.basestyle])&lt;br /&gt;
			:cssText(args[cfg.arg.titlestyle])&lt;br /&gt;
			:addClass(cfg.class.navbox_title)&lt;br /&gt;
			:attr(&#039;colspan&#039;, titleColspan)&lt;br /&gt;
&lt;br /&gt;
		renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
		titleCell&lt;br /&gt;
			:tag(&#039;div&#039;)&lt;br /&gt;
				-- id for aria-labelledby attribute&lt;br /&gt;
				:attr(&#039;id&#039;, mw.uri.anchorEncode(args[cfg.arg.title]) .. args.argHash)&lt;br /&gt;
				:addClass(args[cfg.arg.titleclass])&lt;br /&gt;
				:css(&#039;font-size&#039;, &#039;114%&#039;)&lt;br /&gt;
				:css(&#039;margin&#039;, &#039;0 4em&#039;)&lt;br /&gt;
				:wikitext(processItem(args[cfg.arg.title]))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function getAboveBelowColspan()&lt;br /&gt;
		local ret = 2&lt;br /&gt;
		if args[cfg.arg.imageleft] then ret = ret + 1 end&lt;br /&gt;
		if args[cfg.arg.image] then ret = ret + 1 end&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderAboveRow(tbl)&lt;br /&gt;
		if not args[cfg.arg.above] then return end&lt;br /&gt;
&lt;br /&gt;
		tbl:tag(&#039;tr&#039;)&lt;br /&gt;
			:tag(&#039;td&#039;)&lt;br /&gt;
				:addClass(cfg.class.navbox_abovebelow)&lt;br /&gt;
				:addClass(args[cfg.arg.aboveclass])&lt;br /&gt;
				:cssText(args[cfg.arg.basestyle])&lt;br /&gt;
				:cssText(args[cfg.arg.abovestyle])&lt;br /&gt;
				:attr(&#039;colspan&#039;, getAboveBelowColspan())&lt;br /&gt;
				:tag(&#039;div&#039;)&lt;br /&gt;
					-- id for aria-labelledby attribute, if no title&lt;br /&gt;
					:attr(&#039;id&#039;, (not args[cfg.arg.title]) and &lt;br /&gt;
						(mw.uri.anchorEncode(args[cfg.arg.above]) .. args.argHash)&lt;br /&gt;
						or nil)&lt;br /&gt;
					:wikitext(processItem(args[cfg.arg.above], args[cfg.arg.nowrapitems]))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderBelowRow(tbl)&lt;br /&gt;
		if not args[cfg.arg.below] then return end&lt;br /&gt;
&lt;br /&gt;
		tbl:tag(&#039;tr&#039;)&lt;br /&gt;
			:tag(&#039;td&#039;)&lt;br /&gt;
				:addClass(cfg.class.navbox_abovebelow)&lt;br /&gt;
				:addClass(args[cfg.arg.belowclass])&lt;br /&gt;
				:cssText(args[cfg.arg.basestyle])&lt;br /&gt;
				:cssText(args[cfg.arg.belowstyle])&lt;br /&gt;
				:attr(&#039;colspan&#039;, getAboveBelowColspan())&lt;br /&gt;
				:tag(&#039;div&#039;)&lt;br /&gt;
					:wikitext(processItem(args[cfg.arg.below], args[cfg.arg.nowrapitems]))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderListRow(tbl, index, listnum, listnums_size)&lt;br /&gt;
		local row = tbl:tag(&#039;tr&#039;)&lt;br /&gt;
&lt;br /&gt;
		if index == 1 and args[cfg.arg.imageleft] then&lt;br /&gt;
			row&lt;br /&gt;
				:tag(&#039;td&#039;)&lt;br /&gt;
					:addClass(cfg.class.noviewer)&lt;br /&gt;
					:addClass(cfg.class.navbox_image)&lt;br /&gt;
					:addClass(args[cfg.arg.imageclass])&lt;br /&gt;
					:css(&#039;width&#039;, &#039;1px&#039;)               -- Minimize width&lt;br /&gt;
					:css(&#039;padding&#039;, &#039;0 2px 0 0&#039;)&lt;br /&gt;
					:cssText(args[cfg.arg.imageleftstyle])&lt;br /&gt;
					:attr(&#039;rowspan&#039;, listnums_size)&lt;br /&gt;
					:tag(&#039;div&#039;)&lt;br /&gt;
						:wikitext(processItem(args[cfg.arg.imageleft]))&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local group_and_num = andnum(&#039;group&#039;, listnum)&lt;br /&gt;
		local groupstyle_and_num = andnum(&#039;groupstyle&#039;, listnum)&lt;br /&gt;
		if args[group_and_num] then&lt;br /&gt;
			local groupCell = row:tag(&#039;th&#039;)&lt;br /&gt;
&lt;br /&gt;
			-- id for aria-labelledby attribute, if lone group with no title or above&lt;br /&gt;
			if listnum == 1 and not (args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group2]) then&lt;br /&gt;
				groupCell&lt;br /&gt;
					:attr(&#039;id&#039;, mw.uri.anchorEncode(args[cfg.arg.group1]) .. args.argHash)&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			groupCell&lt;br /&gt;
				:attr(&#039;scope&#039;, &#039;row&#039;)&lt;br /&gt;
				:addClass(cfg.class.navbox_group)&lt;br /&gt;
				:addClass(args[cfg.arg.groupclass])&lt;br /&gt;
				:cssText(args[cfg.arg.basestyle])&lt;br /&gt;
				-- If groupwidth not specified, minimize width&lt;br /&gt;
				:css(&#039;width&#039;, args[cfg.arg.groupwidth] or &#039;1%&#039;)&lt;br /&gt;
&lt;br /&gt;
			groupCell&lt;br /&gt;
				:cssText(args[cfg.arg.groupstyle])&lt;br /&gt;
				:cssText(args[groupstyle_and_num])&lt;br /&gt;
				:wikitext(args[group_and_num])&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local listCell = row:tag(&#039;td&#039;)&lt;br /&gt;
&lt;br /&gt;
		if args[group_and_num] then&lt;br /&gt;
			listCell&lt;br /&gt;
				:addClass(cfg.class.navbox_list_with_group)&lt;br /&gt;
		else&lt;br /&gt;
			listCell:attr(&#039;colspan&#039;, 2)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if not args[cfg.arg.groupwidth] then&lt;br /&gt;
			listCell:css(&#039;width&#039;, &#039;100%&#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local rowstyle  -- usually nil so cssText(rowstyle) usually adds nothing&lt;br /&gt;
		if index % 2 == 1 then&lt;br /&gt;
			rowstyle = args[cfg.arg.oddstyle]&lt;br /&gt;
		else&lt;br /&gt;
			rowstyle = args[cfg.arg.evenstyle]&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local list_and_num = andnum(&#039;list&#039;, listnum)&lt;br /&gt;
		local listText = inArray(cfg.keyword.subgroups, args[list_and_num])&lt;br /&gt;
			and getSubgroup(args, listnum, args[list_and_num]) or args[list_and_num]&lt;br /&gt;
&lt;br /&gt;
		local oddEven = cfg.marker.oddeven&lt;br /&gt;
		if listText:sub(1, 12) == &#039;&amp;lt;/div&amp;gt;&amp;lt;table&#039; then&lt;br /&gt;
			-- Assume list text is for a subgroup navbox so no automatic striping for this row.&lt;br /&gt;
			oddEven = listText:find(cfg.pattern.navbox_title) and cfg.marker.restart or cfg.class.navbox_odd_part&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local liststyle_and_num = andnum(&#039;liststyle&#039;, listnum)&lt;br /&gt;
		local listclass_and_num = andnum(&#039;listclass&#039;, listnum)&lt;br /&gt;
		listCell&lt;br /&gt;
			:css(&#039;padding&#039;, &#039;0&#039;)&lt;br /&gt;
			:cssText(args[cfg.arg.liststyle])&lt;br /&gt;
			:cssText(rowstyle)&lt;br /&gt;
			:cssText(args[liststyle_and_num])&lt;br /&gt;
			:addClass(cfg.class.navbox_list)&lt;br /&gt;
			:addClass(cfg.class.navbox_part .. oddEven)&lt;br /&gt;
			:addClass(args[cfg.arg.listclass])&lt;br /&gt;
			:addClass(args[listclass_and_num])&lt;br /&gt;
			:tag(&#039;div&#039;)&lt;br /&gt;
				:css(&#039;padding&#039;,&lt;br /&gt;
					(index == 1 and args[cfg.arg.list1padding]) or args[cfg.arg.listpadding] or &#039;0 0.25em&#039;&lt;br /&gt;
				)&lt;br /&gt;
				:wikitext(processItem(listText, args[cfg.arg.nowrapitems]))&lt;br /&gt;
&lt;br /&gt;
		if index == 1 and args[cfg.arg.image] then&lt;br /&gt;
			row&lt;br /&gt;
				:tag(&#039;td&#039;)&lt;br /&gt;
					:addClass(cfg.class.noviewer)&lt;br /&gt;
					:addClass(cfg.class.navbox_image)&lt;br /&gt;
					:addClass(args[cfg.arg.imageclass])&lt;br /&gt;
					:css(&#039;width&#039;, &#039;1px&#039;)               -- Minimize width&lt;br /&gt;
					:css(&#039;padding&#039;, &#039;0 0 0 2px&#039;)&lt;br /&gt;
					:cssText(args[cfg.arg.imagestyle])&lt;br /&gt;
					:attr(&#039;rowspan&#039;, listnums_size)&lt;br /&gt;
					:tag(&#039;div&#039;)&lt;br /&gt;
						:wikitext(processItem(args[cfg.arg.image]))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function has_list_class(htmlclass)&lt;br /&gt;
		local patterns = {&lt;br /&gt;
			&#039;^&#039; .. htmlclass .. &#039;$&#039;,&lt;br /&gt;
			&#039;%s&#039; .. htmlclass .. &#039;$&#039;,&lt;br /&gt;
			&#039;^&#039; .. htmlclass .. &#039;%s&#039;,&lt;br /&gt;
			&#039;%s&#039; .. htmlclass .. &#039;%s&#039;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		for arg, _ in pairs(args) do&lt;br /&gt;
			if type(arg) == &#039;string&#039; and mw.ustring.find(arg, cfg.pattern.class) then&lt;br /&gt;
				for _, pattern in ipairs(patterns) do&lt;br /&gt;
					if mw.ustring.find(args[arg] or &#039;&#039;, pattern) then&lt;br /&gt;
						return true&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- there are a lot of list classes in the wild, so we add their TemplateStyles&lt;br /&gt;
	local function add_list_styles()&lt;br /&gt;
		local frame = mw.getCurrentFrame()&lt;br /&gt;
		local function add_list_templatestyles(htmlclass, templatestyles)&lt;br /&gt;
			if has_list_class(htmlclass) then&lt;br /&gt;
				return frame:extensionTag{&lt;br /&gt;
					name = &#039;templatestyles&#039;, args = { src = templatestyles }&lt;br /&gt;
				}&lt;br /&gt;
			else&lt;br /&gt;
				return &#039;&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local hlist_styles = add_list_templatestyles(&#039;hlist&#039;, cfg.hlist_templatestyles)&lt;br /&gt;
		local plainlist_styles = add_list_templatestyles(&#039;plainlist&#039;, cfg.plainlist_templatestyles)&lt;br /&gt;
&lt;br /&gt;
		-- a second workaround for [[phab:T303378]]&lt;br /&gt;
		-- when that issue is fixed, we can actually use has_navbar not to emit the&lt;br /&gt;
		-- tag here if we want&lt;br /&gt;
		if has_navbar() and hlist_styles == &#039;&#039; then&lt;br /&gt;
			hlist_styles = frame:extensionTag{&lt;br /&gt;
				name = &#039;templatestyles&#039;, args = { src = cfg.hlist_templatestyles }&lt;br /&gt;
			}&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- hlist -&amp;gt; plainlist is best-effort to preserve old Common.css ordering.&lt;br /&gt;
		-- this ordering is not a guarantee because most navboxes will emit only&lt;br /&gt;
		-- one of these classes [hlist_note]&lt;br /&gt;
		return hlist_styles .. plainlist_styles&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function needsHorizontalLists(border)&lt;br /&gt;
		if border == cfg.keyword.border_subgroup or args[cfg.arg.tracking] == cfg.keyword.tracking_no then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
		return not has_list_class(cfg.pattern.hlist) and not has_list_class(cfg.pattern.plainlist)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function hasBackgroundColors()&lt;br /&gt;
		for _, key in ipairs({cfg.arg.titlestyle, cfg.arg.groupstyle,&lt;br /&gt;
			cfg.arg.basestyle, cfg.arg.abovestyle, cfg.arg.belowstyle}) do&lt;br /&gt;
			if tostring(args[key]):find(&#039;background&#039;, 1, true) 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 function hasBorders()&lt;br /&gt;
		for _, key in ipairs({cfg.arg.groupstyle, cfg.arg.basestyle,&lt;br /&gt;
			cfg.arg.abovestyle, cfg.arg.belowstyle}) do&lt;br /&gt;
			if tostring(args[key]):find(&#039;border&#039;, 1, true) 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 function isIllegible()&lt;br /&gt;
		local styleratio = require(&#039;Module:Color contrast&#039;)._styleratio&lt;br /&gt;
		for key, style in pairs(args) do&lt;br /&gt;
			if tostring(key):match(cfg.pattern.style) then&lt;br /&gt;
				if styleratio{mw.text.unstripNoWiki(style)} &amp;lt; 4.5 then&lt;br /&gt;
					return true&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function getTrackingCategories(border)&lt;br /&gt;
		local cats = {}&lt;br /&gt;
		if needsHorizontalLists(border) then table.insert(cats, cfg.category.horizontal_lists) end&lt;br /&gt;
		if hasBackgroundColors() then table.insert(cats, cfg.category.background_colors) end&lt;br /&gt;
		if isIllegible() then table.insert(cats, cfg.category.illegible) end&lt;br /&gt;
		if hasBorders() then table.insert(cats, cfg.category.borders) end&lt;br /&gt;
		return cats&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderTrackingCategories(builder, border)&lt;br /&gt;
		local title = mw.title.getCurrentTitle()&lt;br /&gt;
		if title.namespace ~= 10 then return end -- not in template space&lt;br /&gt;
		local subpage = title.subpageText&lt;br /&gt;
		if subpage == cfg.keyword.subpage_doc or subpage == cfg.keyword.subpage_sandbox&lt;br /&gt;
			or subpage == cfg.keyword.subpage_testcases then return end&lt;br /&gt;
&lt;br /&gt;
		for _, cat in ipairs(getTrackingCategories(border)) do&lt;br /&gt;
			builder:wikitext(&#039;[[Category:&#039; .. cat .. &#039;]]&#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderMainTable(border, listnums)&lt;br /&gt;
		local tbl = mw.html.create(&#039;table&#039;)&lt;br /&gt;
			:addClass(cfg.class.nowraplinks)&lt;br /&gt;
			:addClass(args[cfg.arg.bodyclass])&lt;br /&gt;
&lt;br /&gt;
		local state = args[cfg.arg.state]&lt;br /&gt;
		if args[cfg.arg.title] and state ~= cfg.keyword.state_plain and state ~= cfg.keyword.state_off then&lt;br /&gt;
			if state == cfg.keyword.state_collapsed then&lt;br /&gt;
				state = cfg.class.collapsed&lt;br /&gt;
			end&lt;br /&gt;
			tbl&lt;br /&gt;
				:addClass(cfg.class.collapsible)&lt;br /&gt;
				:addClass(state or cfg.class.autocollapse)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		tbl:css(&#039;border-spacing&#039;, 0)&lt;br /&gt;
		if border == cfg.keyword.border_subgroup or border == cfg.keyword.border_none then&lt;br /&gt;
			tbl&lt;br /&gt;
				:addClass(cfg.class.navbox_subgroup)&lt;br /&gt;
				:cssText(args[cfg.arg.bodystyle])&lt;br /&gt;
				:cssText(args[cfg.arg.style])&lt;br /&gt;
		else  -- regular navbox - bodystyle and style will be applied to the wrapper table&lt;br /&gt;
			tbl&lt;br /&gt;
				:addClass(cfg.class.navbox_inner)&lt;br /&gt;
				:css(&#039;background&#039;, &#039;transparent&#039;)&lt;br /&gt;
				:css(&#039;color&#039;, &#039;inherit&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		tbl:cssText(args[cfg.arg.innerstyle])&lt;br /&gt;
&lt;br /&gt;
		renderTitleRow(tbl)&lt;br /&gt;
		renderAboveRow(tbl)&lt;br /&gt;
		local listnums_size = #listnums&lt;br /&gt;
		for i, listnum in ipairs(listnums) do&lt;br /&gt;
			renderListRow(tbl, i, listnum, listnums_size)&lt;br /&gt;
		end&lt;br /&gt;
		renderBelowRow(tbl)&lt;br /&gt;
&lt;br /&gt;
		return tbl&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function add_navbox_styles(hiding_templatestyles)&lt;br /&gt;
		local frame = mw.getCurrentFrame()&lt;br /&gt;
		-- This is a lambda so that it doesn&#039;t need the frame as a parameter&lt;br /&gt;
		local function add_user_styles(templatestyles)&lt;br /&gt;
			if not isblank(templatestyles) then&lt;br /&gt;
				return frame:extensionTag{&lt;br /&gt;
					name = &#039;templatestyles&#039;, args = { src = templatestyles }&lt;br /&gt;
				}&lt;br /&gt;
			end&lt;br /&gt;
			return &#039;&#039;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- get templatestyles. load base from config so that Lua only needs to do&lt;br /&gt;
		-- the work once of parser tag expansion&lt;br /&gt;
		local base_templatestyles = cfg.templatestyles&lt;br /&gt;
		local templatestyles = add_user_styles(args[cfg.arg.templatestyles])&lt;br /&gt;
		local child_templatestyles = add_user_styles(args[cfg.arg.child_templatestyles])&lt;br /&gt;
&lt;br /&gt;
		-- The &#039;navbox-styles&#039; div exists to wrap the styles to work around T200206&lt;br /&gt;
		-- more elegantly. Instead of combinatorial rules, this ends up being linear&lt;br /&gt;
		-- number of CSS rules.&lt;br /&gt;
		return mw.html.create(&#039;div&#039;)&lt;br /&gt;
			:addClass(cfg.class.navbox_styles)&lt;br /&gt;
			:wikitext(&lt;br /&gt;
				add_list_styles() .. -- see [hlist_note] applied to &#039;before base_templatestyles&#039;&lt;br /&gt;
				base_templatestyles ..&lt;br /&gt;
				templatestyles ..&lt;br /&gt;
				child_templatestyles ..&lt;br /&gt;
				table.concat(hiding_templatestyles)&lt;br /&gt;
			)&lt;br /&gt;
			:done()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- work around [[phab:T303378]]&lt;br /&gt;
	-- for each arg: find all the templatestyles strip markers, insert them into a&lt;br /&gt;
	-- table. then remove all templatestyles markers from the arg&lt;br /&gt;
	local strip_marker_pattern = &#039;(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)&#039;&lt;br /&gt;
	local argHash = 0&lt;br /&gt;
	for k, arg in pairs(args) do&lt;br /&gt;
		if type(arg) == &#039;string&#039; then&lt;br /&gt;
			for marker in string.gfind(arg, strip_marker_pattern) do&lt;br /&gt;
				table.insert(hiding_templatestyles, marker)&lt;br /&gt;
			end&lt;br /&gt;
			argHash = argHash + #arg&lt;br /&gt;
			args[k] = string.gsub(arg, strip_marker_pattern, &#039;&#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not args.argHash then args.argHash = argHash end&lt;br /&gt;
&lt;br /&gt;
	local listnums = {}&lt;br /&gt;
&lt;br /&gt;
	for k, _ in pairs(args) do&lt;br /&gt;
		if type(k) == &#039;string&#039; then&lt;br /&gt;
			local listnum = k:match(cfg.pattern.listnum)&lt;br /&gt;
			if listnum and args[andnum(&#039;list&#039;, tonumber(listnum))] then&lt;br /&gt;
				table.insert(listnums, tonumber(listnum))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(listnums)&lt;br /&gt;
&lt;br /&gt;
	local border = mw.text.trim(args[cfg.arg.border] or args[1] or &#039;&#039;)&lt;br /&gt;
	if border == cfg.keyword.border_child then&lt;br /&gt;
		border = cfg.keyword.border_subgroup&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- render the main body of the navbox&lt;br /&gt;
	local tbl = renderMainTable(border, listnums)&lt;br /&gt;
&lt;br /&gt;
	local res = mw.html.create()&lt;br /&gt;
	-- render the appropriate wrapper for the navbox, based on the border param&lt;br /&gt;
&lt;br /&gt;
	if border == cfg.keyword.border_none then&lt;br /&gt;
		res:node(add_navbox_styles(hiding_templatestyles))&lt;br /&gt;
		local nav = res:tag(&#039;div&#039;)&lt;br /&gt;
			:attr(&#039;role&#039;, &#039;navigation&#039;)&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args[cfg.arg.title] or args[cfg.arg.above] or (args[cfg.arg.group1]&lt;br /&gt;
			and not args[cfg.arg.group2]) then&lt;br /&gt;
			nav:attr(&lt;br /&gt;
				&#039;aria-labelledby&#039;,&lt;br /&gt;
				mw.uri.anchorEncode(&lt;br /&gt;
					args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1]&lt;br /&gt;
				) .. args.argHash&lt;br /&gt;
			)&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr(&#039;aria-label&#039;, cfg.aria_label .. args.argHash)&lt;br /&gt;
		end&lt;br /&gt;
	elseif border == cfg.keyword.border_subgroup then&lt;br /&gt;
		-- We assume that this navbox is being rendered in a list cell of a&lt;br /&gt;
		-- parent navbox, and is therefore inside a div with padding:0em 0.25em.&lt;br /&gt;
		-- We start with a &amp;lt;/div&amp;gt; to avoid the padding being applied, and at the&lt;br /&gt;
		-- end add a &amp;lt;div&amp;gt; to balance out the parent&#039;s &amp;lt;/div&amp;gt;&lt;br /&gt;
		res&lt;br /&gt;
			:wikitext(&#039;&amp;lt;/div&amp;gt;&#039;)&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
			:wikitext(&#039;&amp;lt;div&amp;gt;&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		res:node(add_navbox_styles(hiding_templatestyles))&lt;br /&gt;
		local nav = res:tag(&#039;div&#039;)&lt;br /&gt;
			:attr(&#039;role&#039;, &#039;navigation&#039;)&lt;br /&gt;
			:addClass(cfg.class.navbox)&lt;br /&gt;
			:addClass(args[cfg.arg.navboxclass])&lt;br /&gt;
			:cssText(args[cfg.arg.bodystyle])&lt;br /&gt;
			:cssText(args[cfg.arg.style])&lt;br /&gt;
			:css(&#039;padding&#039;, &#039;3px&#039;)&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args[cfg.arg.title] or args[cfg.arg.above]&lt;br /&gt;
			or (args[cfg.arg.group1] and not args[cfg.arg.group2]) then&lt;br /&gt;
			nav:attr(&lt;br /&gt;
				&#039;aria-labelledby&#039;,&lt;br /&gt;
				mw.uri.anchorEncode(&lt;br /&gt;
					args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1]&lt;br /&gt;
				) .. args.argHash&lt;br /&gt;
			)&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr(&#039;aria-label&#039;, cfg.aria_label .. args.argHash)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (args[cfg.arg.nocat] or cfg.keyword.nocat_false):lower() == cfg.keyword.nocat_false then&lt;br /&gt;
		renderTrackingCategories(res, border)&lt;br /&gt;
	end&lt;br /&gt;
	return striped(tostring(res), border)&lt;br /&gt;
end --p._navbox&lt;br /&gt;
&lt;br /&gt;
function p._withCollapsibleGroups(pargs)&lt;br /&gt;
	-- table for args passed to navbox&lt;br /&gt;
	local targs = {}&lt;br /&gt;
&lt;br /&gt;
	-- process args&lt;br /&gt;
	local passthroughLocal = {&lt;br /&gt;
		[cfg.arg.bodystyle] = true,&lt;br /&gt;
		[cfg.arg.border] = true,&lt;br /&gt;
		[cfg.arg.style] = true,&lt;br /&gt;
	}&lt;br /&gt;
	for k,v in pairs(pargs) do&lt;br /&gt;
		if k and type(k) == &#039;string&#039; then&lt;br /&gt;
			if passthrough[k] or passthroughLocal[k] then&lt;br /&gt;
				targs[k] = v&lt;br /&gt;
			elseif (k:match(cfg.pattern.num)) then&lt;br /&gt;
				local n = k:match(cfg.pattern.num)&lt;br /&gt;
				local list_and_num = andnum(&#039;list&#039;, n)&lt;br /&gt;
				if ((k:match(cfg.pattern.listnum) or k:match(cfg.pattern.contentnum))&lt;br /&gt;
						and targs[list_and_num] == nil&lt;br /&gt;
						and pargs[andnum(&#039;group&#039;, n)] == nil&lt;br /&gt;
						and pargs[andnum(&#039;sect&#039;, n)] == nil&lt;br /&gt;
						and pargs[andnum(&#039;section&#039;, n)] == nil) then&lt;br /&gt;
					targs[list_and_num] = concatstrings({&lt;br /&gt;
						pargs[list_and_num] or &#039;&#039;,&lt;br /&gt;
						pargs[andnum(&#039;content&#039;, n)] or &#039;&#039;&lt;br /&gt;
					})&lt;br /&gt;
					if (targs[list_and_num] and inArray(cfg.keyword.subgroups, targs[list_and_num])) then&lt;br /&gt;
						targs[list_and_num] = getSubgroup(pargs, n, targs[list_and_num])&lt;br /&gt;
					end&lt;br /&gt;
				elseif ((k:match(cfg.pattern.groupnum) or k:match(cfg.pattern.sectnum) or k:match(cfg.pattern.sectionnum))&lt;br /&gt;
						and targs[list_and_num] == nil) then&lt;br /&gt;
					local titlestyle = concatstyles({&lt;br /&gt;
						pargs[cfg.arg.groupstyle] or &#039;&#039;,&lt;br /&gt;
						pargs[cfg.arg.secttitlestyle] or &#039;&#039;, &lt;br /&gt;
						pargs[andnum(&#039;groupstyle&#039;, n)] or &#039;&#039;, &lt;br /&gt;
						pargs[andnum(&#039;sectiontitlestyle&#039;, n)] or &#039;&#039;&lt;br /&gt;
					})&lt;br /&gt;
					local liststyle = concatstyles({&lt;br /&gt;
						pargs[cfg.arg.liststyle] or &#039;&#039;,&lt;br /&gt;
						pargs[cfg.arg.contentstyle] or &#039;&#039;, &lt;br /&gt;
						pargs[andnum(&#039;liststyle&#039;, n)] or &#039;&#039;, &lt;br /&gt;
						pargs[andnum(&#039;contentstyle&#039;, n)] or &#039;&#039;&lt;br /&gt;
					})&lt;br /&gt;
					local title = concatstrings({&lt;br /&gt;
						pargs[andnum(&#039;group&#039;, n)] or &#039;&#039;,&lt;br /&gt;
						pargs[andnum(&#039;sect&#039;, n)] or &#039;&#039;,&lt;br /&gt;
						pargs[andnum(&#039;section&#039;, n)] or &#039;&#039;&lt;br /&gt;
					})&lt;br /&gt;
					local list = concatstrings({&lt;br /&gt;
						pargs[list_and_num] or &#039;&#039;, &lt;br /&gt;
						pargs[andnum(&#039;content&#039;, n)] or &#039;&#039;&lt;br /&gt;
					})&lt;br /&gt;
					if list and inArray(cfg.keyword.subgroups, list) then&lt;br /&gt;
						list = getSubgroup(pargs, n, list)&lt;br /&gt;
					end&lt;br /&gt;
					local abbr_and_num = andnum(&#039;abbr&#039;, n)&lt;br /&gt;
					local state = (pargs[abbr_and_num] and pargs[abbr_and_num] == pargs[cfg.arg.selected]) &lt;br /&gt;
						and cfg.keyword.state_uncollapsed&lt;br /&gt;
						or (pargs[andnum(&#039;state&#039;, n)] or cfg.keyword.state_collapsed)&lt;br /&gt;
					&lt;br /&gt;
					targs[list_and_num] =p._navbox({&lt;br /&gt;
						cfg.keyword.border_child,&lt;br /&gt;
						[cfg.arg.navbar] = cfg.keyword.navbar_plain,&lt;br /&gt;
						[cfg.arg.state] = state,&lt;br /&gt;
						[cfg.arg.basestyle] = pargs[cfg.arg.basestyle],&lt;br /&gt;
						[cfg.arg.title] = title,&lt;br /&gt;
						[cfg.arg.titlestyle] = titlestyle,&lt;br /&gt;
						[andnum(&#039;list&#039;, 1)] = list,&lt;br /&gt;
						[cfg.arg.liststyle] = liststyle,&lt;br /&gt;
						[cfg.arg.listclass] = pargs[andnum(&#039;listclass&#039;, n)],&lt;br /&gt;
						[cfg.arg.image] = pargs[andnum(&#039;image&#039;, n)],&lt;br /&gt;
						[cfg.arg.imageleft] = pargs[andnum(&#039;imageleft&#039;, n)],&lt;br /&gt;
						[cfg.arg.listpadding] = pargs[cfg.arg.listpadding],&lt;br /&gt;
						argHash = pargs.argHash&lt;br /&gt;
					})&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- ordering of style and bodystyle&lt;br /&gt;
	targs[cfg.arg.style] = concatstyles({targs[cfg.arg.style] or &#039;&#039;, targs[cfg.arg.bodystyle] or &#039;&#039;})&lt;br /&gt;
	targs[cfg.arg.bodystyle] = nil&lt;br /&gt;
&lt;br /&gt;
	-- child or subgroup&lt;br /&gt;
	if targs[cfg.arg.border] == nil then targs[cfg.arg.border] = pargs[1] end&lt;br /&gt;
&lt;br /&gt;
	return p._navbox(targs)&lt;br /&gt;
end --p._withCollapsibleGroups&lt;br /&gt;
&lt;br /&gt;
function p._withColumns(pargs)&lt;br /&gt;
	-- table for args passed to navbox&lt;br /&gt;
	local targs = {}&lt;br /&gt;
&lt;br /&gt;
	-- tables of column numbers&lt;br /&gt;
	local colheadernums = {}&lt;br /&gt;
	local colnums = {}&lt;br /&gt;
	local colfooternums = {}&lt;br /&gt;
&lt;br /&gt;
	-- process args&lt;br /&gt;
	local passthroughLocal = {&lt;br /&gt;
		[cfg.arg.evenstyle]=true,&lt;br /&gt;
		[cfg.arg.groupstyle]=true,&lt;br /&gt;
		[cfg.arg.liststyle]=true,&lt;br /&gt;
		[cfg.arg.oddstyle]=true,&lt;br /&gt;
		[cfg.arg.state]=true,&lt;br /&gt;
	}&lt;br /&gt;
	for k,v in pairs(pargs) do&lt;br /&gt;
		if passthrough[k] or passthroughLocal[k] then&lt;br /&gt;
			targs[k] = v&lt;br /&gt;
		elseif type(k) == &#039;string&#039; then&lt;br /&gt;
			if k:match(cfg.pattern.listnum) then&lt;br /&gt;
				local n = k:match(cfg.pattern.listnum)&lt;br /&gt;
				targs[andnum(&#039;liststyle&#039;, n + 2)] = pargs[andnum(&#039;liststyle&#039;, n)]&lt;br /&gt;
				targs[andnum(&#039;group&#039;, n + 2)] = pargs[andnum(&#039;group&#039;, n)]&lt;br /&gt;
				targs[andnum(&#039;groupstyle&#039;, n + 2)] = pargs[andnum(&#039;groupstyle&#039;, n)]&lt;br /&gt;
				if v and inArray(cfg.keyword.subgroups, v) then&lt;br /&gt;
					targs[andnum(&#039;list&#039;, n + 2)] = getSubgroup(pargs, n, v)&lt;br /&gt;
				else&lt;br /&gt;
					targs[andnum(&#039;list&#039;, n + 2)] = v&lt;br /&gt;
				end&lt;br /&gt;
			elseif (k:match(cfg.pattern.colheadernum) and v ~= &#039;&#039;) then&lt;br /&gt;
				table.insert(colheadernums, tonumber(k:match(cfg.pattern.colheadernum)))&lt;br /&gt;
			elseif (k:match(cfg.pattern.colnum) and v ~= &#039;&#039;) then&lt;br /&gt;
				table.insert(colnums, tonumber(k:match(cfg.pattern.colnum)))&lt;br /&gt;
			elseif (k:match(cfg.pattern.colfooternum) and v ~= &#039;&#039;) then&lt;br /&gt;
				table.insert(colfooternums, tonumber(k:match(cfg.pattern.colfooternum)))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(colheadernums)&lt;br /&gt;
	table.sort(colnums)&lt;br /&gt;
	table.sort(colfooternums)&lt;br /&gt;
&lt;br /&gt;
	-- HTML table for list1&lt;br /&gt;
	local coltable = mw.html.create( &#039;table&#039; ):addClass(&#039;navbox-columns-table&#039;)&lt;br /&gt;
	local row, col&lt;br /&gt;
&lt;br /&gt;
	local tablestyle = ( (#colheadernums &amp;gt; 0) or (not isblank(pargs[cfg.arg.fullwidth])) )&lt;br /&gt;
		and &#039;width:100%&#039;&lt;br /&gt;
		or &#039;width:auto; margin-left:auto; margin-right:auto&#039;&lt;br /&gt;
&lt;br /&gt;
	coltable:cssText(concatstyles({&lt;br /&gt;
		&#039;border-spacing: 0px; text-align:left&#039;,&lt;br /&gt;
		tablestyle,&lt;br /&gt;
		pargs[cfg.arg.coltablestyle] or &#039;&#039;&lt;br /&gt;
	}))&lt;br /&gt;
&lt;br /&gt;
	--- Header row ---&lt;br /&gt;
	if (#colheadernums &amp;gt; 0) then&lt;br /&gt;
		row = coltable:tag(&#039;tr&#039;)&lt;br /&gt;
		for k, n in ipairs(colheadernums) do&lt;br /&gt;
			col = row:tag(&#039;th&#039;):addClass(&#039;navbox-abovebelow&#039;)&lt;br /&gt;
			col:cssText(concatstyles({&lt;br /&gt;
				(k &amp;gt; 1) and &#039;border-left:2px solid #fdfdfd&#039; or &#039;&#039;,&lt;br /&gt;
				pargs[cfg.arg.colheaderstyle] or &#039;&#039;,&lt;br /&gt;
				pargs[andnum(&#039;colheaderstyle&#039;, n)] or &#039;&#039;&lt;br /&gt;
			}))&lt;br /&gt;
			col:attr(&#039;colspan&#039;, tonumber(pargs[andnum(&#039;colheadercolspan&#039;, n)]))&lt;br /&gt;
			col:wikitext(pargs[andnum(&#039;colheader&#039;, n)])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--- Main columns ---&lt;br /&gt;
	row = coltable:tag(&#039;tr&#039;):css(&#039;vertical-align&#039;, &#039;top&#039;)&lt;br /&gt;
	for k, n in ipairs(colnums) do&lt;br /&gt;
		if k == 1 and isblank(pargs[andnum(&#039;colheader&#039;, 1)])&lt;br /&gt;
				and isblank(pargs[andnum(&#039;colfooter&#039;, 1)])&lt;br /&gt;
				and isblank(pargs[cfg.arg.fullwidth]) then&lt;br /&gt;
			local nopad = inArray(&lt;br /&gt;
				{&#039;off&#039;, &#039;0&#039;, &#039;0em&#039;, &#039;0px&#039;},&lt;br /&gt;
				mw.ustring.gsub(pargs[cfg.arg.padding] or &#039;&#039;, &#039;[;%%]&#039;, &#039;&#039;))&lt;br /&gt;
			if not nopad then&lt;br /&gt;
				row:tag(&#039;td&#039;):wikitext(&#039;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;)&lt;br /&gt;
					:css(&#039;width&#039;, (pargs[cfg.arg.padding] or &#039;5em&#039;))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		col = row:tag(&#039;td&#039;):addClass(&#039;navbox-list&#039;)&lt;br /&gt;
		col:cssText(concatstyles({&lt;br /&gt;
			(k &amp;gt; 1) and &#039;border-left:2px solid #fdfdfd&#039; or &#039;&#039;,&lt;br /&gt;
			&#039;padding:0px&#039;,&lt;br /&gt;
			pargs[cfg.arg.colstyle] or &#039;&#039;,&lt;br /&gt;
			((n%2 == 0) and pargs[cfg.arg.evencolstyle] or pargs[cfg.arg.oddcolstyle]) or &#039;&#039;,&lt;br /&gt;
			pargs[andnum(&#039;colstyle&#039;, n)] or &#039;&#039;,&lt;br /&gt;
			&#039;width:&#039; .. (pargs[andnum(&#039;colwidth&#039;, n)] or pargs[cfg.arg.colwidth] or &#039;10em&#039;)&lt;br /&gt;
		}))&lt;br /&gt;
		local wt = pargs[andnum(&#039;col&#039;, n)]&lt;br /&gt;
		if wt and inArray(cfg.keyword.subgroups, wt) then&lt;br /&gt;
			wt = getSubgroup(pargs, n, wt, cfg.arg.col_and_num)&lt;br /&gt;
		end&lt;br /&gt;
		col:tag(&#039;div&#039;):newline():wikitext(wt):newline()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--- Footer row ---&lt;br /&gt;
	if (#colfooternums &amp;gt; 0) then&lt;br /&gt;
		row = coltable:tag(&#039;tr&#039;)&lt;br /&gt;
		for k, n in ipairs(colfooternums) do&lt;br /&gt;
			col = row:tag(&#039;td&#039;):addClass(&#039;navbox-abovebelow&#039;)&lt;br /&gt;
			col:cssText(concatstyles({&lt;br /&gt;
				(k &amp;gt; 1) and &#039;border-left:2px solid #fdfdfd&#039; or &#039;&#039;,&lt;br /&gt;
				&#039;font-weight:bold&#039;,&lt;br /&gt;
				pargs[cfg.arg.colfooterstyle] or &#039;&#039;,&lt;br /&gt;
				pargs[andnum(&#039;colfooterstyle&#039;, n)] or &#039;&#039;&lt;br /&gt;
			}))&lt;br /&gt;
			col:attr(&#039;colspan&#039;, tonumber(pargs[andnum(&#039;colfootercolspan&#039;, n)]))&lt;br /&gt;
			col:wikitext(pargs[andnum(&#039;colfooter&#039;, n)])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- assign table to list1&lt;br /&gt;
	targs[andnum(&#039;list&#039;, 1)] = tostring(coltable)&lt;br /&gt;
	if isblank(pargs[andnum(&#039;colheader&#039;, 1)]) &lt;br /&gt;
			and isblank(pargs[andnum(&#039;col&#039;, 1)])&lt;br /&gt;
			and isblank(pargs[andnum(&#039;colfooter&#039;, 1)]) then&lt;br /&gt;
		targs[andnum(&#039;list&#039;, 1)] = targs[andnum(&#039;list&#039;, 1)] ..&lt;br /&gt;
			cfg.category.without_first_col&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Other parameters&lt;br /&gt;
	targs[cfg.arg.border] = pargs[cfg.arg.border] or pargs[1]&lt;br /&gt;
	targs[cfg.arg.evenodd] = (not isblank(pargs[cfg.arg.evenodd])) and pargs[cfg.arg.evenodd] or nil&lt;br /&gt;
	targs[cfg.arg.list1padding] = &#039;0px&#039;&lt;br /&gt;
	targs[andnum(&#039;liststyle&#039;, 1)] = &#039;background:transparent;color:inherit;&#039;&lt;br /&gt;
	targs[cfg.arg.style] = concatstyles({pargs[cfg.arg.style], pargs[cfg.arg.bodystyle]})&lt;br /&gt;
	targs[cfg.arg.tracking] = &#039;no&#039;&lt;br /&gt;
	&lt;br /&gt;
	return p._navbox(targs)&lt;br /&gt;
end --p._withColumns&lt;br /&gt;
&lt;br /&gt;
-- Template entry points&lt;br /&gt;
function p.navbox (frame, boxtype)&lt;br /&gt;
	local function readArgs(args, prefix)&lt;br /&gt;
		-- Read the arguments in the order they&#039;ll be output in, to make references&lt;br /&gt;
		-- number in the right order.&lt;br /&gt;
		local _&lt;br /&gt;
		_ = args[prefix .. cfg.arg.title]&lt;br /&gt;
		_ = args[prefix .. cfg.arg.above]&lt;br /&gt;
		-- Limit this to 20 as covering &#039;most&#039; cases (that&#039;s a SWAG) and because&lt;br /&gt;
		-- iterator approach won&#039;t work here&lt;br /&gt;
		for i = 1, 20 do&lt;br /&gt;
			_ = args[prefix .. andnum(&#039;group&#039;, i)]&lt;br /&gt;
			if inArray(cfg.keyword.subgroups, args[prefix .. andnum(&#039;list&#039;, i)]) then&lt;br /&gt;
				for _, v in ipairs(cfg.arg.subgroups_and_num) do&lt;br /&gt;
					readArgs(args, prefix .. string.format(v, i) .. &amp;quot;_&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
				readArgs(args, prefix .. andnum(&#039;col&#039;, i) .. &amp;quot;_&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		_ = args[prefix .. cfg.arg.below]&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
	end&lt;br /&gt;
	local args = getArgs(frame, {wrappers = {cfg.pattern[boxtype or &#039;navbox&#039;]}})&lt;br /&gt;
	readArgs(args, &amp;quot;&amp;quot;)&lt;br /&gt;
	args.argHash = nil -- we shouldn&#039;t accept argHash passed from a template&lt;br /&gt;
	args.type = args.type or cfg.keyword[boxtype]&lt;br /&gt;
	return p[&#039;_navbox&#039;](args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p[cfg.keyword.with_collapsible_groups] = function (frame)&lt;br /&gt;
	return p.navbox(frame, &#039;with_collapsible_groups&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p[cfg.keyword.with_columns] = function (frame)&lt;br /&gt;
	return p.navbox(frame, &#039;with_columns&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Module:Icon/data&amp;diff=297</id>
		<title>Module:Icon/data</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Module:Icon/data&amp;diff=297"/>
		<updated>2025-12-11T06:08:58Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module stores icon data for [[Module:Icon]].&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Icon data&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local data = {&lt;br /&gt;
	fa = {&lt;br /&gt;
		image = &amp;quot;Featured article star.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	far = {&lt;br /&gt;
		image = &amp;quot;Cscr-star piece.png&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured article review&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	farc = {&lt;br /&gt;
		image = &amp;quot;Cscr-star piece.png&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured article removal candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	ffa = {&lt;br /&gt;
		aliases = {&amp;quot;dfa&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Featured article star - cross.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Former featured article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	fac = {&lt;br /&gt;
		aliases = {&amp;quot;fan&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Cscr-candidate.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured article candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	ffac = {&lt;br /&gt;
		aliases = {&amp;quot;nofa&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Cscr-former.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Former featured article candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	fl = {&lt;br /&gt;
		image = &amp;quot;Featured article star.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured list&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	flrc = {&lt;br /&gt;
		aliases = {&amp;quot;flr&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Cscr-star piece.png&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured list removal candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	ffl = {&lt;br /&gt;
		aliases = {&amp;quot;dfl&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Cscr-featured-strike.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Former featured list&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	flc = {&lt;br /&gt;
		aliases = {&amp;quot;fln&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Cscr-candidate.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured list candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	fflc = {&lt;br /&gt;
		aliases = {&amp;quot;nofl&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Cscr-former.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Former featured list candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	a = {&lt;br /&gt;
		image = &amp;quot;Symbol a class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;A-Class article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	admin = {&lt;br /&gt;
		aliases = {&amp;quot;mop&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Wikipedia Administrator.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Administrator&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	dac = {&lt;br /&gt;
		aliases = {&amp;quot;daa&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Symbol unsupport A vote.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Demoted A-Class article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	acc = {&lt;br /&gt;
		aliases = {&amp;quot;acn&amp;quot;, &amp;quot;aac&amp;quot;},&lt;br /&gt;
		image = &amp;quot;A candidate.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;A-Class article candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	noac = {&lt;br /&gt;
		aliases = {&amp;quot;faac&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Symbol unsupport A vote.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Failed A-Class article candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	ga = {&lt;br /&gt;
		image = &amp;quot;Symbol support vote.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Good article&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	gar = {&lt;br /&gt;
		image = &amp;quot;GA Candidate Neutral vote(ChaosNil).svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Good article reassessment&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	dga = {&lt;br /&gt;
		image = &amp;quot;Symbol unsupport vote.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Delisted good article&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	gan = {&lt;br /&gt;
		aliases = {&amp;quot;gac&amp;quot;},&lt;br /&gt;
		image = &amp;quot;GA candidate.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Good article nominee&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	ga2 = {&lt;br /&gt;
		image = &amp;quot;Symbol neutral vote.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Good article, 2nd opinion&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	gah = {&lt;br /&gt;
		image = &amp;quot;Symbol wait.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Good article on hold&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	fgan = {&lt;br /&gt;
		aliases = {&amp;quot;noga&amp;quot;, &amp;quot;gaf&amp;quot;, &amp;quot;gf&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Symbol oppose vote.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Former good article nominee&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	fp = {&lt;br /&gt;
		image = &amp;quot;Cscr-featured.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured picture&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	fpc = {&lt;br /&gt;
		aliases = {&amp;quot;fpn&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Cscr-candidate.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured picture candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	ffp = {&lt;br /&gt;
		image = &amp;quot;Cscr-former.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Former featured picture&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	vp = {&lt;br /&gt;
		image = &amp;quot;ENWP VP Logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Valued picture&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	vpc = {&lt;br /&gt;
		image = &amp;quot;Valued pics 1.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Valued picture candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	fs = {&lt;br /&gt;
		image = &amp;quot;Cscr-featured.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured sound&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	ffs = {&lt;br /&gt;
		image = &amp;quot;Cscr-former.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Former featured sound&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	fsc = {&lt;br /&gt;
		image = &amp;quot;Cscr-candidate.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured sound candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	fpo = {&lt;br /&gt;
		image = &amp;quot;Linecons big-star.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Before the featured portal process ceased in 2017, this had been designated as a featured portal.&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	fpor = {&lt;br /&gt;
		image = &amp;quot;Cscr-star piece.png&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured portal review&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	ffpo = {&lt;br /&gt;
		image = &amp;quot;Featured article star - cross.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Former featured portal&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	fpoc = {&lt;br /&gt;
		image = &amp;quot;Cscr-candidate.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured portal candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	ft = {&lt;br /&gt;
		image = &amp;quot;Cscr-featuredtopic.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured topic&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	ftrc = {&lt;br /&gt;
		image = &amp;quot;Cscr-star piece.png&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured topic removal candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	fft = {&lt;br /&gt;
		aliases = {&amp;quot;dft&amp;quot;},&lt;br /&gt;
		image = &amp;quot;DFT candidate_cluster.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Former featured topic&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	ftc = {&lt;br /&gt;
		aliases = {&amp;quot;ftn&amp;quot;},&lt;br /&gt;
		image = &amp;quot;FT candidate cluster.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured topic candidate&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	gt = {&lt;br /&gt;
		image = &amp;quot;Support cluster.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Good topic&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	gtrc = {&lt;br /&gt;
		image = &amp;quot;Symbol unsupport vote.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Good topic removal candidate&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	gtc = {&lt;br /&gt;
		aliases = {&amp;quot;gtn&amp;quot;},&lt;br /&gt;
		image = &amp;quot;GA candidate cluster.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Good topic candidate&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	bplus = {&lt;br /&gt;
		aliases = {&amp;quot;b+&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Symbol bplus class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Bplus-Class article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	b = {&lt;br /&gt;
		image = &amp;quot;Symbol b class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;B-Class article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	br = {&lt;br /&gt;
		aliases = {&amp;quot;bcr&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Bclass-checklist.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;B-Class review&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	c = {&lt;br /&gt;
		image = &amp;quot;Symbol c class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;C-Class article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	start = {&lt;br /&gt;
		image = &amp;quot;Symbol start class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Start-Class article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	stub = {&lt;br /&gt;
		image = &amp;quot;Symbol stub class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Stub-Class article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	list = {&lt;br /&gt;
		aliases = {&amp;quot;comparison&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Symbol list class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;List-Class article&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	no = {&lt;br /&gt;
		image = &amp;quot;Crystal button cancel.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Unknown-Class article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	book = {&lt;br /&gt;
		image = &amp;quot;Symbol book class2.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Wikipedia book&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	category = {&lt;br /&gt;
		aliases = {&amp;quot;cat&amp;quot;, &amp;quot;categ&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Symbol category class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Category&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	disambiguation = {&lt;br /&gt;
		aliases = {&amp;quot;dab&amp;quot;, &amp;quot;disamb&amp;quot;, &amp;quot;disambig&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Symbol dab class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Disambiguation page&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	image = {&lt;br /&gt;
		aliases = {&amp;quot;file&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Symbol file class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;File&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	needed = {&lt;br /&gt;
		image = &amp;quot;Symbol needed class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Needed article&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	outline = {&lt;br /&gt;
		image = &amp;quot;Global thinking.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Outline&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	portal = {&lt;br /&gt;
		image = &amp;quot;Symbol portal class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Portal&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	project = {&lt;br /&gt;
		image = &amp;quot;Symbol project class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Project page&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	redirect = {&lt;br /&gt;
		aliases = {&amp;quot;red&amp;quot;, &amp;quot;redir&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Symbol redirect vote2.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Redirect&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	template = {&lt;br /&gt;
		aliases = {&amp;quot;temp&amp;quot;, &amp;quot;templ&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Symbol template class pink.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Template&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	essay = {&lt;br /&gt;
		image = &amp;quot;Essay.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Essay&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	na = {&lt;br /&gt;
		image = &amp;quot;Symbol na class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Non-article page&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	aa = {&lt;br /&gt;
		image = &amp;quot;Yes check.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Audited article of limited subject matter&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	da = {&lt;br /&gt;
		image = &amp;quot;Symbol oppose vote.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Demoted article&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	dyk = {&lt;br /&gt;
		image = &amp;quot;Symbol question.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Did You Know?&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	dyk2 = {&lt;br /&gt;
		image = &amp;quot;DYK questionmark icon.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Did You Know?&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	pr = {&lt;br /&gt;
		image = &amp;quot;Nuvola apps kedit.png&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Peer review&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	ppr = {&lt;br /&gt;
		image = &amp;quot;Nuvola apps kedit.png&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Portal peer review&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	q = {&lt;br /&gt;
		aliases = {&amp;quot;question&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Symbol question.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Question&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	cleanup = {&lt;br /&gt;
		image = &amp;quot;Edit-clear.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Cleanup work&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	qi = {&lt;br /&gt;
		image = &amp;quot;Quality images logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Quality image on Wikimedia Commons&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	vi = {&lt;br /&gt;
		image = &amp;quot;Valued image seal.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Valued image on Wikimedia Commons&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	tfa = {&lt;br /&gt;
		image = &amp;quot;Wikipedia-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Today&#039;s Featured Article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	tfl = {&lt;br /&gt;
		image = &amp;quot;Wikipedia-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Today&#039;s Featured List&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	itn = {&lt;br /&gt;
		image = &amp;quot;Globe current.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;In The News&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	otd = {&lt;br /&gt;
		image = &amp;quot;Nuvola apps date.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;On This Day&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	wikiproject = {&lt;br /&gt;
		image = &amp;quot;People icon.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;WikiProject&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	goce = {&lt;br /&gt;
		image = &amp;quot;Writing Magnifying.PNG&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Guild of Copy Editors&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	wikipedia = {&lt;br /&gt;
		image = &amp;quot;Wikipedia-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Wikipedia page&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	commons = {&lt;br /&gt;
		image = &amp;quot;Commons-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Commons page&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	wikiquote = {&lt;br /&gt;
		image = &amp;quot;Wikiquote-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Wikiquote page&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	wikiversity = {&lt;br /&gt;
		image = &amp;quot;Wikiversity logo 2017.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Wikiversity page&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	wikibooks = {&lt;br /&gt;
		image = &amp;quot;Wikibooks-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Wikibooks page&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	wikisource = {&lt;br /&gt;
		image = &amp;quot;Wikisource-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Wikisource page&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	wiktionary = {&lt;br /&gt;
		image = &amp;quot;Wiktionary-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Wiktionary page&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	wikinews = {&lt;br /&gt;
		image = &amp;quot;Wikinews-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Wikinews page&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	wikispecies = {&lt;br /&gt;
		image = &amp;quot;Wikispecies-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Wikispecies page&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	wikidata = {&lt;br /&gt;
		image = &amp;quot;Wikidata-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Wikidata page&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	wikivoyage = {&lt;br /&gt;
		image = &amp;quot;Wikivoyage-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Wikivoyage page&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	 mediawiki = {&lt;br /&gt;
		 image = &amp;quot;MediaWiki-2020-icon.svg&amp;quot;,&lt;br /&gt;
		 tooltip = &amp;quot;MediaWiki&amp;quot;,&lt;br /&gt;
		 link = true,&lt;br /&gt;
	 },&lt;br /&gt;
	 phabricator = {&lt;br /&gt;
		 aliases = {&amp;quot;phab&amp;quot;},&lt;br /&gt;
		 image = &amp;quot;Favicon-Phabricator-WM.svg&amp;quot;,&lt;br /&gt;
		 tooltip = &amp;quot;Phabricator&amp;quot;,&lt;br /&gt;
		 link = false,&lt;br /&gt;
	 },&lt;br /&gt;
	 wikitech = {&lt;br /&gt;
		 image = &amp;quot;Wikitech-2021-blue-icon.svg&amp;quot;,&lt;br /&gt;
		 tooltip = &amp;quot;Wikitech&amp;quot;,&lt;br /&gt;
		 link = true,&lt;br /&gt;
	 },&lt;br /&gt;
	meta = {&lt;br /&gt;
		image = &amp;quot;Wikimedia Community Logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Meta-wiki page&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	four = {&lt;br /&gt;
		aliases = {&amp;quot;4a&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Four Award with draft icon.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Four Award&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	million = {&lt;br /&gt;
		image = &amp;quot;Million award logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Million Award&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	module = {&lt;br /&gt;
		image = &amp;quot;Lua-logo-nolabel.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Module&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	vital = {&lt;br /&gt;
		image = &amp;quot;Círculos_Concéntricos.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Vital article&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	potd  = {&lt;br /&gt;
		image = &amp;quot;Wikipedia-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Picture of the Day&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	draft = {&lt;br /&gt;
		image = &amp;quot;Symbol draft class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Draft-Class article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	user = {&lt;br /&gt;
		image = &amp;quot;Symbol user class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;User-Class article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	info = {&lt;br /&gt;
		image = &amp;quot;Information icon.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Information&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	discussionnotificaion = {&lt;br /&gt;
		image = &amp;quot;Echo edit-user-talk icon.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Discussion&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	alert = {&lt;br /&gt;
		image = &amp;quot;OOjs UI icon alert.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Black alert&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	[&#039;alert-imagewarning&#039;] = {&lt;br /&gt;
		image = &amp;quot;OOjs UI icon alert image warning.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Alert&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	[&#039;alert-constructive&#039;] = {&lt;br /&gt;
		image = &amp;quot;OOjs UI icon alert-constructive.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Green alert&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	[&#039;alert-blackred&#039;] = {&lt;br /&gt;
		image = &amp;quot;OOjs UI icon alert destructive black-darkred.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Black, white, and red alert&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	barnstar2 = {&lt;br /&gt;
		image = &amp;quot;Original Barnstar Hires.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Original barnstar hires&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	barnstar = {&lt;br /&gt;
		image = &amp;quot;Original Barnstar.png&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Original barnstar&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	gareview = {&lt;br /&gt;
		aliases = {&amp;quot;ganrv&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Good article review icon.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Good article review&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	_DEFAULT = {&lt;br /&gt;
		image = &amp;quot;Symbol question.svg&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- End icon data&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Make aliases work the same as normal keys, and remove the &amp;quot;aliases&amp;quot; subtables.&lt;br /&gt;
local ret= {}&lt;br /&gt;
for code, iconData in pairs(data) do&lt;br /&gt;
	iconData.canonicalCode = code&lt;br /&gt;
	if iconData.aliases then&lt;br /&gt;
		for _, alias in ipairs(iconData.aliases) do&lt;br /&gt;
			ret[alias] = iconData&lt;br /&gt;
		end&lt;br /&gt;
		iconData.aliases = nil&lt;br /&gt;
	end&lt;br /&gt;
	ret[code] = iconData&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return ret&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Module:Icon&amp;diff=295</id>
		<title>Module:Icon</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Module:Icon&amp;diff=295"/>
		<updated>2025-12-11T06:08:58Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements [[Template:Icon]].&lt;br /&gt;
&lt;br /&gt;
require(&amp;quot;strict&amp;quot;)&lt;br /&gt;
local yesNo = require(&amp;quot;Module:Yesno&amp;quot;)&lt;br /&gt;
local getArgs = require(&amp;quot;Module:Arguments&amp;quot;).getArgs&lt;br /&gt;
local getPlain = nil&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Determine whether we&#039;re being called from a sandbox&lt;br /&gt;
local sandbox = mw.getCurrentFrame():getTitle():find(&#039;sandbox&#039;, 1, true) and &#039;/sandbox&#039; or &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-- Implements [[Template:Icon]]&lt;br /&gt;
-- Returns the icon image corresponding to a string (like &#039;B&#039;)&lt;br /&gt;
function p._main(args, data)&lt;br /&gt;
	local data_module = &#039;Module:Icon/data&#039;..sandbox&lt;br /&gt;
	data = data or mw.loadData(data_module)&lt;br /&gt;
	local code = args.class or args[1]&lt;br /&gt;
	local iconData&lt;br /&gt;
	if code then&lt;br /&gt;
		code = code:match(&#039;^%s*(.-)%s*$&#039;):lower() -- trim whitespace and put in lower case&lt;br /&gt;
		iconData = data[code]&lt;br /&gt;
	end&lt;br /&gt;
	if not iconData then&lt;br /&gt;
		iconData = data._DEFAULT&lt;br /&gt;
	end&lt;br /&gt;
	return string.format(&lt;br /&gt;
		&#039;[[File:%s%s%s|%s|class=noviewer|alt=%s]]&#039;,&lt;br /&gt;
		iconData.image,&lt;br /&gt;
		iconData.tooltip and &#039;|&#039; .. iconData.tooltip or &#039;&#039;,&lt;br /&gt;
		iconData.link == false and &#039;|link=&#039; or &#039;&#039;,&lt;br /&gt;
		args.size or &#039;16x16px&#039;,&lt;br /&gt;
		iconData.alt or &#039;&#039;&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Implements [[Template:Icon link]], a superset of [[Template:Icon]]&lt;br /&gt;
-- Returns an icon, plus a suitably formatted wikilink&lt;br /&gt;
function p._link(args, data)&lt;br /&gt;
	args.size = args.size or args.iconsize&lt;br /&gt;
	local icon = p._main(args, data)&lt;br /&gt;
	-- If no link given in args[2], default back to [[Template:Icon]]&lt;br /&gt;
	if not args[2] then&lt;br /&gt;
		return icon&lt;br /&gt;
	end&lt;br /&gt;
	-- Strip wiki markup out of link&lt;br /&gt;
	getPlain = getPlain or require(&amp;quot;Module:Text&amp;quot;).Text().getPlain&lt;br /&gt;
	local link = getPlain(args[2])&lt;br /&gt;
	local display = args[3] or args[2]&lt;br /&gt;
	-- italicize display string, if requested&lt;br /&gt;
	if yesNo(args.i) or yesNo(args.italic) or yesNo(args.italics) then&lt;br /&gt;
		display = &#039;&amp;lt;i&amp;gt;&#039;..display..&#039;&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	-- if display is link, just use standard wlink&lt;br /&gt;
	if link == display then&lt;br /&gt;
		return &#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&#039;..icon..&#039; &amp;lt;/span&amp;gt;[[&#039;..link..&#039;]]&#039;&lt;br /&gt;
	end&lt;br /&gt;
	return &#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&#039;..icon..&#039; &amp;lt;/span&amp;gt;[[&#039;..link..&#039;|&#039;..display..&#039;]]&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = getArgs(frame,{parentFirst=true})&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.link(frame)&lt;br /&gt;
	local args = getArgs(frame,{parentFirst=true})&lt;br /&gt;
	return p._link(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p[&#039;&#039;] = function (frame) return p._main(frame.args) end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Navbox_with_collapsible_groups&amp;diff=293</id>
		<title>Template:Navbox with collapsible groups</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Navbox_with_collapsible_groups&amp;diff=293"/>
		<updated>2025-12-11T06:08:58Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:Navbox|with collapsible groups}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Navbox&amp;diff=291</id>
		<title>Template:Navbox</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Navbox&amp;diff=291"/>
		<updated>2025-12-11T06:08:57Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:Navbox|navbox}}&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;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Icon&amp;diff=289</id>
		<title>Template:Icon</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Icon&amp;diff=289"/>
		<updated>2025-12-11T06:08:57Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:Icon|main}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Module:Unsubst&amp;diff=287</id>
		<title>Module:Unsubst</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Module:Unsubst&amp;diff=287"/>
		<updated>2025-12-11T06:08:57Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local checkType = require(&#039;libraryUtil&#039;).checkType&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local BODY_PARAM = &#039;$B&#039;&lt;br /&gt;
&lt;br /&gt;
local specialParams = {&lt;br /&gt;
	[&#039;$params&#039;] = &#039;parameter list&#039;,&lt;br /&gt;
	[&#039;$aliases&#039;] = &#039;parameter aliases&#039;,&lt;br /&gt;
	[&#039;$flags&#039;] = &#039;flags&#039;,&lt;br /&gt;
	[&#039;$B&#039;] = &#039;template content&#039;,&lt;br /&gt;
	[&#039;$template-name&#039;] = &#039;template invocation name override&#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame, body)&lt;br /&gt;
	-- If we are substing, this function returns a template invocation, and if&lt;br /&gt;
	-- not, it returns the template body. The template body can be specified in&lt;br /&gt;
	-- the body parameter, or in the template parameter defined in the&lt;br /&gt;
	-- BODY_PARAM variable. This function can be called from Lua or from&lt;br /&gt;
	-- #invoke.&lt;br /&gt;
&lt;br /&gt;
	-- Return the template body if we aren&#039;t substing.&lt;br /&gt;
	if not mw.isSubsting() then&lt;br /&gt;
		if body ~= nil then&lt;br /&gt;
			return body&lt;br /&gt;
		elseif frame.args[BODY_PARAM] ~= nil then&lt;br /&gt;
			return frame.args[BODY_PARAM]&lt;br /&gt;
		else&lt;br /&gt;
			error(string.format(&lt;br /&gt;
				&amp;quot;no template content specified (use parameter &#039;%s&#039; from #invoke)&amp;quot;,&lt;br /&gt;
				BODY_PARAM&lt;br /&gt;
			), 2)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Sanity check for the frame object.&lt;br /&gt;
	if type(frame) ~= &#039;table&#039;&lt;br /&gt;
		or type(frame.getParent) ~= &#039;function&#039;&lt;br /&gt;
		or not frame:getParent()&lt;br /&gt;
	then&lt;br /&gt;
		error(&lt;br /&gt;
			&amp;quot;argument #1 to &#039;main&#039; must be a frame object with a parent &amp;quot; ..&lt;br /&gt;
			&amp;quot;frame available&amp;quot;,&lt;br /&gt;
			2&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Find the invocation name.&lt;br /&gt;
	local mTemplateInvocation = require(&#039;Module:Template invocation&#039;)&lt;br /&gt;
	local name&lt;br /&gt;
&lt;br /&gt;
	if frame.args[&#039;$template-name&#039;] and &#039;&#039; ~= frame.args[&#039;$template-name&#039;] then&lt;br /&gt;
		name = frame.args[&#039;$template-name&#039;]										-- override whatever the template name is with this name&lt;br /&gt;
	else&lt;br /&gt;
		name = mTemplateInvocation.name(frame:getParent():getTitle())&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Combine passed args with passed defaults&lt;br /&gt;
	local args = {}&lt;br /&gt;
	if string.find( &#039;,&#039;..(frame.args[&#039;$flags&#039;] or &#039;&#039;)..&#039;,&#039;, &#039;,%s*override%s*,&#039; ) then&lt;br /&gt;
		for k, v in pairs( frame:getParent().args ) do&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
		for k, v in pairs( frame.args ) do&lt;br /&gt;
			if not specialParams[k] then&lt;br /&gt;
				if v == &#039;__DATE__&#039; then&lt;br /&gt;
					v = mw.getContentLanguage():formatDate( &#039;F Y&#039; )&lt;br /&gt;
				end&lt;br /&gt;
				args[k] = v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		for k, v in pairs( frame.args ) do&lt;br /&gt;
			if not specialParams[k] then&lt;br /&gt;
				if v == &#039;__DATE__&#039; then&lt;br /&gt;
					v = mw.getContentLanguage():formatDate( &#039;F Y&#039; )&lt;br /&gt;
				end&lt;br /&gt;
				args[k] = v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for k, v in pairs( frame:getParent().args ) do&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Trim parameters, if not specified otherwise&lt;br /&gt;
	if not string.find( &#039;,&#039;..(frame.args[&#039;$flags&#039;] or &#039;&#039;)..&#039;,&#039;, &#039;,%s*keep%-whitespace%s*,&#039; ) then&lt;br /&gt;
		for k, v in pairs( args ) do args[k] = mw.ustring.match(v, &#039;^%s*(.*)%s*$&#039;) or &#039;&#039; end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Pull information from parameter aliases&lt;br /&gt;
	local aliases = {}&lt;br /&gt;
	if frame.args[&#039;$aliases&#039;] then&lt;br /&gt;
		local list = mw.text.split( frame.args[&#039;$aliases&#039;], &#039;%s*,%s*&#039; )&lt;br /&gt;
		for k, v in ipairs( list ) do&lt;br /&gt;
			local tmp = mw.text.split( v, &#039;%s*&amp;gt;%s*&#039; )&lt;br /&gt;
			aliases[tonumber(mw.ustring.match(tmp[1], &#039;^[1-9][0-9]*$&#039;)) or tmp[1]] = ((tonumber(mw.ustring.match(tmp[2], &#039;^[1-9][0-9]*$&#039;))) or tmp[2])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in pairs( aliases ) do&lt;br /&gt;
		if args[k] and ( not args[v] or args[v] == &#039;&#039; ) then&lt;br /&gt;
			args[v] = args[k]&lt;br /&gt;
		end&lt;br /&gt;
		args[k] = nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Remove empty parameters, if specified&lt;br /&gt;
	if string.find( &#039;,&#039;..(frame.args[&#039;$flags&#039;] or &#039;&#039;)..&#039;,&#039;, &#039;,%s*remove%-empty%s*,&#039; ) then&lt;br /&gt;
		local tmp = 0&lt;br /&gt;
		for k, v in ipairs( args ) do&lt;br /&gt;
			if v ~= &#039;&#039; or ( args[k+1] and args[k+1] ~= &#039;&#039; ) or ( args[k+2] and args[k+2] ~= &#039;&#039; ) then&lt;br /&gt;
				tmp = k&lt;br /&gt;
			else&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for k, v in pairs( args ) do&lt;br /&gt;
			if v == &#039;&#039; then&lt;br /&gt;
				if not (type(k) == &#039;number&#039; and k &amp;lt; tmp) then args[k] = nil end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Order parameters&lt;br /&gt;
	if frame.args[&#039;$params&#039;] then&lt;br /&gt;
		local params, tmp = mw.text.split( frame.args[&#039;$params&#039;], &#039;%s*,%s*&#039; ), {}&lt;br /&gt;
		for k, v in ipairs(params) do&lt;br /&gt;
			v = tonumber(mw.ustring.match(v, &#039;^[1-9][0-9]*$&#039;)) or v&lt;br /&gt;
			if args[v] then tmp[v], args[v] = args[v], nil end&lt;br /&gt;
		end&lt;br /&gt;
		for k, v in pairs(args) do tmp[k], args[k] = args[k], nil end&lt;br /&gt;
		args = tmp&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return mTemplateInvocation.invocation(name, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p[&#039;&#039;] = p.main -- For backwards compatibility&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Str_endswith&amp;diff=285</id>
		<title>Template:Str endswith</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Str_endswith&amp;diff=285"/>
		<updated>2025-12-11T06:08:57Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#ifeq:{{{1|a}}}{{{2|a}}}|{{{1|b}}}{{{2|b}}}|{{#invoke:String|endswith|source={{{1}}}|pattern={{{2}}} }}|yes&amp;lt;!--backward compatibility --&amp;gt;}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Collapse_top/styles.css&amp;diff=283</id>
		<title>Template:Collapse top/styles.css</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Collapse_top/styles.css&amp;diff=283"/>
		<updated>2025-12-11T06:08:57Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* {{pp-template}} */&lt;br /&gt;
.cot-header-mainspace {&lt;br /&gt;
	background:#F0F2F5;&lt;br /&gt;
	color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cot-header-other {&lt;br /&gt;
	background:#CCFFCC;&lt;br /&gt;
	color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	html.skin-theme-clientpref-night .cot-header-mainspace {&lt;br /&gt;
		background:#14181F;&lt;br /&gt;
		color:inherit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	html.skin-theme-clientpref-night .cot-header-other {&lt;br /&gt;
		background:#003500;&lt;br /&gt;
		color:inherit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@media screen and (prefers-color-scheme: dark) {&lt;br /&gt;
	html.skin-theme-clientpref-os .cot-header-mainspace {&lt;br /&gt;
		background:#14181F;&lt;br /&gt;
		color:inherit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	html.skin-theme-clientpref-os .cot-header-other {&lt;br /&gt;
		background:#003500;&lt;br /&gt;
		color:inherit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Module_talk:Arguments&amp;diff=281</id>
		<title>Module talk:Arguments</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Module_talk:Arguments&amp;diff=281"/>
		<updated>2025-12-11T06:08:57Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{talk header}}&lt;br /&gt;
{{copied|from=Module:Arguments|from_oldid=696500078|to=:incubator:Module:Wp/nod/Arguments|to_diff=4236992}}&lt;br /&gt;
== Iterator corruption ==&lt;br /&gt;
{{ping|Mr. Stradivarius}} I found a subtle iterator corruption bug in this module.&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local args = require(&#039;Module:Arguments&#039;).getArgs(frame)&lt;br /&gt;
for k, v in args do&lt;br /&gt;
 mw.log(k .. &#039;=&#039; .. (v or &#039;nil&#039;) .. &#039; &#039;)&lt;br /&gt;
 if args[k .. &#039;somesuffix&#039;] then&lt;br /&gt;
  mw.log(&#039;Found suffix for &#039; .. k)&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; Attempting to read the somesuffix argument causes it to be memoized, adding it to the internal table, which apparently can corrupt the iterator and causes some arguments to be skipped. I&#039;ve noticed this is only reproducible some of the time. [[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 02:58, 13 April 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
:{{ping|Jackmcbarn}} That&#039;s a good find. (I assume that should be &amp;lt;code&amp;gt;pairs(args)&amp;lt;/code&amp;gt; on line 2 rather than just &amp;lt;code&amp;gt;args&amp;lt;/code&amp;gt;?) We&#039;re running into the undefined behaviour mentioned in the [[mw:Extension:Scribunto/Lua reference manual#next|next function docs]]: &amp;quot;&#039;&#039;Behavior is undefined if, when using next for traversal, any non-existing key is assigned a value.&#039;&#039;&amp;quot; The way that the __pairs metamethod works in this module means that all the existing arguments will have been memoized before the user gets a chance to index the args table. So if a user queries an existing argument during the pairs iteration, there will be no problem, as it will already be present in the metaArgs table. The error occurs when the user queries a non-existing argument. The __index function is set up to memoize this in metaArgs as nilArg, a blank table. That means that it is possible to add these blank tables as new values to the metaArgs table, even after all the non-nil values have been copied over from the frame objects. I&#039;ve put a [https://en.wikipedia.org/w/index.php?title=Module:Arguments/sandbox&amp;amp;diff=604023029&amp;amp;oldid=590465333 fix in the sandbox] for this that uses the metatable.donePairs flag to check whether or not the arguments have been copied across. If they have already been copied across, then the __index metamethod won&#039;t memoize nils at all. While this fixes the bug, not memoizing the nils might cause adverse performance for some modules. Take a look and see what you think. Also, maybe [[User:Anomie|Anomie]] would like to check the fix before we put it up live? — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 16:02, 13 April 2014 (UTC)&lt;br /&gt;
::{{ping|Mr. Stradivarius}} Yes, that should have been pairs(args). What about a flag that gets set while you&#039;re inside the pairs method, and while it&#039;s set, it memoizes nils to some other table, then when the flag gets unset, it moves them to where they really go? Also, related, if an argument is an empty string, it gets iterated over even if empty strings get converted to nils, which is unexpected. [[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 17:47, 13 April 2014 (UTC)&lt;br /&gt;
::{{ping|Mr. Stradivarius}} I realized it&#039;s impossible for an iterator function to tell when it stops iterating (since the function calling it can return early, etc.), so that idea was out. Instead, I changed the way nils are memoized. They go to a different table now, which should solve that problem and the other problem at the same time. Thoughts? [[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 23:14, 13 April 2014 (UTC)&lt;br /&gt;
::Once I got that implemented, I had another idea. Once pairs runs, we don&#039;t need to worry about memoizing at all anymore, because everything from argTables we&#039;ll ever look at is already part of metaArgs at that point. [[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 23:51, 13 April 2014 (UTC)&lt;br /&gt;
:::I think we should memoize after pairs runs, because users might query new keys that have nil values, and also because memoizing things the same way every time is simpler. I like your idea of using a nilArgs table rather than just putting a blank table in metaArgs. That will solve the iterator problem and allow us to use the same memoization scheme whether we have used pairs or not. Also, blank strings shouldn&#039;t be iterated over unless they are explicitly allowed, due to the way the mergeArgs function works (unless you found a bug in that as well?) — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 05:25, 14 April 2014 (UTC)&lt;br /&gt;
::::After running pairs, though, you don&#039;t need to check argTables anymore, so it&#039;s not worth memoizing nil to nilArg, since you can just return nil either way. Won&#039;t the code in the sandbox right now work right? [[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 18:28, 14 April 2014 (UTC)&lt;br /&gt;
:::::Ah yes, you&#039;re quite right. I wasn&#039;t registering the fact that the new check meant that we bypassed the argTables check. I&#039;ve added a comment and updated the module - hopefully everything should work now. — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 08:12, 15 April 2014 (UTC)&lt;br /&gt;
::::::{{ping|Jackmcbarn}} Oops - we have been forgetting the problem of arguments being iterated over even if they are empty strings which get converted to nils. This would be solved by a nilArgs table, but is still present in the current version. I&#039;ll try and switch back to the nilArgs table version while keeping the formatting. — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 19:47, 15 April 2014 (UTC)&lt;br /&gt;
:::::::{{ping|Mr. Stradivarius}} Now that I think about nilArgs, I don&#039;t really like it since it&#039;s an extra table lookup. Maybe if nilArg is found while iterating, just skip it and go on to the next element (or change all nilArg to nil once we&#039;re in pairs). [[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 19:49, 15 April 2014 (UTC)&lt;br /&gt;
{{od|7}} I&#039;ve implemented the nilArgs version in the sandbox. I think it is quite an elegant solution, despite being an extra table lookup. Skipping nilArg tables while iterating isn&#039;t easy, as we would need to implement an iterator inside of an iterator for each of __pairs and __ipairs. And changing all nilArg tables to nil once we are in pairs would mean we would have to run pairs on metaArgs after running mergeArgs to catch all of the nilArg tables that have been introduced by __index and __newindex. Using nilArgs to memoize avoids these problems and makes the code quite a bit shorter (take a look at the new __pairs and __ipairs functions). — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 20:24, 15 April 2014 (UTC)&lt;br /&gt;
:{{ping|Mr. Stradivarius}} Okay, I guess I&#039;m sold on it. I think I see a few subtle bugs, though; let me see if I can track them down. [[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 20:35, 15 April 2014 (UTC)&lt;br /&gt;
::Thanks for taking a look at it. If I have time tomorrow, I may rewrite the test cases in [[mw:Extension:Scribunto/Lua reference manual#frame:newChild|the way foretold in the fine manual]]. That should make tracking these subtle bugs slightly less hit-and-miss. — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 20:59, 15 April 2014 (UTC)&lt;br /&gt;
::Also, I [https://en.wikipedia.org/w/index.php?title=Module%3AArguments%2Fsandbox&amp;amp;diff=604357645&amp;amp;oldid=604349477 found a bug] in my code: __newindex wasn&#039;t properly overwriting nil arguments in metaArgs, which would have caused problems for both __pairs and __index. — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 21:11, 15 April 2014 (UTC)&lt;br /&gt;
:::{{ping|Jackmcbarn}} I&#039;ve finished rewriting [[Module:Arguments/testcases]], and I&#039;ve also added some bad input tests and some iterator tests. I&#039;ve tried my best to break it, but all the tests have passed so far. As expected, the main module fails four of the iterator tests. Are there any other ways you can think to break it? If not, I think it is time to update the main module. — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 13:10, 17 April 2014 (UTC)&lt;br /&gt;
::::{{ping|Mr. Stradivarius}} Looks good. I did add one extra check for performance reasons. [[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 18:47, 17 April 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Wrapper templates ==&lt;br /&gt;
&lt;br /&gt;
{{edit protected|Module:Arguments|answered=yes}}&lt;br /&gt;
&amp;lt;!-- Begin request --&amp;gt;&lt;br /&gt;
Please make the changes at [[Special:Diff/604718144/611675481]]. This adds support for the &amp;quot;wrappers&amp;quot; option. When set, it causes it to process parent arguments only if the parent is a wrapper, or frame arguments only otherwise.&lt;br /&gt;
&amp;lt;!-- End request --&amp;gt;&lt;br /&gt;
[[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 00:25, 5 June 2014 (UTC)&lt;br /&gt;
:Perhaps [[User:Mr. Stradivarius]] could check your code and apply this. &amp;amp;mdash;&amp;amp;nbsp;Martin &amp;lt;small&amp;gt;([[User:MSGJ|MSGJ]]&amp;amp;nbsp;·&amp;amp;nbsp;[[User talk:MSGJ|talk]])&amp;lt;/small&amp;gt; 09:12, 5 June 2014 (UTC)&lt;br /&gt;
::{{ping|Jackmcbarn}} I&#039;m not quite understanding what it means to say &amp;quot;if the parent is a wrapper&amp;quot;. What kind of wrapper are we talking about? I can see that it would make sense to not try and index frame:getParent() if it&#039;s going to return nil sometimes, but the only time I can see this happening is if you call frame:getParent() on the current frame and then pass the parent frame to getArgs. Then again, there is probably something I&#039;m missing, and I imagine that getting my head round this wrapper business will clear things up. As for general code review, {{code|1=local title, found = parent:getTitle(), false|2=lua}} seems a little dangerous to me. That would break if for some reason frame:getTitle ever switches to outputting two values (unlikely, but possible), so I would put those statements on separate lines. Also, we should probably check that &amp;lt;code&amp;gt;options.wrappers&amp;lt;/code&amp;gt; is a table, so that we can give people a more informative error message if they specify something like {{code|1={wrappers = true}|2=lua}}. — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 09:43, 5 June 2014 (UTC)&lt;br /&gt;
:::{{ping|Mr. Stradivarius}} A wrapper is a template that just calls a module, like [[Template:Infobox]] is a wrapper for [[Module:Infobox]] and [[Template:Edit protected]] is a wrapper for [[Module:Protected edit request]]. That&#039;s unrelated to the nil issue; I just fixed that at the same time since I had to modify that part of the code anyway. You&#039;re right that the main time getParent() would be nil is if you&#039;d already called getParent() once, but the other time is if you call a module with a real frame through the console. I fixed the locals on the same line. Instead of throwing an error on non-tables, I made it turn it into a table, to handle the (very) common case where a module only has one wrapper. New diff is [[Special:Diff/604718144/611678252]]. [[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 13:31, 5 June 2014 (UTC)&lt;br /&gt;
::::Ah, I see what this is doing now. So if getArgs is called from a wrapper template, and that wrapper is listed in options.wrappers, it only loads the parent args, thereby saving a lookup in the frame args each time a new argument is requested from the client module. And if the parent frame isn&#039;t listed in options.wrappers it assumes that a user is calling the client module directly through #invoke. That sounds like a useful feature to add. One thing I was wondering - would it complicate the code too much to not call frame:getParent() if options.frameOnly is set? I&#039;m not sure how expensive frame:getParent is to call, but I think it would make sense to not call it if we don&#039;t have to. (But then again, frameOnly isn&#039;t used that much as an option in my experience.) — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 00:57, 6 June 2014 (UTC)&lt;br /&gt;
:::::{{ping|Mr. Stradivarius}} I&#039;ve made it do that. New diff is [[Special:Diff/604718144/611759842]]. [[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 01:11, 6 June 2014 (UTC)&lt;br /&gt;
::::::I&#039;ve found one more optimization. [[Special:Diff/604718144/611760186]]. [[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 01:13, 6 June 2014 (UTC)&lt;br /&gt;
:::::::I&#039;ve added some comments: [[Special:Diff/604718144/611784069]]. The code and the test cases look good to me, so if you&#039;re happy with this then I think we&#039;re ready to update the main module. — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 06:23, 6 June 2014 (UTC)&lt;br /&gt;
::::::::{{ping|Mr. Stradivarius}} I&#039;m happy with it. [[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 13:58, 6 June 2014 (UTC)&lt;br /&gt;
:::::::::[[File:Yes check.svg|20px|link=]] &#039;&#039;&#039;Done&#039;&#039;&#039;&amp;lt;!-- Template:EP --&amp;gt; Ok, it&#039;s updated. Let me know if you spot any issues with it. — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 14:25, 6 June 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Protected edit request on 5 July 2014 ==&lt;br /&gt;
&lt;br /&gt;
{{edit protected|Module:Arguments|answered=yes}}&lt;br /&gt;
&amp;lt;!-- Begin request --&amp;gt;&lt;br /&gt;
Please make [[Special:Diff/615649711|these changes]]. This allows wrappers to still give both sets of arguments in either of the cases if such behavior is explicitly requested, while still preventing the double lookup in the other case.&lt;br /&gt;
&amp;lt;!-- End request --&amp;gt;&lt;br /&gt;
[[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 03:30, 5 July 2014 (UTC)&lt;br /&gt;
:[[File:Yes check.svg|20px|link=]] &#039;&#039;&#039;Done&#039;&#039;&#039;&amp;lt;!-- Template:EP --&amp;gt; If you could update the documentation too, that would be great. — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 03:54, 5 July 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Integrating with Lua ==&lt;br /&gt;
&lt;br /&gt;
I&#039;m thinking of integrating this module into Scribunto, the same way [[Module:HtmlBuilder]] was, but to do that, it needs to be released under a different license. {{ping|Mr. Stradivarius}} {{ping|Anomie}} Do you both agree to release your contributions to this module under the [[GNU General Public License]] v2 or newer (GPL v2+)? [[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 14:58, 3 September 2014 (UTC)&lt;br /&gt;
: Sure. [[User:Anomie|Anomie]][[User talk:Anomie|⚔]] 15:07, 3 September 2014 (UTC)&lt;br /&gt;
: Yes, that&#039;s fine with me. — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 21:50, 3 September 2014 (UTC)&lt;br /&gt;
::I&#039;ve submitted [[gerrit:158323]] that will add this to Scribunto. Note the following differences between this module and what I submitted:&lt;br /&gt;
::*Instead of taking a frame and an options table, it now takes only an options table, and &amp;lt;code&amp;gt;frame&amp;lt;/code&amp;gt; is one of its options. This makes it a standard named-arguments function.&lt;br /&gt;
::*When wrappers aren&#039;t in use, it behaves as if &amp;lt;code&amp;gt;frameOnly&amp;lt;/code&amp;gt; were set by default. Indiscriminate mixing of frame and parent arguments without knowing what the parent is has caused subtle bugs in the past, and it doesn&#039;t appear to have any legitimate use cases.&lt;br /&gt;
::*If you want just the parent arguments, pass &amp;lt;code&amp;gt;frame:getParent()&amp;lt;/code&amp;gt; in place of &amp;lt;code&amp;gt;frame&amp;lt;/code&amp;gt; when calling it. The &amp;lt;code&amp;gt;parentOnly&amp;lt;/code&amp;gt; option has been removed.&lt;br /&gt;
::*When wrappers are in use, if the caller specifically requests frame arguments in addition to parent arguments (via &amp;lt;code&amp;gt;wrappersUseFrame&amp;lt;/code&amp;gt;), the parent arguments always have precedence.&lt;br /&gt;
::{{ping|Mr. Stradivarius}} ping. [[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 21:09, 4 September 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Implement i18n ==&lt;br /&gt;
&lt;br /&gt;
Should this module implement [[Internationalization and localization|i18n]]? Eg. by allowing a second parameter (boolean), which will make it try to load a name-map from a sub-module. Eg. Bananas could use&lt;br /&gt;
 args = getArgs(frame, true)[&#039;firstname&#039;]&lt;br /&gt;
and Bananas/i18n_de could contain&lt;br /&gt;
 return { vorname = &#039;firstname&#039; }&lt;br /&gt;
(I admit a mapping in the opposit direction is more intuitive, but this allows multiple parameternames to be mapped to the same lua-parameter.)&lt;br /&gt;
[[User:Poul G|Poul G]] ([[User talk:Poul G|talk]]) 09:40, 1 November 2014 (UTC)&lt;br /&gt;
: The danger with this idea is that it makes it more difficult to use the module in different languages, unless everyone uses the canonical name anyway. For example, &amp;quot;Spezial:Beobachtungsliste&amp;quot; works if you go to [[:de:Spezial:Beobachtungsliste|dewiki]] but doesn&#039;t [[Spezial:Beobachtungsliste|here]] or most other-language wikis, while &amp;quot;Special:Watchlist&amp;quot; will work everywhere. [[User:Anomie|Anomie]][[User talk:Anomie|⚔]] 14:38, 1 November 2014 (UTC)&lt;br /&gt;
:: [[wikt:WTF|WhyTF]] do we have a soft-redirect at [[Spezial:Beobachtungsliste]]? [[User:Anomie|Anomie]][[User talk:Anomie|⚔]] 14:45, 1 November 2014 (UTC)&lt;br /&gt;
:Well, our user-editors in non-english languages should have access to templates in their native language. But at the same time it would be a great advantage to share the logic in the Lua-modules. Which implies that a translation is needed; it could be in the template &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#Person:name|firstname={{{vorname|}}}|...}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; or be hidden in i18n within the modules configuration. (Maybe it was a mistake to open this on the site, where translation isn&#039;t needed.) [[User:Poul G|Poul G]] ([[User talk:Poul G|talk]]) 12:45, 3 November 2014 (UTC)&lt;br /&gt;
Is it possible this module to handle named parameters with Unicode names like: &amp;lt;pre&amp;gt;{{my_template | unnamed_1 | параметър = 123 | named_2 = ... etc.}}&amp;lt;/pre&amp;gt;--[[User:Pl71|Pl71]] ([[User talk:Pl71|talk]]) 15:32, 24 February 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Pairs bug ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve just found a bug in the pairs code of this module. It turns out that if you delete a value in the args table by setting it to nil, the the value is still present if you access the args table with pairs. There&#039;s a demonstration of the bug in [https://en.wikipedia.org/w/index.php?title=Module:User:Mr._Stradivarius/sandbox&amp;amp;oldid=637283032 my sandbox], and I&#039;ve added two new test cases which are [[Module talk:Arguments/testcases|currently failing]].&lt;br /&gt;
&lt;br /&gt;
To fix this, it looks like we would need a new table to memoize nils. We need to check whether an argument has been expressly deleted when calling mergeArgs, but at the same time, values in nilArgs need to be overwritable for precedence whitespace arguments to work properly. I don&#039;t see how one table can fulfil both functions.&lt;br /&gt;
&lt;br /&gt;
Alternatively, we could get away with using one nilArgs table if we change the module to only ever check the frame args or the parent frame args, and never both. If I remember rightly, this is what the proposed getArgs function inside Scribunto does, so if that solution seems better we could wait for that function to be deployed and then switch all of our existing modules over to it. — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 06:59, 9 December 2014 (UTC)&lt;br /&gt;
:{{ping|Mr. Stradivarius}} There is one edge case in the new getArgs function that would still read both, so that won&#039;t save us. However, I did find a way to make it work without adding an additional table. It&#039;s in the sandbox. [[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 15:11, 9 December 2014 (UTC)&lt;br /&gt;
::{{ping|Jackmcbarn}} Yes, that looks like a good approach to solving it - definitely better than introducing another table. Instead of using trinary logic, how about using strings to denote the status, similar to what Lua does with __mode? I think that would make the code more readable. We could use &#039;hard&#039; and &#039;soft&#039; for hard and soft nils, or just &#039;h&#039; and &#039;s&#039; if we want to be concise. — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 15:55, 9 December 2014 (UTC)&lt;br /&gt;
:::{{ping|Mr. Stradivarius}} Okay, that&#039;s done. [[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 04:11, 10 December 2014 (UTC)&lt;br /&gt;
::::{{ping|Jackmcbarn}} Looks good. Unless there&#039;s anything else you would like to change, I think we&#039;re ok to update the main module now. — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 04:37, 10 December 2014 (UTC)&lt;br /&gt;
:::::{{ping|Mr. Stradivarius}} Actually, there is, but I can&#039;t do it yet. Once the inexpensive mw.title.new change gets here, I want to make this use mw.title.new to normalize wrapper names (to make less stuff break when our modules get transwikied to wikis with different namespace names). [[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 03:57, 11 December 2014 (UTC)&lt;br /&gt;
::::::{{ping|Jackmcbarn}} Ok, but I don&#039;t think there&#039;s any need to wait for that before we fix the current bug. I&#039;ll go and update the module now. — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr. Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪ talk ♪]]&amp;lt;/sup&amp;gt; 04:27, 11 December 2014 (UTC)&lt;br /&gt;
:::::::Okay. [[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 04:28, 11 December 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Ipairs bug ==&lt;br /&gt;
&lt;br /&gt;
{{ping|Mr. Stradivarius}} I discovered that calling ipairs() on args and then breaking out of the loop early will unnecessarily result in all of the numeric arguments being expanded, instead of just the ones that were iterated over. I added a test case for this and implemented a fix in the sandbox. Can you take a look at it? If it looks good, I&#039;ll add it (along with the other change waiting in the sandbox) to the main module. [[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 05:32, 28 December 2014 (UTC)&lt;br /&gt;
:{{ping|Jackmcbarn}} Sorry for the delay in replying. Actually, yesterday and today I&#039;ve been a bit ill, so I don&#039;t really trust myself to do code reviews right now. I&#039;ll take a look at this when I have my higher brain functions back, or if you want to go ahead and implement your fix anyway, that&#039;s fine by me. — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr.&amp;amp;nbsp;Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪&amp;amp;nbsp;talk&amp;amp;nbsp;♪]]&amp;lt;/sup&amp;gt; 06:27, 29 December 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Document argument translation system ==&lt;br /&gt;
&lt;br /&gt;
Hi [[User:Jackmcbarn |Jackmcbarn ]]!&lt;br /&gt;
&lt;br /&gt;
Could you please add documentation about [[Special:Diff/668829606|this]]? [[User:He7d3r|Helder]] 11:12, 1 September 2015 (UTC)&lt;br /&gt;
:I&#039;d rather not encourage its use right now, since a better but incompatible way will become available soon. [[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 19:23, 1 September 2015 (UTC)&lt;br /&gt;
::@[[User:Jackmcbarn|Jackmcbarn]]: can you provide more details about that? Where is that new way being developed? [[User:He7d3r|Helder]] 19:30, 13 September 2015 (UTC)&lt;br /&gt;
:::{{ping|He7d3r}} It&#039;s already written; it&#039;s just awaiting approval. You can see it at [[gerrit:158323]]. [[User:Jackmcbarn|Jackmcbarn]] ([[User talk:Jackmcbarn|talk]]) 20:58, 13 September 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
[[User:Jackmcbarn|Jackmcbarn]], [[User:He7d3r|Helder]], now that we have [[mw:Help:Tabular_Data|tabular data support]], we can easily implement global translations. I already started on doing it with the [[mw:Module:TNT|TNT module]]. It allows a module or a template to be copied anywhere without modifications, and all localization is done in one place on Commons.  This means we can introduce parameter localization as well, without any core changes. Let me know if you want to help with it :) --[[User:Yurik|Yurik]] ([[User talk:Yurik|talk]]) 03:46, 13 January 2017 (UTC)&lt;br /&gt;
:Cool! I&#039;ll keep an eye on that. [[User:He7d3r|Helder]] 12:01, 18 January 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Using ipairs ==&lt;br /&gt;
&lt;br /&gt;
I have not seriously used Module:Arguments so now that I&#039;m looking at how it is used in [[Module:Team appearances list]], I am puzzled about the default options and &amp;lt;code&amp;gt;ipairs&amp;lt;/code&amp;gt;. What happens if a module does the following?&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
local args = getArgs(frame)  -- where frame is from a template invoke&lt;br /&gt;
for i, v in ipairs(args) do&lt;br /&gt;
    print(i, v)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
I gather that works as expected with something like &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{example|one|two|three}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; (and it would trim any leading/trailing whitespace from each parameter).&lt;br /&gt;
&lt;br /&gt;
However, it would only process &amp;quot;one&amp;quot; in &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{example|one||three}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; because the blank second parameter would be converted to nil, and that would terminate ipairs.&lt;br /&gt;
&lt;br /&gt;
Does that mean that anything using Module:Arguments with a variable number of numeric arguments must use something like &amp;lt;code&amp;gt;compressSparseArray&amp;lt;/code&amp;gt; from [[Module:TableTools]] (or set options to not trim/remove parameters)? If that is true, I would have thought it would be mentioned in the documentation here. Did an early version of Module:Arguments default to removing blank parameters so ipairs processes each provided numeric parameter (that&#039;s what I thought happened)? [[User:Johnuniq|Johnuniq]] ([[User talk:Johnuniq|talk]]) 03:25, 18 November 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
:{{re|Johnuniq}} Have you found a solution for this problem? —&amp;amp;nbsp;[[User:UnladenSwallow|UnladenSwallow]] ([[User talk:UnladenSwallow|talk]]) 01:58, 15 May 2020 (UTC)&lt;br /&gt;
::{{re|UnladenSwallow}} I haven&#039;t looked for a solution because I don&#039;t like obscure layers. Module:Arguments appears to be very efficient although it appears to do quite a lot of work, yet it seems unnecessary overhead to me. I&#039;ve never needed the module and I don&#039;t know if the above is a problem now. [[User:Johnuniq|Johnuniq]] ([[User talk:Johnuniq|talk]]) 03:38, 15 May 2020 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Help in writing better testcases==&lt;br /&gt;
Hello developers, I am working with [[mw:Multilingual Templates and Modules]] and to convert this module into a shared one, we need better [[mw:Module:Arguments/testcases]]. Can anyone please help? {{ping|Frietjes|RexxS|Johnuniq|Mr. Stradivarius|Anomie|Xaosflux|Ans|Jackmcbarn|Jonesey95}} [[User:Capankajsmilyo|Capankajsmilyo]]&amp;lt;sup&amp;gt;([[User talk:Capankajsmilyo|Talk]] | [[Wikipedia:WikiProject Infoboxes/assistance|Infobox assistance]])&amp;lt;/sup&amp;gt; 10:39, 22 May 2019 (UTC)&lt;br /&gt;
&lt;br /&gt;
== The Arguments cannot contain &amp;quot;=&amp;quot;? ==&lt;br /&gt;
&lt;br /&gt;
see test case: [[Module:Sandbox/shizhao/test]]，[[Module talk:Sandbox/shizhao/test]]。 If arguments contain &amp;quot;=&amp;quot;， Lua error: bad argument #1 to &#039;match&#039; (string expected, got nil).--[[User:Shizhao|Shizhao]] ([[User talk:Shizhao|talk]]) 15:45, 21 January 2020 (UTC)&lt;br /&gt;
:@[[User:Shizhao|Shizhao]] That&#039;s just standard procedure: in a template or module invoke, a parameter like &amp;lt;code&amp;gt;aaa=bbb&amp;lt;/code&amp;gt; appears as a named parameter with value &amp;lt;code&amp;gt;bbb&amp;lt;/code&amp;gt; for parameter &amp;lt;code&amp;gt;aaa&amp;lt;/code&amp;gt;. See the fix in [[Special:Diff/936934897|diff]]. I haven&#039;t looked at what [[Module:Sandbox/shizhao/test]] is for but please don&#039;t fuss with a signature—keeping them simple is best and editors should not need a module for a private purpose. [[User:Johnuniq|Johnuniq]] ([[User talk:Johnuniq|talk]]) 22:43, 21 January 2020 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Using frame and parentFrame simultaneously ==&lt;br /&gt;
&lt;br /&gt;
There is a wrapper template [[Template:Authority control (arts)]] which uses &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:Authority control|show=arts}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And on articles, I want to use {{tlx|Authority control (arts)|2=show=CZ,ES}} to show additional things.&lt;br /&gt;
&lt;br /&gt;
I would like to concatenate both of these values in a comma-separated list, i.e. &amp;lt;code&amp;gt;show = arts,CZ,ES}&amp;lt;/code&amp;gt; Is that something which is possible with this module? &amp;amp;mdash;&amp;amp;nbsp;Martin &amp;lt;small&amp;gt;([[User:MSGJ|MSGJ]]&amp;amp;nbsp;·&amp;amp;nbsp;[[User talk:MSGJ|talk]])&amp;lt;/small&amp;gt; 13:17, 20 January 2023 (UTC)&lt;br /&gt;
:{{ping|MSGJ}} No - this module can get values from both the frame and the parent frame, but one will take priority and overwrite the other. You will need custom logic to do what you want to do. — &#039;&#039;&#039;&#039;&#039;[[User:Mr. Stradivarius|&amp;lt;span style=&amp;quot;color: #194D00; font-family: Palatino, Times, serif&amp;quot;&amp;gt;Mr.&amp;amp;nbsp;Stradivarius&amp;lt;/span&amp;gt;]]&#039;&#039;&#039;&#039;&#039; &amp;lt;sup&amp;gt;[[User talk:Mr. Stradivarius|♪&amp;amp;nbsp;talk&amp;amp;nbsp;♪]]&amp;lt;/sup&amp;gt; 13:56, 20 January 2023 (UTC)&lt;br /&gt;
::Okay, thought so. Thanks for the reply. &amp;amp;mdash;&amp;amp;nbsp;Martin &amp;lt;small&amp;gt;([[User:MSGJ|MSGJ]]&amp;amp;nbsp;·&amp;amp;nbsp;[[User talk:MSGJ|talk]])&amp;lt;/small&amp;gt; 15:16, 20 January 2023 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Case-insensitive arguments ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve had a request for case-insensitive argument names in a client module of Module:Arguments over on enWS (that imports from enWP). Specific case requested was treating {{para|Volume}} as equivalent to {{para|volume}} (there are historical reasons why contributors on enWS expect that to work). At first blush that looks really messy to implement in the client module, and at the same time it seems like something that 1) would be best implemented as an option (ala. {{para|trim}} or {{para|removeBlanks}}) in Module:Arguments and 2) would be generally useful for other clients of Module:Arguments. Without digging too deep I imagine it&#039;d really be &amp;quot;canonical casing&amp;quot;, i.e. just internally lower-casing all provided argument names when the option is set.&lt;br /&gt;
&lt;br /&gt;
Thoughts? [[User:Xover|Xover]] ([[User talk:Xover|talk]]) 06:25, 31 May 2023 (UTC)&lt;br /&gt;
&lt;br /&gt;
== writing to the args table when the key contains a hyphen (-) ==&lt;br /&gt;
&lt;br /&gt;
[[Module:Infobox military conflict]] tries to include [[Module:Infobox mapframe]], but we need to pass along some parameters. args.onByDefault seems to work, but args[&amp;quot;mapframe-zoom&amp;quot;] doesn&#039;t seem to. Is this expected? --[[User:Joy|Joy]] ([[User talk:Joy|talk]]) 19:47, 23 October 2025 (UTC)&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Module:Arguments/doc&amp;diff=279</id>
		<title>Module:Arguments/doc</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Module:Arguments/doc&amp;diff=279"/>
		<updated>2025-12-11T06:08:57Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Used in system}}&lt;br /&gt;
{{Module rating|p}}&lt;br /&gt;
{{cascade-protected template|page=module}}&lt;br /&gt;
&lt;br /&gt;
This module provides easy processing of arguments passed from &amp;lt;code&amp;gt;#invoke&amp;lt;/code&amp;gt;. It is a meta-module, meant for use by other modules, and should not be called from &amp;lt;code&amp;gt;#invoke&amp;lt;/code&amp;gt; directly (for a module directly invocable by templates you might want to have a look at {{ml|params|}}). Its features include:&lt;br /&gt;
* Easy [[Trimming (computer programming)|trimming]] of arguments and removal of blank arguments.&lt;br /&gt;
* Arguments can be passed by both the current frame and by the parent frame at the same time. (More details below.)&lt;br /&gt;
* Arguments can be passed in directly from another Lua module or from the debug console.&lt;br /&gt;
* Most features can be customized.&lt;br /&gt;
&lt;br /&gt;
== Basic use ==&lt;br /&gt;
&lt;br /&gt;
First, you need to load the module. It contains one function, named &amp;lt;code&amp;gt;getArgs&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the most basic scenario, you can use getArgs inside your main function. The variable &amp;lt;code&amp;gt;args&amp;lt;/code&amp;gt; is a table containing the arguments from #invoke. (See below for details.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	-- Main module code goes here.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Recommended practice ===&lt;br /&gt;
However, the recommended practice is to use a separate function as the entry point from &amp;lt;code&amp;gt;#invoke&amp;lt;/code&amp;gt; just for processing the arguments. This allows other Lua modules to call your core logic directly, improving performance by avoiding the overhead of interacting with the &amp;lt;code&amp;gt;frame&amp;lt;/code&amp;gt; object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	-- Main module code goes here.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The way this is called from a template is &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:Example|main}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; (optionally with some parameters like &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:Example|main|arg1=value1|arg2=value2}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;), and the way this is called from a module is &amp;lt;syntaxhighlight lang=lua inline&amp;gt;require(&#039;Module:Example&#039;)._main({arg1 = &#039;value1&#039;, arg2 = value2, &#039;spaced arg3&#039; = &#039;value3&#039;})&amp;lt;/syntaxhighlight&amp;gt;. What this second one does is construct a table with the arguments in it, then gives that table to the p._main(args) function, which uses it natively.&lt;br /&gt;
&lt;br /&gt;
=== Multiple functions ===&lt;br /&gt;
If you want multiple functions to use the arguments, and you also want them to be accessible from #invoke, you can use a wrapper function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function makeInvokeFunc(funcName)&lt;br /&gt;
	return function (frame)&lt;br /&gt;
		local args = getArgs(frame)&lt;br /&gt;
		return p[funcName](args)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.func1 = makeInvokeFunc(&#039;_func1&#039;)&lt;br /&gt;
&lt;br /&gt;
function p._func1(args)&lt;br /&gt;
	-- Code for the first function goes here.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.func2 = makeInvokeFunc(&#039;_func2&#039;)&lt;br /&gt;
&lt;br /&gt;
function p._func2(args)&lt;br /&gt;
	-- Code for the second function goes here.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
&lt;br /&gt;
The following options are available. They are explained in the sections below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local args = getArgs(frame, {&lt;br /&gt;
	trim = false,&lt;br /&gt;
	removeBlanks = false,&lt;br /&gt;
	valueFunc = function (key, value)&lt;br /&gt;
		-- Code for processing one argument&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	frameOnly = true,&lt;br /&gt;
	parentOnly = true,&lt;br /&gt;
	parentFirst = true,&lt;br /&gt;
&lt;br /&gt;
	wrappers = {&lt;br /&gt;
		&#039;Template:A wrapper template&#039;,&lt;br /&gt;
		&#039;Template:Another wrapper template&#039;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	readOnly = true,&lt;br /&gt;
	noOverwrite = true&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Trimming whitespace ===&lt;br /&gt;
&lt;br /&gt;
MediaWiki trims whitespace for named arguments coming from #invoke or a template call, but preserves whitespace for positional arguments. By default, this module helps trim whitespace also for position arguments. To preserve whitespace for positional arguments, set the &amp;lt;code&amp;gt;trim&amp;lt;/code&amp;gt; option to &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local args = getArgs(frame, {&lt;br /&gt;
	trim = false&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the &amp;lt;code&amp;gt;valueFunc&amp;lt;/code&amp;gt; option is given, the &amp;lt;code&amp;gt;valueFunc&amp;lt;/code&amp;gt; function will be responsible for trimming whitespace, and the &amp;lt;code&amp;gt;trim&amp;lt;/code&amp;gt; option will have no effect.&lt;br /&gt;
&lt;br /&gt;
=== Removing blank arguments ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Blank arguments&amp;quot; are arguments from #invoke or template that are blank strings or consist of only whitespace. By default, this module removes all blank arguments. To preserve the blank arguments, set the &amp;lt;code&amp;gt;removeBlanks&amp;lt;/code&amp;gt; option to &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local args = getArgs(frame, {&lt;br /&gt;
	removeBlanks = false&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This might be necessary for some templates&#039; operation.&lt;br /&gt;
&lt;br /&gt;
Note: When converting MediaWiki templates to Lua, keep in mind that in Lua, blank strings and strings consisting only of whitespace are considered true. If you don&#039;t pay attention to such blank arguments when you write your Lua modules, you might treat something as true that should actually be treated as false.&lt;br /&gt;
&lt;br /&gt;
When the &amp;lt;code&amp;gt;valueFunc&amp;lt;/code&amp;gt; option is given, the &amp;lt;code&amp;gt;valueFunc&amp;lt;/code&amp;gt; function will be responsible for handling blank arguments, and the &amp;lt;code&amp;gt;removeBlanks&amp;lt;/code&amp;gt; option will have no effect.&lt;br /&gt;
&lt;br /&gt;
=== Custom formatting of arguments ===&lt;br /&gt;
&lt;br /&gt;
Sometimes you want to remove some blank arguments but not others, or perhaps you might want to put all of the positional arguments in lower case. To do things like this you can use the &amp;lt;code&amp;gt;valueFunc&amp;lt;/code&amp;gt; option. The input to this option must be a function that takes two parameters, &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt;, and returns a single value. This value is what you will get when you access the field &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;args&amp;lt;/code&amp;gt; table.&lt;br /&gt;
&lt;br /&gt;
Example 1: this function preserves whitespace for the first positional argument&#039;s value, but trims all other arguments&#039; value and removes all other blank arguments.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local args = getArgs(frame, {&lt;br /&gt;
	valueFunc = function (key, value)&lt;br /&gt;
		if key == 1 then&lt;br /&gt;
			return value&lt;br /&gt;
		elseif value then&lt;br /&gt;
			value = mw.text.trim(value)&lt;br /&gt;
			if value ~= &#039;&#039; then&lt;br /&gt;
				return value&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example 2: this function removes blank arguments and converts all argument values to lower case, but doesn&#039;t trim whitespace from positional parameters.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local args = getArgs(frame, {&lt;br /&gt;
	valueFunc = function (key, value)&lt;br /&gt;
		if not value then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		value = mw.ustring.lower(value)&lt;br /&gt;
		if mw.ustring.find(value, &#039;%S&#039;) then&lt;br /&gt;
			return value&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: the above functions will fail if passed input that is not of type &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;. This might be the case if you use the &amp;lt;code&amp;gt;getArgs&amp;lt;/code&amp;gt; function in the main function of your module, and that function is called by another Lua module. In this case, you will need to check the type of your input. This is not a problem if you are using a function specially for arguments from #invoke (i.e. you have &amp;lt;code&amp;gt;p.main&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;p._main&amp;lt;/code&amp;gt; functions, or something similar).&lt;br /&gt;
&lt;br /&gt;
{{cot|Examples 1 and 2 with type checking}}&lt;br /&gt;
Example 1:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local args = getArgs(frame, {&lt;br /&gt;
	valueFunc = function (key, value)&lt;br /&gt;
		if key == 1 then&lt;br /&gt;
			return value&lt;br /&gt;
		elseif type(value) == &#039;string&#039; then&lt;br /&gt;
			value = mw.text.trim(value)&lt;br /&gt;
			if value ~= &#039;&#039; then&lt;br /&gt;
				return value&lt;br /&gt;
			else&lt;br /&gt;
				return nil&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			return value&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example 2:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local args = getArgs(frame, {&lt;br /&gt;
	valueFunc = function (key, value)&lt;br /&gt;
		if type(value) == &#039;string&#039; then&lt;br /&gt;
			value = mw.ustring.lower(value)&lt;br /&gt;
			if mw.ustring.find(value, &#039;%S&#039;) then&lt;br /&gt;
				return value&lt;br /&gt;
			else&lt;br /&gt;
				return nil&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			return value&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{cob}}&lt;br /&gt;
&lt;br /&gt;
Also, please note that the &amp;lt;code&amp;gt;valueFunc&amp;lt;/code&amp;gt; function is called more or less every time an argument is requested from the &amp;lt;code&amp;gt;args&amp;lt;/code&amp;gt; table, so if you care about performance you should make sure you aren&#039;t doing anything inefficient with your code.&lt;br /&gt;
&lt;br /&gt;
=== Frames and parent frames ===&lt;br /&gt;
&lt;br /&gt;
Arguments in the &amp;lt;code&amp;gt;args&amp;lt;/code&amp;gt; table can be passed from the current frame or from its parent frame at the same time. To understand what this means, it is easiest to give an example. Let&#039;s say that we have a module called &amp;lt;code&amp;gt;Module:ExampleArgs&amp;lt;/code&amp;gt;. This module prints the first two positional arguments that it is passed.&lt;br /&gt;
&lt;br /&gt;
{{cot|Module:ExampleArgs code}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	local first = args[1] or &#039;&#039;&lt;br /&gt;
	local second = args[2] or &#039;&#039;&lt;br /&gt;
	return first .. &#039; &#039; .. second&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{cob}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Template:ExampleArgs&amp;lt;/code&amp;gt; contains the code &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:ExampleArgs|main|&#039;&#039;firstInvokeArg&#039;&#039;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Now if we were to call &amp;lt;code&amp;gt;Template:ExampleArgs&amp;lt;/code&amp;gt;, the following would happen:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 50em; max-width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 60%;&amp;quot; | Code&lt;br /&gt;
! style=&amp;quot;width: 40%;&amp;quot; | Result&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;{{#invoke:ExampleArgs|main|&#039;&#039;firstInvokeArg&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
(call #invoke directly without template)&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &#039;&#039;firstInvokeArg&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
(call #invoke directly without template)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;firstInvokeArg&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs|firstTemplateArg}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;firstInvokeArg&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs|firstTemplateArg|secondTemplateArg}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;firstInvokeArg&#039;&#039; secondTemplateArg&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There are three options you can set to change this behaviour: &amp;lt;code&amp;gt;frameOnly&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;parentOnly&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;parentFirst&amp;lt;/code&amp;gt;. If you set &amp;lt;code&amp;gt;frameOnly&amp;lt;/code&amp;gt; then only arguments passed from the current frame will be accepted; if you set &amp;lt;code&amp;gt;parentOnly&amp;lt;/code&amp;gt; then only arguments passed from the parent frame will be accepted; and if you set &amp;lt;code&amp;gt;parentFirst&amp;lt;/code&amp;gt; then arguments will be passed from both the current and parent frames, but the parent frame will have priority over the current frame. Here are the results in terms of &amp;lt;code&amp;gt;Template:ExampleArgs&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
; frameOnly&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 50em; max-width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 60%;&amp;quot; | Code&lt;br /&gt;
! style=&amp;quot;width: 40%;&amp;quot; | Result&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;firstInvokeArg&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs|firstTemplateArg}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;firstInvokeArg&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs|firstTemplateArg|secondTemplateArg}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;firstInvokeArg&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; parentOnly&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 50em; max-width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 60%;&amp;quot; | Code&lt;br /&gt;
! style=&amp;quot;width: 40%;&amp;quot; | Result&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs|firstTemplateArg}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| firstTemplateArg&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs|firstTemplateArg|secondTemplateArg}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| firstTemplateArg secondTemplateArg&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; parentFirst&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 50em; max-width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 60%;&amp;quot; | Code&lt;br /&gt;
! style=&amp;quot;width: 40%;&amp;quot; | Result&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;firstInvokeArg&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs|firstTemplateArg}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| firstTemplateArg&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs|firstTemplateArg|secondTemplateArg}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| firstTemplateArg secondTemplateArg&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
# If you set both the &amp;lt;code&amp;gt;frameOnly&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;parentOnly&amp;lt;/code&amp;gt; options, the module won&#039;t fetch any arguments at all from #invoke. This is probably not what you want.&lt;br /&gt;
# In some situations a parent frame may not be available, e.g. if getArgs is passed the parent frame rather than the current frame. In this case, only the frame arguments will be used (unless parentOnly is set, in which case no arguments will be used) and the &amp;lt;code&amp;gt;parentFirst&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;frameOnly&amp;lt;/code&amp;gt; options will have no effect.&lt;br /&gt;
&lt;br /&gt;
=== Wrappers ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;wrappers&#039;&#039; option is used to specify a limited number of templates as &#039;&#039;wrapper templates&#039;&#039;, that is, templates whose only purpose is to call a module. If the module detects that it is being called from a wrapper template, it will only check for arguments in the parent frame; otherwise it will only check for arguments in the frame passed to getArgs. This allows modules to be called by either #invoke or through a wrapper template without the loss of performance associated with having to check both the frame and the parent frame for each argument lookup.&lt;br /&gt;
&lt;br /&gt;
For example, the only content of [[Template:Side box]] (excluding content in {{tag|noinclude}} tags) is &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:Side box|main}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. There is no point in checking the arguments passed directly to the #invoke statement for this template, as no arguments will ever be specified there. We can avoid checking arguments passed to #invoke by using the &#039;&#039;parentOnly&#039;&#039; option, but if we do this then #invoke will not work from other pages either. If this were the case, the {{para|text|Some text}} in the code &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:Side box|main|text=Some text}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; would be ignored completely, no matter what page it was used from. By using the &amp;lt;code&amp;gt;wrappers&amp;lt;/code&amp;gt; option to specify &#039;Template:Side box&#039; as a wrapper, we can make &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:Side box|main|text=Some text}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; work from most pages, while still not requiring that the module check for arguments on the [[Template:Side box]] page itself.&lt;br /&gt;
&lt;br /&gt;
Wrappers can be specified either as a string, or as an array of strings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local args = getArgs(frame, {&lt;br /&gt;
	wrappers = &#039;Template:Wrapper template&#039;&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local args = getArgs(frame, {&lt;br /&gt;
	wrappers = {&lt;br /&gt;
		&#039;Template:Wrapper 1&#039;,&lt;br /&gt;
		&#039;Template:Wrapper 2&#039;,&lt;br /&gt;
		-- Any number of wrapper templates can be added here.&lt;br /&gt;
	}&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;wrappers&amp;lt;/code&amp;gt; option changes the default behaviors of the &amp;lt;code&amp;gt;frameOnly&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;parentOnly&amp;lt;/code&amp;gt; options.&lt;br /&gt;
&lt;br /&gt;
{{collapse top|title=Behaviors of &#039;&#039;frameOnly&#039;&#039; and &#039;&#039;parentOnly&#039;&#039; in relations with wrapper templates}}&lt;br /&gt;
&lt;br /&gt;
; If &amp;lt;code&amp;gt;Template:ExampleArgs&amp;lt;/code&amp;gt; is specified as a wrapper template:&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;parentOnly&amp;lt;/code&amp;gt; is true or not set&lt;br /&gt;
&lt;br /&gt;
The frame arguments will not be used at all.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 50em; max-width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 60%;&amp;quot; | Code&lt;br /&gt;
! style=&amp;quot;width: 40%;&amp;quot; | Result&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs|firstTemplateArg}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| firstTemplateArg&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs|firstTemplateArg|secondTemplateArg}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| firstTemplateArg secondTemplateArg&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;parentOnly&amp;lt;/code&amp;gt; is false, &amp;lt;code&amp;gt;parentFirst&amp;lt;/code&amp;gt; is false or not set&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 50em; max-width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 60%;&amp;quot; | Code&lt;br /&gt;
! style=&amp;quot;width: 40%;&amp;quot; | Result&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;firstInvokeArg&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs|firstTemplateArg}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;firstInvokeArg&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs|firstTemplateArg|secondTemplateArg}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;firstInvokeArg&#039;&#039; secondTemplateArg&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;parentOnly&amp;lt;/code&amp;gt; is false, &amp;lt;code&amp;gt;parentFirst&amp;lt;/code&amp;gt; is true&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 50em; max-width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 60%;&amp;quot; | Code&lt;br /&gt;
! style=&amp;quot;width: 40%;&amp;quot; | Result&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;firstInvokeArg&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs|firstTemplateArg}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| firstTemplateArg&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs|firstTemplateArg|secondTemplateArg}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| firstTemplateArg secondTemplateArg&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; If &amp;lt;code&amp;gt;wrappers&amp;lt;/code&amp;gt; is set but &amp;lt;code&amp;gt;Template:ExampleArgs&amp;lt;/code&amp;gt; is not in the &amp;lt;code&amp;gt;wrappers&amp;lt;/code&amp;gt; list:&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;frameOnly&amp;lt;/code&amp;gt; is true or not set&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 50em; max-width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 60%;&amp;quot; | Code&lt;br /&gt;
! style=&amp;quot;width: 40%;&amp;quot; | Result&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;firstInvokeArg&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs|firstTemplateArg}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;firstInvokeArg&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs|firstTemplateArg|secondTemplateArg}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;firstInvokeArg&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;frameOnly&amp;lt;/code&amp;gt; is false, &amp;lt;code&amp;gt;parentFirst&amp;lt;/code&amp;gt; is false or not set&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 50em; max-width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 60%;&amp;quot; | Code&lt;br /&gt;
! style=&amp;quot;width: 40%;&amp;quot; | Result&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;firstInvokeArg&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs|firstTemplateArg}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;firstInvokeArg&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs|firstTemplateArg|secondTemplateArg}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;firstInvokeArg&#039;&#039; secondTemplateArg&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;frameOnly&amp;lt;/code&amp;gt; is false, &amp;lt;code&amp;gt;parentFirst&amp;lt;/code&amp;gt; is true&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 50em; max-width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 60%;&amp;quot; | Code&lt;br /&gt;
! style=&amp;quot;width: 40%;&amp;quot; | Result&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &#039;&#039;firstInvokeArg&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs|firstTemplateArg}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| firstTemplateArg&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ExampleArgs|firstTemplateArg|secondTemplateArg}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| firstTemplateArg secondTemplateArg&lt;br /&gt;
|}&lt;br /&gt;
{{collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
# The module will automatically detect if it is being called from a wrapper template&#039;s /sandbox subpage, so there is no need to specify sandbox pages explicitly.&lt;br /&gt;
# If the &#039;&#039;wrappers&#039;&#039; option is set and no parent frame is available, the module will always get the arguments from the frame passed to &amp;lt;code&amp;gt;getArgs&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Writing to the args table ===&lt;br /&gt;
&lt;br /&gt;
Sometimes it can be useful to write new values to the args table. This is possible with the default settings of this module. (However, bear in mind that it is usually better coding style to create a new table with your new values and copy arguments from the args table as needed.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
args.foo = &#039;some value&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is possible to alter this behaviour with the &amp;lt;code&amp;gt;readOnly&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;noOverwrite&amp;lt;/code&amp;gt; options. If &amp;lt;code&amp;gt;readOnly&amp;lt;/code&amp;gt; is set then it is not possible to write any values to the args table at all. If &amp;lt;code&amp;gt;noOverwrite&amp;lt;/code&amp;gt; is set, then it is possible to add new values to the table, but it is not possible to add a value if it would overwrite any arguments that are passed from #invoke.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
=== Ref tags ===&lt;br /&gt;
&lt;br /&gt;
This module uses [[mw:Extension:Scribunto/Lua reference manual#Metatables|metatables]] to fetch arguments from #invoke. This allows access to both the frame arguments and the parent frame arguments without using the &amp;lt;code&amp;gt;pairs()&amp;lt;/code&amp;gt; function. This can help if your module might be passed {{tag|ref}} tags as input.&lt;br /&gt;
&lt;br /&gt;
As soon as {{tag|ref}} tags are accessed from Lua, they are processed by the MediaWiki software and the reference will appear in the reference list at the bottom of the article. If your module proceeds to omit the reference tag from the output, you will end up with a phantom reference – a reference that appears in the reference list but without any number linking to it. This has been a problem with modules that use &amp;lt;code&amp;gt;pairs()&amp;lt;/code&amp;gt; to detect whether to use the arguments from the frame or the parent frame, as those modules automatically process every available argument.&lt;br /&gt;
&lt;br /&gt;
This module solves this problem by allowing access to both frame and parent frame arguments, while still only fetching those arguments when it is necessary. The problem will still occur if you use &amp;lt;code&amp;gt;pairs(args)&amp;lt;/code&amp;gt; elsewhere in your module, however.&lt;br /&gt;
&lt;br /&gt;
=== Known limitations ===&lt;br /&gt;
&lt;br /&gt;
The use of metatables also has its downsides. Most of the normal Lua table tools won&#039;t work properly on the args table, including the &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; operator, the &amp;lt;code&amp;gt;next()&amp;lt;/code&amp;gt; function, and the functions in the table library. If using these is important for your module, you should use your own argument processing function instead of this module.&amp;lt;includeonly&amp;gt;{{#ifeq:{{SUBPAGENAME}}|sandbox||&lt;br /&gt;
[[Category:Lua metamodules]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Module:Params]]&lt;br /&gt;
* {{tl|Template parameter value}}&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{Sandbox other||&lt;br /&gt;
&amp;lt;!-- Categories below this line; interwikis at Wikidata --&amp;gt;&lt;br /&gt;
[[Category:Wikipedia utility modules]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Module documentation pages]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Cascade-protected_template&amp;diff=277</id>
		<title>Template:Cascade-protected template</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Cascade-protected_template&amp;diff=277"/>
		<updated>2025-12-11T06:08:57Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mbox&lt;br /&gt;
    | type = protection&lt;br /&gt;
    | image = [[File:Cascade-protection-shackle.svg|40x40px|link=|alt=]]&lt;br /&gt;
    | text = This {{{page|template}}} can only be edited by [[Wikipedia:Administrators|administrators]] because it is [[Help:Transclusion|transcluded]] onto one or more [[Wikipedia:Protection policy#Cascading protection|cascade-protected]] pages.&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Module:Transclusion_count/data/A&amp;diff=275</id>
		<title>Module:Transclusion count/data/A</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Module:Transclusion_count/data/A&amp;diff=275"/>
		<updated>2025-12-11T06:08:57Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
[&amp;quot;A-Class&amp;quot;] = 5400,&lt;br /&gt;
[&amp;quot;ACArt&amp;quot;] = 4300,&lt;br /&gt;
[&amp;quot;AFB_game_box_end&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;AFB_game_box_start&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;AFB_game_box_start/styles.css&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;AFC_comment&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;AFC_submission&amp;quot;] = 32000,&lt;br /&gt;
[&amp;quot;AFC_submission_category_header&amp;quot;] = 4600,&lt;br /&gt;
[&amp;quot;AFD_help&amp;quot;] = 155000,&lt;br /&gt;
[&amp;quot;AFD_help/styles.css&amp;quot;] = 155000,&lt;br /&gt;
[&amp;quot;AFI/Picture_box/show_picture&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;AFI_film&amp;quot;] = 9700,&lt;br /&gt;
[&amp;quot;AFL_Car&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;AFL_Col&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;AFL_Ess&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;AFL_Gee&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;AFL_Haw&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;AFL_Mel&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;AFL_NM&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;AFL_Ric&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;AFL_StK&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;AFL_Tables&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;AFL_Year&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;AFL_player&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;AI-generated&amp;quot;] = 4900,&lt;br /&gt;
[&amp;quot;ALG&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;AMARB&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;AM_station_data&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;ARBPIA&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;ARE&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;ARG&amp;quot;] = 6900,&lt;br /&gt;
[&amp;quot;ARM&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;ASIN&amp;quot;] = 5000,&lt;br /&gt;
[&amp;quot;ASN&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;ATP&amp;quot;] = 5100,&lt;br /&gt;
[&amp;quot;AUS&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;AUT&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;AZE&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;A_note&amp;quot;] = 5100,&lt;br /&gt;
[&amp;quot;A_or_an&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Aan&amp;quot;] = 60000,&lt;br /&gt;
[&amp;quot;Abbr&amp;quot;] = 943000,&lt;br /&gt;
[&amp;quot;Abbreviation&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Abbrlink&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Abot&amp;quot;] = 26000,&lt;br /&gt;
[&amp;quot;About&amp;quot;] = 166000,&lt;br /&gt;
[&amp;quot;Absolute_page_title&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;Acad&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;Access_icon&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;According_to_whom&amp;quot;] = 4600,&lt;br /&gt;
[&amp;quot;AchievementTable&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;AdSenseSummary&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Added&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Adjacent_communities&amp;quot;] = 28000,&lt;br /&gt;
[&amp;quot;Adjacent_stations&amp;quot;] = 41000,&lt;br /&gt;
[&amp;quot;Adjacent_stations/styles.css&amp;quot;] = 41000,&lt;br /&gt;
[&amp;quot;Adjacent_stations_doc&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Adjstn&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Admin&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Admin_help/helped&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Administrator_note&amp;quot;] = 6800,&lt;br /&gt;
[&amp;quot;Administrators&#039;_noticeboard_archives_all&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Administrators&#039;_noticeboard_navbox_all&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Adminnote&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Advert&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Aet&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;AfC_accept/C_percentage&amp;quot;] = 5700,&lt;br /&gt;
[&amp;quot;AfC_comment&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;AfC_date_category&amp;quot;] = 254000,&lt;br /&gt;
[&amp;quot;AfC_submission&amp;quot;] = 40000,&lt;br /&gt;
[&amp;quot;AfC_submission/comments&amp;quot;] = 31000,&lt;br /&gt;
[&amp;quot;AfC_submission/declined&amp;quot;] = 31000,&lt;br /&gt;
[&amp;quot;AfC_submission/draft&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;AfC_submission/helptools&amp;quot;] = 42000,&lt;br /&gt;
[&amp;quot;AfC_submission/styles.css&amp;quot;] = 44000,&lt;br /&gt;
[&amp;quot;AfC_submission_category_header&amp;quot;] = 6500,&lt;br /&gt;
[&amp;quot;AfC_submission_category_header/day&amp;quot;] = 6300,&lt;br /&gt;
[&amp;quot;AfC_submission_category_header/td&amp;quot;] = 6300,&lt;br /&gt;
[&amp;quot;AfC_talk/C_percentage&amp;quot;] = 5700,&lt;br /&gt;
[&amp;quot;AfC_topic&amp;quot;] = 30000,&lt;br /&gt;
[&amp;quot;AfD_categories_horizontal_shortnames&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;AfD_count_link&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Afd-merged-from&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Afd_bottom/old&amp;quot;] = 139000,&lt;br /&gt;
[&amp;quot;Afd_top/old&amp;quot;] = 139000,&lt;br /&gt;
[&amp;quot;Afd_top/old/styles.css&amp;quot;] = 139000,&lt;br /&gt;
[&amp;quot;Africa_topic&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;After_extra_time&amp;quot;] = 6700,&lt;br /&gt;
[&amp;quot;Age&amp;quot;] = 39000,&lt;br /&gt;
[&amp;quot;Age_in_days&amp;quot;] = 5500,&lt;br /&gt;
[&amp;quot;Age_in_years&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;Age_in_years,_months,_weeks_and_days&amp;quot;] = 5100,&lt;br /&gt;
[&amp;quot;Age_in_years,_months_and_days&amp;quot;] = 19000,&lt;br /&gt;
[&amp;quot;Age_in_years_and_days&amp;quot;] = 4900,&lt;br /&gt;
[&amp;quot;Age_in_years_and_days_nts&amp;quot;] = 4300,&lt;br /&gt;
[&amp;quot;Agree&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Ahnentafel&amp;quot;] = 8000,&lt;br /&gt;
[&amp;quot;Ahnentafel/styles.css&amp;quot;] = 8000,&lt;br /&gt;
[&amp;quot;Air_Force_Historical_Research_Agency&amp;quot;] = 4300,&lt;br /&gt;
[&amp;quot;Air_force&amp;quot;] = 7300,&lt;br /&gt;
[&amp;quot;Air_force/core&amp;quot;] = 7300,&lt;br /&gt;
[&amp;quot;Aircontent&amp;quot;] = 9500,&lt;br /&gt;
[&amp;quot;Aircraft_specs&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Aircraft_specs/convert&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Aircraft_specs/eng&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Aircraft_specs/length&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Aircraft_specs/range&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Aircraft_specs/speed&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Airport-dest-list&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Airport_codes&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Airport_destination_list&amp;quot;] = 4800,&lt;br /&gt;
[&amp;quot;Al&amp;quot;] = 77000,&lt;br /&gt;
[&amp;quot;Album&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Album_chart&amp;quot;] = 35000,&lt;br /&gt;
[&amp;quot;Album_chart/chartnote&amp;quot;] = 35000,&lt;br /&gt;
[&amp;quot;Album_cover_fur&amp;quot;] = 53000,&lt;br /&gt;
[&amp;quot;Album_label_category&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Album_label_category/core&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Album_ratings&amp;quot;] = 32000,&lt;br /&gt;
[&amp;quot;Album_reviews&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Albums_category&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;Albums_category/core&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;Albums_category/type/default&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;Align&amp;quot;] = 200000,&lt;br /&gt;
[&amp;quot;Aligned_table&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;AllIrelandByCountyCatNav&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;AllMusic&amp;quot;] = 77000,&lt;br /&gt;
[&amp;quot;All_Ireland_by_county_category_navigation&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;Allcaps&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Allcaps/styles.css&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Allmusic&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Allow_wrap&amp;quot;] = 6500,&lt;br /&gt;
[&amp;quot;Already_done&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Also&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Also_known_as&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Alternating_rows_table&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Alternating_rows_table/styles.css&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Alumni&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Always_substitute&amp;quot;] = 9000,&lt;br /&gt;
[&amp;quot;Ambox&amp;quot;] = 1460000,&lt;br /&gt;
[&amp;quot;Ambox_globe&amp;quot;] = 42000,&lt;br /&gt;
[&amp;quot;Ambox_globe_current_red&amp;quot;] = 40000,&lt;br /&gt;
[&amp;quot;American_English&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;American_football_roster/Footer&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;American_football_roster/Header&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;American_football_roster/Player&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Americanfootballbox&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;Anarchism_announcements&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Anarchism_announcements/shell&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Anchor&amp;quot;] = 93000,&lt;br /&gt;
[&amp;quot;Angbr&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Angbr_IPA&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Angle_bracket&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;Anglican_navbox_titlestyle&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Anglicise_rank&amp;quot;] = 533000,&lt;br /&gt;
[&amp;quot;Animal_tasks&amp;quot;] = 33000,&lt;br /&gt;
[&amp;quot;Anime_News_Network&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Ann&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Annotated_link&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Annual_readership&amp;quot;] = 44000,&lt;br /&gt;
[&amp;quot;Anonblock&amp;quot;] = 35000,&lt;br /&gt;
[&amp;quot;Antonym_of_(dis)establish&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Apostrophe&amp;quot;] = 94000,&lt;br /&gt;
[&amp;quot;Arbitration_Committee_candidate/data&amp;quot;] = 109000,&lt;br /&gt;
[&amp;quot;Archive&amp;quot;] = 333000,&lt;br /&gt;
[&amp;quot;Archive_bottom&amp;quot;] = 64000,&lt;br /&gt;
[&amp;quot;Archive_box&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Archive_list&amp;quot;] = 92000,&lt;br /&gt;
[&amp;quot;Archive_top&amp;quot;] = 44000,&lt;br /&gt;
[&amp;quot;Archive_top/styles.css&amp;quot;] = 44000,&lt;br /&gt;
[&amp;quot;Archive_top_green&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Archive_top_green/styles.css&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Archive_top_red&amp;quot;] = 5600,&lt;br /&gt;
[&amp;quot;Archive_top_red/styles.css&amp;quot;] = 5600,&lt;br /&gt;
[&amp;quot;Archivebottom&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Archivebox&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Archives&amp;quot;] = 54000,&lt;br /&gt;
[&amp;quot;Archivetop&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Army&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Army/core&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Art_UK_bio&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Art_UK_bio/plural&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Article&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;ArticleHistory&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;Article_alerts_box&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Article_alerts_box/styles.css&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Article_for_improvement_banner/Picture_box&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;Article_for_improvement_banner/Picture_box/show_picture&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;Article_history&amp;quot;] = 51000,&lt;br /&gt;
[&amp;quot;Article_links&amp;quot;] = 502000,&lt;br /&gt;
[&amp;quot;Article_or_page&amp;quot;] = 6500,&lt;br /&gt;
[&amp;quot;Article_stub_box&amp;quot;] = 2380000,&lt;br /&gt;
[&amp;quot;Articles_by_Importance&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Articles_by_Quality&amp;quot;] = 38000,&lt;br /&gt;
[&amp;quot;Articles_for_creation_links&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;As_of&amp;quot;] = 133000,&lt;br /&gt;
[&amp;quot;As_written&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Asbox&amp;quot;] = 2360000,&lt;br /&gt;
[&amp;quot;Asia_topic&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Asof&amp;quot;] = 6400,&lt;br /&gt;
[&amp;quot;Assessed-Class&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Assignment&amp;quot;] = 6000,&lt;br /&gt;
[&amp;quot;Assignment_milestones&amp;quot;] = 5300,&lt;br /&gt;
[&amp;quot;Association_of_Tennis_Professionals_link&amp;quot;] = 5100,&lt;br /&gt;
[&amp;quot;AstDys&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Asterisk&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;AthAbbr&amp;quot;] = 7000,&lt;br /&gt;
[&amp;quot;Atnhead&amp;quot;] = 6000,&lt;br /&gt;
[&amp;quot;Atop&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;Atopg&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Atopr&amp;quot;] = 5300,&lt;br /&gt;
[&amp;quot;Attached_KML&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Au&amp;quot;] = 5300,&lt;br /&gt;
[&amp;quot;AuEduNewbie&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Audio&amp;quot;] = 37000,&lt;br /&gt;
[&amp;quot;Audio_sample&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;AustralianFootball&amp;quot;] = 8700,&lt;br /&gt;
[&amp;quot;Australian_Dictionary_of_Biography&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Australian_English&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Australian_dollar&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Australian_party_style&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;Australian_politics/name&amp;quot;] = 4600,&lt;br /&gt;
[&amp;quot;Australian_politics/party_colours&amp;quot;] = 6800,&lt;br /&gt;
[&amp;quot;Austria_metadata_Wikidata&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Austria_population_Wikidata&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Aut&amp;quot;] = 7800,&lt;br /&gt;
[&amp;quot;Authority_control&amp;quot;] = 2180000,&lt;br /&gt;
[&amp;quot;Authority_control_(arts)&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Auto_link&amp;quot;] = 78000,&lt;br /&gt;
[&amp;quot;Autobiography&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Autolink&amp;quot;] = 40000,&lt;br /&gt;
[&amp;quot;Automated_tools&amp;quot;] = 92000,&lt;br /&gt;
[&amp;quot;Automated_tools/core&amp;quot;] = 92000,&lt;br /&gt;
[&amp;quot;Automatic_archive_navigator&amp;quot;] = 41000,&lt;br /&gt;
[&amp;quot;Automatic_archives_blurb&amp;quot;] = 19000,&lt;br /&gt;
[&amp;quot;Automatic_category_TOC&amp;quot;] = 838000,&lt;br /&gt;
[&amp;quot;Automatic_category_TOC/core&amp;quot;] = 837000,&lt;br /&gt;
[&amp;quot;Automatic_taxobox&amp;quot;] = 99000,&lt;br /&gt;
[&amp;quot;Aviation_Safety_Network_accident_history&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;Aviation_accidents_and_incidents&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Avoid_wrap&amp;quot;] = 5100,&lt;br /&gt;
[&amp;quot;Awaiting_admin&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Awaitingadmin&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Award2&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Awards&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Awards_table&amp;quot;] = 6100,&lt;br /&gt;
[&amp;quot;Awards_table/styles.css&amp;quot;] = 6100,&lt;br /&gt;
[&amp;quot;Ayd&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;Aye&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Module:A_or_an&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Module:A_or_an/words&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Module:About&amp;quot;] = 167000,&lt;br /&gt;
[&amp;quot;Module:Adjacent_stations&amp;quot;] = 79000,&lt;br /&gt;
[&amp;quot;Module:Adjacent_stations/Amtrak&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Module:Adjacent_stations/Deutsche_Bahn&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Module:Adjacent_stations/Indian_Railways&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;Module:Adjacent_stations/JR_East&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Module:Adjacent_stations/i18n&amp;quot;] = 79000,&lt;br /&gt;
[&amp;quot;Module:Administrators&#039;_noticeboard_archives&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Module:Administrators&#039;_noticeboard_archives/styles.css&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Module:AfC_submission_catcheck&amp;quot;] = 408000,&lt;br /&gt;
[&amp;quot;Module:AfC_topic&amp;quot;] = 30000,&lt;br /&gt;
[&amp;quot;Module:Age&amp;quot;] = 1380000,&lt;br /&gt;
[&amp;quot;Module:Ahnentafel&amp;quot;] = 8000,&lt;br /&gt;
[&amp;quot;Module:Airport_destination_list&amp;quot;] = 4800,&lt;br /&gt;
[&amp;quot;Module:Aligned_dates_list&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Module:Aligned_table&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Module:All_Ireland_by_county_category_navigation&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;Module:Anchor&amp;quot;] = 93000,&lt;br /&gt;
[&amp;quot;Module:Ancient_Egypt_era&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Module:Ancient_Egypt_era/data&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Module:Ancient_Egypt_kings&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Module:Ancient_Egypt_kings/data&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Module:Ancient_Olympiads&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Module:Ancient_Olympiads/data&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Module:Annotated_link&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Module:Archive&amp;quot;] = 333000,&lt;br /&gt;
[&amp;quot;Module:Archive/config&amp;quot;] = 333000,&lt;br /&gt;
[&amp;quot;Module:Archive_list&amp;quot;] = 95000,&lt;br /&gt;
[&amp;quot;Module:Archives/bots&amp;quot;] = 32000,&lt;br /&gt;
[&amp;quot;Module:Arguments&amp;quot;] = 35800000,&lt;br /&gt;
[&amp;quot;Module:Armenian&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Module:Arrowverse_redirect_category_handler&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Module:Article_history&amp;quot;] = 51000,&lt;br /&gt;
[&amp;quot;Module:Article_history/Category&amp;quot;] = 51000,&lt;br /&gt;
[&amp;quot;Module:Article_history/config&amp;quot;] = 51000,&lt;br /&gt;
[&amp;quot;Module:Article_history/styles.css&amp;quot;] = 51000,&lt;br /&gt;
[&amp;quot;Module:Article_stub_box&amp;quot;] = 2380000,&lt;br /&gt;
[&amp;quot;Module:Article_stub_box/styles.css&amp;quot;] = 2380000,&lt;br /&gt;
[&amp;quot;Module:Articles_by_class&amp;quot;] = 50000,&lt;br /&gt;
[&amp;quot;Module:Asbox_stubtree&amp;quot;] = 41000,&lt;br /&gt;
[&amp;quot;Module:Attached_KML&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Module:Attached_KML/styles.css&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Module:Australian_place_map&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Module:Authority_control&amp;quot;] = 2200000,&lt;br /&gt;
[&amp;quot;Module:Authority_control/auxiliary&amp;quot;] = 705000,&lt;br /&gt;
[&amp;quot;Module:Authority_control/config&amp;quot;] = 2200000,&lt;br /&gt;
[&amp;quot;Module:Auto_date_formatter&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Module:Automated_taxobox&amp;quot;] = 479000,&lt;br /&gt;
[&amp;quot;Module:Autotaxobox&amp;quot;] = 622000,&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Module_link&amp;diff=273</id>
		<title>Template:Module link</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Module_link&amp;diff=273"/>
		<updated>2025-12-11T06:08:57Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;amp;#123;&amp;amp;#123;{{{{{|safesubst:}}}#invoke:Separated entries|main|[[Module:{{{1}}}{{{section|}}}|#invoke:{{{1}}}]]|{{{2|&#039;&#039;function&#039;&#039;}}}|separator=&amp;amp;#124;}}&amp;amp;#125;&amp;amp;#125;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;!-- Categories go on the /doc subpage and interwikis go on Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Ml&amp;diff=271</id>
		<title>Template:Ml</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Ml&amp;diff=271"/>
		<updated>2025-12-11T06:08:57Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Template:Module link]]&lt;br /&gt;
&lt;br /&gt;
{{Redirect category shell|&lt;br /&gt;
{{R from move}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Cot&amp;diff=269</id>
		<title>Template:Cot</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Cot&amp;diff=269"/>
		<updated>2025-12-11T06:08:57Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Template:Collapse top]]&lt;br /&gt;
{{Redirect category shell|&lt;br /&gt;
{{R from template shortcut}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Cob&amp;diff=267</id>
		<title>Template:Cob</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Cob&amp;diff=267"/>
		<updated>2025-12-11T06:08:57Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Template:Collapse bottom]]&lt;br /&gt;
{{Redirect category shell|&lt;br /&gt;
{{R from template shortcut}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Tag&amp;diff=265</id>
		<title>Template:Tag</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Tag&amp;diff=265"/>
		<updated>2025-12-11T06:08:57Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code class=&amp;quot;{{#ifeq:{{{wrap|}}}|yes|wrap|nowrap}}&amp;quot; style=&amp;quot;{{#ifeq:{{{style|}}}|plain|border:none;background:transparent;|{{{style|}}}}}&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
 Opening tag&lt;br /&gt;
--&amp;gt;{{#switch:{{{2|pair}}}&lt;br /&gt;
  |c|close =&lt;br /&gt;
  |e|empty|s|single|v|void&lt;br /&gt;
  |o|open&lt;br /&gt;
  |p|pair = &amp;amp;lt;{{#if:{{{link|}}}|[[HTML element#{{{1|tag}}}|{{{1|tag}}}]]|{{{1|tag}}}}}{{#if:{{{params|{{{attribs|}}}}}}|&amp;amp;#32;{{{params|{{{attribs}}}}}}}}&lt;br /&gt;
 }}&amp;lt;!--&lt;br /&gt;
 Content between tags&lt;br /&gt;
--&amp;gt;{{#switch:{{{2|pair}}}&lt;br /&gt;
  |c|close = {{{content|}}}&lt;br /&gt;
  |e|empty|s|single|v|void = &amp;amp;#32;&amp;amp;#47;&amp;amp;gt;&lt;br /&gt;
  |o|open = &amp;amp;gt;{{{content|}}}&lt;br /&gt;
  |p|pair = {{#ifeq:{{{1|tag}}}|!--||&amp;amp;gt;}}{{{content|...}}}&lt;br /&gt;
 }}&amp;lt;!--&lt;br /&gt;
 Closing tag&lt;br /&gt;
--&amp;gt;{{#switch:{{{2|pair}}}&lt;br /&gt;
  |e|empty|s|single|v|void&lt;br /&gt;
  |o|open =&lt;br /&gt;
  |c|close&lt;br /&gt;
  |p|pair = {{#ifeq:{{{1|tag}}}|!--|--&amp;amp;gt;|&amp;amp;lt;&amp;amp;#47;{{{1|tag}}}&amp;amp;gt;}}&lt;br /&gt;
 }}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
	<entry>
		<id>https://middleseadirectory.com/wiki/index.php?title=Template:Collapse_bottom&amp;diff=263</id>
		<title>Template:Collapse bottom</title>
		<link rel="alternate" type="text/html" href="https://middleseadirectory.com/wiki/index.php?title=Template:Collapse_bottom&amp;diff=263"/>
		<updated>2025-12-11T06:08:57Z</updated>

		<summary type="html">&lt;p&gt;Lightfall: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;|}&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation|Template:Collapse top/doc}}&lt;br /&gt;
&amp;lt;!-- PLEASE ADD THIS TEMPLATE&#039;S CATEGORIES AND INTERWIKIS TO THE /doc SUBPAGE, THANKS --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lightfall</name></author>
	</entry>
</feed>