<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://kronostimetitan.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bassrodimo</id>
	<title>Kronospedia - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://kronostimetitan.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bassrodimo"/>
	<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php/Special:Contributions/Bassrodimo"/>
	<updated>2026-06-28T04:25:03Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.36.2</generator>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Alala&amp;diff=559</id>
		<title>Alala</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Alala&amp;diff=559"/>
		<updated>2022-01-04T22:30:10Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Deleted duped Navboxes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
|name = Alala&lt;br /&gt;
|image = {{PAGENAME}}-face.png&lt;br /&gt;
|age = 20&lt;br /&gt;
|location = [[Greece 1669 BC]]; [[Greece 1668 BC]]&lt;br /&gt;
|slutskills = &lt;br /&gt;
|soulsteal = yes&lt;br /&gt;
|body = {{PAGENAME}}-full.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Alala is trying to defend her land from invaders...&lt;br /&gt;
== Quests ==&lt;br /&gt;
List of quests with how to complete&lt;br /&gt;
== SoulSteal ==&lt;br /&gt;
Capturable and if so - how&lt;br /&gt;
== Castle Kronos ==&lt;br /&gt;
Interactions at Castle Kronos.&lt;br /&gt;
== Outfits ==&lt;br /&gt;
List of Available Outfits / sets.&amp;lt;br&amp;gt;Maybe also how to obtain them.&lt;br /&gt;
&lt;br /&gt;
red panties, red nightie,&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
war bracers, war sword, war sandals, war chiton, war greaves, war pauldron, war tassets,&lt;br /&gt;
&lt;br /&gt;
thin red panties,&lt;br /&gt;
&lt;br /&gt;
black sparkle skirt,&lt;br /&gt;
&lt;br /&gt;
blue plaid skirt,&lt;br /&gt;
&lt;br /&gt;
Santa's little helper shoes, Santa's little helper dress, Santa's little helper sack, Santa's hat,&lt;br /&gt;
&lt;br /&gt;
mermaid dress,&lt;br /&gt;
&lt;br /&gt;
blue reigndeer sweater,&lt;br /&gt;
&lt;br /&gt;
pink striped sweater,&lt;br /&gt;
&lt;br /&gt;
flat hair,&lt;br /&gt;
&lt;br /&gt;
{{Navbox_Characters&lt;br /&gt;
}}&amp;lt;div class=&amp;quot;navbox&amp;quot; style=&amp;quot;padding:3px&amp;quot; role=&amp;quot;navigation&amp;quot; aria-labelledby=&amp;quot;Girls&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Aria&amp;diff=558</id>
		<title>Aria</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Aria&amp;diff=558"/>
		<updated>2022-01-04T22:24:17Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Undo revision 557 by Bassrodimo (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
|name = &lt;br /&gt;
|image = {{PAGENAME}}-face.png&lt;br /&gt;
|age = &lt;br /&gt;
|location = &lt;br /&gt;
|slutskills = &lt;br /&gt;
|soulsteal = &lt;br /&gt;
|body = {{PAGENAME}}-full.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Character overview&lt;br /&gt;
== Quests ==&lt;br /&gt;
List of quests with how to complete&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;'''''Mermaid Hunter'''''&amp;lt;/span&amp;gt; = you found a girl on the shore of cyprus. you try to talk to her but she doesn't speak. having a memory in beginning of time you can talk to Poseidon for answers..&amp;amp;nbsp;&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;'''''Mermaid Hunter'''''&amp;lt;/span&amp;gt; p2 = returning to cyprus you need to go back an tell aria about the neckless an her sisters. which one has the neckless.. search around the water &amp;quot;water will be a shade of blue to walk on&amp;quot;&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
== SoulSteal ==&lt;br /&gt;
Capturable and if so - how&lt;br /&gt;
== Castle Kronos ==&lt;br /&gt;
Interactions at Castle Kronos.&lt;br /&gt;
== Outfits ==&lt;br /&gt;
List of Available Outfits / sets.&lt;br /&gt;
&lt;br /&gt;
human&lt;br /&gt;
&lt;br /&gt;
mermaid&lt;br /&gt;
&lt;br /&gt;
green shell bra&lt;br /&gt;
&lt;br /&gt;
seaweed skirt&lt;br /&gt;
&lt;br /&gt;
pearl necklace&lt;br /&gt;
&lt;br /&gt;
normal&lt;br /&gt;
&lt;br /&gt;
cute2&lt;br /&gt;
&lt;br /&gt;
despise7&lt;br /&gt;
&lt;br /&gt;
fear3, fear4&lt;br /&gt;
&lt;br /&gt;
flirty&lt;br /&gt;
&lt;br /&gt;
neutral,&lt;br /&gt;
&lt;br /&gt;
silly1,&lt;br /&gt;
&lt;br /&gt;
smile,&lt;br /&gt;
&lt;br /&gt;
Maybe also how to obtain them.&lt;br /&gt;
&lt;br /&gt;
{{Navbox_Characters}}&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Aria&amp;diff=557</id>
		<title>Aria</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Aria&amp;diff=557"/>
		<updated>2022-01-04T22:22:32Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Testing Edit - duping Navbox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
|name = &lt;br /&gt;
|image = {{PAGENAME}}-face.png&lt;br /&gt;
|age = &lt;br /&gt;
|location = &lt;br /&gt;
|slutskills = &lt;br /&gt;
|soulsteal = &lt;br /&gt;
|body = {{PAGENAME}}-full.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Character overview&lt;br /&gt;
== Quests ==&lt;br /&gt;
List of quests with how to complete&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;'''''Mermaid Hunter'''''&amp;lt;/span&amp;gt; = you found a girl on the shore of cyprus. you try to talk to her but she doesn't speak. having a memory in beginning of time you can talk to Poseidon for answers..&amp;amp;nbsp;&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;'''''Mermaid Hunter'''''&amp;lt;/span&amp;gt; p2 = returning to cyprus you need to go back an tell aria about the neckless an her sisters. which one has the neckless.. search around the water &amp;quot;water will be a shade of blue to walk on&amp;quot;&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
== SoulSteal ==&lt;br /&gt;
Capturable and if so - how&lt;br /&gt;
== Castle Kronos ==&lt;br /&gt;
Interactions at Castle Kronos.&lt;br /&gt;
== Outfits ==&lt;br /&gt;
List of Available Outfits / sets.&lt;br /&gt;
&lt;br /&gt;
human&lt;br /&gt;
&lt;br /&gt;
mermaid&lt;br /&gt;
&lt;br /&gt;
green shell bra&lt;br /&gt;
&lt;br /&gt;
seaweed skirt&lt;br /&gt;
&lt;br /&gt;
pearl necklace&lt;br /&gt;
&lt;br /&gt;
normal&lt;br /&gt;
&lt;br /&gt;
cute2&lt;br /&gt;
&lt;br /&gt;
despise7&lt;br /&gt;
&lt;br /&gt;
fear3, fear4&lt;br /&gt;
&lt;br /&gt;
flirty&lt;br /&gt;
&lt;br /&gt;
neutral,&lt;br /&gt;
&lt;br /&gt;
silly1,&lt;br /&gt;
&lt;br /&gt;
smile,&lt;br /&gt;
&lt;br /&gt;
Maybe also how to obtain them.&lt;br /&gt;
&lt;br /&gt;
{{Navbox_Characters}}&amp;lt;div class=&amp;quot;navbox&amp;quot; style=&amp;quot;padding:3px&amp;quot; role=&amp;quot;navigation&amp;quot; aria-labelledby=&amp;quot;Girls&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;nowraplinks mw-collapsible autocollapse navbox-inner&amp;quot; style=&amp;quot;border-spacing:0;background:transparent;color:inherit&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;navbox-title&amp;quot; colspan=&amp;quot;2&amp;quot; scope=&amp;quot;col&amp;quot; | &amp;lt;div id=&amp;quot;Girls&amp;quot; style=&amp;quot;font-size:114%;margin:0 4em&amp;quot;&amp;gt;[https://kronostimetitan.com/wiki/index.php/Girls Girls]&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;navbox-group&amp;quot; style=&amp;quot;width:1%&amp;quot; scope=&amp;quot;row&amp;quot; | Obtainable girls&lt;br /&gt;
| class=&amp;quot;navbox-list1 navbox-list navbox-odd&amp;quot; style=&amp;quot;width:100%;padding:0px&amp;quot; | &amp;lt;div style=&amp;quot;padding:0em 0.25em&amp;quot;&amp;gt;[https://kronostimetitan.com/wiki/index.php/Alala Alala] • [https://kronostimetitan.com/wiki/index.php/Arethusa Arethusa] • [https://kronostimetitan.com/wiki/index.php/Brittany Brittany] • [https://kronostimetitan.com/wiki/index.php/Helda Helda] • [https://kronostimetitan.com/wiki/index.php/Hestia Hestia] • [https://kronostimetitan.com/wiki/index.php/Hydna Hydna] • [https://kronostimetitan.com/wiki/index.php/Mary_Warren Mary Warren] • [https://kronostimetitan.com/wiki/index.php/Mercy Mercy] • [https://kronostimetitan.com/wiki/index.php/The_Thief The Thief] • [https://kronostimetitan.com/wiki/index.php/Zoe Zoe]&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;navbox-group&amp;quot; style=&amp;quot;width:1%&amp;quot; scope=&amp;quot;row&amp;quot; | Other&lt;br /&gt;
| class=&amp;quot;navbox-list1 navbox-list navbox-even&amp;quot; style=&amp;quot;width:100%;padding:0px&amp;quot; | &amp;lt;div style=&amp;quot;padding:0em 0.25em&amp;quot;&amp;gt;[ Aria] • [https://kronostimetitan.com/wiki/index.php/Artemis Artemis] • [https://kronostimetitan.com/wiki/index.php/Cypher Cypher] • [https://kronostimetitan.com/wiki/index.php/Grace Grace] • [https://kronostimetitan.com/wiki/index.php/Hera Hera] • [https://kronostimetitan.com/wiki/index.php/Judy Judy] • [https://kronostimetitan.com/wiki/index.php/Linda Linda] • [https://kronostimetitan.com/wiki/index.php/Sarina Sarina] • [https://kronostimetitan.com/wiki/index.php/Summer Summer] • [https://kronostimetitan.com/wiki/index.php/Tituba Tituba] • [https://kronostimetitan.com/wiki/index.php/Zilda Zilda]&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Aria&amp;diff=556</id>
		<title>Aria</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Aria&amp;diff=556"/>
		<updated>2022-01-04T22:21:34Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Removed duplicated Navboxes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
|name = &lt;br /&gt;
|image = {{PAGENAME}}-face.png&lt;br /&gt;
|age = &lt;br /&gt;
|location = &lt;br /&gt;
|slutskills = &lt;br /&gt;
|soulsteal = &lt;br /&gt;
|body = {{PAGENAME}}-full.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Character overview&lt;br /&gt;
== Quests ==&lt;br /&gt;
List of quests with how to complete&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;'''''Mermaid Hunter'''''&amp;lt;/span&amp;gt; = you found a girl on the shore of cyprus. you try to talk to her but she doesn't speak. having a memory in beginning of time you can talk to Poseidon for answers..&amp;amp;nbsp;&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;'''''Mermaid Hunter'''''&amp;lt;/span&amp;gt; p2 = returning to cyprus you need to go back an tell aria about the neckless an her sisters. which one has the neckless.. search around the water &amp;quot;water will be a shade of blue to walk on&amp;quot;&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
== SoulSteal ==&lt;br /&gt;
Capturable and if so - how&lt;br /&gt;
== Castle Kronos ==&lt;br /&gt;
Interactions at Castle Kronos.&lt;br /&gt;
== Outfits ==&lt;br /&gt;
List of Available Outfits / sets.&lt;br /&gt;
&lt;br /&gt;
human&lt;br /&gt;
&lt;br /&gt;
mermaid&lt;br /&gt;
&lt;br /&gt;
green shell bra&lt;br /&gt;
&lt;br /&gt;
seaweed skirt&lt;br /&gt;
&lt;br /&gt;
pearl necklace&lt;br /&gt;
&lt;br /&gt;
normal&lt;br /&gt;
&lt;br /&gt;
cute2&lt;br /&gt;
&lt;br /&gt;
despise7&lt;br /&gt;
&lt;br /&gt;
fear3, fear4&lt;br /&gt;
&lt;br /&gt;
flirty&lt;br /&gt;
&lt;br /&gt;
neutral,&lt;br /&gt;
&lt;br /&gt;
silly1,&lt;br /&gt;
&lt;br /&gt;
smile,&lt;br /&gt;
&lt;br /&gt;
Maybe also how to obtain them.&lt;br /&gt;
&lt;br /&gt;
{{Navbox_Characters}}&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Template:Flatlist&amp;diff=270</id>
		<title>Template:Flatlist</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Template:Flatlist&amp;diff=270"/>
		<updated>2021-10-27T02:32:31Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Created page with &amp;quot;&amp;lt;onlyinclude&amp;gt;&amp;lt;templatestyles src=&amp;quot;Template:Flatlist/styles.css&amp;quot;/&amp;gt;&amp;lt;div class=&amp;quot;hlist {{{class|}}}&amp;quot; {{#if:{{{style|}}}{{{indent|}}}|style=&amp;quot;{{#if:{{{indent|}}}|margin-left: {{#exp...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&amp;lt;templatestyles src=&amp;quot;Template:Flatlist/styles.css&amp;quot;/&amp;gt;&amp;lt;div class=&amp;quot;hlist {{{class|}}}&amp;quot; {{#if:{{{style|}}}{{{indent|}}}|style=&amp;quot;{{#if:{{{indent|}}}|margin-left: {{#expr:{{{indent}}}*1.6}}em;}} {{{style|}}}&amp;quot;}}&amp;gt;{{#if:{{{1|}}}|&lt;br /&gt;
{{{1}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;}}&amp;lt;/onlyinclude&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Template:Flatlist/styles.css&amp;diff=269</id>
		<title>Template:Flatlist/styles.css</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Template:Flatlist/styles.css&amp;diff=269"/>
		<updated>2021-10-27T02:32:13Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Template:Plainlist/styles.css&amp;diff=268</id>
		<title>Template:Plainlist/styles.css</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Template:Plainlist/styles.css&amp;diff=268"/>
		<updated>2021-10-27T02:30:40Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Template:Plainlist&amp;diff=267</id>
		<title>Template:Plainlist</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Template:Plainlist&amp;diff=267"/>
		<updated>2021-10-27T02:30:19Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Created page with &amp;quot;&amp;lt;templatestyles src=&amp;quot;Plainlist/styles.css&amp;quot;/&amp;gt;&amp;lt;div class=&amp;quot;plainlist {{{class|}}}&amp;quot;&amp;gt;{{#if:{{{1|}}}| {{{1}}} &amp;lt;/div&amp;gt;}}&amp;lt;noinclude&amp;gt;&amp;lt;/div&amp;gt; {{documentation}} &amp;lt;/noinclude&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;templatestyles src=&amp;quot;Plainlist/styles.css&amp;quot;/&amp;gt;&amp;lt;div class=&amp;quot;plainlist {{{class|}}}&amp;quot;&amp;gt;{{#if:{{{1|}}}|&lt;br /&gt;
{{{1}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;}}&amp;lt;noinclude&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Module:Navbox/styles.css&amp;diff=266</id>
		<title>Module:Navbox/styles.css</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Module:Navbox/styles.css&amp;diff=266"/>
		<updated>2021-10-27T02:28:41Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Created page with &amp;quot;.navbox { 	border: 1px solid #aaa; 	box-sizing: border-box; 	width: 100%; 	margin: auto; 	clear: both; 	font-size: 88%; 	text-align: center; 	padding: 1px; }  .navbox-inner, ....&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.navbox {&lt;br /&gt;
	border: 1px solid #aaa;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	margin: auto;&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;
}&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 + .navbox-styles + .navbox {&lt;br /&gt;
	/* Single pixel border between adjacent navboxes */&lt;br /&gt;
	margin-top: -1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox th,&lt;br /&gt;
.navbox-title,&lt;br /&gt;
.navbox-abovebelow {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	/* Title and above/below styles */&lt;br /&gt;
	padding-left: 1em;&lt;br /&gt;
	padding-right: 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
th.navbox-group {&lt;br /&gt;
	/* Group style */&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: #fdfdfd;&lt;br /&gt;
}&lt;br /&gt;
.navbox-list {&lt;br /&gt;
	/* Must match background color */&lt;br /&gt;
	border-color: #fdfdfd;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox th,&lt;br /&gt;
.navbox-title {&lt;br /&gt;
	/* Level 1 color */&lt;br /&gt;
	background: #eaeeff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-abovebelow,&lt;br /&gt;
th.navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-title {&lt;br /&gt;
	/* Level 2 color */&lt;br /&gt;
	background: #ddddff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-subgroup .navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-abovebelow {&lt;br /&gt;
	/* Level 3 color */&lt;br /&gt;
	background: #e6e6ff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-even {&lt;br /&gt;
	/* Even row striping */&lt;br /&gt;
	background: #f7f7f7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-odd {&lt;br /&gt;
	/* Odd row striping */&lt;br /&gt;
	background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
th.navbox-title1 {&lt;br /&gt;
	border-left: 2px solid #fdfdfd;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
td.navbox-list1 {&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;
.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;
	/* Adjust hlist padding in navboxes */&lt;br /&gt;
	padding: 0.125em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox .hlist dd,&lt;br /&gt;
.navbox .hlist dt,&lt;br /&gt;
.navbox .hlist li {&lt;br /&gt;
	/* Nowrap list items in navboxes */&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox .hlist dd dl,&lt;br /&gt;
.navbox .hlist dt dl,&lt;br /&gt;
.navbox .hlist li ol,&lt;br /&gt;
.navbox .hlist li ul {&lt;br /&gt;
	/* But allow parent list items to be wrapped */&lt;br /&gt;
	white-space: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ol + .navbox-styles + .navbox,&lt;br /&gt;
ul + .navbox-styles + .navbox {&lt;br /&gt;
	/* Prevent lists from clinging to navboxes */&lt;br /&gt;
	margin-top: 0.5em;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Module:Navbar/styles.css&amp;diff=265</id>
		<title>Module:Navbar/styles.css</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Module:Navbar/styles.css&amp;diff=265"/>
		<updated>2021-10-27T02:27:35Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Created page with &amp;quot;/** {{Shared Template Warning}}  * This TemplateStyles page is separately used for Template:Navbar  * because of course there are two versions of the same template.  * Be...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/** {{Shared Template Warning}}&lt;br /&gt;
 * This TemplateStyles page is separately used for [[Template:Navbar]]&lt;br /&gt;
 * because of course there are two versions of the same template.&lt;br /&gt;
 * Be careful when adjusting styles accordingly.&lt;br /&gt;
 */&lt;br /&gt;
.navbar {&lt;br /&gt;
	display: inline;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar ul {&lt;br /&gt;
	display: inline;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar li {&lt;br /&gt;
	word-spacing: -0.125em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Navbar styling when nested in navbox */&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;
	width: 6em;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Module:Navbar&amp;diff=248</id>
		<title>Module:Navbar</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Module:Navbar&amp;diff=248"/>
		<updated>2021-10-26T02:17:56Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local getArgs&lt;br /&gt;
local ul&lt;br /&gt;
&lt;br /&gt;
function p.addItem (mini, full, link, descrip, args, url)&lt;br /&gt;
	local l&lt;br /&gt;
	if url then&lt;br /&gt;
		l = {'[', '', ']'}&lt;br /&gt;
	else&lt;br /&gt;
		l = {'[[', '|', ']]'}&lt;br /&gt;
	end&lt;br /&gt;
	ul:tag('li')&lt;br /&gt;
		:addClass('nv-'..full)&lt;br /&gt;
		:wikitext(l[1] .. link .. l[2])&lt;br /&gt;
		:tag(args.mini and 'abbr' or 'span')&lt;br /&gt;
			:attr('title', descrip..' this template')&lt;br /&gt;
			:cssText(args.fontstyle)&lt;br /&gt;
			:wikitext(args.mini and mini or full)&lt;br /&gt;
			:done()&lt;br /&gt;
		:wikitext(l[3])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.brackets (position, c, args, div)&lt;br /&gt;
	if args.brackets then&lt;br /&gt;
		div&lt;br /&gt;
			:tag('span')&lt;br /&gt;
				:css('margin-'..position, '-0.125em')&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(c)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._navbar(args)&lt;br /&gt;
	local show = {true, true, true, false, false, false}&lt;br /&gt;
	local titleArg = 1&lt;br /&gt;
	&lt;br /&gt;
	if args.collapsible then&lt;br /&gt;
		titleArg = 2&lt;br /&gt;
		if not args.plain then args.mini = 1 end&lt;br /&gt;
		if args.fontcolor then&lt;br /&gt;
			args.fontstyle = 'color:' .. args.fontcolor .. ';'&lt;br /&gt;
		end&lt;br /&gt;
		args.style = 'float:left; text-align:left'&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.template then&lt;br /&gt;
		titleArg = 'template'&lt;br /&gt;
		show = {true, false, false, false, false, false}&lt;br /&gt;
		local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6, talk = 2, edit = 3, hist = 4, move = 5, watch = 6}&lt;br /&gt;
		for k,v in ipairs(require ('Module:TableTools').compressSparseArray(args)) do&lt;br /&gt;
			local num = index[v]&lt;br /&gt;
			if num then show[num] = true end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.noedit then show[3] = false end&lt;br /&gt;
	&lt;br /&gt;
	local titleText = args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle())&lt;br /&gt;
	local title = mw.title.new(mw.text.trim(titleText), 'Template')&lt;br /&gt;
	if not title then&lt;br /&gt;
		error('Invalid title ' .. titleText)&lt;br /&gt;
	end&lt;br /&gt;
	local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or ''&lt;br /&gt;
	&lt;br /&gt;
	local div = mw.html.create():tag('div')&lt;br /&gt;
	div&lt;br /&gt;
		:addClass('plainlinks')&lt;br /&gt;
		:addClass('hlist')&lt;br /&gt;
		:addClass('navbar')&lt;br /&gt;
		:cssText(args.style)&lt;br /&gt;
&lt;br /&gt;
	if args.mini then div:addClass('mini') end&lt;br /&gt;
&lt;br /&gt;
	if not (args.mini or args.plain) then&lt;br /&gt;
		div&lt;br /&gt;
			:tag('span')&lt;br /&gt;
				:css('word-spacing', 0)&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(args.text or 'This box:')&lt;br /&gt;
				:wikitext(' ')&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	p.brackets('right', '&amp;amp;#91; ', args, div)&lt;br /&gt;
	&lt;br /&gt;
	ul = div:tag('ul')&lt;br /&gt;
	if show[1] then p.addItem('v', 'view', title.fullText, 'View', args) end&lt;br /&gt;
	if show[2] then p.addItem('t', 'talk', talkpage, 'Discuss', args) end&lt;br /&gt;
	if show[3] then p.addItem('e', 'edit', title:fullUrl('action=edit'), 'Edit', args, true) end&lt;br /&gt;
	if show[4] then p.addItem('h', 'hist', title:fullUrl('action=history'), 'History of', args, true) end&lt;br /&gt;
	if show[5] then&lt;br /&gt;
		local move = mw.title.new ('Special:Movepage')&lt;br /&gt;
		p.addItem('m', 'move', move:fullUrl('target='..title.fullText), 'Move', args, true) end&lt;br /&gt;
	if show[6] then p.addItem('w', 'watch', title:fullUrl('action=watch'), 'Watch', args, true) end&lt;br /&gt;
	&lt;br /&gt;
	p.brackets('left', ' &amp;amp;#93;', args, div)&lt;br /&gt;
	&lt;br /&gt;
	if args.collapsible then&lt;br /&gt;
		div&lt;br /&gt;
			:done()&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			:css('font-size', '114%')&lt;br /&gt;
			:css('margin', args.mini and '0 4em' or '0 7em')&lt;br /&gt;
			:cssText(args.fontstyle)&lt;br /&gt;
			:wikitext(args[1])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- DELIBERATE DELTA FROM EN.WP THAT INTEGRATES HLIST TSTYLES&lt;br /&gt;
	-- CARE WHEN SYNCING&lt;br /&gt;
	-- local frame = mw.getCurrentFrame()&lt;br /&gt;
	-- return frame:extensionTag{&lt;br /&gt;
	-- 	name = 'templatestyles', args = { src = 'Flatlist/styles.css' }&lt;br /&gt;
	-- } .. frame:extensionTag{&lt;br /&gt;
	-- 	name = 'templatestyles', args = { src = 'Module:Navbar/styles.css' }&lt;br /&gt;
	-- } .. tostring(div:done())&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.navbar(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
	end&lt;br /&gt;
	return p._navbar(getArgs(frame))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Module:Navbar&amp;diff=247</id>
		<title>Module:Navbar</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Module:Navbar&amp;diff=247"/>
		<updated>2021-10-26T02:16:25Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local getArgs&lt;br /&gt;
local ul&lt;br /&gt;
&lt;br /&gt;
function p.addItem (mini, full, link, descrip, args, url)&lt;br /&gt;
	local l&lt;br /&gt;
	if url then&lt;br /&gt;
		l = {'[', '', ']'}&lt;br /&gt;
	else&lt;br /&gt;
		l = {'[[', '|', ']]'}&lt;br /&gt;
	end&lt;br /&gt;
	ul:tag('li')&lt;br /&gt;
		:addClass('nv-'..full)&lt;br /&gt;
		:wikitext(l[1] .. link .. l[2])&lt;br /&gt;
		:tag(args.mini and 'abbr' or 'span')&lt;br /&gt;
			:attr('title', descrip..' this template')&lt;br /&gt;
			:cssText(args.fontstyle)&lt;br /&gt;
			:wikitext(args.mini and mini or full)&lt;br /&gt;
			:done()&lt;br /&gt;
		:wikitext(l[3])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.brackets (position, c, args, div)&lt;br /&gt;
	if args.brackets then&lt;br /&gt;
		div&lt;br /&gt;
			:tag('span')&lt;br /&gt;
				:css('margin-'..position, '-0.125em')&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(c)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._navbar(args)&lt;br /&gt;
	local show = {true, true, true, false, false, false}&lt;br /&gt;
	local titleArg = 1&lt;br /&gt;
	&lt;br /&gt;
	if args.collapsible then&lt;br /&gt;
		titleArg = 2&lt;br /&gt;
		if not args.plain then args.mini = 1 end&lt;br /&gt;
		if args.fontcolor then&lt;br /&gt;
			args.fontstyle = 'color:' .. args.fontcolor .. ';'&lt;br /&gt;
		end&lt;br /&gt;
		args.style = 'float:left; text-align:left'&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.template then&lt;br /&gt;
		titleArg = 'template'&lt;br /&gt;
		show = {true, false, false, false, false, false}&lt;br /&gt;
		local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6, talk = 2, edit = 3, hist = 4, move = 5, watch = 6}&lt;br /&gt;
		for k,v in ipairs(require ('Module:TableTools').compressSparseArray(args)) do&lt;br /&gt;
			local num = index[v]&lt;br /&gt;
			if num then show[num] = true end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.noedit then show[3] = false end&lt;br /&gt;
	&lt;br /&gt;
	local titleText = args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle())&lt;br /&gt;
	local title = mw.title.new(mw.text.trim(titleText), 'Template')&lt;br /&gt;
	if not title then&lt;br /&gt;
		error('Invalid title ' .. titleText)&lt;br /&gt;
	end&lt;br /&gt;
	local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or ''&lt;br /&gt;
	&lt;br /&gt;
	local div = mw.html.create():tag('div')&lt;br /&gt;
	div&lt;br /&gt;
		:addClass('plainlinks')&lt;br /&gt;
		:addClass('hlist')&lt;br /&gt;
		:addClass('navbar')&lt;br /&gt;
		:cssText(args.style)&lt;br /&gt;
&lt;br /&gt;
	if args.mini then div:addClass('mini') end&lt;br /&gt;
&lt;br /&gt;
	if not (args.mini or args.plain) then&lt;br /&gt;
		div&lt;br /&gt;
			:tag('span')&lt;br /&gt;
				:css('word-spacing', 0)&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(args.text or 'This box:')&lt;br /&gt;
				:wikitext(' ')&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	p.brackets('right', '&amp;amp;#91; ', args, div)&lt;br /&gt;
	&lt;br /&gt;
	ul = div:tag('ul')&lt;br /&gt;
	if show[1] then p.addItem('v', 'view', title.fullText, 'View', args) end&lt;br /&gt;
	if show[2] then p.addItem('t', 'talk', talkpage, 'Discuss', args) end&lt;br /&gt;
	if show[3] then p.addItem('e', 'edit', title:fullUrl('action=edit'), 'Edit', args, true) end&lt;br /&gt;
	if show[4] then p.addItem('h', 'hist', title:fullUrl('action=history'), 'History of', args, true) end&lt;br /&gt;
	if show[5] then&lt;br /&gt;
		local move = mw.title.new ('Special:Movepage')&lt;br /&gt;
		p.addItem('m', 'move', move:fullUrl('target='..title.fullText), 'Move', args, true) end&lt;br /&gt;
	if show[6] then p.addItem('w', 'watch', title:fullUrl('action=watch'), 'Watch', args, true) end&lt;br /&gt;
	&lt;br /&gt;
	p.brackets('left', ' &amp;amp;#93;', args, div)&lt;br /&gt;
	&lt;br /&gt;
	if args.collapsible then&lt;br /&gt;
		div&lt;br /&gt;
			:done()&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			:css('font-size', '114%')&lt;br /&gt;
			:css('margin', args.mini and '0 4em' or '0 7em')&lt;br /&gt;
			:cssText(args.fontstyle)&lt;br /&gt;
			:wikitext(args[1])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- DELIBERATE DELTA FROM EN.WP THAT INTEGRATES HLIST TSTYLES&lt;br /&gt;
	-- CARE WHEN SYNCING&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	return frame:extensionTag{&lt;br /&gt;
		name = 'templatestyles', args = { src = 'Flatlist/styles.css' }&lt;br /&gt;
	} .. frame:extensionTag{&lt;br /&gt;
		name = 'templatestyles', args = { src = 'Module:Navbar/styles.css' }&lt;br /&gt;
	} .. tostring(div:done())&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- function p.navbar(frame)&lt;br /&gt;
-- 	if not getArgs then&lt;br /&gt;
-- 		getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
-- 	end&lt;br /&gt;
-- 	return p._navbar(getArgs(frame))&lt;br /&gt;
-- end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Module:Navbar&amp;diff=246</id>
		<title>Module:Navbar</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Module:Navbar&amp;diff=246"/>
		<updated>2021-10-26T02:14:20Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local getArgs&lt;br /&gt;
local ul&lt;br /&gt;
&lt;br /&gt;
function p.addItem (mini, full, link, descrip, args, url)&lt;br /&gt;
	local l&lt;br /&gt;
	if url then&lt;br /&gt;
		l = {'[', '', ']'}&lt;br /&gt;
	else&lt;br /&gt;
		l = {'[[', '|', ']]'}&lt;br /&gt;
	end&lt;br /&gt;
	ul:tag('li')&lt;br /&gt;
		:addClass('nv-'..full)&lt;br /&gt;
		:wikitext(l[1] .. link .. l[2])&lt;br /&gt;
		:tag(args.mini and 'abbr' or 'span')&lt;br /&gt;
			:attr('title', descrip..' this template')&lt;br /&gt;
			:cssText(args.fontstyle)&lt;br /&gt;
			:wikitext(args.mini and mini or full)&lt;br /&gt;
			:done()&lt;br /&gt;
		:wikitext(l[3])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.brackets (position, c, args, div)&lt;br /&gt;
	if args.brackets then&lt;br /&gt;
		div&lt;br /&gt;
			:tag('span')&lt;br /&gt;
				:css('margin-'..position, '-0.125em')&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(c)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._navbar(args)&lt;br /&gt;
	local show = {true, true, true, false, false, false}&lt;br /&gt;
	local titleArg = 1&lt;br /&gt;
	&lt;br /&gt;
	if args.collapsible then&lt;br /&gt;
		titleArg = 2&lt;br /&gt;
		if not args.plain then args.mini = 1 end&lt;br /&gt;
		if args.fontcolor then&lt;br /&gt;
			args.fontstyle = 'color:' .. args.fontcolor .. ';'&lt;br /&gt;
		end&lt;br /&gt;
		args.style = 'float:left; text-align:left'&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.template then&lt;br /&gt;
		titleArg = 'template'&lt;br /&gt;
		show = {true, false, false, false, false, false}&lt;br /&gt;
		local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6, talk = 2, edit = 3, hist = 4, move = 5, watch = 6}&lt;br /&gt;
		for k,v in ipairs(require ('Module:TableTools').compressSparseArray(args)) do&lt;br /&gt;
			local num = index[v]&lt;br /&gt;
			if num then show[num] = true end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.noedit then show[3] = false end&lt;br /&gt;
	&lt;br /&gt;
	local titleText = args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle())&lt;br /&gt;
	local title = mw.title.new(mw.text.trim(titleText), 'Template')&lt;br /&gt;
	if not title then&lt;br /&gt;
		error('Invalid title ' .. titleText)&lt;br /&gt;
	end&lt;br /&gt;
	local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or ''&lt;br /&gt;
	&lt;br /&gt;
	local div = mw.html.create():tag('div')&lt;br /&gt;
	div&lt;br /&gt;
		:addClass('plainlinks')&lt;br /&gt;
		:addClass('hlist')&lt;br /&gt;
		:addClass('navbar')&lt;br /&gt;
		:cssText(args.style)&lt;br /&gt;
&lt;br /&gt;
	if args.mini then div:addClass('mini') end&lt;br /&gt;
&lt;br /&gt;
	if not (args.mini or args.plain) then&lt;br /&gt;
		div&lt;br /&gt;
			:tag('span')&lt;br /&gt;
				:css('word-spacing', 0)&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(args.text or 'This box:')&lt;br /&gt;
				:wikitext(' ')&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	p.brackets('right', '&amp;amp;#91; ', args, div)&lt;br /&gt;
	&lt;br /&gt;
	ul = div:tag('ul')&lt;br /&gt;
	if show[1] then p.addItem('v', 'view', title.fullText, 'View', args) end&lt;br /&gt;
	if show[2] then p.addItem('t', 'talk', talkpage, 'Discuss', args) end&lt;br /&gt;
	if show[3] then p.addItem('e', 'edit', title:fullUrl('action=edit'), 'Edit', args, true) end&lt;br /&gt;
	if show[4] then p.addItem('h', 'hist', title:fullUrl('action=history'), 'History of', args, true) end&lt;br /&gt;
	if show[5] then&lt;br /&gt;
		local move = mw.title.new ('Special:Movepage')&lt;br /&gt;
		p.addItem('m', 'move', move:fullUrl('target='..title.fullText), 'Move', args, true) end&lt;br /&gt;
	if show[6] then p.addItem('w', 'watch', title:fullUrl('action=watch'), 'Watch', args, true) end&lt;br /&gt;
	&lt;br /&gt;
	p.brackets('left', ' &amp;amp;#93;', args, div)&lt;br /&gt;
	&lt;br /&gt;
	if args.collapsible then&lt;br /&gt;
		div&lt;br /&gt;
			:done()&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			:css('font-size', '114%')&lt;br /&gt;
			:css('margin', args.mini and '0 4em' or '0 7em')&lt;br /&gt;
			:cssText(args.fontstyle)&lt;br /&gt;
			-- :wikitext(args[1])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- DELIBERATE DELTA FROM EN.WP THAT INTEGRATES HLIST TSTYLES&lt;br /&gt;
	-- CARE WHEN SYNCING&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	return frame:extensionTag{&lt;br /&gt;
		name = 'templatestyles', args = { src = 'Flatlist/styles.css' }&lt;br /&gt;
	} .. frame:extensionTag{&lt;br /&gt;
		name = 'templatestyles', args = { src = 'Module:Navbar/styles.css' }&lt;br /&gt;
	} .. tostring(div:done())&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.navbar(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
	end&lt;br /&gt;
	return p._navbar(getArgs(frame))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Module:Navbox&amp;diff=245</id>
		<title>Module:Navbox</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Module:Navbox&amp;diff=245"/>
		<updated>2021-10-26T02:11:08Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--&lt;br /&gt;
-- This module implements {{Navbox}}&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local navbar = require('Module:Navbar')._navbar&lt;br /&gt;
local getArgs -- lazily initialized&lt;br /&gt;
&lt;br /&gt;
local args&lt;br /&gt;
local border&lt;br /&gt;
local listnums&lt;br /&gt;
local ODD_EVEN_MARKER = '\127_ODDEVEN_\127'&lt;br /&gt;
local RESTART_MARKER = '\127_ODDEVEN0_\127'&lt;br /&gt;
local REGEX_MARKER = '\127_ODDEVEN(%d?)_\127'&lt;br /&gt;
&lt;br /&gt;
local function striped(wikitext)&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 = '[[Category:Navbox orphans]]'&lt;br /&gt;
	if border == 'subgroup' and args.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 = 'odd', 'even'&lt;br /&gt;
	if args.evenodd then&lt;br /&gt;
		if args.evenodd == 'swap' then&lt;br /&gt;
			first, second = second, first&lt;br /&gt;
		else&lt;br /&gt;
			first = args.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 == '0' 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('([%[%]])', '%%%1')&lt;br /&gt;
	return (wikitext:gsub(regex, ''):gsub(REGEX_MARKER, 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) == '{|' 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 '\n' .. item ..'\n'&lt;br /&gt;
	end&lt;br /&gt;
	if nowrapitems == 'yes' then&lt;br /&gt;
		local lines = {}&lt;br /&gt;
		for line in (item .. '\n'):gmatch('([^\n]*)\n') do&lt;br /&gt;
			local prefix, content = line:match('^([*:;#]+)%s*(.*)')&lt;br /&gt;
			if prefix and not content:match('^&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;') then&lt;br /&gt;
				line = prefix .. '&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;' .. content .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(lines, line)&lt;br /&gt;
		end&lt;br /&gt;
		item = table.concat(lines, '\n')&lt;br /&gt;
	end&lt;br /&gt;
	if item:match('^[*:;#]') then&lt;br /&gt;
		return '\n' .. item ..'\n'&lt;br /&gt;
	end&lt;br /&gt;
	return item&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Separate function so that we can evaluate properly whether hlist should&lt;br /&gt;
-- be added by the module&lt;br /&gt;
local function has_navbar()&lt;br /&gt;
	return args.navbar ~= 'off' and args.navbar ~= 'plain' and&lt;br /&gt;
		(args.name or mw.getCurrentFrame():getParent():getTitle():gsub('/sandbox$', '') ~= 'Template:Navbox')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
	if has_navbar() then&lt;br /&gt;
		titleCell:wikitext(navbar{&lt;br /&gt;
			args.name,&lt;br /&gt;
			-- we depend on this being mini = 1 when the navbox module decides&lt;br /&gt;
			-- to add hlist templatestyles. we also depend on navbar outputting&lt;br /&gt;
			-- a copy of the hlist templatestyles.&lt;br /&gt;
			mini = 1,&lt;br /&gt;
			fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') .. ';background:none transparent;border:none;box-shadow:none; padding:0;'&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Title row&lt;br /&gt;
--&lt;br /&gt;
local function renderTitleRow(tbl)&lt;br /&gt;
	if not args.title then return end&lt;br /&gt;
&lt;br /&gt;
	local titleRow = tbl:tag('tr')&lt;br /&gt;
&lt;br /&gt;
	if args.titlegroup then&lt;br /&gt;
		titleRow&lt;br /&gt;
			:tag('th')&lt;br /&gt;
				:attr('scope', 'row')&lt;br /&gt;
				:addClass('navbox-group')&lt;br /&gt;
				:addClass(args.titlegroupclass)&lt;br /&gt;
				:cssText(args.basestyle)&lt;br /&gt;
				:cssText(args.groupstyle)&lt;br /&gt;
				:cssText(args.titlegroupstyle)&lt;br /&gt;
				:wikitext(args.titlegroup)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local titleCell = titleRow:tag('th'):attr('scope', 'col')&lt;br /&gt;
&lt;br /&gt;
	if args.titlegroup then&lt;br /&gt;
		titleCell&lt;br /&gt;
			:addClass('navbox-title1')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local titleColspan = 2&lt;br /&gt;
	if args.imageleft then titleColspan = titleColspan + 1 end&lt;br /&gt;
	if args.image then titleColspan = titleColspan + 1 end&lt;br /&gt;
	if args.titlegroup then titleColspan = titleColspan - 1 end&lt;br /&gt;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:cssText(args.basestyle)&lt;br /&gt;
		:cssText(args.titlestyle)&lt;br /&gt;
		:addClass('navbox-title')&lt;br /&gt;
		:attr('colspan', titleColspan)&lt;br /&gt;
&lt;br /&gt;
	renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			-- id for aria-labelledby attribute&lt;br /&gt;
			:attr('id', mw.uri.anchorEncode(args.title))&lt;br /&gt;
			:addClass(args.titleclass)&lt;br /&gt;
			:css('font-size', '114%')&lt;br /&gt;
			:css('margin', '0 4em')&lt;br /&gt;
			:wikitext(processItem(args.title))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Above/Below rows&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local function getAboveBelowColspan()&lt;br /&gt;
	local ret = 2&lt;br /&gt;
	if args.imageleft then ret = ret + 1 end&lt;br /&gt;
	if args.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.above then return end&lt;br /&gt;
&lt;br /&gt;
	tbl:tag('tr')&lt;br /&gt;
		:tag('td')&lt;br /&gt;
			:addClass('navbox-abovebelow')&lt;br /&gt;
			:addClass(args.aboveclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.abovestyle)&lt;br /&gt;
			:attr('colspan', getAboveBelowColspan())&lt;br /&gt;
			:tag('div')&lt;br /&gt;
				-- id for aria-labelledby attribute, if no title&lt;br /&gt;
				:attr('id', args.title and nil or mw.uri.anchorEncode(args.above))&lt;br /&gt;
				:wikitext(processItem(args.above, args.nowrapitems))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderBelowRow(tbl)&lt;br /&gt;
	if not args.below then return end&lt;br /&gt;
&lt;br /&gt;
	tbl:tag('tr')&lt;br /&gt;
		:tag('td')&lt;br /&gt;
			:addClass('navbox-abovebelow')&lt;br /&gt;
			:addClass(args.belowclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.belowstyle)&lt;br /&gt;
			:attr('colspan', getAboveBelowColspan())&lt;br /&gt;
			:tag('div')&lt;br /&gt;
				:wikitext(processItem(args.below, args.nowrapitems))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   List rows&lt;br /&gt;
--&lt;br /&gt;
local function renderListRow(tbl, index, listnum)&lt;br /&gt;
	local row = tbl:tag('tr')&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args.imageleft then&lt;br /&gt;
		row&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:addClass('navbox-image')&lt;br /&gt;
				:addClass(args.imageclass)&lt;br /&gt;
				:css('width', '1px')               -- Minimize width&lt;br /&gt;
				:css('padding', '0px 2px 0px 0px')&lt;br /&gt;
				:cssText(args.imageleftstyle)&lt;br /&gt;
				:attr('rowspan', #listnums)&lt;br /&gt;
				:tag('div')&lt;br /&gt;
					:wikitext(processItem(args.imageleft))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args['group' .. listnum] then&lt;br /&gt;
		local groupCell = row:tag('th')&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.title or args.above or args.group2) then&lt;br /&gt;
			groupCell&lt;br /&gt;
				:attr('id', mw.uri.anchorEncode(args.group1))&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:attr('scope', 'row')&lt;br /&gt;
			:addClass('navbox-group')&lt;br /&gt;
			:addClass(args.groupclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:css('width', args.groupwidth or '1%') -- If groupwidth not specified, minimize width&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:cssText(args.groupstyle)&lt;br /&gt;
			:cssText(args['group' .. listnum .. 'style'])&lt;br /&gt;
			:wikitext(args['group' .. listnum])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listCell = row:tag('td')&lt;br /&gt;
&lt;br /&gt;
	if args['group' .. listnum] then&lt;br /&gt;
		listCell&lt;br /&gt;
			:addClass('navbox-list1')&lt;br /&gt;
	else&lt;br /&gt;
		listCell:attr('colspan', 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not args.groupwidth then&lt;br /&gt;
		listCell:css('width', '100%')&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.oddstyle&lt;br /&gt;
	else&lt;br /&gt;
		rowstyle = args.evenstyle&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listText = args['list' .. listnum]&lt;br /&gt;
	local oddEven = ODD_EVEN_MARKER&lt;br /&gt;
	if listText:sub(1, 12) == '&amp;lt;/div&amp;gt;&amp;lt;table' 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('&amp;lt;th[^&amp;gt;]*&amp;quot;navbox%-title&amp;quot;') and RESTART_MARKER or 'odd'&lt;br /&gt;
	end&lt;br /&gt;
	listCell&lt;br /&gt;
		:css('padding', '0px')&lt;br /&gt;
		:cssText(args.liststyle)&lt;br /&gt;
		:cssText(rowstyle)&lt;br /&gt;
		:cssText(args['list' .. listnum .. 'style'])&lt;br /&gt;
		:addClass('navbox-list')&lt;br /&gt;
		:addClass('navbox-' .. oddEven)&lt;br /&gt;
		:addClass(args.listclass)&lt;br /&gt;
		:addClass(args['list' .. listnum .. 'class'])&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			:css('padding', (index == 1 and args.list1padding) or args.listpadding or '0em 0.25em')&lt;br /&gt;
			:wikitext(processItem(listText, args.nowrapitems))&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args.image then&lt;br /&gt;
		row&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:addClass('navbox-image')&lt;br /&gt;
				:addClass(args.imageclass)&lt;br /&gt;
				:css('width', '1px')               -- Minimize width&lt;br /&gt;
				:css('padding', '0px 0px 0px 2px')&lt;br /&gt;
				:cssText(args.imagestyle)&lt;br /&gt;
				:attr('rowspan', #listnums)&lt;br /&gt;
				:tag('div')&lt;br /&gt;
					:wikitext(processItem(args.image))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Tracking categories&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local function needsHorizontalLists()&lt;br /&gt;
	if border == 'subgroup' or args.tracking == 'no' then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local listClasses = {&lt;br /&gt;
		['plainlist'] = true, ['hlist'] = true, ['hlist hnum'] = true,&lt;br /&gt;
		['hlist hwrap'] = true, ['hlist vcard'] = true, ['vcard hlist'] = true,&lt;br /&gt;
		['hlist vevent'] = true,&lt;br /&gt;
	}&lt;br /&gt;
	return not (listClasses[args.listclass] or listClasses[args.bodyclass])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- there are a lot of list classes in the wild, so we have a function to find&lt;br /&gt;
-- them and add their TemplateStyles&lt;br /&gt;
local function addListStyles()&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	-- TODO?: Should maybe take a table of classes for e.g. hnum, hwrap as above&lt;br /&gt;
	-- I'm going to do the stupid thing first though&lt;br /&gt;
	-- Also not sure hnum and hwrap are going to live in the same TemplateStyles&lt;br /&gt;
	-- as hlist&lt;br /&gt;
	local function _addListStyles(htmlclass, templatestyles)&lt;br /&gt;
		local class_args = { -- rough order of probability of use&lt;br /&gt;
			'bodyclass', 'listclass', 'aboveclass', 'belowclass', 'titleclass',&lt;br /&gt;
			'navboxclass', 'groupclass', 'titlegroupclass', 'imageclass'&lt;br /&gt;
		}&lt;br /&gt;
		local patterns = {&lt;br /&gt;
			'^' .. htmlclass .. '$',&lt;br /&gt;
			'%s' .. htmlclass .. '$',&lt;br /&gt;
			'^' .. htmlclass .. '%s',&lt;br /&gt;
			'%s' .. htmlclass .. '%s'&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		local found = false&lt;br /&gt;
		for _, arg in ipairs(class_args) do&lt;br /&gt;
			for _, pattern in ipairs(patterns) do&lt;br /&gt;
				if mw.ustring.find(args[arg] or '', pattern) then&lt;br /&gt;
					found = true&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if found then break end&lt;br /&gt;
		end&lt;br /&gt;
		if found then&lt;br /&gt;
			return frame:extensionTag{&lt;br /&gt;
				name = 'templatestyles', args = { src = templatestyles }&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
			return ''&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local hlist_styles = ''&lt;br /&gt;
	-- navbar always has mini = 1, so here (on this wiki) we can assume that&lt;br /&gt;
	-- we don't need to output hlist styles in navbox again.&lt;br /&gt;
	if not has_navbar() then&lt;br /&gt;
		hlist_styles = _addListStyles('hlist', 'Flatlist/styles.css')&lt;br /&gt;
	end&lt;br /&gt;
	local plainlist_styles = _addListStyles('plainlist', 'Plainlist/styles.css')&lt;br /&gt;
	&lt;br /&gt;
	return hlist_styles .. plainlist_styles&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasBackgroundColors()&lt;br /&gt;
	for _, key in ipairs({'titlestyle', 'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do&lt;br /&gt;
		if tostring(args[key]):find('background', 1, true) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasBorders()&lt;br /&gt;
	for _, key in ipairs({'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do&lt;br /&gt;
		if tostring(args[key]):find('border', 1, true) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isIllegible()&lt;br /&gt;
	-- require('Module:Color contrast') absent on mediawiki.org&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getTrackingCategories()&lt;br /&gt;
	local cats = {}&lt;br /&gt;
	if needsHorizontalLists() then table.insert(cats, 'Navigational boxes without horizontal lists') end&lt;br /&gt;
	if hasBackgroundColors() then table.insert(cats, 'Navboxes using background colours') end&lt;br /&gt;
	if isIllegible() then table.insert(cats, 'Potentially illegible navboxes') end&lt;br /&gt;
	if hasBorders() then table.insert(cats, 'Navboxes using borders') end&lt;br /&gt;
	return cats&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTrackingCategories(builder)&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 == 'doc' or subpage == 'sandbox' or subpage == 'testcases' then return end&lt;br /&gt;
&lt;br /&gt;
	for _, cat in ipairs(getTrackingCategories()) do&lt;br /&gt;
		builder:wikitext('[[Category:' .. cat .. ']]')&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Main navbox tables&lt;br /&gt;
--&lt;br /&gt;
local function renderMainTable()&lt;br /&gt;
	local tbl = mw.html.create('table')&lt;br /&gt;
		:addClass('nowraplinks')&lt;br /&gt;
		:addClass(args.bodyclass)&lt;br /&gt;
&lt;br /&gt;
	if args.title and (args.state ~= 'plain' and args.state ~= 'off') then&lt;br /&gt;
		if args.state == 'collapsed' then args.state = 'mw-collapsed' end&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass('mw-collapsible')&lt;br /&gt;
			:addClass(args.state or 'autocollapse')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	tbl:css('border-spacing', 0)&lt;br /&gt;
	if border == 'subgroup' or border == 'none' then&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass('navbox-subgroup')&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
			:cssText(args.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('navbox-inner')&lt;br /&gt;
			:css('background', 'transparent')&lt;br /&gt;
			:css('color', 'inherit')&lt;br /&gt;
	end&lt;br /&gt;
	tbl:cssText(args.innerstyle)&lt;br /&gt;
&lt;br /&gt;
	renderTitleRow(tbl)&lt;br /&gt;
	renderAboveRow(tbl)&lt;br /&gt;
	for i, listnum in ipairs(listnums) do&lt;br /&gt;
		renderListRow(tbl, i, listnum)&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;
function p._navbox(navboxArgs)&lt;br /&gt;
	args = navboxArgs&lt;br /&gt;
	listnums = {}&lt;br /&gt;
&lt;br /&gt;
	for k, _ in pairs(args) do&lt;br /&gt;
		if type(k) == 'string' then&lt;br /&gt;
			local listnum = k:match('^list(%d+)$')&lt;br /&gt;
			if listnum then table.insert(listnums, tonumber(listnum)) end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(listnums)&lt;br /&gt;
&lt;br /&gt;
	border = mw.text.trim(args.border or args[1] or '')&lt;br /&gt;
	if border == 'child' then&lt;br /&gt;
		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()&lt;br /&gt;
	&lt;br /&gt;
	-- get templatestyles&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	local base_templatestyles = frame:extensionTag{&lt;br /&gt;
		name = 'templatestyles', args = { src = 'Module:Navbox/styles.css' }&lt;br /&gt;
	}&lt;br /&gt;
	local templatestyles = ''&lt;br /&gt;
	if args.templatestyles and args.templatestyles ~= '' then&lt;br /&gt;
		templatestyles = frame:extensionTag{&lt;br /&gt;
			name = 'templatestyles', args = { src = args.templatestyles }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local res = mw.html.create()&lt;br /&gt;
	-- 'navbox-styles' exists for two reasons:&lt;br /&gt;
	--  1. To wrap the styles to work around phab: T200206 more elegantly. Instead&lt;br /&gt;
	--	   of combinatorial rules, this ends up being linear number of CSS rules.&lt;br /&gt;
	--  2. To allow MobileFrontend to rip the styles out with 'nomobile' such that&lt;br /&gt;
	--     they are not dumped into the mobile view.&lt;br /&gt;
	res:tag('div')&lt;br /&gt;
		:addClass('navbox-styles')&lt;br /&gt;
		:addClass('nomobile')&lt;br /&gt;
		-- :wikitext(base_templatestyles .. templatestyles)&lt;br /&gt;
		:done()&lt;br /&gt;
	&lt;br /&gt;
	-- render the appropriate wrapper around the navbox, depending on the border param&lt;br /&gt;
	if border == 'none' then&lt;br /&gt;
		local nav = res:tag('div')&lt;br /&gt;
			:attr('role', 'navigation')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args.title or args.above or (args.group1 and not args.group2) then&lt;br /&gt;
			nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr('aria-label', 'Navbox')&lt;br /&gt;
		end&lt;br /&gt;
	elseif 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's &amp;lt;/div&amp;gt;&lt;br /&gt;
		res&lt;br /&gt;
			:wikitext('&amp;lt;/div&amp;gt;')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
			:wikitext('&amp;lt;div&amp;gt;')&lt;br /&gt;
	else&lt;br /&gt;
		local nav = res:tag('div')&lt;br /&gt;
			:attr('role', 'navigation')&lt;br /&gt;
			:addClass('navbox')&lt;br /&gt;
			:addClass(args.navboxclass)&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
			:cssText(args.style)&lt;br /&gt;
			:css('padding', '3px')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args.title or args.above or (args.group1 and not args.group2) then&lt;br /&gt;
			nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr('aria-label', 'Navbox')&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (args.nocat or 'false'):lower() == 'false' then&lt;br /&gt;
		renderTrackingCategories(res)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return striped(tostring(res))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.navbox(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
	end&lt;br /&gt;
	args = getArgs(frame, {wrappers = {'Template:Navbox', 'Template:Navbox subgroup'}})&lt;br /&gt;
	if frame.args.border then&lt;br /&gt;
		-- This allows Template:Navbox_subgroup to use {{#invoke:Navbox|navbox|border=...}}.&lt;br /&gt;
		args.border = frame.args.border&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Read the arguments in the order they'll be output in, to make references number in the right order.&lt;br /&gt;
	local _&lt;br /&gt;
	_ = args.title&lt;br /&gt;
	_ = args.above&lt;br /&gt;
	for i = 1, 20 do&lt;br /&gt;
		_ = args[&amp;quot;group&amp;quot; .. tostring(i)]&lt;br /&gt;
		_ = args[&amp;quot;list&amp;quot; .. tostring(i)]&lt;br /&gt;
	end&lt;br /&gt;
	_ = args.below&lt;br /&gt;
&lt;br /&gt;
	return p._navbox(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Module:Navbox&amp;diff=244</id>
		<title>Module:Navbox</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Module:Navbox&amp;diff=244"/>
		<updated>2021-10-26T02:08:40Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--&lt;br /&gt;
-- This module implements {{Navbox}}&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local navbar = require('Module:Navbar')._navbar&lt;br /&gt;
local getArgs -- lazily initialized&lt;br /&gt;
&lt;br /&gt;
local args&lt;br /&gt;
local border&lt;br /&gt;
local listnums&lt;br /&gt;
local ODD_EVEN_MARKER = '\127_ODDEVEN_\127'&lt;br /&gt;
local RESTART_MARKER = '\127_ODDEVEN0_\127'&lt;br /&gt;
local REGEX_MARKER = '\127_ODDEVEN(%d?)_\127'&lt;br /&gt;
&lt;br /&gt;
local function striped(wikitext)&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 = '[[Category:Navbox orphans]]'&lt;br /&gt;
	if border == 'subgroup' and args.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 = 'odd', 'even'&lt;br /&gt;
	if args.evenodd then&lt;br /&gt;
		if args.evenodd == 'swap' then&lt;br /&gt;
			first, second = second, first&lt;br /&gt;
		else&lt;br /&gt;
			first = args.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 == '0' 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('([%[%]])', '%%%1')&lt;br /&gt;
	return (wikitext:gsub(regex, ''):gsub(REGEX_MARKER, 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) == '{|' 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 '\n' .. item ..'\n'&lt;br /&gt;
	end&lt;br /&gt;
	if nowrapitems == 'yes' then&lt;br /&gt;
		local lines = {}&lt;br /&gt;
		for line in (item .. '\n'):gmatch('([^\n]*)\n') do&lt;br /&gt;
			local prefix, content = line:match('^([*:;#]+)%s*(.*)')&lt;br /&gt;
			if prefix and not content:match('^&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;') then&lt;br /&gt;
				line = prefix .. '&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;' .. content .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(lines, line)&lt;br /&gt;
		end&lt;br /&gt;
		item = table.concat(lines, '\n')&lt;br /&gt;
	end&lt;br /&gt;
	if item:match('^[*:;#]') then&lt;br /&gt;
		return '\n' .. item ..'\n'&lt;br /&gt;
	end&lt;br /&gt;
	return item&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Separate function so that we can evaluate properly whether hlist should&lt;br /&gt;
-- be added by the module&lt;br /&gt;
local function has_navbar()&lt;br /&gt;
	return args.navbar ~= 'off' and args.navbar ~= 'plain' and&lt;br /&gt;
		(args.name or mw.getCurrentFrame():getParent():getTitle():gsub('/sandbox$', '') ~= 'Template:Navbox')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
	if has_navbar() then&lt;br /&gt;
		titleCell:wikitext(navbar{&lt;br /&gt;
			args.name,&lt;br /&gt;
			-- we depend on this being mini = 1 when the navbox module decides&lt;br /&gt;
			-- to add hlist templatestyles. we also depend on navbar outputting&lt;br /&gt;
			-- a copy of the hlist templatestyles.&lt;br /&gt;
			mini = 1,&lt;br /&gt;
			fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') .. ';background:none transparent;border:none;box-shadow:none; padding:0;'&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Title row&lt;br /&gt;
--&lt;br /&gt;
local function renderTitleRow(tbl)&lt;br /&gt;
	if not args.title then return end&lt;br /&gt;
&lt;br /&gt;
	local titleRow = tbl:tag('tr')&lt;br /&gt;
&lt;br /&gt;
	if args.titlegroup then&lt;br /&gt;
		titleRow&lt;br /&gt;
			:tag('th')&lt;br /&gt;
				:attr('scope', 'row')&lt;br /&gt;
				:addClass('navbox-group')&lt;br /&gt;
				:addClass(args.titlegroupclass)&lt;br /&gt;
				:cssText(args.basestyle)&lt;br /&gt;
				:cssText(args.groupstyle)&lt;br /&gt;
				:cssText(args.titlegroupstyle)&lt;br /&gt;
				:wikitext(args.titlegroup)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local titleCell = titleRow:tag('th'):attr('scope', 'col')&lt;br /&gt;
&lt;br /&gt;
	if args.titlegroup then&lt;br /&gt;
		titleCell&lt;br /&gt;
			:addClass('navbox-title1')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local titleColspan = 2&lt;br /&gt;
	if args.imageleft then titleColspan = titleColspan + 1 end&lt;br /&gt;
	if args.image then titleColspan = titleColspan + 1 end&lt;br /&gt;
	if args.titlegroup then titleColspan = titleColspan - 1 end&lt;br /&gt;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:cssText(args.basestyle)&lt;br /&gt;
		:cssText(args.titlestyle)&lt;br /&gt;
		:addClass('navbox-title')&lt;br /&gt;
		:attr('colspan', titleColspan)&lt;br /&gt;
&lt;br /&gt;
	renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			-- id for aria-labelledby attribute&lt;br /&gt;
			:attr('id', mw.uri.anchorEncode(args.title))&lt;br /&gt;
			:addClass(args.titleclass)&lt;br /&gt;
			:css('font-size', '114%')&lt;br /&gt;
			:css('margin', '0 4em')&lt;br /&gt;
			:wikitext(processItem(args.title))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Above/Below rows&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local function getAboveBelowColspan()&lt;br /&gt;
	local ret = 2&lt;br /&gt;
	if args.imageleft then ret = ret + 1 end&lt;br /&gt;
	if args.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.above then return end&lt;br /&gt;
&lt;br /&gt;
	tbl:tag('tr')&lt;br /&gt;
		:tag('td')&lt;br /&gt;
			:addClass('navbox-abovebelow')&lt;br /&gt;
			:addClass(args.aboveclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.abovestyle)&lt;br /&gt;
			:attr('colspan', getAboveBelowColspan())&lt;br /&gt;
			:tag('div')&lt;br /&gt;
				-- id for aria-labelledby attribute, if no title&lt;br /&gt;
				:attr('id', args.title and nil or mw.uri.anchorEncode(args.above))&lt;br /&gt;
				:wikitext(processItem(args.above, args.nowrapitems))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderBelowRow(tbl)&lt;br /&gt;
	if not args.below then return end&lt;br /&gt;
&lt;br /&gt;
	tbl:tag('tr')&lt;br /&gt;
		:tag('td')&lt;br /&gt;
			:addClass('navbox-abovebelow')&lt;br /&gt;
			:addClass(args.belowclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.belowstyle)&lt;br /&gt;
			:attr('colspan', getAboveBelowColspan())&lt;br /&gt;
			:tag('div')&lt;br /&gt;
				:wikitext(processItem(args.below, args.nowrapitems))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   List rows&lt;br /&gt;
--&lt;br /&gt;
local function renderListRow(tbl, index, listnum)&lt;br /&gt;
	local row = tbl:tag('tr')&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args.imageleft then&lt;br /&gt;
		row&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:addClass('navbox-image')&lt;br /&gt;
				:addClass(args.imageclass)&lt;br /&gt;
				:css('width', '1px')               -- Minimize width&lt;br /&gt;
				:css('padding', '0px 2px 0px 0px')&lt;br /&gt;
				:cssText(args.imageleftstyle)&lt;br /&gt;
				:attr('rowspan', #listnums)&lt;br /&gt;
				:tag('div')&lt;br /&gt;
					:wikitext(processItem(args.imageleft))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args['group' .. listnum] then&lt;br /&gt;
		local groupCell = row:tag('th')&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.title or args.above or args.group2) then&lt;br /&gt;
			groupCell&lt;br /&gt;
				:attr('id', mw.uri.anchorEncode(args.group1))&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:attr('scope', 'row')&lt;br /&gt;
			:addClass('navbox-group')&lt;br /&gt;
			:addClass(args.groupclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:css('width', args.groupwidth or '1%') -- If groupwidth not specified, minimize width&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:cssText(args.groupstyle)&lt;br /&gt;
			:cssText(args['group' .. listnum .. 'style'])&lt;br /&gt;
			:wikitext(args['group' .. listnum])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listCell = row:tag('td')&lt;br /&gt;
&lt;br /&gt;
	if args['group' .. listnum] then&lt;br /&gt;
		listCell&lt;br /&gt;
			:addClass('navbox-list1')&lt;br /&gt;
	else&lt;br /&gt;
		listCell:attr('colspan', 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not args.groupwidth then&lt;br /&gt;
		listCell:css('width', '100%')&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.oddstyle&lt;br /&gt;
	else&lt;br /&gt;
		rowstyle = args.evenstyle&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listText = args['list' .. listnum]&lt;br /&gt;
	local oddEven = ODD_EVEN_MARKER&lt;br /&gt;
	if listText:sub(1, 12) == '&amp;lt;/div&amp;gt;&amp;lt;table' 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('&amp;lt;th[^&amp;gt;]*&amp;quot;navbox%-title&amp;quot;') and RESTART_MARKER or 'odd'&lt;br /&gt;
	end&lt;br /&gt;
	listCell&lt;br /&gt;
		:css('padding', '0px')&lt;br /&gt;
		:cssText(args.liststyle)&lt;br /&gt;
		:cssText(rowstyle)&lt;br /&gt;
		:cssText(args['list' .. listnum .. 'style'])&lt;br /&gt;
		:addClass('navbox-list')&lt;br /&gt;
		:addClass('navbox-' .. oddEven)&lt;br /&gt;
		:addClass(args.listclass)&lt;br /&gt;
		:addClass(args['list' .. listnum .. 'class'])&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			:css('padding', (index == 1 and args.list1padding) or args.listpadding or '0em 0.25em')&lt;br /&gt;
			:wikitext(processItem(listText, args.nowrapitems))&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args.image then&lt;br /&gt;
		row&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:addClass('navbox-image')&lt;br /&gt;
				:addClass(args.imageclass)&lt;br /&gt;
				:css('width', '1px')               -- Minimize width&lt;br /&gt;
				:css('padding', '0px 0px 0px 2px')&lt;br /&gt;
				:cssText(args.imagestyle)&lt;br /&gt;
				:attr('rowspan', #listnums)&lt;br /&gt;
				:tag('div')&lt;br /&gt;
					:wikitext(processItem(args.image))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Tracking categories&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local function needsHorizontalLists()&lt;br /&gt;
	if border == 'subgroup' or args.tracking == 'no' then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local listClasses = {&lt;br /&gt;
		['plainlist'] = true, ['hlist'] = true, ['hlist hnum'] = true,&lt;br /&gt;
		['hlist hwrap'] = true, ['hlist vcard'] = true, ['vcard hlist'] = true,&lt;br /&gt;
		['hlist vevent'] = true,&lt;br /&gt;
	}&lt;br /&gt;
	return not (listClasses[args.listclass] or listClasses[args.bodyclass])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- there are a lot of list classes in the wild, so we have a function to find&lt;br /&gt;
-- them and add their TemplateStyles&lt;br /&gt;
local function addListStyles()&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	-- TODO?: Should maybe take a table of classes for e.g. hnum, hwrap as above&lt;br /&gt;
	-- I'm going to do the stupid thing first though&lt;br /&gt;
	-- Also not sure hnum and hwrap are going to live in the same TemplateStyles&lt;br /&gt;
	-- as hlist&lt;br /&gt;
	local function _addListStyles(htmlclass, templatestyles)&lt;br /&gt;
		local class_args = { -- rough order of probability of use&lt;br /&gt;
			'bodyclass', 'listclass', 'aboveclass', 'belowclass', 'titleclass',&lt;br /&gt;
			'navboxclass', 'groupclass', 'titlegroupclass', 'imageclass'&lt;br /&gt;
		}&lt;br /&gt;
		local patterns = {&lt;br /&gt;
			'^' .. htmlclass .. '$',&lt;br /&gt;
			'%s' .. htmlclass .. '$',&lt;br /&gt;
			'^' .. htmlclass .. '%s',&lt;br /&gt;
			'%s' .. htmlclass .. '%s'&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		local found = false&lt;br /&gt;
		for _, arg in ipairs(class_args) do&lt;br /&gt;
			for _, pattern in ipairs(patterns) do&lt;br /&gt;
				if mw.ustring.find(args[arg] or '', pattern) then&lt;br /&gt;
					found = true&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if found then break end&lt;br /&gt;
		end&lt;br /&gt;
		if found then&lt;br /&gt;
			return frame:extensionTag{&lt;br /&gt;
				name = 'templatestyles', args = { src = templatestyles }&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
			return ''&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local hlist_styles = ''&lt;br /&gt;
	-- navbar always has mini = 1, so here (on this wiki) we can assume that&lt;br /&gt;
	-- we don't need to output hlist styles in navbox again.&lt;br /&gt;
	if not has_navbar() then&lt;br /&gt;
		hlist_styles = _addListStyles('hlist', 'Flatlist/styles.css')&lt;br /&gt;
	end&lt;br /&gt;
	local plainlist_styles = _addListStyles('plainlist', 'Plainlist/styles.css')&lt;br /&gt;
	&lt;br /&gt;
	return hlist_styles .. plainlist_styles&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasBackgroundColors()&lt;br /&gt;
	for _, key in ipairs({'titlestyle', 'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do&lt;br /&gt;
		if tostring(args[key]):find('background', 1, true) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasBorders()&lt;br /&gt;
	for _, key in ipairs({'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do&lt;br /&gt;
		if tostring(args[key]):find('border', 1, true) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isIllegible()&lt;br /&gt;
	-- require('Module:Color contrast') absent on mediawiki.org&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getTrackingCategories()&lt;br /&gt;
	local cats = {}&lt;br /&gt;
	if needsHorizontalLists() then table.insert(cats, 'Navigational boxes without horizontal lists') end&lt;br /&gt;
	if hasBackgroundColors() then table.insert(cats, 'Navboxes using background colours') end&lt;br /&gt;
	if isIllegible() then table.insert(cats, 'Potentially illegible navboxes') end&lt;br /&gt;
	if hasBorders() then table.insert(cats, 'Navboxes using borders') end&lt;br /&gt;
	return cats&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTrackingCategories(builder)&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 == 'doc' or subpage == 'sandbox' or subpage == 'testcases' then return end&lt;br /&gt;
&lt;br /&gt;
	for _, cat in ipairs(getTrackingCategories()) do&lt;br /&gt;
		builder:wikitext('[[Category:' .. cat .. ']]')&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Main navbox tables&lt;br /&gt;
--&lt;br /&gt;
local function renderMainTable()&lt;br /&gt;
	local tbl = mw.html.create('table')&lt;br /&gt;
		:addClass('nowraplinks')&lt;br /&gt;
		:addClass(args.bodyclass)&lt;br /&gt;
&lt;br /&gt;
	if args.title and (args.state ~= 'plain' and args.state ~= 'off') then&lt;br /&gt;
		if args.state == 'collapsed' then args.state = 'mw-collapsed' end&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass('mw-collapsible')&lt;br /&gt;
			:addClass(args.state or 'autocollapse')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	tbl:css('border-spacing', 0)&lt;br /&gt;
	if border == 'subgroup' or border == 'none' then&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass('navbox-subgroup')&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
			:cssText(args.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('navbox-inner')&lt;br /&gt;
			:css('background', 'transparent')&lt;br /&gt;
			:css('color', 'inherit')&lt;br /&gt;
	end&lt;br /&gt;
	tbl:cssText(args.innerstyle)&lt;br /&gt;
&lt;br /&gt;
	renderTitleRow(tbl)&lt;br /&gt;
	renderAboveRow(tbl)&lt;br /&gt;
	for i, listnum in ipairs(listnums) do&lt;br /&gt;
		renderListRow(tbl, i, listnum)&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;
function p._navbox(navboxArgs)&lt;br /&gt;
	args = navboxArgs&lt;br /&gt;
	listnums = {}&lt;br /&gt;
&lt;br /&gt;
	for k, _ in pairs(args) do&lt;br /&gt;
		if type(k) == 'string' then&lt;br /&gt;
			local listnum = k:match('^list(%d+)$')&lt;br /&gt;
			if listnum then table.insert(listnums, tonumber(listnum)) end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(listnums)&lt;br /&gt;
&lt;br /&gt;
	border = mw.text.trim(args.border or args[1] or '')&lt;br /&gt;
	if border == 'child' then&lt;br /&gt;
		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()&lt;br /&gt;
	&lt;br /&gt;
	-- -- get templatestyles&lt;br /&gt;
	-- local frame = mw.getCurrentFrame()&lt;br /&gt;
	-- local base_templatestyles = frame:extensionTag{&lt;br /&gt;
	-- 	name = 'templatestyles', args = { src = 'Module:Navbox/styles.css' }&lt;br /&gt;
	-- }&lt;br /&gt;
	-- local templatestyles = ''&lt;br /&gt;
	-- if args.templatestyles and args.templatestyles ~= '' then&lt;br /&gt;
	-- 	templatestyles = frame:extensionTag{&lt;br /&gt;
	-- 		name = 'templatestyles', args = { src = args.templatestyles }&lt;br /&gt;
	-- 	}&lt;br /&gt;
	-- end&lt;br /&gt;
	&lt;br /&gt;
	local res = mw.html.create()&lt;br /&gt;
	-- 'navbox-styles' exists for two reasons:&lt;br /&gt;
	--  1. To wrap the styles to work around phab: T200206 more elegantly. Instead&lt;br /&gt;
	--	   of combinatorial rules, this ends up being linear number of CSS rules.&lt;br /&gt;
	--  2. To allow MobileFrontend to rip the styles out with 'nomobile' such that&lt;br /&gt;
	--     they are not dumped into the mobile view.&lt;br /&gt;
	res:tag('div')&lt;br /&gt;
		:addClass('navbox-styles')&lt;br /&gt;
		:addClass('nomobile')&lt;br /&gt;
		:wikitext(base_templatestyles .. templatestyles)&lt;br /&gt;
		:done()&lt;br /&gt;
	&lt;br /&gt;
	-- render the appropriate wrapper around the navbox, depending on the border param&lt;br /&gt;
	if border == 'none' then&lt;br /&gt;
		local nav = res:tag('div')&lt;br /&gt;
			:attr('role', 'navigation')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args.title or args.above or (args.group1 and not args.group2) then&lt;br /&gt;
			nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr('aria-label', 'Navbox')&lt;br /&gt;
		end&lt;br /&gt;
	elseif 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's &amp;lt;/div&amp;gt;&lt;br /&gt;
		res&lt;br /&gt;
			:wikitext('&amp;lt;/div&amp;gt;')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
			:wikitext('&amp;lt;div&amp;gt;')&lt;br /&gt;
	else&lt;br /&gt;
		local nav = res:tag('div')&lt;br /&gt;
			:attr('role', 'navigation')&lt;br /&gt;
			:addClass('navbox')&lt;br /&gt;
			:addClass(args.navboxclass)&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
			:cssText(args.style)&lt;br /&gt;
			:css('padding', '3px')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args.title or args.above or (args.group1 and not args.group2) then&lt;br /&gt;
			nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr('aria-label', 'Navbox')&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (args.nocat or 'false'):lower() == 'false' then&lt;br /&gt;
		renderTrackingCategories(res)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return striped(tostring(res))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.navbox(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
	end&lt;br /&gt;
	args = getArgs(frame, {wrappers = {'Template:Navbox', 'Template:Navbox subgroup'}})&lt;br /&gt;
	if frame.args.border then&lt;br /&gt;
		-- This allows Template:Navbox_subgroup to use {{#invoke:Navbox|navbox|border=...}}.&lt;br /&gt;
		args.border = frame.args.border&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Read the arguments in the order they'll be output in, to make references number in the right order.&lt;br /&gt;
	local _&lt;br /&gt;
	_ = args.title&lt;br /&gt;
	_ = args.above&lt;br /&gt;
	for i = 1, 20 do&lt;br /&gt;
		_ = args[&amp;quot;group&amp;quot; .. tostring(i)]&lt;br /&gt;
		_ = args[&amp;quot;list&amp;quot; .. tostring(i)]&lt;br /&gt;
	end&lt;br /&gt;
	_ = args.below&lt;br /&gt;
&lt;br /&gt;
	return p._navbox(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Module:Navbox&amp;diff=243</id>
		<title>Module:Navbox</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Module:Navbox&amp;diff=243"/>
		<updated>2021-10-26T02:07:55Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--&lt;br /&gt;
-- This module implements {{Navbox}}&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local navbar = require('Module:Navbar')._navbar&lt;br /&gt;
local getArgs -- lazily initialized&lt;br /&gt;
&lt;br /&gt;
local args&lt;br /&gt;
local border&lt;br /&gt;
local listnums&lt;br /&gt;
local ODD_EVEN_MARKER = '\127_ODDEVEN_\127'&lt;br /&gt;
local RESTART_MARKER = '\127_ODDEVEN0_\127'&lt;br /&gt;
local REGEX_MARKER = '\127_ODDEVEN(%d?)_\127'&lt;br /&gt;
&lt;br /&gt;
local function striped(wikitext)&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 = '[[Category:Navbox orphans]]'&lt;br /&gt;
	if border == 'subgroup' and args.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 = 'odd', 'even'&lt;br /&gt;
	if args.evenodd then&lt;br /&gt;
		if args.evenodd == 'swap' then&lt;br /&gt;
			first, second = second, first&lt;br /&gt;
		else&lt;br /&gt;
			first = args.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 == '0' 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('([%[%]])', '%%%1')&lt;br /&gt;
	return (wikitext:gsub(regex, ''):gsub(REGEX_MARKER, 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) == '{|' 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 '\n' .. item ..'\n'&lt;br /&gt;
	end&lt;br /&gt;
	if nowrapitems == 'yes' then&lt;br /&gt;
		local lines = {}&lt;br /&gt;
		for line in (item .. '\n'):gmatch('([^\n]*)\n') do&lt;br /&gt;
			local prefix, content = line:match('^([*:;#]+)%s*(.*)')&lt;br /&gt;
			if prefix and not content:match('^&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;') then&lt;br /&gt;
				line = prefix .. '&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;' .. content .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(lines, line)&lt;br /&gt;
		end&lt;br /&gt;
		item = table.concat(lines, '\n')&lt;br /&gt;
	end&lt;br /&gt;
	if item:match('^[*:;#]') then&lt;br /&gt;
		return '\n' .. item ..'\n'&lt;br /&gt;
	end&lt;br /&gt;
	return item&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Separate function so that we can evaluate properly whether hlist should&lt;br /&gt;
-- be added by the module&lt;br /&gt;
local function has_navbar()&lt;br /&gt;
	return args.navbar ~= 'off' and args.navbar ~= 'plain' and&lt;br /&gt;
		(args.name or mw.getCurrentFrame():getParent():getTitle():gsub('/sandbox$', '') ~= 'Template:Navbox')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
	if has_navbar() then&lt;br /&gt;
		titleCell:wikitext(navbar{&lt;br /&gt;
			args.name,&lt;br /&gt;
			-- we depend on this being mini = 1 when the navbox module decides&lt;br /&gt;
			-- to add hlist templatestyles. we also depend on navbar outputting&lt;br /&gt;
			-- a copy of the hlist templatestyles.&lt;br /&gt;
			mini = 1,&lt;br /&gt;
			fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') .. ';background:none transparent;border:none;box-shadow:none; padding:0;'&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Title row&lt;br /&gt;
--&lt;br /&gt;
local function renderTitleRow(tbl)&lt;br /&gt;
	if not args.title then return end&lt;br /&gt;
&lt;br /&gt;
	local titleRow = tbl:tag('tr')&lt;br /&gt;
&lt;br /&gt;
	if args.titlegroup then&lt;br /&gt;
		titleRow&lt;br /&gt;
			:tag('th')&lt;br /&gt;
				:attr('scope', 'row')&lt;br /&gt;
				:addClass('navbox-group')&lt;br /&gt;
				:addClass(args.titlegroupclass)&lt;br /&gt;
				:cssText(args.basestyle)&lt;br /&gt;
				:cssText(args.groupstyle)&lt;br /&gt;
				:cssText(args.titlegroupstyle)&lt;br /&gt;
				:wikitext(args.titlegroup)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local titleCell = titleRow:tag('th'):attr('scope', 'col')&lt;br /&gt;
&lt;br /&gt;
	if args.titlegroup then&lt;br /&gt;
		titleCell&lt;br /&gt;
			:addClass('navbox-title1')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local titleColspan = 2&lt;br /&gt;
	if args.imageleft then titleColspan = titleColspan + 1 end&lt;br /&gt;
	if args.image then titleColspan = titleColspan + 1 end&lt;br /&gt;
	if args.titlegroup then titleColspan = titleColspan - 1 end&lt;br /&gt;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:cssText(args.basestyle)&lt;br /&gt;
		:cssText(args.titlestyle)&lt;br /&gt;
		:addClass('navbox-title')&lt;br /&gt;
		:attr('colspan', titleColspan)&lt;br /&gt;
&lt;br /&gt;
	renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			-- id for aria-labelledby attribute&lt;br /&gt;
			:attr('id', mw.uri.anchorEncode(args.title))&lt;br /&gt;
			:addClass(args.titleclass)&lt;br /&gt;
			:css('font-size', '114%')&lt;br /&gt;
			:css('margin', '0 4em')&lt;br /&gt;
			:wikitext(processItem(args.title))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Above/Below rows&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local function getAboveBelowColspan()&lt;br /&gt;
	local ret = 2&lt;br /&gt;
	if args.imageleft then ret = ret + 1 end&lt;br /&gt;
	if args.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.above then return end&lt;br /&gt;
&lt;br /&gt;
	tbl:tag('tr')&lt;br /&gt;
		:tag('td')&lt;br /&gt;
			:addClass('navbox-abovebelow')&lt;br /&gt;
			:addClass(args.aboveclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.abovestyle)&lt;br /&gt;
			:attr('colspan', getAboveBelowColspan())&lt;br /&gt;
			:tag('div')&lt;br /&gt;
				-- id for aria-labelledby attribute, if no title&lt;br /&gt;
				:attr('id', args.title and nil or mw.uri.anchorEncode(args.above))&lt;br /&gt;
				:wikitext(processItem(args.above, args.nowrapitems))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderBelowRow(tbl)&lt;br /&gt;
	if not args.below then return end&lt;br /&gt;
&lt;br /&gt;
	tbl:tag('tr')&lt;br /&gt;
		:tag('td')&lt;br /&gt;
			:addClass('navbox-abovebelow')&lt;br /&gt;
			:addClass(args.belowclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.belowstyle)&lt;br /&gt;
			:attr('colspan', getAboveBelowColspan())&lt;br /&gt;
			:tag('div')&lt;br /&gt;
				:wikitext(processItem(args.below, args.nowrapitems))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   List rows&lt;br /&gt;
--&lt;br /&gt;
local function renderListRow(tbl, index, listnum)&lt;br /&gt;
	local row = tbl:tag('tr')&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args.imageleft then&lt;br /&gt;
		row&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:addClass('navbox-image')&lt;br /&gt;
				:addClass(args.imageclass)&lt;br /&gt;
				:css('width', '1px')               -- Minimize width&lt;br /&gt;
				:css('padding', '0px 2px 0px 0px')&lt;br /&gt;
				:cssText(args.imageleftstyle)&lt;br /&gt;
				:attr('rowspan', #listnums)&lt;br /&gt;
				:tag('div')&lt;br /&gt;
					:wikitext(processItem(args.imageleft))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args['group' .. listnum] then&lt;br /&gt;
		local groupCell = row:tag('th')&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.title or args.above or args.group2) then&lt;br /&gt;
			groupCell&lt;br /&gt;
				:attr('id', mw.uri.anchorEncode(args.group1))&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:attr('scope', 'row')&lt;br /&gt;
			:addClass('navbox-group')&lt;br /&gt;
			:addClass(args.groupclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:css('width', args.groupwidth or '1%') -- If groupwidth not specified, minimize width&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:cssText(args.groupstyle)&lt;br /&gt;
			:cssText(args['group' .. listnum .. 'style'])&lt;br /&gt;
			:wikitext(args['group' .. listnum])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listCell = row:tag('td')&lt;br /&gt;
&lt;br /&gt;
	if args['group' .. listnum] then&lt;br /&gt;
		listCell&lt;br /&gt;
			:addClass('navbox-list1')&lt;br /&gt;
	else&lt;br /&gt;
		listCell:attr('colspan', 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not args.groupwidth then&lt;br /&gt;
		listCell:css('width', '100%')&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.oddstyle&lt;br /&gt;
	else&lt;br /&gt;
		rowstyle = args.evenstyle&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listText = args['list' .. listnum]&lt;br /&gt;
	local oddEven = ODD_EVEN_MARKER&lt;br /&gt;
	if listText:sub(1, 12) == '&amp;lt;/div&amp;gt;&amp;lt;table' 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('&amp;lt;th[^&amp;gt;]*&amp;quot;navbox%-title&amp;quot;') and RESTART_MARKER or 'odd'&lt;br /&gt;
	end&lt;br /&gt;
	listCell&lt;br /&gt;
		:css('padding', '0px')&lt;br /&gt;
		:cssText(args.liststyle)&lt;br /&gt;
		:cssText(rowstyle)&lt;br /&gt;
		:cssText(args['list' .. listnum .. 'style'])&lt;br /&gt;
		:addClass('navbox-list')&lt;br /&gt;
		:addClass('navbox-' .. oddEven)&lt;br /&gt;
		:addClass(args.listclass)&lt;br /&gt;
		:addClass(args['list' .. listnum .. 'class'])&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			:css('padding', (index == 1 and args.list1padding) or args.listpadding or '0em 0.25em')&lt;br /&gt;
			:wikitext(processItem(listText, args.nowrapitems))&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args.image then&lt;br /&gt;
		row&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:addClass('navbox-image')&lt;br /&gt;
				:addClass(args.imageclass)&lt;br /&gt;
				:css('width', '1px')               -- Minimize width&lt;br /&gt;
				:css('padding', '0px 0px 0px 2px')&lt;br /&gt;
				:cssText(args.imagestyle)&lt;br /&gt;
				:attr('rowspan', #listnums)&lt;br /&gt;
				:tag('div')&lt;br /&gt;
					:wikitext(processItem(args.image))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Tracking categories&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local function needsHorizontalLists()&lt;br /&gt;
	if border == 'subgroup' or args.tracking == 'no' then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local listClasses = {&lt;br /&gt;
		['plainlist'] = true, ['hlist'] = true, ['hlist hnum'] = true,&lt;br /&gt;
		['hlist hwrap'] = true, ['hlist vcard'] = true, ['vcard hlist'] = true,&lt;br /&gt;
		['hlist vevent'] = true,&lt;br /&gt;
	}&lt;br /&gt;
	return not (listClasses[args.listclass] or listClasses[args.bodyclass])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- there are a lot of list classes in the wild, so we have a function to find&lt;br /&gt;
-- them and add their TemplateStyles&lt;br /&gt;
local function addListStyles()&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	-- TODO?: Should maybe take a table of classes for e.g. hnum, hwrap as above&lt;br /&gt;
	-- I'm going to do the stupid thing first though&lt;br /&gt;
	-- Also not sure hnum and hwrap are going to live in the same TemplateStyles&lt;br /&gt;
	-- as hlist&lt;br /&gt;
	local function _addListStyles(htmlclass, templatestyles)&lt;br /&gt;
		local class_args = { -- rough order of probability of use&lt;br /&gt;
			'bodyclass', 'listclass', 'aboveclass', 'belowclass', 'titleclass',&lt;br /&gt;
			'navboxclass', 'groupclass', 'titlegroupclass', 'imageclass'&lt;br /&gt;
		}&lt;br /&gt;
		local patterns = {&lt;br /&gt;
			'^' .. htmlclass .. '$',&lt;br /&gt;
			'%s' .. htmlclass .. '$',&lt;br /&gt;
			'^' .. htmlclass .. '%s',&lt;br /&gt;
			'%s' .. htmlclass .. '%s'&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		local found = false&lt;br /&gt;
		for _, arg in ipairs(class_args) do&lt;br /&gt;
			for _, pattern in ipairs(patterns) do&lt;br /&gt;
				if mw.ustring.find(args[arg] or '', pattern) then&lt;br /&gt;
					found = true&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if found then break end&lt;br /&gt;
		end&lt;br /&gt;
		if found then&lt;br /&gt;
			return frame:extensionTag{&lt;br /&gt;
				name = 'templatestyles', args = { src = templatestyles }&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
			return ''&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local hlist_styles = ''&lt;br /&gt;
	-- navbar always has mini = 1, so here (on this wiki) we can assume that&lt;br /&gt;
	-- we don't need to output hlist styles in navbox again.&lt;br /&gt;
	if not has_navbar() then&lt;br /&gt;
		hlist_styles = _addListStyles('hlist', 'Flatlist/styles.css')&lt;br /&gt;
	end&lt;br /&gt;
	local plainlist_styles = _addListStyles('plainlist', 'Plainlist/styles.css')&lt;br /&gt;
	&lt;br /&gt;
	return hlist_styles .. plainlist_styles&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasBackgroundColors()&lt;br /&gt;
	for _, key in ipairs({'titlestyle', 'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do&lt;br /&gt;
		if tostring(args[key]):find('background', 1, true) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasBorders()&lt;br /&gt;
	for _, key in ipairs({'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do&lt;br /&gt;
		if tostring(args[key]):find('border', 1, true) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isIllegible()&lt;br /&gt;
	-- require('Module:Color contrast') absent on mediawiki.org&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getTrackingCategories()&lt;br /&gt;
	local cats = {}&lt;br /&gt;
	if needsHorizontalLists() then table.insert(cats, 'Navigational boxes without horizontal lists') end&lt;br /&gt;
	if hasBackgroundColors() then table.insert(cats, 'Navboxes using background colours') end&lt;br /&gt;
	if isIllegible() then table.insert(cats, 'Potentially illegible navboxes') end&lt;br /&gt;
	if hasBorders() then table.insert(cats, 'Navboxes using borders') end&lt;br /&gt;
	return cats&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTrackingCategories(builder)&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 == 'doc' or subpage == 'sandbox' or subpage == 'testcases' then return end&lt;br /&gt;
&lt;br /&gt;
	for _, cat in ipairs(getTrackingCategories()) do&lt;br /&gt;
		builder:wikitext('[[Category:' .. cat .. ']]')&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Main navbox tables&lt;br /&gt;
--&lt;br /&gt;
local function renderMainTable()&lt;br /&gt;
	local tbl = mw.html.create('table')&lt;br /&gt;
		:addClass('nowraplinks')&lt;br /&gt;
		:addClass(args.bodyclass)&lt;br /&gt;
&lt;br /&gt;
	if args.title and (args.state ~= 'plain' and args.state ~= 'off') then&lt;br /&gt;
		if args.state == 'collapsed' then args.state = 'mw-collapsed' end&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass('mw-collapsible')&lt;br /&gt;
			:addClass(args.state or 'autocollapse')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	tbl:css('border-spacing', 0)&lt;br /&gt;
	if border == 'subgroup' or border == 'none' then&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass('navbox-subgroup')&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
			:cssText(args.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('navbox-inner')&lt;br /&gt;
			:css('background', 'transparent')&lt;br /&gt;
			:css('color', 'inherit')&lt;br /&gt;
	end&lt;br /&gt;
	tbl:cssText(args.innerstyle)&lt;br /&gt;
&lt;br /&gt;
	renderTitleRow(tbl)&lt;br /&gt;
	renderAboveRow(tbl)&lt;br /&gt;
	for i, listnum in ipairs(listnums) do&lt;br /&gt;
		renderListRow(tbl, i, listnum)&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;
function p._navbox(navboxArgs)&lt;br /&gt;
	args = navboxArgs&lt;br /&gt;
	listnums = {}&lt;br /&gt;
&lt;br /&gt;
	for k, _ in pairs(args) do&lt;br /&gt;
		if type(k) == 'string' then&lt;br /&gt;
			local listnum = k:match('^list(%d+)$')&lt;br /&gt;
			if listnum then table.insert(listnums, tonumber(listnum)) end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(listnums)&lt;br /&gt;
&lt;br /&gt;
	border = mw.text.trim(args.border or args[1] or '')&lt;br /&gt;
	if border == 'child' then&lt;br /&gt;
		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()&lt;br /&gt;
	&lt;br /&gt;
	-- -- get templatestyles&lt;br /&gt;
	-- local frame = mw.getCurrentFrame()&lt;br /&gt;
	-- local base_templatestyles = frame:extensionTag{&lt;br /&gt;
	-- 	name = 'templatestyles', args = { src = 'Module:Navbox/styles.css' }&lt;br /&gt;
	-- }&lt;br /&gt;
	-- local templatestyles = ''&lt;br /&gt;
	-- if args.templatestyles and args.templatestyles ~= '' then&lt;br /&gt;
	-- 	templatestyles = frame:extensionTag{&lt;br /&gt;
	-- 		name = 'templatestyles', args = { src = args.templatestyles }&lt;br /&gt;
	-- 	}&lt;br /&gt;
	-- end&lt;br /&gt;
	&lt;br /&gt;
	local res = mw.html.create()&lt;br /&gt;
	-- 'navbox-styles' exists for two reasons:&lt;br /&gt;
	--  1. To wrap the styles to work around phab: T200206 more elegantly. Instead&lt;br /&gt;
	--	   of combinatorial rules, this ends up being linear number of CSS rules.&lt;br /&gt;
	--  2. To allow MobileFrontend to rip the styles out with 'nomobile' such that&lt;br /&gt;
	--     they are not dumped into the mobile view.&lt;br /&gt;
	res:tag('div')&lt;br /&gt;
		:addClass('navbox-styles')&lt;br /&gt;
		:addClass('nomobile')&lt;br /&gt;
		:wikitext(base_templatestyles .. templatestyles)&lt;br /&gt;
		:done()&lt;br /&gt;
	&lt;br /&gt;
	-- render the appropriate wrapper around the navbox, depending on the border param&lt;br /&gt;
	if border == 'none' then&lt;br /&gt;
		local nav = res:tag('div')&lt;br /&gt;
			:attr('role', 'navigation')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args.title or args.above or (args.group1 and not args.group2) then&lt;br /&gt;
			nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr('aria-label', 'Navbox')&lt;br /&gt;
		end&lt;br /&gt;
	elseif 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's &amp;lt;/div&amp;gt;&lt;br /&gt;
		res&lt;br /&gt;
			:wikitext('&amp;lt;/div&amp;gt;')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
			:wikitext('&amp;lt;div&amp;gt;')&lt;br /&gt;
	else&lt;br /&gt;
		local nav = res:tag('div')&lt;br /&gt;
			:attr('role', 'navigation')&lt;br /&gt;
			:addClass('navbox')&lt;br /&gt;
			:addClass(args.navboxclass)&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
			:cssText(args.style)&lt;br /&gt;
			:css('padding', '3px')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args.title or args.above or (args.group1 and not args.group2) then&lt;br /&gt;
			nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr('aria-label', 'Navbox')&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (args.nocat or 'false'):lower() == 'false' then&lt;br /&gt;
		renderTrackingCategories(res)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return striped(tostring(res))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.navbox(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
	end&lt;br /&gt;
	args = getArgs(frame, {wrappers = {'Template:Navbox', 'Template:Navbox subgroup'}})&lt;br /&gt;
	if frame.args.border then&lt;br /&gt;
		-- This allows Template:Navbox_subgroup to use {{#invoke:Navbox|navbox|border=...}}.&lt;br /&gt;
		args.border = frame.args.border&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Read the arguments in the order they'll be output in, to make references number in the right order.&lt;br /&gt;
	local _&lt;br /&gt;
	_ = args.title&lt;br /&gt;
	_ = args.above&lt;br /&gt;
	for i = 1, 20 do&lt;br /&gt;
		_ = args[&amp;quot;group&amp;quot; .. tostring(i)]&lt;br /&gt;
		_ = args[&amp;quot;list&amp;quot; .. tostring(i)]&lt;br /&gt;
	end&lt;br /&gt;
	_ = args.below&lt;br /&gt;
&lt;br /&gt;
	return p._navbox(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Module:Navbox&amp;diff=242</id>
		<title>Module:Navbox</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Module:Navbox&amp;diff=242"/>
		<updated>2021-10-26T02:06:17Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Visual edits&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--&lt;br /&gt;
-- This module implements {{Navbox}}&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local navbar = require('Module:Navbar')._navbar&lt;br /&gt;
local getArgs -- lazily initialized&lt;br /&gt;
&lt;br /&gt;
local args&lt;br /&gt;
local border&lt;br /&gt;
local listnums&lt;br /&gt;
local ODD_EVEN_MARKER = '\127_ODDEVEN_\127'&lt;br /&gt;
local RESTART_MARKER = '\127_ODDEVEN0_\127'&lt;br /&gt;
local REGEX_MARKER = '\127_ODDEVEN(%d?)_\127'&lt;br /&gt;
&lt;br /&gt;
local function striped(wikitext)&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 = '[[Category:Navbox orphans]]'&lt;br /&gt;
	if border == 'subgroup' and args.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 = 'odd', 'even'&lt;br /&gt;
	if args.evenodd then&lt;br /&gt;
		if args.evenodd == 'swap' then&lt;br /&gt;
			first, second = second, first&lt;br /&gt;
		else&lt;br /&gt;
			first = args.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 == '0' 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('([%[%]])', '%%%1')&lt;br /&gt;
	return (wikitext:gsub(regex, ''):gsub(REGEX_MARKER, 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) == '{|' 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 '\n' .. item ..'\n'&lt;br /&gt;
	end&lt;br /&gt;
	if nowrapitems == 'yes' then&lt;br /&gt;
		local lines = {}&lt;br /&gt;
		for line in (item .. '\n'):gmatch('([^\n]*)\n') do&lt;br /&gt;
			local prefix, content = line:match('^([*:;#]+)%s*(.*)')&lt;br /&gt;
			if prefix and not content:match('^&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;') then&lt;br /&gt;
				line = prefix .. '&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;' .. content .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(lines, line)&lt;br /&gt;
		end&lt;br /&gt;
		item = table.concat(lines, '\n')&lt;br /&gt;
	end&lt;br /&gt;
	if item:match('^[*:;#]') then&lt;br /&gt;
		return '\n' .. item ..'\n'&lt;br /&gt;
	end&lt;br /&gt;
	return item&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Separate function so that we can evaluate properly whether hlist should&lt;br /&gt;
-- be added by the module&lt;br /&gt;
local function has_navbar()&lt;br /&gt;
	return args.navbar ~= 'off' and args.navbar ~= 'plain' and&lt;br /&gt;
		(args.name or mw.getCurrentFrame():getParent():getTitle():gsub('/sandbox$', '') ~= 'Template:Navbox')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
	if has_navbar() then&lt;br /&gt;
		titleCell:wikitext(navbar{&lt;br /&gt;
			args.name,&lt;br /&gt;
			-- we depend on this being mini = 1 when the navbox module decides&lt;br /&gt;
			-- to add hlist templatestyles. we also depend on navbar outputting&lt;br /&gt;
			-- a copy of the hlist templatestyles.&lt;br /&gt;
			mini = 1,&lt;br /&gt;
			fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') .. ';background:none transparent;border:none;box-shadow:none; padding:0;'&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Title row&lt;br /&gt;
--&lt;br /&gt;
local function renderTitleRow(tbl)&lt;br /&gt;
	if not args.title then return end&lt;br /&gt;
&lt;br /&gt;
	local titleRow = tbl:tag('tr')&lt;br /&gt;
&lt;br /&gt;
	if args.titlegroup then&lt;br /&gt;
		titleRow&lt;br /&gt;
			:tag('th')&lt;br /&gt;
				:attr('scope', 'row')&lt;br /&gt;
				:addClass('navbox-group')&lt;br /&gt;
				:addClass(args.titlegroupclass)&lt;br /&gt;
				:cssText(args.basestyle)&lt;br /&gt;
				:cssText(args.groupstyle)&lt;br /&gt;
				:cssText(args.titlegroupstyle)&lt;br /&gt;
				:wikitext(args.titlegroup)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local titleCell = titleRow:tag('th'):attr('scope', 'col')&lt;br /&gt;
&lt;br /&gt;
	if args.titlegroup then&lt;br /&gt;
		titleCell&lt;br /&gt;
			:addClass('navbox-title1')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local titleColspan = 2&lt;br /&gt;
	if args.imageleft then titleColspan = titleColspan + 1 end&lt;br /&gt;
	if args.image then titleColspan = titleColspan + 1 end&lt;br /&gt;
	if args.titlegroup then titleColspan = titleColspan - 1 end&lt;br /&gt;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:cssText(args.basestyle)&lt;br /&gt;
		:cssText(args.titlestyle)&lt;br /&gt;
		:addClass('navbox-title')&lt;br /&gt;
		:attr('colspan', titleColspan)&lt;br /&gt;
&lt;br /&gt;
	renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			-- id for aria-labelledby attribute&lt;br /&gt;
			:attr('id', mw.uri.anchorEncode(args.title))&lt;br /&gt;
			:addClass(args.titleclass)&lt;br /&gt;
			:css('font-size', '114%')&lt;br /&gt;
			:css('margin', '0 4em')&lt;br /&gt;
			:wikitext(processItem(args.title))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Above/Below rows&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local function getAboveBelowColspan()&lt;br /&gt;
	local ret = 2&lt;br /&gt;
	if args.imageleft then ret = ret + 1 end&lt;br /&gt;
	if args.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.above then return end&lt;br /&gt;
&lt;br /&gt;
	tbl:tag('tr')&lt;br /&gt;
		:tag('td')&lt;br /&gt;
			:addClass('navbox-abovebelow')&lt;br /&gt;
			:addClass(args.aboveclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.abovestyle)&lt;br /&gt;
			:attr('colspan', getAboveBelowColspan())&lt;br /&gt;
			:tag('div')&lt;br /&gt;
				-- id for aria-labelledby attribute, if no title&lt;br /&gt;
				:attr('id', args.title and nil or mw.uri.anchorEncode(args.above))&lt;br /&gt;
				:wikitext(processItem(args.above, args.nowrapitems))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderBelowRow(tbl)&lt;br /&gt;
	if not args.below then return end&lt;br /&gt;
&lt;br /&gt;
	tbl:tag('tr')&lt;br /&gt;
		:tag('td')&lt;br /&gt;
			:addClass('navbox-abovebelow')&lt;br /&gt;
			:addClass(args.belowclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.belowstyle)&lt;br /&gt;
			:attr('colspan', getAboveBelowColspan())&lt;br /&gt;
			:tag('div')&lt;br /&gt;
				:wikitext(processItem(args.below, args.nowrapitems))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   List rows&lt;br /&gt;
--&lt;br /&gt;
local function renderListRow(tbl, index, listnum)&lt;br /&gt;
	local row = tbl:tag('tr')&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args.imageleft then&lt;br /&gt;
		row&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:addClass('navbox-image')&lt;br /&gt;
				:addClass(args.imageclass)&lt;br /&gt;
				:css('width', '1px')               -- Minimize width&lt;br /&gt;
				:css('padding', '0px 2px 0px 0px')&lt;br /&gt;
				:cssText(args.imageleftstyle)&lt;br /&gt;
				:attr('rowspan', #listnums)&lt;br /&gt;
				:tag('div')&lt;br /&gt;
					:wikitext(processItem(args.imageleft))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args['group' .. listnum] then&lt;br /&gt;
		local groupCell = row:tag('th')&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.title or args.above or args.group2) then&lt;br /&gt;
			groupCell&lt;br /&gt;
				:attr('id', mw.uri.anchorEncode(args.group1))&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:attr('scope', 'row')&lt;br /&gt;
			:addClass('navbox-group')&lt;br /&gt;
			:addClass(args.groupclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:css('width', args.groupwidth or '1%') -- If groupwidth not specified, minimize width&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:cssText(args.groupstyle)&lt;br /&gt;
			:cssText(args['group' .. listnum .. 'style'])&lt;br /&gt;
			:wikitext(args['group' .. listnum])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listCell = row:tag('td')&lt;br /&gt;
&lt;br /&gt;
	if args['group' .. listnum] then&lt;br /&gt;
		listCell&lt;br /&gt;
			:addClass('navbox-list1')&lt;br /&gt;
	else&lt;br /&gt;
		listCell:attr('colspan', 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not args.groupwidth then&lt;br /&gt;
		listCell:css('width', '100%')&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.oddstyle&lt;br /&gt;
	else&lt;br /&gt;
		rowstyle = args.evenstyle&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listText = args['list' .. listnum]&lt;br /&gt;
	local oddEven = ODD_EVEN_MARKER&lt;br /&gt;
	if listText:sub(1, 12) == '&amp;lt;/div&amp;gt;&amp;lt;table' 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('&amp;lt;th[^&amp;gt;]*&amp;quot;navbox%-title&amp;quot;') and RESTART_MARKER or 'odd'&lt;br /&gt;
	end&lt;br /&gt;
	listCell&lt;br /&gt;
		:css('padding', '0px')&lt;br /&gt;
		:cssText(args.liststyle)&lt;br /&gt;
		:cssText(rowstyle)&lt;br /&gt;
		:cssText(args['list' .. listnum .. 'style'])&lt;br /&gt;
		:addClass('navbox-list')&lt;br /&gt;
		:addClass('navbox-' .. oddEven)&lt;br /&gt;
		:addClass(args.listclass)&lt;br /&gt;
		:addClass(args['list' .. listnum .. 'class'])&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			:css('padding', (index == 1 and args.list1padding) or args.listpadding or '0em 0.25em')&lt;br /&gt;
			:wikitext(processItem(listText, args.nowrapitems))&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args.image then&lt;br /&gt;
		row&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:addClass('navbox-image')&lt;br /&gt;
				:addClass(args.imageclass)&lt;br /&gt;
				:css('width', '1px')               -- Minimize width&lt;br /&gt;
				:css('padding', '0px 0px 0px 2px')&lt;br /&gt;
				:cssText(args.imagestyle)&lt;br /&gt;
				:attr('rowspan', #listnums)&lt;br /&gt;
				:tag('div')&lt;br /&gt;
					:wikitext(processItem(args.image))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Tracking categories&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local function needsHorizontalLists()&lt;br /&gt;
	if border == 'subgroup' or args.tracking == 'no' then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local listClasses = {&lt;br /&gt;
		['plainlist'] = true, ['hlist'] = true, ['hlist hnum'] = true,&lt;br /&gt;
		['hlist hwrap'] = true, ['hlist vcard'] = true, ['vcard hlist'] = true,&lt;br /&gt;
		['hlist vevent'] = true,&lt;br /&gt;
	}&lt;br /&gt;
	return not (listClasses[args.listclass] or listClasses[args.bodyclass])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- there are a lot of list classes in the wild, so we have a function to find&lt;br /&gt;
-- them and add their TemplateStyles&lt;br /&gt;
local function addListStyles()&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	-- TODO?: Should maybe take a table of classes for e.g. hnum, hwrap as above&lt;br /&gt;
	-- I'm going to do the stupid thing first though&lt;br /&gt;
	-- Also not sure hnum and hwrap are going to live in the same TemplateStyles&lt;br /&gt;
	-- as hlist&lt;br /&gt;
	local function _addListStyles(htmlclass, templatestyles)&lt;br /&gt;
		local class_args = { -- rough order of probability of use&lt;br /&gt;
			'bodyclass', 'listclass', 'aboveclass', 'belowclass', 'titleclass',&lt;br /&gt;
			'navboxclass', 'groupclass', 'titlegroupclass', 'imageclass'&lt;br /&gt;
		}&lt;br /&gt;
		local patterns = {&lt;br /&gt;
			'^' .. htmlclass .. '$',&lt;br /&gt;
			'%s' .. htmlclass .. '$',&lt;br /&gt;
			'^' .. htmlclass .. '%s',&lt;br /&gt;
			'%s' .. htmlclass .. '%s'&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		local found = false&lt;br /&gt;
		for _, arg in ipairs(class_args) do&lt;br /&gt;
			for _, pattern in ipairs(patterns) do&lt;br /&gt;
				if mw.ustring.find(args[arg] or '', pattern) then&lt;br /&gt;
					found = true&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if found then break end&lt;br /&gt;
		end&lt;br /&gt;
		if found then&lt;br /&gt;
			return frame:extensionTag{&lt;br /&gt;
				name = 'templatestyles', args = { src = templatestyles }&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
			return ''&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local hlist_styles = ''&lt;br /&gt;
	-- navbar always has mini = 1, so here (on this wiki) we can assume that&lt;br /&gt;
	-- we don't need to output hlist styles in navbox again.&lt;br /&gt;
	if not has_navbar() then&lt;br /&gt;
		hlist_styles = _addListStyles('hlist', 'Flatlist/styles.css')&lt;br /&gt;
	end&lt;br /&gt;
	local plainlist_styles = _addListStyles('plainlist', 'Plainlist/styles.css')&lt;br /&gt;
	&lt;br /&gt;
	return hlist_styles .. plainlist_styles&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasBackgroundColors()&lt;br /&gt;
	for _, key in ipairs({'titlestyle', 'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do&lt;br /&gt;
		if tostring(args[key]):find('background', 1, true) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasBorders()&lt;br /&gt;
	for _, key in ipairs({'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do&lt;br /&gt;
		if tostring(args[key]):find('border', 1, true) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isIllegible()&lt;br /&gt;
	-- require('Module:Color contrast') absent on mediawiki.org&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getTrackingCategories()&lt;br /&gt;
	local cats = {}&lt;br /&gt;
	if needsHorizontalLists() then table.insert(cats, 'Navigational boxes without horizontal lists') end&lt;br /&gt;
	if hasBackgroundColors() then table.insert(cats, 'Navboxes using background colours') end&lt;br /&gt;
	if isIllegible() then table.insert(cats, 'Potentially illegible navboxes') end&lt;br /&gt;
	if hasBorders() then table.insert(cats, 'Navboxes using borders') end&lt;br /&gt;
	return cats&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTrackingCategories(builder)&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 == 'doc' or subpage == 'sandbox' or subpage == 'testcases' then return end&lt;br /&gt;
&lt;br /&gt;
	for _, cat in ipairs(getTrackingCategories()) do&lt;br /&gt;
		builder:wikitext('[[Category:' .. cat .. ']]')&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Main navbox tables&lt;br /&gt;
--&lt;br /&gt;
local function renderMainTable()&lt;br /&gt;
	local tbl = mw.html.create('table')&lt;br /&gt;
		:addClass('nowraplinks')&lt;br /&gt;
		:addClass(args.bodyclass)&lt;br /&gt;
&lt;br /&gt;
	if args.title and (args.state ~= 'plain' and args.state ~= 'off') then&lt;br /&gt;
		if args.state == 'collapsed' then args.state = 'mw-collapsed' end&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass('mw-collapsible')&lt;br /&gt;
			:addClass(args.state or 'autocollapse')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	tbl:css('border-spacing', 0)&lt;br /&gt;
	if border == 'subgroup' or border == 'none' then&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass('navbox-subgroup')&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
			:cssText(args.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('navbox-inner')&lt;br /&gt;
			:css('background', 'transparent')&lt;br /&gt;
			:css('color', 'inherit')&lt;br /&gt;
	end&lt;br /&gt;
	tbl:cssText(args.innerstyle)&lt;br /&gt;
&lt;br /&gt;
	renderTitleRow(tbl)&lt;br /&gt;
	renderAboveRow(tbl)&lt;br /&gt;
	for i, listnum in ipairs(listnums) do&lt;br /&gt;
		renderListRow(tbl, i, listnum)&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;
function p._navbox(navboxArgs)&lt;br /&gt;
	args = navboxArgs&lt;br /&gt;
	listnums = {}&lt;br /&gt;
&lt;br /&gt;
	for k, _ in pairs(args) do&lt;br /&gt;
		if type(k) == 'string' then&lt;br /&gt;
			local listnum = k:match('^list(%d+)$')&lt;br /&gt;
			if listnum then table.insert(listnums, tonumber(listnum)) end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(listnums)&lt;br /&gt;
&lt;br /&gt;
	border = mw.text.trim(args.border or args[1] or '')&lt;br /&gt;
	if border == 'child' then&lt;br /&gt;
		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()&lt;br /&gt;
	&lt;br /&gt;
	-- get templatestyles&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	-- local base_templatestyles = frame:extensionTag{&lt;br /&gt;
	-- 	name = 'templatestyles', args = { src = 'Module:Navbox/styles.css' }&lt;br /&gt;
	-- }&lt;br /&gt;
	local templatestyles = ''&lt;br /&gt;
	if args.templatestyles and args.templatestyles ~= '' then&lt;br /&gt;
		templatestyles = frame:extensionTag{&lt;br /&gt;
			name = 'templatestyles', args = { src = args.templatestyles }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local res = mw.html.create()&lt;br /&gt;
	-- 'navbox-styles' exists for two reasons:&lt;br /&gt;
	--  1. To wrap the styles to work around phab: T200206 more elegantly. Instead&lt;br /&gt;
	--	   of combinatorial rules, this ends up being linear number of CSS rules.&lt;br /&gt;
	--  2. To allow MobileFrontend to rip the styles out with 'nomobile' such that&lt;br /&gt;
	--     they are not dumped into the mobile view.&lt;br /&gt;
	res:tag('div')&lt;br /&gt;
		:addClass('navbox-styles')&lt;br /&gt;
		:addClass('nomobile')&lt;br /&gt;
		:wikitext(base_templatestyles .. templatestyles)&lt;br /&gt;
		:done()&lt;br /&gt;
	&lt;br /&gt;
	-- render the appropriate wrapper around the navbox, depending on the border param&lt;br /&gt;
	if border == 'none' then&lt;br /&gt;
		local nav = res:tag('div')&lt;br /&gt;
			:attr('role', 'navigation')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args.title or args.above or (args.group1 and not args.group2) then&lt;br /&gt;
			nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr('aria-label', 'Navbox')&lt;br /&gt;
		end&lt;br /&gt;
	elseif 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's &amp;lt;/div&amp;gt;&lt;br /&gt;
		res&lt;br /&gt;
			:wikitext('&amp;lt;/div&amp;gt;')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
			:wikitext('&amp;lt;div&amp;gt;')&lt;br /&gt;
	else&lt;br /&gt;
		local nav = res:tag('div')&lt;br /&gt;
			:attr('role', 'navigation')&lt;br /&gt;
			:addClass('navbox')&lt;br /&gt;
			:addClass(args.navboxclass)&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
			:cssText(args.style)&lt;br /&gt;
			:css('padding', '3px')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args.title or args.above or (args.group1 and not args.group2) then&lt;br /&gt;
			nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr('aria-label', 'Navbox')&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (args.nocat or 'false'):lower() == 'false' then&lt;br /&gt;
		renderTrackingCategories(res)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return striped(tostring(res))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.navbox(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
	end&lt;br /&gt;
	args = getArgs(frame, {wrappers = {'Template:Navbox', 'Template:Navbox subgroup'}})&lt;br /&gt;
	if frame.args.border then&lt;br /&gt;
		-- This allows Template:Navbox_subgroup to use {{#invoke:Navbox|navbox|border=...}}.&lt;br /&gt;
		args.border = frame.args.border&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Read the arguments in the order they'll be output in, to make references number in the right order.&lt;br /&gt;
	local _&lt;br /&gt;
	_ = args.title&lt;br /&gt;
	_ = args.above&lt;br /&gt;
	for i = 1, 20 do&lt;br /&gt;
		_ = args[&amp;quot;group&amp;quot; .. tostring(i)]&lt;br /&gt;
		_ = args[&amp;quot;list&amp;quot; .. tostring(i)]&lt;br /&gt;
	end&lt;br /&gt;
	_ = args.below&lt;br /&gt;
&lt;br /&gt;
	return p._navbox(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Template:Navbox_Characters&amp;diff=241</id>
		<title>Template:Navbox Characters</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Template:Navbox_Characters&amp;diff=241"/>
		<updated>2021-10-26T02:04:24Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Changed formating&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox&lt;br /&gt;
|name = Navbox Characters&lt;br /&gt;
|state = autocollapse&lt;br /&gt;
|title = [[Girls]]&lt;br /&gt;
|group1 = Obtainable girls&lt;br /&gt;
  |list1= [[Alala]] • [[Arethusa]] • [[Brittany]] • [[Helda]] • [[Hestia]] • [[Hydna]] • [[Mary Warren]] • [[Mercy]] • [[The Thief]] • [[Zoe]]&lt;br /&gt;
&lt;br /&gt;
|group2 = Other&lt;br /&gt;
  |list2= [[Aria]] • [[Artemis]] • [[Cypher]] • [[Grace]] • [[Hera]] • [[Judy]] • [[Linda]] • [[Sarina]] • [[Summer]] • [[Tituba]] • [[Zilda]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Module:Navbox&amp;diff=233</id>
		<title>Module:Navbox</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Module:Navbox&amp;diff=233"/>
		<updated>2021-10-23T23:34:41Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Restored&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--&lt;br /&gt;
-- This module implements {{Navbox}}&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local navbar = require('Module:Navbar')._navbar&lt;br /&gt;
local getArgs -- lazily initialized&lt;br /&gt;
&lt;br /&gt;
local args&lt;br /&gt;
local border&lt;br /&gt;
local listnums&lt;br /&gt;
local ODD_EVEN_MARKER = '\127_ODDEVEN_\127'&lt;br /&gt;
local RESTART_MARKER = '\127_ODDEVEN0_\127'&lt;br /&gt;
local REGEX_MARKER = '\127_ODDEVEN(%d?)_\127'&lt;br /&gt;
&lt;br /&gt;
local function striped(wikitext)&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 = '[[Category:Navbox orphans]]'&lt;br /&gt;
	if border == 'subgroup' and args.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 = 'odd', 'even'&lt;br /&gt;
	if args.evenodd then&lt;br /&gt;
		if args.evenodd == 'swap' then&lt;br /&gt;
			first, second = second, first&lt;br /&gt;
		else&lt;br /&gt;
			first = args.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 == '0' 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('([%[%]])', '%%%1')&lt;br /&gt;
	return (wikitext:gsub(regex, ''):gsub(REGEX_MARKER, 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) == '{|' 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 '\n' .. item ..'\n'&lt;br /&gt;
	end&lt;br /&gt;
	if nowrapitems == 'yes' then&lt;br /&gt;
		local lines = {}&lt;br /&gt;
		for line in (item .. '\n'):gmatch('([^\n]*)\n') do&lt;br /&gt;
			local prefix, content = line:match('^([*:;#]+)%s*(.*)')&lt;br /&gt;
			if prefix and not content:match('^&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;') then&lt;br /&gt;
				line = prefix .. '&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;' .. content .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(lines, line)&lt;br /&gt;
		end&lt;br /&gt;
		item = table.concat(lines, '\n')&lt;br /&gt;
	end&lt;br /&gt;
	if item:match('^[*:;#]') then&lt;br /&gt;
		return '\n' .. item ..'\n'&lt;br /&gt;
	end&lt;br /&gt;
	return item&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Separate function so that we can evaluate properly whether hlist should&lt;br /&gt;
-- be added by the module&lt;br /&gt;
local function has_navbar()&lt;br /&gt;
	return args.navbar ~= 'off' and args.navbar ~= 'plain' and&lt;br /&gt;
		(args.name or mw.getCurrentFrame():getParent():getTitle():gsub('/sandbox$', '') ~= 'Template:Navbox')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
	if has_navbar() then&lt;br /&gt;
		titleCell:wikitext(navbar{&lt;br /&gt;
			args.name,&lt;br /&gt;
			-- we depend on this being mini = 1 when the navbox module decides&lt;br /&gt;
			-- to add hlist templatestyles. we also depend on navbar outputting&lt;br /&gt;
			-- a copy of the hlist templatestyles.&lt;br /&gt;
			mini = 1,&lt;br /&gt;
			fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') .. ';background:none transparent;border:none;box-shadow:none; padding:0;'&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Title row&lt;br /&gt;
--&lt;br /&gt;
local function renderTitleRow(tbl)&lt;br /&gt;
	if not args.title then return end&lt;br /&gt;
&lt;br /&gt;
	local titleRow = tbl:tag('tr')&lt;br /&gt;
&lt;br /&gt;
	if args.titlegroup then&lt;br /&gt;
		titleRow&lt;br /&gt;
			:tag('th')&lt;br /&gt;
				:attr('scope', 'row')&lt;br /&gt;
				:addClass('navbox-group')&lt;br /&gt;
				:addClass(args.titlegroupclass)&lt;br /&gt;
				:cssText(args.basestyle)&lt;br /&gt;
				:cssText(args.groupstyle)&lt;br /&gt;
				:cssText(args.titlegroupstyle)&lt;br /&gt;
				:wikitext(args.titlegroup)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local titleCell = titleRow:tag('th'):attr('scope', 'col')&lt;br /&gt;
&lt;br /&gt;
	if args.titlegroup then&lt;br /&gt;
		titleCell&lt;br /&gt;
			:addClass('navbox-title1')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local titleColspan = 2&lt;br /&gt;
	if args.imageleft then titleColspan = titleColspan + 1 end&lt;br /&gt;
	if args.image then titleColspan = titleColspan + 1 end&lt;br /&gt;
	if args.titlegroup then titleColspan = titleColspan - 1 end&lt;br /&gt;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:cssText(args.basestyle)&lt;br /&gt;
		:cssText(args.titlestyle)&lt;br /&gt;
		:addClass('navbox-title')&lt;br /&gt;
		:attr('colspan', titleColspan)&lt;br /&gt;
&lt;br /&gt;
	renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			-- id for aria-labelledby attribute&lt;br /&gt;
			:attr('id', mw.uri.anchorEncode(args.title))&lt;br /&gt;
			:addClass(args.titleclass)&lt;br /&gt;
			:css('font-size', '114%')&lt;br /&gt;
			:css('margin', '0 4em')&lt;br /&gt;
			:wikitext(processItem(args.title))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Above/Below rows&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local function getAboveBelowColspan()&lt;br /&gt;
	local ret = 2&lt;br /&gt;
	if args.imageleft then ret = ret + 1 end&lt;br /&gt;
	if args.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.above then return end&lt;br /&gt;
&lt;br /&gt;
	tbl:tag('tr')&lt;br /&gt;
		:tag('td')&lt;br /&gt;
			:addClass('navbox-abovebelow')&lt;br /&gt;
			:addClass(args.aboveclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.abovestyle)&lt;br /&gt;
			:attr('colspan', getAboveBelowColspan())&lt;br /&gt;
			:tag('div')&lt;br /&gt;
				-- id for aria-labelledby attribute, if no title&lt;br /&gt;
				:attr('id', args.title and nil or mw.uri.anchorEncode(args.above))&lt;br /&gt;
				:wikitext(processItem(args.above, args.nowrapitems))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderBelowRow(tbl)&lt;br /&gt;
	if not args.below then return end&lt;br /&gt;
&lt;br /&gt;
	tbl:tag('tr')&lt;br /&gt;
		:tag('td')&lt;br /&gt;
			:addClass('navbox-abovebelow')&lt;br /&gt;
			:addClass(args.belowclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.belowstyle)&lt;br /&gt;
			:attr('colspan', getAboveBelowColspan())&lt;br /&gt;
			:tag('div')&lt;br /&gt;
				:wikitext(processItem(args.below, args.nowrapitems))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   List rows&lt;br /&gt;
--&lt;br /&gt;
local function renderListRow(tbl, index, listnum)&lt;br /&gt;
	local row = tbl:tag('tr')&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args.imageleft then&lt;br /&gt;
		row&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:addClass('navbox-image')&lt;br /&gt;
				:addClass(args.imageclass)&lt;br /&gt;
				:css('width', '1px')               -- Minimize width&lt;br /&gt;
				:css('padding', '0px 2px 0px 0px')&lt;br /&gt;
				:cssText(args.imageleftstyle)&lt;br /&gt;
				:attr('rowspan', #listnums)&lt;br /&gt;
				:tag('div')&lt;br /&gt;
					:wikitext(processItem(args.imageleft))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args['group' .. listnum] then&lt;br /&gt;
		local groupCell = row:tag('th')&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.title or args.above or args.group2) then&lt;br /&gt;
			groupCell&lt;br /&gt;
				:attr('id', mw.uri.anchorEncode(args.group1))&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:attr('scope', 'row')&lt;br /&gt;
			:addClass('navbox-group')&lt;br /&gt;
			:addClass(args.groupclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:css('width', args.groupwidth or '1%') -- If groupwidth not specified, minimize width&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:cssText(args.groupstyle)&lt;br /&gt;
			:cssText(args['group' .. listnum .. 'style'])&lt;br /&gt;
			:wikitext(args['group' .. listnum])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listCell = row:tag('td')&lt;br /&gt;
&lt;br /&gt;
	if args['group' .. listnum] then&lt;br /&gt;
		listCell&lt;br /&gt;
			:addClass('navbox-list1')&lt;br /&gt;
	else&lt;br /&gt;
		listCell:attr('colspan', 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not args.groupwidth then&lt;br /&gt;
		listCell:css('width', '100%')&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.oddstyle&lt;br /&gt;
	else&lt;br /&gt;
		rowstyle = args.evenstyle&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listText = args['list' .. listnum]&lt;br /&gt;
	local oddEven = ODD_EVEN_MARKER&lt;br /&gt;
	if listText:sub(1, 12) == '&amp;lt;/div&amp;gt;&amp;lt;table' 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('&amp;lt;th[^&amp;gt;]*&amp;quot;navbox%-title&amp;quot;') and RESTART_MARKER or 'odd'&lt;br /&gt;
	end&lt;br /&gt;
	listCell&lt;br /&gt;
		:css('padding', '0px')&lt;br /&gt;
		:cssText(args.liststyle)&lt;br /&gt;
		:cssText(rowstyle)&lt;br /&gt;
		:cssText(args['list' .. listnum .. 'style'])&lt;br /&gt;
		:addClass('navbox-list')&lt;br /&gt;
		:addClass('navbox-' .. oddEven)&lt;br /&gt;
		:addClass(args.listclass)&lt;br /&gt;
		:addClass(args['list' .. listnum .. 'class'])&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			:css('padding', (index == 1 and args.list1padding) or args.listpadding or '0em 0.25em')&lt;br /&gt;
			:wikitext(processItem(listText, args.nowrapitems))&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args.image then&lt;br /&gt;
		row&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:addClass('navbox-image')&lt;br /&gt;
				:addClass(args.imageclass)&lt;br /&gt;
				:css('width', '1px')               -- Minimize width&lt;br /&gt;
				:css('padding', '0px 0px 0px 2px')&lt;br /&gt;
				:cssText(args.imagestyle)&lt;br /&gt;
				:attr('rowspan', #listnums)&lt;br /&gt;
				:tag('div')&lt;br /&gt;
					:wikitext(processItem(args.image))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Tracking categories&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local function needsHorizontalLists()&lt;br /&gt;
	if border == 'subgroup' or args.tracking == 'no' then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local listClasses = {&lt;br /&gt;
		['plainlist'] = true, ['hlist'] = true, ['hlist hnum'] = true,&lt;br /&gt;
		['hlist hwrap'] = true, ['hlist vcard'] = true, ['vcard hlist'] = true,&lt;br /&gt;
		['hlist vevent'] = true,&lt;br /&gt;
	}&lt;br /&gt;
	return not (listClasses[args.listclass] or listClasses[args.bodyclass])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- there are a lot of list classes in the wild, so we have a function to find&lt;br /&gt;
-- them and add their TemplateStyles&lt;br /&gt;
local function addListStyles()&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	-- TODO?: Should maybe take a table of classes for e.g. hnum, hwrap as above&lt;br /&gt;
	-- I'm going to do the stupid thing first though&lt;br /&gt;
	-- Also not sure hnum and hwrap are going to live in the same TemplateStyles&lt;br /&gt;
	-- as hlist&lt;br /&gt;
	local function _addListStyles(htmlclass, templatestyles)&lt;br /&gt;
		local class_args = { -- rough order of probability of use&lt;br /&gt;
			'bodyclass', 'listclass', 'aboveclass', 'belowclass', 'titleclass',&lt;br /&gt;
			'navboxclass', 'groupclass', 'titlegroupclass', 'imageclass'&lt;br /&gt;
		}&lt;br /&gt;
		local patterns = {&lt;br /&gt;
			'^' .. htmlclass .. '$',&lt;br /&gt;
			'%s' .. htmlclass .. '$',&lt;br /&gt;
			'^' .. htmlclass .. '%s',&lt;br /&gt;
			'%s' .. htmlclass .. '%s'&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		local found = false&lt;br /&gt;
		for _, arg in ipairs(class_args) do&lt;br /&gt;
			for _, pattern in ipairs(patterns) do&lt;br /&gt;
				if mw.ustring.find(args[arg] or '', pattern) then&lt;br /&gt;
					found = true&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if found then break end&lt;br /&gt;
		end&lt;br /&gt;
		if found then&lt;br /&gt;
			return frame:extensionTag{&lt;br /&gt;
				name = 'templatestyles', args = { src = templatestyles }&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
			return ''&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local hlist_styles = ''&lt;br /&gt;
	-- navbar always has mini = 1, so here (on this wiki) we can assume that&lt;br /&gt;
	-- we don't need to output hlist styles in navbox again.&lt;br /&gt;
	if not has_navbar() then&lt;br /&gt;
		hlist_styles = _addListStyles('hlist', 'Flatlist/styles.css')&lt;br /&gt;
	end&lt;br /&gt;
	local plainlist_styles = _addListStyles('plainlist', 'Plainlist/styles.css')&lt;br /&gt;
	&lt;br /&gt;
	return hlist_styles .. plainlist_styles&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasBackgroundColors()&lt;br /&gt;
	for _, key in ipairs({'titlestyle', 'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do&lt;br /&gt;
		if tostring(args[key]):find('background', 1, true) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasBorders()&lt;br /&gt;
	for _, key in ipairs({'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do&lt;br /&gt;
		if tostring(args[key]):find('border', 1, true) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isIllegible()&lt;br /&gt;
	-- require('Module:Color contrast') absent on mediawiki.org&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getTrackingCategories()&lt;br /&gt;
	local cats = {}&lt;br /&gt;
	if needsHorizontalLists() then table.insert(cats, 'Navigational boxes without horizontal lists') end&lt;br /&gt;
	if hasBackgroundColors() then table.insert(cats, 'Navboxes using background colours') end&lt;br /&gt;
	if isIllegible() then table.insert(cats, 'Potentially illegible navboxes') end&lt;br /&gt;
	if hasBorders() then table.insert(cats, 'Navboxes using borders') end&lt;br /&gt;
	return cats&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTrackingCategories(builder)&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 == 'doc' or subpage == 'sandbox' or subpage == 'testcases' then return end&lt;br /&gt;
&lt;br /&gt;
	for _, cat in ipairs(getTrackingCategories()) do&lt;br /&gt;
		builder:wikitext('[[Category:' .. cat .. ']]')&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Main navbox tables&lt;br /&gt;
--&lt;br /&gt;
local function renderMainTable()&lt;br /&gt;
	local tbl = mw.html.create('table')&lt;br /&gt;
		:addClass('nowraplinks')&lt;br /&gt;
		:addClass(args.bodyclass)&lt;br /&gt;
&lt;br /&gt;
	if args.title and (args.state ~= 'plain' and args.state ~= 'off') then&lt;br /&gt;
		if args.state == 'collapsed' then args.state = 'mw-collapsed' end&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass('mw-collapsible')&lt;br /&gt;
			:addClass(args.state or 'autocollapse')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	tbl:css('border-spacing', 0)&lt;br /&gt;
	if border == 'subgroup' or border == 'none' then&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass('navbox-subgroup')&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
			:cssText(args.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('navbox-inner')&lt;br /&gt;
			:css('background', 'transparent')&lt;br /&gt;
			:css('color', 'inherit')&lt;br /&gt;
	end&lt;br /&gt;
	tbl:cssText(args.innerstyle)&lt;br /&gt;
&lt;br /&gt;
	renderTitleRow(tbl)&lt;br /&gt;
	renderAboveRow(tbl)&lt;br /&gt;
	for i, listnum in ipairs(listnums) do&lt;br /&gt;
		renderListRow(tbl, i, listnum)&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;
function p._navbox(navboxArgs)&lt;br /&gt;
	args = navboxArgs&lt;br /&gt;
	listnums = {}&lt;br /&gt;
&lt;br /&gt;
	for k, _ in pairs(args) do&lt;br /&gt;
		if type(k) == 'string' then&lt;br /&gt;
			local listnum = k:match('^list(%d+)$')&lt;br /&gt;
			if listnum then table.insert(listnums, tonumber(listnum)) end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(listnums)&lt;br /&gt;
&lt;br /&gt;
	border = mw.text.trim(args.border or args[1] or '')&lt;br /&gt;
	if border == 'child' then&lt;br /&gt;
		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()&lt;br /&gt;
	&lt;br /&gt;
	-- get templatestyles&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	local base_templatestyles = frame:extensionTag{&lt;br /&gt;
		name = 'templatestyles', args = { src = 'Module:Navbox/styles.css' }&lt;br /&gt;
	}&lt;br /&gt;
	local templatestyles = ''&lt;br /&gt;
	if args.templatestyles and args.templatestyles ~= '' then&lt;br /&gt;
		templatestyles = frame:extensionTag{&lt;br /&gt;
			name = 'templatestyles', args = { src = args.templatestyles }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local res = mw.html.create()&lt;br /&gt;
	-- 'navbox-styles' exists for two reasons:&lt;br /&gt;
	--  1. To wrap the styles to work around phab: T200206 more elegantly. Instead&lt;br /&gt;
	--	   of combinatorial rules, this ends up being linear number of CSS rules.&lt;br /&gt;
	--  2. To allow MobileFrontend to rip the styles out with 'nomobile' such that&lt;br /&gt;
	--     they are not dumped into the mobile view.&lt;br /&gt;
	res:tag('div')&lt;br /&gt;
		:addClass('navbox-styles')&lt;br /&gt;
		:addClass('nomobile')&lt;br /&gt;
		:wikitext(base_templatestyles .. templatestyles)&lt;br /&gt;
		:done()&lt;br /&gt;
	&lt;br /&gt;
	-- render the appropriate wrapper around the navbox, depending on the border param&lt;br /&gt;
	if border == 'none' then&lt;br /&gt;
		local nav = res:tag('div')&lt;br /&gt;
			:attr('role', 'navigation')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args.title or args.above or (args.group1 and not args.group2) then&lt;br /&gt;
			nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr('aria-label', 'Navbox')&lt;br /&gt;
		end&lt;br /&gt;
	elseif 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's &amp;lt;/div&amp;gt;&lt;br /&gt;
		res&lt;br /&gt;
			:wikitext('&amp;lt;/div&amp;gt;')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
			:wikitext('&amp;lt;div&amp;gt;')&lt;br /&gt;
	else&lt;br /&gt;
		local nav = res:tag('div')&lt;br /&gt;
			:attr('role', 'navigation')&lt;br /&gt;
			:addClass('navbox')&lt;br /&gt;
			:addClass(args.navboxclass)&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
			:cssText(args.style)&lt;br /&gt;
			:css('padding', '3px')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args.title or args.above or (args.group1 and not args.group2) then&lt;br /&gt;
			nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr('aria-label', 'Navbox')&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (args.nocat or 'false'):lower() == 'false' then&lt;br /&gt;
		renderTrackingCategories(res)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return striped(tostring(res))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.navbox(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
	end&lt;br /&gt;
	args = getArgs(frame, {wrappers = {'Template:Navbox', 'Template:Navbox subgroup'}})&lt;br /&gt;
	if frame.args.border then&lt;br /&gt;
		-- This allows Template:Navbox_subgroup to use {{#invoke:Navbox|navbox|border=...}}.&lt;br /&gt;
		args.border = frame.args.border&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Read the arguments in the order they'll be output in, to make references number in the right order.&lt;br /&gt;
	local _&lt;br /&gt;
	_ = args.title&lt;br /&gt;
	_ = args.above&lt;br /&gt;
	for i = 1, 20 do&lt;br /&gt;
		_ = args[&amp;quot;group&amp;quot; .. tostring(i)]&lt;br /&gt;
		_ = args[&amp;quot;list&amp;quot; .. tostring(i)]&lt;br /&gt;
	end&lt;br /&gt;
	_ = args.below&lt;br /&gt;
&lt;br /&gt;
	return p._navbox(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Module:Navbar&amp;diff=232</id>
		<title>Module:Navbar</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Module:Navbar&amp;diff=232"/>
		<updated>2021-10-23T23:34:05Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Restored&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local getArgs&lt;br /&gt;
local ul&lt;br /&gt;
&lt;br /&gt;
function p.addItem (mini, full, link, descrip, args, url)&lt;br /&gt;
	local l&lt;br /&gt;
	if url then&lt;br /&gt;
		l = {'[', '', ']'}&lt;br /&gt;
	else&lt;br /&gt;
		l = {'[[', '|', ']]'}&lt;br /&gt;
	end&lt;br /&gt;
	ul:tag('li')&lt;br /&gt;
		:addClass('nv-'..full)&lt;br /&gt;
		:wikitext(l[1] .. link .. l[2])&lt;br /&gt;
		:tag(args.mini and 'abbr' or 'span')&lt;br /&gt;
			:attr('title', descrip..' this template')&lt;br /&gt;
			:cssText(args.fontstyle)&lt;br /&gt;
			:wikitext(args.mini and mini or full)&lt;br /&gt;
			:done()&lt;br /&gt;
		:wikitext(l[3])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.brackets (position, c, args, div)&lt;br /&gt;
	if args.brackets then&lt;br /&gt;
		div&lt;br /&gt;
			:tag('span')&lt;br /&gt;
				:css('margin-'..position, '-0.125em')&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(c)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._navbar(args)&lt;br /&gt;
	local show = {true, true, true, false, false, false}&lt;br /&gt;
	local titleArg = 1&lt;br /&gt;
	&lt;br /&gt;
	if args.collapsible then&lt;br /&gt;
		titleArg = 2&lt;br /&gt;
		if not args.plain then args.mini = 1 end&lt;br /&gt;
		if args.fontcolor then&lt;br /&gt;
			args.fontstyle = 'color:' .. args.fontcolor .. ';'&lt;br /&gt;
		end&lt;br /&gt;
		args.style = 'float:left; text-align:left'&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.template then&lt;br /&gt;
		titleArg = 'template'&lt;br /&gt;
		show = {true, false, false, false, false, false}&lt;br /&gt;
		local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6, talk = 2, edit = 3, hist = 4, move = 5, watch = 6}&lt;br /&gt;
		for k,v in ipairs(require ('Module:TableTools').compressSparseArray(args)) do&lt;br /&gt;
			local num = index[v]&lt;br /&gt;
			if num then show[num] = true end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.noedit then show[3] = false end&lt;br /&gt;
	&lt;br /&gt;
	local titleText = args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle())&lt;br /&gt;
	local title = mw.title.new(mw.text.trim(titleText), 'Template')&lt;br /&gt;
	if not title then&lt;br /&gt;
		error('Invalid title ' .. titleText)&lt;br /&gt;
	end&lt;br /&gt;
	local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or ''&lt;br /&gt;
	&lt;br /&gt;
	local div = mw.html.create():tag('div')&lt;br /&gt;
	div&lt;br /&gt;
		:addClass('plainlinks')&lt;br /&gt;
		:addClass('hlist')&lt;br /&gt;
		:addClass('navbar')&lt;br /&gt;
		:cssText(args.style)&lt;br /&gt;
&lt;br /&gt;
	if args.mini then div:addClass('mini') end&lt;br /&gt;
&lt;br /&gt;
	if not (args.mini or args.plain) then&lt;br /&gt;
		div&lt;br /&gt;
			:tag('span')&lt;br /&gt;
				:css('word-spacing', 0)&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(args.text or 'This box:')&lt;br /&gt;
				:wikitext(' ')&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	p.brackets('right', '&amp;amp;#91; ', args, div)&lt;br /&gt;
	&lt;br /&gt;
	ul = div:tag('ul')&lt;br /&gt;
	if show[1] then p.addItem('v', 'view', title.fullText, 'View', args) end&lt;br /&gt;
	if show[2] then p.addItem('t', 'talk', talkpage, 'Discuss', args) end&lt;br /&gt;
	if show[3] then p.addItem('e', 'edit', title:fullUrl('action=edit'), 'Edit', args, true) end&lt;br /&gt;
	if show[4] then p.addItem('h', 'hist', title:fullUrl('action=history'), 'History of', args, true) end&lt;br /&gt;
	if show[5] then&lt;br /&gt;
		local move = mw.title.new ('Special:Movepage')&lt;br /&gt;
		p.addItem('m', 'move', move:fullUrl('target='..title.fullText), 'Move', args, true) end&lt;br /&gt;
	if show[6] then p.addItem('w', 'watch', title:fullUrl('action=watch'), 'Watch', args, true) end&lt;br /&gt;
	&lt;br /&gt;
	p.brackets('left', ' &amp;amp;#93;', args, div)&lt;br /&gt;
	&lt;br /&gt;
	if args.collapsible then&lt;br /&gt;
		div&lt;br /&gt;
			:done()&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			:css('font-size', '114%')&lt;br /&gt;
			:css('margin', args.mini and '0 4em' or '0 7em')&lt;br /&gt;
			:cssText(args.fontstyle)&lt;br /&gt;
			:wikitext(args[1])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- DELIBERATE DELTA FROM EN.WP THAT INTEGRATES HLIST TSTYLES&lt;br /&gt;
	-- CARE WHEN SYNCING&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	return frame:extensionTag{&lt;br /&gt;
		name = 'templatestyles', args = { src = 'Flatlist/styles.css' }&lt;br /&gt;
	} .. frame:extensionTag{&lt;br /&gt;
		name = 'templatestyles', args = { src = 'Module:Navbar/styles.css' }&lt;br /&gt;
	} .. tostring(div:done())&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.navbar(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
	end&lt;br /&gt;
	return p._navbar(getArgs(frame))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Module:Navbar&amp;diff=229</id>
		<title>Module:Navbar</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Module:Navbar&amp;diff=229"/>
		<updated>2021-10-23T23:26:06Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local getArgs&lt;br /&gt;
local ul&lt;br /&gt;
&lt;br /&gt;
function p.addItem (mini, full, link, descrip, args, url)&lt;br /&gt;
	local l&lt;br /&gt;
	if url then&lt;br /&gt;
		l = {'[', '', ']'}&lt;br /&gt;
	else&lt;br /&gt;
		l = {'[[', '|', ']]'}&lt;br /&gt;
	end&lt;br /&gt;
	ul:tag('li')&lt;br /&gt;
		:addClass('nv-'..full)&lt;br /&gt;
		:wikitext(l[1] .. link .. l[2])&lt;br /&gt;
		:tag(args.mini and 'abbr' or 'span')&lt;br /&gt;
			:attr('title', descrip..' this template')&lt;br /&gt;
			:cssText(args.fontstyle)&lt;br /&gt;
			:wikitext(args.mini and mini or full)&lt;br /&gt;
			:done()&lt;br /&gt;
		:wikitext(l[3])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.brackets (position, c, args, div)&lt;br /&gt;
	if args.brackets then&lt;br /&gt;
		div&lt;br /&gt;
			:tag('span')&lt;br /&gt;
				:css('margin-'..position, '-0.125em')&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(c)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._navbar(args)&lt;br /&gt;
	local show = {true, true, true, false, false, false}&lt;br /&gt;
	local titleArg = 1&lt;br /&gt;
	&lt;br /&gt;
	if args.collapsible then&lt;br /&gt;
		titleArg = 2&lt;br /&gt;
		if not args.plain then args.mini = 1 end&lt;br /&gt;
		if args.fontcolor then&lt;br /&gt;
			args.fontstyle = 'color:' .. args.fontcolor .. ';'&lt;br /&gt;
		end&lt;br /&gt;
		args.style = 'float:left; text-align:left'&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.template then&lt;br /&gt;
		titleArg = 'template'&lt;br /&gt;
		show = {true, false, false, false, false, false}&lt;br /&gt;
		local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6, talk = 2, edit = 3, hist = 4, move = 5, watch = 6}&lt;br /&gt;
		for k,v in ipairs(require ('Module:TableTools').compressSparseArray(args)) do&lt;br /&gt;
			local num = index[v]&lt;br /&gt;
			if num then show[num] = true end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.noedit then show[3] = false end&lt;br /&gt;
	&lt;br /&gt;
	local titleText = args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle())&lt;br /&gt;
	local title = mw.title.new(mw.text.trim(titleText), 'Template')&lt;br /&gt;
	if not title then&lt;br /&gt;
		error('Invalid title ' .. titleText)&lt;br /&gt;
	end&lt;br /&gt;
	local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or ''&lt;br /&gt;
	&lt;br /&gt;
	local div = mw.html.create():tag('div')&lt;br /&gt;
	div&lt;br /&gt;
		:addClass('plainlinks')&lt;br /&gt;
		:addClass('hlist')&lt;br /&gt;
		:addClass('navbar')&lt;br /&gt;
		:cssText(args.style)&lt;br /&gt;
&lt;br /&gt;
	if args.mini then div:addClass('mini') end&lt;br /&gt;
&lt;br /&gt;
	if not (args.mini or args.plain) then&lt;br /&gt;
		div&lt;br /&gt;
			:tag('span')&lt;br /&gt;
				:css('word-spacing', 0)&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(args.text or 'This box:')&lt;br /&gt;
				:wikitext(' ')&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	p.brackets('right', '&amp;amp;#91; ', args, div)&lt;br /&gt;
	&lt;br /&gt;
	ul = div:tag('ul')&lt;br /&gt;
	if show[1] then p.addItem('v', 'view', title.fullText, 'View', args) end&lt;br /&gt;
	if show[2] then p.addItem('t', 'talk', talkpage, 'Discuss', args) end&lt;br /&gt;
	if show[3] then p.addItem('e', 'edit', title:fullUrl('action=edit'), 'Edit', args, true) end&lt;br /&gt;
	if show[4] then p.addItem('h', 'hist', title:fullUrl('action=history'), 'History of', args, true) end&lt;br /&gt;
	if show[5] then&lt;br /&gt;
		local move = mw.title.new ('Special:Movepage')&lt;br /&gt;
		p.addItem('m', 'move', move:fullUrl('target='..title.fullText), 'Move', args, true) end&lt;br /&gt;
	if show[6] then p.addItem('w', 'watch', title:fullUrl('action=watch'), 'Watch', args, true) end&lt;br /&gt;
	&lt;br /&gt;
	p.brackets('left', ' &amp;amp;#93;', args, div)&lt;br /&gt;
	&lt;br /&gt;
	if args.collapsible then&lt;br /&gt;
		div&lt;br /&gt;
			:done()&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			:css('font-size', '114%')&lt;br /&gt;
			:css('margin', args.mini and '0 4em' or '0 7em')&lt;br /&gt;
			:cssText(args.fontstyle)&lt;br /&gt;
			:wikitext(args[1])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- DELIBERATE DELTA FROM EN.WP THAT INTEGRATES HLIST TSTYLES&lt;br /&gt;
	-- CARE WHEN SYNCING&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	return frame:extensionTag{&lt;br /&gt;
		name = 'templatestyles', args = { src = 'Flatlist/styles.css' }&lt;br /&gt;
	} .. frame:extensionTag{&lt;br /&gt;
		name = 'templatestyles', args = { src = 'Common.css' }&lt;br /&gt;
	} .. tostring(div:done())&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.navbar(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
	end&lt;br /&gt;
	return p._navbar(getArgs(frame))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Module:Navbar&amp;diff=228</id>
		<title>Module:Navbar</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Module:Navbar&amp;diff=228"/>
		<updated>2021-10-23T23:25:27Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Changed .css to &amp;quot;Common.css&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local getArgs&lt;br /&gt;
local ul&lt;br /&gt;
&lt;br /&gt;
function p.addItem (mini, full, link, descrip, args, url)&lt;br /&gt;
	local l&lt;br /&gt;
	if url then&lt;br /&gt;
		l = {'[', '', ']'}&lt;br /&gt;
	else&lt;br /&gt;
		l = {'[[', '|', ']]'}&lt;br /&gt;
	end&lt;br /&gt;
	ul:tag('li')&lt;br /&gt;
		:addClass('nv-'..full)&lt;br /&gt;
		:wikitext(l[1] .. link .. l[2])&lt;br /&gt;
		:tag(args.mini and 'abbr' or 'span')&lt;br /&gt;
			:attr('title', descrip..' this template')&lt;br /&gt;
			:cssText(args.fontstyle)&lt;br /&gt;
			:wikitext(args.mini and mini or full)&lt;br /&gt;
			:done()&lt;br /&gt;
		:wikitext(l[3])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.brackets (position, c, args, div)&lt;br /&gt;
	if args.brackets then&lt;br /&gt;
		div&lt;br /&gt;
			:tag('span')&lt;br /&gt;
				:css('margin-'..position, '-0.125em')&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(c)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._navbar(args)&lt;br /&gt;
	local show = {true, true, true, false, false, false}&lt;br /&gt;
	local titleArg = 1&lt;br /&gt;
	&lt;br /&gt;
	if args.collapsible then&lt;br /&gt;
		titleArg = 2&lt;br /&gt;
		if not args.plain then args.mini = 1 end&lt;br /&gt;
		if args.fontcolor then&lt;br /&gt;
			args.fontstyle = 'color:' .. args.fontcolor .. ';'&lt;br /&gt;
		end&lt;br /&gt;
		args.style = 'float:left; text-align:left'&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.template then&lt;br /&gt;
		titleArg = 'template'&lt;br /&gt;
		show = {true, false, false, false, false, false}&lt;br /&gt;
		local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6, talk = 2, edit = 3, hist = 4, move = 5, watch = 6}&lt;br /&gt;
		for k,v in ipairs(require ('Module:TableTools').compressSparseArray(args)) do&lt;br /&gt;
			local num = index[v]&lt;br /&gt;
			if num then show[num] = true end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.noedit then show[3] = false end&lt;br /&gt;
	&lt;br /&gt;
	local titleText = args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle())&lt;br /&gt;
	local title = mw.title.new(mw.text.trim(titleText), 'Template')&lt;br /&gt;
	if not title then&lt;br /&gt;
		error('Invalid title ' .. titleText)&lt;br /&gt;
	end&lt;br /&gt;
	local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or ''&lt;br /&gt;
	&lt;br /&gt;
	local div = mw.html.create():tag('div')&lt;br /&gt;
	div&lt;br /&gt;
		:addClass('plainlinks')&lt;br /&gt;
		:addClass('hlist')&lt;br /&gt;
		:addClass('navbar')&lt;br /&gt;
		:cssText(args.style)&lt;br /&gt;
&lt;br /&gt;
	if args.mini then div:addClass('mini') end&lt;br /&gt;
&lt;br /&gt;
	if not (args.mini or args.plain) then&lt;br /&gt;
		div&lt;br /&gt;
			:tag('span')&lt;br /&gt;
				:css('word-spacing', 0)&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(args.text or 'This box:')&lt;br /&gt;
				:wikitext(' ')&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	p.brackets('right', '&amp;amp;#91; ', args, div)&lt;br /&gt;
	&lt;br /&gt;
	ul = div:tag('ul')&lt;br /&gt;
	if show[1] then p.addItem('v', 'view', title.fullText, 'View', args) end&lt;br /&gt;
	if show[2] then p.addItem('t', 'talk', talkpage, 'Discuss', args) end&lt;br /&gt;
	if show[3] then p.addItem('e', 'edit', title:fullUrl('action=edit'), 'Edit', args, true) end&lt;br /&gt;
	if show[4] then p.addItem('h', 'hist', title:fullUrl('action=history'), 'History of', args, true) end&lt;br /&gt;
	if show[5] then&lt;br /&gt;
		local move = mw.title.new ('Special:Movepage')&lt;br /&gt;
		p.addItem('m', 'move', move:fullUrl('target='..title.fullText), 'Move', args, true) end&lt;br /&gt;
	if show[6] then p.addItem('w', 'watch', title:fullUrl('action=watch'), 'Watch', args, true) end&lt;br /&gt;
	&lt;br /&gt;
	p.brackets('left', ' &amp;amp;#93;', args, div)&lt;br /&gt;
	&lt;br /&gt;
	if args.collapsible then&lt;br /&gt;
		div&lt;br /&gt;
			:done()&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			:css('font-size', '114%')&lt;br /&gt;
			:css('margin', args.mini and '0 4em' or '0 7em')&lt;br /&gt;
			:cssText(args.fontstyle)&lt;br /&gt;
			:wikitext(args[1])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- DELIBERATE DELTA FROM EN.WP THAT INTEGRATES HLIST TSTYLES&lt;br /&gt;
	-- CARE WHEN SYNCING&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	return frame:extensionTag{&lt;br /&gt;
		name = 'templatestyles', args = { src = 'Flatlist/styles.css' }&lt;br /&gt;
	} .. frame:extensionTag{&lt;br /&gt;
		name = 'templatestyles', args = { src = 'https://kronostimetitan.com/wiki/index.php/MediaWiki:Common.css' }&lt;br /&gt;
	} .. tostring(div:done())&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.navbar(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
	end&lt;br /&gt;
	return p._navbar(getArgs(frame))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Module:Navbox&amp;diff=224</id>
		<title>Module:Navbox</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Module:Navbox&amp;diff=224"/>
		<updated>2021-10-23T23:22:23Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Changed .css to &amp;quot;Common.css&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--&lt;br /&gt;
-- This module implements {{Navbox}}&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local navbar = require('Module:Navbar')._navbar&lt;br /&gt;
local getArgs -- lazily initialized&lt;br /&gt;
&lt;br /&gt;
local args&lt;br /&gt;
local border&lt;br /&gt;
local listnums&lt;br /&gt;
local ODD_EVEN_MARKER = '\127_ODDEVEN_\127'&lt;br /&gt;
local RESTART_MARKER = '\127_ODDEVEN0_\127'&lt;br /&gt;
local REGEX_MARKER = '\127_ODDEVEN(%d?)_\127'&lt;br /&gt;
&lt;br /&gt;
local function striped(wikitext)&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 = '[[Category:Navbox orphans]]'&lt;br /&gt;
	if border == 'subgroup' and args.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 = 'odd', 'even'&lt;br /&gt;
	if args.evenodd then&lt;br /&gt;
		if args.evenodd == 'swap' then&lt;br /&gt;
			first, second = second, first&lt;br /&gt;
		else&lt;br /&gt;
			first = args.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 == '0' 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('([%[%]])', '%%%1')&lt;br /&gt;
	return (wikitext:gsub(regex, ''):gsub(REGEX_MARKER, 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) == '{|' 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 '\n' .. item ..'\n'&lt;br /&gt;
	end&lt;br /&gt;
	if nowrapitems == 'yes' then&lt;br /&gt;
		local lines = {}&lt;br /&gt;
		for line in (item .. '\n'):gmatch('([^\n]*)\n') do&lt;br /&gt;
			local prefix, content = line:match('^([*:;#]+)%s*(.*)')&lt;br /&gt;
			if prefix and not content:match('^&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;') then&lt;br /&gt;
				line = prefix .. '&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;' .. content .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(lines, line)&lt;br /&gt;
		end&lt;br /&gt;
		item = table.concat(lines, '\n')&lt;br /&gt;
	end&lt;br /&gt;
	if item:match('^[*:;#]') then&lt;br /&gt;
		return '\n' .. item ..'\n'&lt;br /&gt;
	end&lt;br /&gt;
	return item&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Separate function so that we can evaluate properly whether hlist should&lt;br /&gt;
-- be added by the module&lt;br /&gt;
local function has_navbar()&lt;br /&gt;
	return args.navbar ~= 'off' and args.navbar ~= 'plain' and&lt;br /&gt;
		(args.name or mw.getCurrentFrame():getParent():getTitle():gsub('/sandbox$', '') ~= 'Template:Navbox')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
	if has_navbar() then&lt;br /&gt;
		titleCell:wikitext(navbar{&lt;br /&gt;
			args.name,&lt;br /&gt;
			-- we depend on this being mini = 1 when the navbox module decides&lt;br /&gt;
			-- to add hlist templatestyles. we also depend on navbar outputting&lt;br /&gt;
			-- a copy of the hlist templatestyles.&lt;br /&gt;
			mini = 1,&lt;br /&gt;
			fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') .. ';background:none transparent;border:none;box-shadow:none; padding:0;'&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Title row&lt;br /&gt;
--&lt;br /&gt;
local function renderTitleRow(tbl)&lt;br /&gt;
	if not args.title then return end&lt;br /&gt;
&lt;br /&gt;
	local titleRow = tbl:tag('tr')&lt;br /&gt;
&lt;br /&gt;
	if args.titlegroup then&lt;br /&gt;
		titleRow&lt;br /&gt;
			:tag('th')&lt;br /&gt;
				:attr('scope', 'row')&lt;br /&gt;
				:addClass('navbox-group')&lt;br /&gt;
				:addClass(args.titlegroupclass)&lt;br /&gt;
				:cssText(args.basestyle)&lt;br /&gt;
				:cssText(args.groupstyle)&lt;br /&gt;
				:cssText(args.titlegroupstyle)&lt;br /&gt;
				:wikitext(args.titlegroup)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local titleCell = titleRow:tag('th'):attr('scope', 'col')&lt;br /&gt;
&lt;br /&gt;
	if args.titlegroup then&lt;br /&gt;
		titleCell&lt;br /&gt;
			:addClass('navbox-title1')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local titleColspan = 2&lt;br /&gt;
	if args.imageleft then titleColspan = titleColspan + 1 end&lt;br /&gt;
	if args.image then titleColspan = titleColspan + 1 end&lt;br /&gt;
	if args.titlegroup then titleColspan = titleColspan - 1 end&lt;br /&gt;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:cssText(args.basestyle)&lt;br /&gt;
		:cssText(args.titlestyle)&lt;br /&gt;
		:addClass('navbox-title')&lt;br /&gt;
		:attr('colspan', titleColspan)&lt;br /&gt;
&lt;br /&gt;
	renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			-- id for aria-labelledby attribute&lt;br /&gt;
			:attr('id', mw.uri.anchorEncode(args.title))&lt;br /&gt;
			:addClass(args.titleclass)&lt;br /&gt;
			:css('font-size', '114%')&lt;br /&gt;
			:css('margin', '0 4em')&lt;br /&gt;
			:wikitext(processItem(args.title))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Above/Below rows&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local function getAboveBelowColspan()&lt;br /&gt;
	local ret = 2&lt;br /&gt;
	if args.imageleft then ret = ret + 1 end&lt;br /&gt;
	if args.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.above then return end&lt;br /&gt;
&lt;br /&gt;
	tbl:tag('tr')&lt;br /&gt;
		:tag('td')&lt;br /&gt;
			:addClass('navbox-abovebelow')&lt;br /&gt;
			:addClass(args.aboveclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.abovestyle)&lt;br /&gt;
			:attr('colspan', getAboveBelowColspan())&lt;br /&gt;
			:tag('div')&lt;br /&gt;
				-- id for aria-labelledby attribute, if no title&lt;br /&gt;
				:attr('id', args.title and nil or mw.uri.anchorEncode(args.above))&lt;br /&gt;
				:wikitext(processItem(args.above, args.nowrapitems))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderBelowRow(tbl)&lt;br /&gt;
	if not args.below then return end&lt;br /&gt;
&lt;br /&gt;
	tbl:tag('tr')&lt;br /&gt;
		:tag('td')&lt;br /&gt;
			:addClass('navbox-abovebelow')&lt;br /&gt;
			:addClass(args.belowclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.belowstyle)&lt;br /&gt;
			:attr('colspan', getAboveBelowColspan())&lt;br /&gt;
			:tag('div')&lt;br /&gt;
				:wikitext(processItem(args.below, args.nowrapitems))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   List rows&lt;br /&gt;
--&lt;br /&gt;
local function renderListRow(tbl, index, listnum)&lt;br /&gt;
	local row = tbl:tag('tr')&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args.imageleft then&lt;br /&gt;
		row&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:addClass('navbox-image')&lt;br /&gt;
				:addClass(args.imageclass)&lt;br /&gt;
				:css('width', '1px')               -- Minimize width&lt;br /&gt;
				:css('padding', '0px 2px 0px 0px')&lt;br /&gt;
				:cssText(args.imageleftstyle)&lt;br /&gt;
				:attr('rowspan', #listnums)&lt;br /&gt;
				:tag('div')&lt;br /&gt;
					:wikitext(processItem(args.imageleft))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args['group' .. listnum] then&lt;br /&gt;
		local groupCell = row:tag('th')&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.title or args.above or args.group2) then&lt;br /&gt;
			groupCell&lt;br /&gt;
				:attr('id', mw.uri.anchorEncode(args.group1))&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:attr('scope', 'row')&lt;br /&gt;
			:addClass('navbox-group')&lt;br /&gt;
			:addClass(args.groupclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:css('width', args.groupwidth or '1%') -- If groupwidth not specified, minimize width&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:cssText(args.groupstyle)&lt;br /&gt;
			:cssText(args['group' .. listnum .. 'style'])&lt;br /&gt;
			:wikitext(args['group' .. listnum])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listCell = row:tag('td')&lt;br /&gt;
&lt;br /&gt;
	if args['group' .. listnum] then&lt;br /&gt;
		listCell&lt;br /&gt;
			:addClass('navbox-list1')&lt;br /&gt;
	else&lt;br /&gt;
		listCell:attr('colspan', 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not args.groupwidth then&lt;br /&gt;
		listCell:css('width', '100%')&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.oddstyle&lt;br /&gt;
	else&lt;br /&gt;
		rowstyle = args.evenstyle&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listText = args['list' .. listnum]&lt;br /&gt;
	local oddEven = ODD_EVEN_MARKER&lt;br /&gt;
	if listText:sub(1, 12) == '&amp;lt;/div&amp;gt;&amp;lt;table' 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('&amp;lt;th[^&amp;gt;]*&amp;quot;navbox%-title&amp;quot;') and RESTART_MARKER or 'odd'&lt;br /&gt;
	end&lt;br /&gt;
	listCell&lt;br /&gt;
		:css('padding', '0px')&lt;br /&gt;
		:cssText(args.liststyle)&lt;br /&gt;
		:cssText(rowstyle)&lt;br /&gt;
		:cssText(args['list' .. listnum .. 'style'])&lt;br /&gt;
		:addClass('navbox-list')&lt;br /&gt;
		:addClass('navbox-' .. oddEven)&lt;br /&gt;
		:addClass(args.listclass)&lt;br /&gt;
		:addClass(args['list' .. listnum .. 'class'])&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			:css('padding', (index == 1 and args.list1padding) or args.listpadding or '0em 0.25em')&lt;br /&gt;
			:wikitext(processItem(listText, args.nowrapitems))&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args.image then&lt;br /&gt;
		row&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:addClass('navbox-image')&lt;br /&gt;
				:addClass(args.imageclass)&lt;br /&gt;
				:css('width', '1px')               -- Minimize width&lt;br /&gt;
				:css('padding', '0px 0px 0px 2px')&lt;br /&gt;
				:cssText(args.imagestyle)&lt;br /&gt;
				:attr('rowspan', #listnums)&lt;br /&gt;
				:tag('div')&lt;br /&gt;
					:wikitext(processItem(args.image))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Tracking categories&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local function needsHorizontalLists()&lt;br /&gt;
	if border == 'subgroup' or args.tracking == 'no' then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local listClasses = {&lt;br /&gt;
		['plainlist'] = true, ['hlist'] = true, ['hlist hnum'] = true,&lt;br /&gt;
		['hlist hwrap'] = true, ['hlist vcard'] = true, ['vcard hlist'] = true,&lt;br /&gt;
		['hlist vevent'] = true,&lt;br /&gt;
	}&lt;br /&gt;
	return not (listClasses[args.listclass] or listClasses[args.bodyclass])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- there are a lot of list classes in the wild, so we have a function to find&lt;br /&gt;
-- them and add their TemplateStyles&lt;br /&gt;
local function addListStyles()&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	-- TODO?: Should maybe take a table of classes for e.g. hnum, hwrap as above&lt;br /&gt;
	-- I'm going to do the stupid thing first though&lt;br /&gt;
	-- Also not sure hnum and hwrap are going to live in the same TemplateStyles&lt;br /&gt;
	-- as hlist&lt;br /&gt;
	local function _addListStyles(htmlclass, templatestyles)&lt;br /&gt;
		local class_args = { -- rough order of probability of use&lt;br /&gt;
			'bodyclass', 'listclass', 'aboveclass', 'belowclass', 'titleclass',&lt;br /&gt;
			'navboxclass', 'groupclass', 'titlegroupclass', 'imageclass'&lt;br /&gt;
		}&lt;br /&gt;
		local patterns = {&lt;br /&gt;
			'^' .. htmlclass .. '$',&lt;br /&gt;
			'%s' .. htmlclass .. '$',&lt;br /&gt;
			'^' .. htmlclass .. '%s',&lt;br /&gt;
			'%s' .. htmlclass .. '%s'&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		local found = false&lt;br /&gt;
		for _, arg in ipairs(class_args) do&lt;br /&gt;
			for _, pattern in ipairs(patterns) do&lt;br /&gt;
				if mw.ustring.find(args[arg] or '', pattern) then&lt;br /&gt;
					found = true&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if found then break end&lt;br /&gt;
		end&lt;br /&gt;
		if found then&lt;br /&gt;
			return frame:extensionTag{&lt;br /&gt;
				name = 'templatestyles', args = { src = templatestyles }&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
			return ''&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local hlist_styles = ''&lt;br /&gt;
	-- navbar always has mini = 1, so here (on this wiki) we can assume that&lt;br /&gt;
	-- we don't need to output hlist styles in navbox again.&lt;br /&gt;
	if not has_navbar() then&lt;br /&gt;
		hlist_styles = _addListStyles('hlist', 'Flatlist/styles.css')&lt;br /&gt;
	end&lt;br /&gt;
	local plainlist_styles = _addListStyles('plainlist', 'Plainlist/styles.css')&lt;br /&gt;
	&lt;br /&gt;
	return hlist_styles .. plainlist_styles&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasBackgroundColors()&lt;br /&gt;
	for _, key in ipairs({'titlestyle', 'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do&lt;br /&gt;
		if tostring(args[key]):find('background', 1, true) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasBorders()&lt;br /&gt;
	for _, key in ipairs({'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do&lt;br /&gt;
		if tostring(args[key]):find('border', 1, true) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isIllegible()&lt;br /&gt;
	-- require('Module:Color contrast') absent on mediawiki.org&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getTrackingCategories()&lt;br /&gt;
	local cats = {}&lt;br /&gt;
	if needsHorizontalLists() then table.insert(cats, 'Navigational boxes without horizontal lists') end&lt;br /&gt;
	if hasBackgroundColors() then table.insert(cats, 'Navboxes using background colours') end&lt;br /&gt;
	if isIllegible() then table.insert(cats, 'Potentially illegible navboxes') end&lt;br /&gt;
	if hasBorders() then table.insert(cats, 'Navboxes using borders') end&lt;br /&gt;
	return cats&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTrackingCategories(builder)&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 == 'doc' or subpage == 'sandbox' or subpage == 'testcases' then return end&lt;br /&gt;
&lt;br /&gt;
	for _, cat in ipairs(getTrackingCategories()) do&lt;br /&gt;
		builder:wikitext('[[Category:' .. cat .. ']]')&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Main navbox tables&lt;br /&gt;
--&lt;br /&gt;
local function renderMainTable()&lt;br /&gt;
	local tbl = mw.html.create('table')&lt;br /&gt;
		:addClass('nowraplinks')&lt;br /&gt;
		:addClass(args.bodyclass)&lt;br /&gt;
&lt;br /&gt;
	if args.title and (args.state ~= 'plain' and args.state ~= 'off') then&lt;br /&gt;
		if args.state == 'collapsed' then args.state = 'mw-collapsed' end&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass('mw-collapsible')&lt;br /&gt;
			:addClass(args.state or 'autocollapse')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	tbl:css('border-spacing', 0)&lt;br /&gt;
	if border == 'subgroup' or border == 'none' then&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass('navbox-subgroup')&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
			:cssText(args.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('navbox-inner')&lt;br /&gt;
			:css('background', 'transparent')&lt;br /&gt;
			:css('color', 'inherit')&lt;br /&gt;
	end&lt;br /&gt;
	tbl:cssText(args.innerstyle)&lt;br /&gt;
&lt;br /&gt;
	renderTitleRow(tbl)&lt;br /&gt;
	renderAboveRow(tbl)&lt;br /&gt;
	for i, listnum in ipairs(listnums) do&lt;br /&gt;
		renderListRow(tbl, i, listnum)&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;
function p._navbox(navboxArgs)&lt;br /&gt;
	args = navboxArgs&lt;br /&gt;
	listnums = {}&lt;br /&gt;
&lt;br /&gt;
	for k, _ in pairs(args) do&lt;br /&gt;
		if type(k) == 'string' then&lt;br /&gt;
			local listnum = k:match('^list(%d+)$')&lt;br /&gt;
			if listnum then table.insert(listnums, tonumber(listnum)) end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(listnums)&lt;br /&gt;
&lt;br /&gt;
	border = mw.text.trim(args.border or args[1] or '')&lt;br /&gt;
	if border == 'child' then&lt;br /&gt;
		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()&lt;br /&gt;
	&lt;br /&gt;
	-- get templatestyles&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	local base_templatestyles = frame:extensionTag{&lt;br /&gt;
		name = 'templatestyles', args = { src = 'Common.css' }&lt;br /&gt;
	}&lt;br /&gt;
	local templatestyles = ''&lt;br /&gt;
	if args.templatestyles and args.templatestyles ~= '' then&lt;br /&gt;
		templatestyles = frame:extensionTag{&lt;br /&gt;
			name = 'templatestyles', args = { src = args.templatestyles }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local res = mw.html.create()&lt;br /&gt;
	-- 'navbox-styles' exists for two reasons:&lt;br /&gt;
	--  1. To wrap the styles to work around phab: T200206 more elegantly. Instead&lt;br /&gt;
	--	   of combinatorial rules, this ends up being linear number of CSS rules.&lt;br /&gt;
	--  2. To allow MobileFrontend to rip the styles out with 'nomobile' such that&lt;br /&gt;
	--     they are not dumped into the mobile view.&lt;br /&gt;
	res:tag('div')&lt;br /&gt;
		:addClass('navbox-styles')&lt;br /&gt;
		:addClass('nomobile')&lt;br /&gt;
		:wikitext(base_templatestyles .. templatestyles)&lt;br /&gt;
		:done()&lt;br /&gt;
	&lt;br /&gt;
	-- render the appropriate wrapper around the navbox, depending on the border param&lt;br /&gt;
	if border == 'none' then&lt;br /&gt;
		local nav = res:tag('div')&lt;br /&gt;
			:attr('role', 'navigation')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args.title or args.above or (args.group1 and not args.group2) then&lt;br /&gt;
			nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr('aria-label', 'Navbox')&lt;br /&gt;
		end&lt;br /&gt;
	elseif 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's &amp;lt;/div&amp;gt;&lt;br /&gt;
		res&lt;br /&gt;
			:wikitext('&amp;lt;/div&amp;gt;')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
			:wikitext('&amp;lt;div&amp;gt;')&lt;br /&gt;
	else&lt;br /&gt;
		local nav = res:tag('div')&lt;br /&gt;
			:attr('role', 'navigation')&lt;br /&gt;
			:addClass('navbox')&lt;br /&gt;
			:addClass(args.navboxclass)&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
			:cssText(args.style)&lt;br /&gt;
			:css('padding', '3px')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args.title or args.above or (args.group1 and not args.group2) then&lt;br /&gt;
			nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr('aria-label', 'Navbox')&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (args.nocat or 'false'):lower() == 'false' then&lt;br /&gt;
		renderTrackingCategories(res)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return striped(tostring(res))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.navbox(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
	end&lt;br /&gt;
	args = getArgs(frame, {wrappers = {'Template:Navbox', 'Template:Navbox subgroup'}})&lt;br /&gt;
	if frame.args.border then&lt;br /&gt;
		-- This allows Template:Navbox_subgroup to use {{#invoke:Navbox|navbox|border=...}}.&lt;br /&gt;
		args.border = frame.args.border&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Read the arguments in the order they'll be output in, to make references number in the right order.&lt;br /&gt;
	local _&lt;br /&gt;
	_ = args.title&lt;br /&gt;
	_ = args.above&lt;br /&gt;
	for i = 1, 20 do&lt;br /&gt;
		_ = args[&amp;quot;group&amp;quot; .. tostring(i)]&lt;br /&gt;
		_ = args[&amp;quot;list&amp;quot; .. tostring(i)]&lt;br /&gt;
	end&lt;br /&gt;
	_ = args.below&lt;br /&gt;
&lt;br /&gt;
	return p._navbox(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Module:Navbox&amp;diff=223</id>
		<title>Module:Navbox</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Module:Navbox&amp;diff=223"/>
		<updated>2021-10-23T23:20:16Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Changed .css to &amp;quot;MediaWiki:Common.css&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--&lt;br /&gt;
-- This module implements {{Navbox}}&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local navbar = require('Module:Navbar')._navbar&lt;br /&gt;
local getArgs -- lazily initialized&lt;br /&gt;
&lt;br /&gt;
local args&lt;br /&gt;
local border&lt;br /&gt;
local listnums&lt;br /&gt;
local ODD_EVEN_MARKER = '\127_ODDEVEN_\127'&lt;br /&gt;
local RESTART_MARKER = '\127_ODDEVEN0_\127'&lt;br /&gt;
local REGEX_MARKER = '\127_ODDEVEN(%d?)_\127'&lt;br /&gt;
&lt;br /&gt;
local function striped(wikitext)&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 = '[[Category:Navbox orphans]]'&lt;br /&gt;
	if border == 'subgroup' and args.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 = 'odd', 'even'&lt;br /&gt;
	if args.evenodd then&lt;br /&gt;
		if args.evenodd == 'swap' then&lt;br /&gt;
			first, second = second, first&lt;br /&gt;
		else&lt;br /&gt;
			first = args.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 == '0' 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('([%[%]])', '%%%1')&lt;br /&gt;
	return (wikitext:gsub(regex, ''):gsub(REGEX_MARKER, 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) == '{|' 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 '\n' .. item ..'\n'&lt;br /&gt;
	end&lt;br /&gt;
	if nowrapitems == 'yes' then&lt;br /&gt;
		local lines = {}&lt;br /&gt;
		for line in (item .. '\n'):gmatch('([^\n]*)\n') do&lt;br /&gt;
			local prefix, content = line:match('^([*:;#]+)%s*(.*)')&lt;br /&gt;
			if prefix and not content:match('^&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;') then&lt;br /&gt;
				line = prefix .. '&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;' .. content .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(lines, line)&lt;br /&gt;
		end&lt;br /&gt;
		item = table.concat(lines, '\n')&lt;br /&gt;
	end&lt;br /&gt;
	if item:match('^[*:;#]') then&lt;br /&gt;
		return '\n' .. item ..'\n'&lt;br /&gt;
	end&lt;br /&gt;
	return item&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Separate function so that we can evaluate properly whether hlist should&lt;br /&gt;
-- be added by the module&lt;br /&gt;
local function has_navbar()&lt;br /&gt;
	return args.navbar ~= 'off' and args.navbar ~= 'plain' and&lt;br /&gt;
		(args.name or mw.getCurrentFrame():getParent():getTitle():gsub('/sandbox$', '') ~= 'Template:Navbox')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
	if has_navbar() then&lt;br /&gt;
		titleCell:wikitext(navbar{&lt;br /&gt;
			args.name,&lt;br /&gt;
			-- we depend on this being mini = 1 when the navbox module decides&lt;br /&gt;
			-- to add hlist templatestyles. we also depend on navbar outputting&lt;br /&gt;
			-- a copy of the hlist templatestyles.&lt;br /&gt;
			mini = 1,&lt;br /&gt;
			fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') .. ';background:none transparent;border:none;box-shadow:none; padding:0;'&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Title row&lt;br /&gt;
--&lt;br /&gt;
local function renderTitleRow(tbl)&lt;br /&gt;
	if not args.title then return end&lt;br /&gt;
&lt;br /&gt;
	local titleRow = tbl:tag('tr')&lt;br /&gt;
&lt;br /&gt;
	if args.titlegroup then&lt;br /&gt;
		titleRow&lt;br /&gt;
			:tag('th')&lt;br /&gt;
				:attr('scope', 'row')&lt;br /&gt;
				:addClass('navbox-group')&lt;br /&gt;
				:addClass(args.titlegroupclass)&lt;br /&gt;
				:cssText(args.basestyle)&lt;br /&gt;
				:cssText(args.groupstyle)&lt;br /&gt;
				:cssText(args.titlegroupstyle)&lt;br /&gt;
				:wikitext(args.titlegroup)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local titleCell = titleRow:tag('th'):attr('scope', 'col')&lt;br /&gt;
&lt;br /&gt;
	if args.titlegroup then&lt;br /&gt;
		titleCell&lt;br /&gt;
			:addClass('navbox-title1')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local titleColspan = 2&lt;br /&gt;
	if args.imageleft then titleColspan = titleColspan + 1 end&lt;br /&gt;
	if args.image then titleColspan = titleColspan + 1 end&lt;br /&gt;
	if args.titlegroup then titleColspan = titleColspan - 1 end&lt;br /&gt;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:cssText(args.basestyle)&lt;br /&gt;
		:cssText(args.titlestyle)&lt;br /&gt;
		:addClass('navbox-title')&lt;br /&gt;
		:attr('colspan', titleColspan)&lt;br /&gt;
&lt;br /&gt;
	renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			-- id for aria-labelledby attribute&lt;br /&gt;
			:attr('id', mw.uri.anchorEncode(args.title))&lt;br /&gt;
			:addClass(args.titleclass)&lt;br /&gt;
			:css('font-size', '114%')&lt;br /&gt;
			:css('margin', '0 4em')&lt;br /&gt;
			:wikitext(processItem(args.title))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Above/Below rows&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local function getAboveBelowColspan()&lt;br /&gt;
	local ret = 2&lt;br /&gt;
	if args.imageleft then ret = ret + 1 end&lt;br /&gt;
	if args.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.above then return end&lt;br /&gt;
&lt;br /&gt;
	tbl:tag('tr')&lt;br /&gt;
		:tag('td')&lt;br /&gt;
			:addClass('navbox-abovebelow')&lt;br /&gt;
			:addClass(args.aboveclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.abovestyle)&lt;br /&gt;
			:attr('colspan', getAboveBelowColspan())&lt;br /&gt;
			:tag('div')&lt;br /&gt;
				-- id for aria-labelledby attribute, if no title&lt;br /&gt;
				:attr('id', args.title and nil or mw.uri.anchorEncode(args.above))&lt;br /&gt;
				:wikitext(processItem(args.above, args.nowrapitems))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderBelowRow(tbl)&lt;br /&gt;
	if not args.below then return end&lt;br /&gt;
&lt;br /&gt;
	tbl:tag('tr')&lt;br /&gt;
		:tag('td')&lt;br /&gt;
			:addClass('navbox-abovebelow')&lt;br /&gt;
			:addClass(args.belowclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.belowstyle)&lt;br /&gt;
			:attr('colspan', getAboveBelowColspan())&lt;br /&gt;
			:tag('div')&lt;br /&gt;
				:wikitext(processItem(args.below, args.nowrapitems))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   List rows&lt;br /&gt;
--&lt;br /&gt;
local function renderListRow(tbl, index, listnum)&lt;br /&gt;
	local row = tbl:tag('tr')&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args.imageleft then&lt;br /&gt;
		row&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:addClass('navbox-image')&lt;br /&gt;
				:addClass(args.imageclass)&lt;br /&gt;
				:css('width', '1px')               -- Minimize width&lt;br /&gt;
				:css('padding', '0px 2px 0px 0px')&lt;br /&gt;
				:cssText(args.imageleftstyle)&lt;br /&gt;
				:attr('rowspan', #listnums)&lt;br /&gt;
				:tag('div')&lt;br /&gt;
					:wikitext(processItem(args.imageleft))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args['group' .. listnum] then&lt;br /&gt;
		local groupCell = row:tag('th')&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.title or args.above or args.group2) then&lt;br /&gt;
			groupCell&lt;br /&gt;
				:attr('id', mw.uri.anchorEncode(args.group1))&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:attr('scope', 'row')&lt;br /&gt;
			:addClass('navbox-group')&lt;br /&gt;
			:addClass(args.groupclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:css('width', args.groupwidth or '1%') -- If groupwidth not specified, minimize width&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:cssText(args.groupstyle)&lt;br /&gt;
			:cssText(args['group' .. listnum .. 'style'])&lt;br /&gt;
			:wikitext(args['group' .. listnum])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listCell = row:tag('td')&lt;br /&gt;
&lt;br /&gt;
	if args['group' .. listnum] then&lt;br /&gt;
		listCell&lt;br /&gt;
			:addClass('navbox-list1')&lt;br /&gt;
	else&lt;br /&gt;
		listCell:attr('colspan', 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not args.groupwidth then&lt;br /&gt;
		listCell:css('width', '100%')&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.oddstyle&lt;br /&gt;
	else&lt;br /&gt;
		rowstyle = args.evenstyle&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listText = args['list' .. listnum]&lt;br /&gt;
	local oddEven = ODD_EVEN_MARKER&lt;br /&gt;
	if listText:sub(1, 12) == '&amp;lt;/div&amp;gt;&amp;lt;table' 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('&amp;lt;th[^&amp;gt;]*&amp;quot;navbox%-title&amp;quot;') and RESTART_MARKER or 'odd'&lt;br /&gt;
	end&lt;br /&gt;
	listCell&lt;br /&gt;
		:css('padding', '0px')&lt;br /&gt;
		:cssText(args.liststyle)&lt;br /&gt;
		:cssText(rowstyle)&lt;br /&gt;
		:cssText(args['list' .. listnum .. 'style'])&lt;br /&gt;
		:addClass('navbox-list')&lt;br /&gt;
		:addClass('navbox-' .. oddEven)&lt;br /&gt;
		:addClass(args.listclass)&lt;br /&gt;
		:addClass(args['list' .. listnum .. 'class'])&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			:css('padding', (index == 1 and args.list1padding) or args.listpadding or '0em 0.25em')&lt;br /&gt;
			:wikitext(processItem(listText, args.nowrapitems))&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args.image then&lt;br /&gt;
		row&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:addClass('navbox-image')&lt;br /&gt;
				:addClass(args.imageclass)&lt;br /&gt;
				:css('width', '1px')               -- Minimize width&lt;br /&gt;
				:css('padding', '0px 0px 0px 2px')&lt;br /&gt;
				:cssText(args.imagestyle)&lt;br /&gt;
				:attr('rowspan', #listnums)&lt;br /&gt;
				:tag('div')&lt;br /&gt;
					:wikitext(processItem(args.image))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Tracking categories&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local function needsHorizontalLists()&lt;br /&gt;
	if border == 'subgroup' or args.tracking == 'no' then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local listClasses = {&lt;br /&gt;
		['plainlist'] = true, ['hlist'] = true, ['hlist hnum'] = true,&lt;br /&gt;
		['hlist hwrap'] = true, ['hlist vcard'] = true, ['vcard hlist'] = true,&lt;br /&gt;
		['hlist vevent'] = true,&lt;br /&gt;
	}&lt;br /&gt;
	return not (listClasses[args.listclass] or listClasses[args.bodyclass])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- there are a lot of list classes in the wild, so we have a function to find&lt;br /&gt;
-- them and add their TemplateStyles&lt;br /&gt;
local function addListStyles()&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	-- TODO?: Should maybe take a table of classes for e.g. hnum, hwrap as above&lt;br /&gt;
	-- I'm going to do the stupid thing first though&lt;br /&gt;
	-- Also not sure hnum and hwrap are going to live in the same TemplateStyles&lt;br /&gt;
	-- as hlist&lt;br /&gt;
	local function _addListStyles(htmlclass, templatestyles)&lt;br /&gt;
		local class_args = { -- rough order of probability of use&lt;br /&gt;
			'bodyclass', 'listclass', 'aboveclass', 'belowclass', 'titleclass',&lt;br /&gt;
			'navboxclass', 'groupclass', 'titlegroupclass', 'imageclass'&lt;br /&gt;
		}&lt;br /&gt;
		local patterns = {&lt;br /&gt;
			'^' .. htmlclass .. '$',&lt;br /&gt;
			'%s' .. htmlclass .. '$',&lt;br /&gt;
			'^' .. htmlclass .. '%s',&lt;br /&gt;
			'%s' .. htmlclass .. '%s'&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		local found = false&lt;br /&gt;
		for _, arg in ipairs(class_args) do&lt;br /&gt;
			for _, pattern in ipairs(patterns) do&lt;br /&gt;
				if mw.ustring.find(args[arg] or '', pattern) then&lt;br /&gt;
					found = true&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if found then break end&lt;br /&gt;
		end&lt;br /&gt;
		if found then&lt;br /&gt;
			return frame:extensionTag{&lt;br /&gt;
				name = 'templatestyles', args = { src = templatestyles }&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
			return ''&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local hlist_styles = ''&lt;br /&gt;
	-- navbar always has mini = 1, so here (on this wiki) we can assume that&lt;br /&gt;
	-- we don't need to output hlist styles in navbox again.&lt;br /&gt;
	if not has_navbar() then&lt;br /&gt;
		hlist_styles = _addListStyles('hlist', 'Flatlist/styles.css')&lt;br /&gt;
	end&lt;br /&gt;
	local plainlist_styles = _addListStyles('plainlist', 'Plainlist/styles.css')&lt;br /&gt;
	&lt;br /&gt;
	return hlist_styles .. plainlist_styles&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasBackgroundColors()&lt;br /&gt;
	for _, key in ipairs({'titlestyle', 'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do&lt;br /&gt;
		if tostring(args[key]):find('background', 1, true) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasBorders()&lt;br /&gt;
	for _, key in ipairs({'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do&lt;br /&gt;
		if tostring(args[key]):find('border', 1, true) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isIllegible()&lt;br /&gt;
	-- require('Module:Color contrast') absent on mediawiki.org&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getTrackingCategories()&lt;br /&gt;
	local cats = {}&lt;br /&gt;
	if needsHorizontalLists() then table.insert(cats, 'Navigational boxes without horizontal lists') end&lt;br /&gt;
	if hasBackgroundColors() then table.insert(cats, 'Navboxes using background colours') end&lt;br /&gt;
	if isIllegible() then table.insert(cats, 'Potentially illegible navboxes') end&lt;br /&gt;
	if hasBorders() then table.insert(cats, 'Navboxes using borders') end&lt;br /&gt;
	return cats&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTrackingCategories(builder)&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 == 'doc' or subpage == 'sandbox' or subpage == 'testcases' then return end&lt;br /&gt;
&lt;br /&gt;
	for _, cat in ipairs(getTrackingCategories()) do&lt;br /&gt;
		builder:wikitext('[[Category:' .. cat .. ']]')&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Main navbox tables&lt;br /&gt;
--&lt;br /&gt;
local function renderMainTable()&lt;br /&gt;
	local tbl = mw.html.create('table')&lt;br /&gt;
		:addClass('nowraplinks')&lt;br /&gt;
		:addClass(args.bodyclass)&lt;br /&gt;
&lt;br /&gt;
	if args.title and (args.state ~= 'plain' and args.state ~= 'off') then&lt;br /&gt;
		if args.state == 'collapsed' then args.state = 'mw-collapsed' end&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass('mw-collapsible')&lt;br /&gt;
			:addClass(args.state or 'autocollapse')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	tbl:css('border-spacing', 0)&lt;br /&gt;
	if border == 'subgroup' or border == 'none' then&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass('navbox-subgroup')&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
			:cssText(args.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('navbox-inner')&lt;br /&gt;
			:css('background', 'transparent')&lt;br /&gt;
			:css('color', 'inherit')&lt;br /&gt;
	end&lt;br /&gt;
	tbl:cssText(args.innerstyle)&lt;br /&gt;
&lt;br /&gt;
	renderTitleRow(tbl)&lt;br /&gt;
	renderAboveRow(tbl)&lt;br /&gt;
	for i, listnum in ipairs(listnums) do&lt;br /&gt;
		renderListRow(tbl, i, listnum)&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;
function p._navbox(navboxArgs)&lt;br /&gt;
	args = navboxArgs&lt;br /&gt;
	listnums = {}&lt;br /&gt;
&lt;br /&gt;
	for k, _ in pairs(args) do&lt;br /&gt;
		if type(k) == 'string' then&lt;br /&gt;
			local listnum = k:match('^list(%d+)$')&lt;br /&gt;
			if listnum then table.insert(listnums, tonumber(listnum)) end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(listnums)&lt;br /&gt;
&lt;br /&gt;
	border = mw.text.trim(args.border or args[1] or '')&lt;br /&gt;
	if border == 'child' then&lt;br /&gt;
		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()&lt;br /&gt;
	&lt;br /&gt;
	-- get templatestyles&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	local base_templatestyles = frame:extensionTag{&lt;br /&gt;
		name = 'templatestyles', args = { src = 'MediaWiki:Common.css' }&lt;br /&gt;
	}&lt;br /&gt;
	local templatestyles = ''&lt;br /&gt;
	if args.templatestyles and args.templatestyles ~= '' then&lt;br /&gt;
		templatestyles = frame:extensionTag{&lt;br /&gt;
			name = 'templatestyles', args = { src = args.templatestyles }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local res = mw.html.create()&lt;br /&gt;
	-- 'navbox-styles' exists for two reasons:&lt;br /&gt;
	--  1. To wrap the styles to work around phab: T200206 more elegantly. Instead&lt;br /&gt;
	--	   of combinatorial rules, this ends up being linear number of CSS rules.&lt;br /&gt;
	--  2. To allow MobileFrontend to rip the styles out with 'nomobile' such that&lt;br /&gt;
	--     they are not dumped into the mobile view.&lt;br /&gt;
	res:tag('div')&lt;br /&gt;
		:addClass('navbox-styles')&lt;br /&gt;
		:addClass('nomobile')&lt;br /&gt;
		:wikitext(base_templatestyles .. templatestyles)&lt;br /&gt;
		:done()&lt;br /&gt;
	&lt;br /&gt;
	-- render the appropriate wrapper around the navbox, depending on the border param&lt;br /&gt;
	if border == 'none' then&lt;br /&gt;
		local nav = res:tag('div')&lt;br /&gt;
			:attr('role', 'navigation')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args.title or args.above or (args.group1 and not args.group2) then&lt;br /&gt;
			nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr('aria-label', 'Navbox')&lt;br /&gt;
		end&lt;br /&gt;
	elseif 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's &amp;lt;/div&amp;gt;&lt;br /&gt;
		res&lt;br /&gt;
			:wikitext('&amp;lt;/div&amp;gt;')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
			:wikitext('&amp;lt;div&amp;gt;')&lt;br /&gt;
	else&lt;br /&gt;
		local nav = res:tag('div')&lt;br /&gt;
			:attr('role', 'navigation')&lt;br /&gt;
			:addClass('navbox')&lt;br /&gt;
			:addClass(args.navboxclass)&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
			:cssText(args.style)&lt;br /&gt;
			:css('padding', '3px')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args.title or args.above or (args.group1 and not args.group2) then&lt;br /&gt;
			nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr('aria-label', 'Navbox')&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (args.nocat or 'false'):lower() == 'false' then&lt;br /&gt;
		renderTrackingCategories(res)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return striped(tostring(res))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.navbox(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
	end&lt;br /&gt;
	args = getArgs(frame, {wrappers = {'Template:Navbox', 'Template:Navbox subgroup'}})&lt;br /&gt;
	if frame.args.border then&lt;br /&gt;
		-- This allows Template:Navbox_subgroup to use {{#invoke:Navbox|navbox|border=...}}.&lt;br /&gt;
		args.border = frame.args.border&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Read the arguments in the order they'll be output in, to make references number in the right order.&lt;br /&gt;
	local _&lt;br /&gt;
	_ = args.title&lt;br /&gt;
	_ = args.above&lt;br /&gt;
	for i = 1, 20 do&lt;br /&gt;
		_ = args[&amp;quot;group&amp;quot; .. tostring(i)]&lt;br /&gt;
		_ = args[&amp;quot;list&amp;quot; .. tostring(i)]&lt;br /&gt;
	end&lt;br /&gt;
	_ = args.below&lt;br /&gt;
&lt;br /&gt;
	return p._navbox(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Module:Arguments&amp;diff=217</id>
		<title>Module:Arguments</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Module:Arguments&amp;diff=217"/>
		<updated>2021-10-23T22:50:27Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Created page with &amp;quot;-- This module provides easy processing of arguments passed to Scribunto from -- #invoke. It is intended for use by other Lua modules, and should not be -- called from #invoke...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module provides easy processing of arguments passed to Scribunto from&lt;br /&gt;
-- #invoke. It is intended for use by other Lua modules, and should not be&lt;br /&gt;
-- called from #invoke directly.&lt;br /&gt;
&lt;br /&gt;
local libraryUtil = require('libraryUtil')&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
&lt;br /&gt;
local arguments = {}&lt;br /&gt;
&lt;br /&gt;
-- Generate four different tidyVal functions, so that we don't have to check the&lt;br /&gt;
-- options every time we call it.&lt;br /&gt;
&lt;br /&gt;
local function tidyValDefault(key, val)&lt;br /&gt;
	if type(val) == 'string' then&lt;br /&gt;
		val = val:match('^%s*(.-)%s*$')&lt;br /&gt;
		if val == '' then&lt;br /&gt;
			return nil&lt;br /&gt;
		else&lt;br /&gt;
			return val&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValTrimOnly(key, val)&lt;br /&gt;
	if type(val) == 'string' then&lt;br /&gt;
		return val:match('^%s*(.-)%s*$')&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValRemoveBlanksOnly(key, val)&lt;br /&gt;
	if type(val) == 'string' then&lt;br /&gt;
		if val:find('%S') then&lt;br /&gt;
			return val&lt;br /&gt;
		else&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValNoChange(key, val)&lt;br /&gt;
	return val&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function matchesTitle(given, title)&lt;br /&gt;
	local tp = type( given )&lt;br /&gt;
	return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local translate_mt = { __index = function(t, k) return k end }&lt;br /&gt;
&lt;br /&gt;
function arguments.getArgs(frame, options)&lt;br /&gt;
	checkType('getArgs', 1, frame, 'table', true)&lt;br /&gt;
	checkType('getArgs', 2, options, 'table', true)&lt;br /&gt;
	frame = frame or {}&lt;br /&gt;
	options = options or {}&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Set up argument translation.&lt;br /&gt;
	--]]&lt;br /&gt;
	options.translate = options.translate or {}&lt;br /&gt;
	if getmetatable(options.translate) == nil then&lt;br /&gt;
		setmetatable(options.translate, translate_mt)&lt;br /&gt;
	end&lt;br /&gt;
	if options.backtranslate == nil then&lt;br /&gt;
		options.backtranslate = {}&lt;br /&gt;
		for k,v in pairs(options.translate) do&lt;br /&gt;
			options.backtranslate[v] = k&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if options.backtranslate and getmetatable(options.backtranslate) == nil then&lt;br /&gt;
		setmetatable(options.backtranslate, {&lt;br /&gt;
			__index = function(t, k)&lt;br /&gt;
				if options.translate[k] ~= k then&lt;br /&gt;
					return nil&lt;br /&gt;
				else&lt;br /&gt;
					return k&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Get the argument tables. If we were passed a valid frame object, get the&lt;br /&gt;
	-- frame arguments (fargs) and the parent frame arguments (pargs), depending&lt;br /&gt;
	-- on the options set and on the parent frame's availability. If we weren't&lt;br /&gt;
	-- passed a valid frame object, we are being called from another Lua module&lt;br /&gt;
	-- or from the debug console, so assume that we were passed a table of args&lt;br /&gt;
	-- directly, and assign it to a new variable (luaArgs).&lt;br /&gt;
	--]]&lt;br /&gt;
	local fargs, pargs, luaArgs&lt;br /&gt;
	if type(frame.args) == 'table' and type(frame.getParent) == 'function' then&lt;br /&gt;
		if options.wrappers then&lt;br /&gt;
			--[[&lt;br /&gt;
			-- The wrappers option makes Module:Arguments look up arguments in&lt;br /&gt;
			-- either the frame argument table or the parent argument table, but&lt;br /&gt;
			-- not both. This means that users can use either the #invoke syntax&lt;br /&gt;
			-- or a wrapper template without the loss of performance associated&lt;br /&gt;
			-- with looking arguments up in both the frame and the parent frame.&lt;br /&gt;
			-- Module:Arguments will look up arguments in the parent frame&lt;br /&gt;
			-- if it finds the parent frame's title in options.wrapper;&lt;br /&gt;
			-- otherwise it will look up arguments in the frame object passed&lt;br /&gt;
			-- to getArgs.&lt;br /&gt;
			--]]&lt;br /&gt;
			local parent = frame:getParent()&lt;br /&gt;
			if not parent then&lt;br /&gt;
				fargs = frame.args&lt;br /&gt;
			else&lt;br /&gt;
				local title = parent:getTitle():gsub('/sandbox$', '')&lt;br /&gt;
				local found = false&lt;br /&gt;
				if matchesTitle(options.wrappers, title) then&lt;br /&gt;
					found = true&lt;br /&gt;
				elseif type(options.wrappers) == 'table' then&lt;br /&gt;
					for _,v in pairs(options.wrappers) do&lt;br /&gt;
						if matchesTitle(v, title) then&lt;br /&gt;
							found = true&lt;br /&gt;
							break&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				-- We test for false specifically here so that nil (the default) acts like true.&lt;br /&gt;
				if found or options.frameOnly == false then&lt;br /&gt;
					pargs = parent.args&lt;br /&gt;
				end&lt;br /&gt;
				if not found or options.parentOnly == false then&lt;br /&gt;
					fargs = frame.args&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- options.wrapper isn't set, so check the other options.&lt;br /&gt;
			if not options.parentOnly then&lt;br /&gt;
				fargs = frame.args&lt;br /&gt;
			end&lt;br /&gt;
			if not options.frameOnly then&lt;br /&gt;
				local parent = frame:getParent()&lt;br /&gt;
				pargs = parent and parent.args or nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if options.parentFirst then&lt;br /&gt;
			fargs, pargs = pargs, fargs&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		luaArgs = frame&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set the order of precedence of the argument tables. If the variables are&lt;br /&gt;
	-- nil, nothing will be added to the table, which is how we avoid clashes&lt;br /&gt;
	-- between the frame/parent args and the Lua args.&lt;br /&gt;
	local argTables = {fargs}&lt;br /&gt;
	argTables[#argTables + 1] = pargs&lt;br /&gt;
	argTables[#argTables + 1] = luaArgs&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Generate the tidyVal function. If it has been specified by the user, we&lt;br /&gt;
	-- use that; if not, we choose one of four functions depending on the&lt;br /&gt;
	-- options chosen. This is so that we don't have to call the options table&lt;br /&gt;
	-- every time the function is called.&lt;br /&gt;
	--]]&lt;br /&gt;
	local tidyVal = options.valueFunc&lt;br /&gt;
	if tidyVal then&lt;br /&gt;
		if type(tidyVal) ~= 'function' then&lt;br /&gt;
			error(&lt;br /&gt;
				&amp;quot;bad value assigned to option 'valueFunc'&amp;quot;&lt;br /&gt;
					.. '(function expected, got '&lt;br /&gt;
					.. type(tidyVal)&lt;br /&gt;
					.. ')',&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
	elseif options.trim ~= false then&lt;br /&gt;
		if options.removeBlanks ~= false then&lt;br /&gt;
			tidyVal = tidyValDefault&lt;br /&gt;
		else&lt;br /&gt;
			tidyVal = tidyValTrimOnly&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if options.removeBlanks ~= false then&lt;br /&gt;
			tidyVal = tidyValRemoveBlanksOnly&lt;br /&gt;
		else&lt;br /&gt;
			tidyVal = tidyValNoChange&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Set up the args, metaArgs and nilArgs tables. args will be the one&lt;br /&gt;
	-- accessed from functions, and metaArgs will hold the actual arguments. Nil&lt;br /&gt;
	-- arguments are memoized in nilArgs, and the metatable connects all of them&lt;br /&gt;
	-- together.&lt;br /&gt;
	--]]&lt;br /&gt;
	local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}&lt;br /&gt;
	setmetatable(args, metatable)&lt;br /&gt;
&lt;br /&gt;
	local function mergeArgs(tables)&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Accepts multiple tables as input and merges their keys and values&lt;br /&gt;
		-- into one table. If a value is already present it is not overwritten;&lt;br /&gt;
		-- tables listed earlier have precedence. We are also memoizing nil&lt;br /&gt;
		-- values, which can be overwritten if they are 's' (soft).&lt;br /&gt;
		--]]&lt;br /&gt;
		for _, t in ipairs(tables) do&lt;br /&gt;
			for key, val in pairs(t) do&lt;br /&gt;
				if metaArgs[key] == nil and nilArgs[key] ~= 'h' then&lt;br /&gt;
					local tidiedVal = tidyVal(key, val)&lt;br /&gt;
					if tidiedVal == nil then&lt;br /&gt;
						nilArgs[key] = 's'&lt;br /&gt;
					else&lt;br /&gt;
						metaArgs[key] = tidiedVal&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Define metatable behaviour. Arguments are memoized in the metaArgs table,&lt;br /&gt;
	-- and are only fetched from the argument tables once. Fetching arguments&lt;br /&gt;
	-- from the argument tables is the most resource-intensive step in this&lt;br /&gt;
	-- module, so we try and avoid it where possible. For this reason, nil&lt;br /&gt;
	-- arguments are also memoized, in the nilArgs table. Also, we keep a record&lt;br /&gt;
	-- in the metatable of when pairs and ipairs have been called, so we do not&lt;br /&gt;
	-- run pairs and ipairs on the argument tables more than once. We also do&lt;br /&gt;
	-- not run ipairs on fargs and pargs if pairs has already been run, as all&lt;br /&gt;
	-- the arguments will already have been copied over.&lt;br /&gt;
	--]]&lt;br /&gt;
&lt;br /&gt;
	metatable.__index = function (t, key)&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Fetches an argument when the args table is indexed. First we check&lt;br /&gt;
		-- to see if the value is memoized, and if not we try and fetch it from&lt;br /&gt;
		-- the argument tables. When we check memoization, we need to check&lt;br /&gt;
		-- metaArgs before nilArgs, as both can be non-nil at the same time.&lt;br /&gt;
		-- If the argument is not present in metaArgs, we also check whether&lt;br /&gt;
		-- pairs has been run yet. If pairs has already been run, we return nil.&lt;br /&gt;
		-- This is because all the arguments will have already been copied into&lt;br /&gt;
		-- metaArgs by the mergeArgs function, meaning that any other arguments&lt;br /&gt;
		-- must be nil.&lt;br /&gt;
		--]]&lt;br /&gt;
		if type(key) == 'string' then&lt;br /&gt;
			key = options.translate[key]&lt;br /&gt;
		end&lt;br /&gt;
		local val = metaArgs[key]&lt;br /&gt;
		if val ~= nil then&lt;br /&gt;
			return val&lt;br /&gt;
		elseif metatable.donePairs or nilArgs[key] then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		for _, argTable in ipairs(argTables) do&lt;br /&gt;
			local argTableVal = tidyVal(key, argTable[key])&lt;br /&gt;
			if argTableVal ~= nil then&lt;br /&gt;
				metaArgs[key] = argTableVal&lt;br /&gt;
				return argTableVal&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		nilArgs[key] = 'h'&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__newindex = function (t, key, val)&lt;br /&gt;
		-- This function is called when a module tries to add a new value to the&lt;br /&gt;
		-- args table, or tries to change an existing value.&lt;br /&gt;
		if type(key) == 'string' then&lt;br /&gt;
			key = options.translate[key]&lt;br /&gt;
		end&lt;br /&gt;
		if options.readOnly then&lt;br /&gt;
			error(&lt;br /&gt;
				'could not write to argument table key &amp;quot;'&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. '&amp;quot;; the table is read-only',&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		elseif options.noOverwrite and args[key] ~= nil then&lt;br /&gt;
			error(&lt;br /&gt;
				'could not write to argument table key &amp;quot;'&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. '&amp;quot;; overwriting existing arguments is not permitted',&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		elseif val == nil then&lt;br /&gt;
			--[[&lt;br /&gt;
			-- If the argument is to be overwritten with nil, we need to erase&lt;br /&gt;
			-- the value in metaArgs, so that __index, __pairs and __ipairs do&lt;br /&gt;
			-- not use a previous existing value, if present; and we also need&lt;br /&gt;
			-- to memoize the nil in nilArgs, so that the value isn't looked&lt;br /&gt;
			-- up in the argument tables if it is accessed again.&lt;br /&gt;
			--]]&lt;br /&gt;
			metaArgs[key] = nil&lt;br /&gt;
			nilArgs[key] = 'h'&lt;br /&gt;
		else&lt;br /&gt;
			metaArgs[key] = val&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function translatenext(invariant)&lt;br /&gt;
		local k, v = next(invariant.t, invariant.k)&lt;br /&gt;
		invariant.k = k&lt;br /&gt;
		if k == nil then&lt;br /&gt;
			return nil&lt;br /&gt;
		elseif type(k) ~= 'string' or not options.backtranslate then&lt;br /&gt;
			return k, v&lt;br /&gt;
		else&lt;br /&gt;
			local backtranslate = options.backtranslate[k]&lt;br /&gt;
			if backtranslate == nil then&lt;br /&gt;
				-- Skip this one. This is a tail call, so this won't cause stack overflow&lt;br /&gt;
				return translatenext(invariant)&lt;br /&gt;
			else&lt;br /&gt;
				return backtranslate, v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__pairs = function ()&lt;br /&gt;
		-- Called when pairs is run on the args table.&lt;br /&gt;
		if not metatable.donePairs then&lt;br /&gt;
			mergeArgs(argTables)&lt;br /&gt;
			metatable.donePairs = true&lt;br /&gt;
		end&lt;br /&gt;
		return translatenext, { t = metaArgs }&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function inext(t, i)&lt;br /&gt;
		-- This uses our __index metamethod&lt;br /&gt;
		local v = t[i + 1]&lt;br /&gt;
		if v ~= nil then&lt;br /&gt;
			return i + 1, v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__ipairs = function (t)&lt;br /&gt;
		-- Called when ipairs is run on the args table.&lt;br /&gt;
		return inext, t, 0&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return arguments&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Module:Navbar&amp;diff=214</id>
		<title>Module:Navbar</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Module:Navbar&amp;diff=214"/>
		<updated>2021-10-23T22:43:21Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Created page with &amp;quot;local p = {}  local getArgs local ul  function p.addItem (mini, full, link, descrip, args, url) 	local l 	if url then 		l = {'[', '', ']'} 	else 		l = {'', ''} 	end...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local getArgs&lt;br /&gt;
local ul&lt;br /&gt;
&lt;br /&gt;
function p.addItem (mini, full, link, descrip, args, url)&lt;br /&gt;
	local l&lt;br /&gt;
	if url then&lt;br /&gt;
		l = {'[', '', ']'}&lt;br /&gt;
	else&lt;br /&gt;
		l = {'[[', '|', ']]'}&lt;br /&gt;
	end&lt;br /&gt;
	ul:tag('li')&lt;br /&gt;
		:addClass('nv-'..full)&lt;br /&gt;
		:wikitext(l[1] .. link .. l[2])&lt;br /&gt;
		:tag(args.mini and 'abbr' or 'span')&lt;br /&gt;
			:attr('title', descrip..' this template')&lt;br /&gt;
			:cssText(args.fontstyle)&lt;br /&gt;
			:wikitext(args.mini and mini or full)&lt;br /&gt;
			:done()&lt;br /&gt;
		:wikitext(l[3])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.brackets (position, c, args, div)&lt;br /&gt;
	if args.brackets then&lt;br /&gt;
		div&lt;br /&gt;
			:tag('span')&lt;br /&gt;
				:css('margin-'..position, '-0.125em')&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(c)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._navbar(args)&lt;br /&gt;
	local show = {true, true, true, false, false, false}&lt;br /&gt;
	local titleArg = 1&lt;br /&gt;
	&lt;br /&gt;
	if args.collapsible then&lt;br /&gt;
		titleArg = 2&lt;br /&gt;
		if not args.plain then args.mini = 1 end&lt;br /&gt;
		if args.fontcolor then&lt;br /&gt;
			args.fontstyle = 'color:' .. args.fontcolor .. ';'&lt;br /&gt;
		end&lt;br /&gt;
		args.style = 'float:left; text-align:left'&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.template then&lt;br /&gt;
		titleArg = 'template'&lt;br /&gt;
		show = {true, false, false, false, false, false}&lt;br /&gt;
		local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6, talk = 2, edit = 3, hist = 4, move = 5, watch = 6}&lt;br /&gt;
		for k,v in ipairs(require ('Module:TableTools').compressSparseArray(args)) do&lt;br /&gt;
			local num = index[v]&lt;br /&gt;
			if num then show[num] = true end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.noedit then show[3] = false end&lt;br /&gt;
	&lt;br /&gt;
	local titleText = args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle())&lt;br /&gt;
	local title = mw.title.new(mw.text.trim(titleText), 'Template')&lt;br /&gt;
	if not title then&lt;br /&gt;
		error('Invalid title ' .. titleText)&lt;br /&gt;
	end&lt;br /&gt;
	local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or ''&lt;br /&gt;
	&lt;br /&gt;
	local div = mw.html.create():tag('div')&lt;br /&gt;
	div&lt;br /&gt;
		:addClass('plainlinks')&lt;br /&gt;
		:addClass('hlist')&lt;br /&gt;
		:addClass('navbar')&lt;br /&gt;
		:cssText(args.style)&lt;br /&gt;
&lt;br /&gt;
	if args.mini then div:addClass('mini') end&lt;br /&gt;
&lt;br /&gt;
	if not (args.mini or args.plain) then&lt;br /&gt;
		div&lt;br /&gt;
			:tag('span')&lt;br /&gt;
				:css('word-spacing', 0)&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(args.text or 'This box:')&lt;br /&gt;
				:wikitext(' ')&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	p.brackets('right', '&amp;amp;#91; ', args, div)&lt;br /&gt;
	&lt;br /&gt;
	ul = div:tag('ul')&lt;br /&gt;
	if show[1] then p.addItem('v', 'view', title.fullText, 'View', args) end&lt;br /&gt;
	if show[2] then p.addItem('t', 'talk', talkpage, 'Discuss', args) end&lt;br /&gt;
	if show[3] then p.addItem('e', 'edit', title:fullUrl('action=edit'), 'Edit', args, true) end&lt;br /&gt;
	if show[4] then p.addItem('h', 'hist', title:fullUrl('action=history'), 'History of', args, true) end&lt;br /&gt;
	if show[5] then&lt;br /&gt;
		local move = mw.title.new ('Special:Movepage')&lt;br /&gt;
		p.addItem('m', 'move', move:fullUrl('target='..title.fullText), 'Move', args, true) end&lt;br /&gt;
	if show[6] then p.addItem('w', 'watch', title:fullUrl('action=watch'), 'Watch', args, true) end&lt;br /&gt;
	&lt;br /&gt;
	p.brackets('left', ' &amp;amp;#93;', args, div)&lt;br /&gt;
	&lt;br /&gt;
	if args.collapsible then&lt;br /&gt;
		div&lt;br /&gt;
			:done()&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			:css('font-size', '114%')&lt;br /&gt;
			:css('margin', args.mini and '0 4em' or '0 7em')&lt;br /&gt;
			:cssText(args.fontstyle)&lt;br /&gt;
			:wikitext(args[1])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- DELIBERATE DELTA FROM EN.WP THAT INTEGRATES HLIST TSTYLES&lt;br /&gt;
	-- CARE WHEN SYNCING&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	return frame:extensionTag{&lt;br /&gt;
		name = 'templatestyles', args = { src = 'Flatlist/styles.css' }&lt;br /&gt;
	} .. frame:extensionTag{&lt;br /&gt;
		name = 'templatestyles', args = { src = 'Module:Navbar/styles.css' }&lt;br /&gt;
	} .. tostring(div:done())&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.navbar(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
	end&lt;br /&gt;
	return p._navbar(getArgs(frame))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Template:Navbox&amp;diff=213</id>
		<title>Template:Navbox</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Template:Navbox&amp;diff=213"/>
		<updated>2021-10-23T22:42:14Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;{{#invoke:Navbox|navbox}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt; {{Documentation}} &amp;lt;/noinclude&amp;gt;&amp;quot;&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>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Module:Navbox&amp;diff=212</id>
		<title>Module:Navbox</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Module:Navbox&amp;diff=212"/>
		<updated>2021-10-23T22:40:21Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Created page with &amp;quot;-- -- This module implements {{Navbox}} --  local p = {}  local navbar = require('Module:Navbar')._navbar local getArgs -- lazily initialized  local args local border local li...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--&lt;br /&gt;
-- This module implements {{Navbox}}&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local navbar = require('Module:Navbar')._navbar&lt;br /&gt;
local getArgs -- lazily initialized&lt;br /&gt;
&lt;br /&gt;
local args&lt;br /&gt;
local border&lt;br /&gt;
local listnums&lt;br /&gt;
local ODD_EVEN_MARKER = '\127_ODDEVEN_\127'&lt;br /&gt;
local RESTART_MARKER = '\127_ODDEVEN0_\127'&lt;br /&gt;
local REGEX_MARKER = '\127_ODDEVEN(%d?)_\127'&lt;br /&gt;
&lt;br /&gt;
local function striped(wikitext)&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 = '[[Category:Navbox orphans]]'&lt;br /&gt;
	if border == 'subgroup' and args.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 = 'odd', 'even'&lt;br /&gt;
	if args.evenodd then&lt;br /&gt;
		if args.evenodd == 'swap' then&lt;br /&gt;
			first, second = second, first&lt;br /&gt;
		else&lt;br /&gt;
			first = args.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 == '0' 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('([%[%]])', '%%%1')&lt;br /&gt;
	return (wikitext:gsub(regex, ''):gsub(REGEX_MARKER, 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) == '{|' 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 '\n' .. item ..'\n'&lt;br /&gt;
	end&lt;br /&gt;
	if nowrapitems == 'yes' then&lt;br /&gt;
		local lines = {}&lt;br /&gt;
		for line in (item .. '\n'):gmatch('([^\n]*)\n') do&lt;br /&gt;
			local prefix, content = line:match('^([*:;#]+)%s*(.*)')&lt;br /&gt;
			if prefix and not content:match('^&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;') then&lt;br /&gt;
				line = prefix .. '&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;' .. content .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(lines, line)&lt;br /&gt;
		end&lt;br /&gt;
		item = table.concat(lines, '\n')&lt;br /&gt;
	end&lt;br /&gt;
	if item:match('^[*:;#]') then&lt;br /&gt;
		return '\n' .. item ..'\n'&lt;br /&gt;
	end&lt;br /&gt;
	return item&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Separate function so that we can evaluate properly whether hlist should&lt;br /&gt;
-- be added by the module&lt;br /&gt;
local function has_navbar()&lt;br /&gt;
	return args.navbar ~= 'off' and args.navbar ~= 'plain' and&lt;br /&gt;
		(args.name or mw.getCurrentFrame():getParent():getTitle():gsub('/sandbox$', '') ~= 'Template:Navbox')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
	if has_navbar() then&lt;br /&gt;
		titleCell:wikitext(navbar{&lt;br /&gt;
			args.name,&lt;br /&gt;
			-- we depend on this being mini = 1 when the navbox module decides&lt;br /&gt;
			-- to add hlist templatestyles. we also depend on navbar outputting&lt;br /&gt;
			-- a copy of the hlist templatestyles.&lt;br /&gt;
			mini = 1,&lt;br /&gt;
			fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') .. ';background:none transparent;border:none;box-shadow:none; padding:0;'&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Title row&lt;br /&gt;
--&lt;br /&gt;
local function renderTitleRow(tbl)&lt;br /&gt;
	if not args.title then return end&lt;br /&gt;
&lt;br /&gt;
	local titleRow = tbl:tag('tr')&lt;br /&gt;
&lt;br /&gt;
	if args.titlegroup then&lt;br /&gt;
		titleRow&lt;br /&gt;
			:tag('th')&lt;br /&gt;
				:attr('scope', 'row')&lt;br /&gt;
				:addClass('navbox-group')&lt;br /&gt;
				:addClass(args.titlegroupclass)&lt;br /&gt;
				:cssText(args.basestyle)&lt;br /&gt;
				:cssText(args.groupstyle)&lt;br /&gt;
				:cssText(args.titlegroupstyle)&lt;br /&gt;
				:wikitext(args.titlegroup)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local titleCell = titleRow:tag('th'):attr('scope', 'col')&lt;br /&gt;
&lt;br /&gt;
	if args.titlegroup then&lt;br /&gt;
		titleCell&lt;br /&gt;
			:addClass('navbox-title1')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local titleColspan = 2&lt;br /&gt;
	if args.imageleft then titleColspan = titleColspan + 1 end&lt;br /&gt;
	if args.image then titleColspan = titleColspan + 1 end&lt;br /&gt;
	if args.titlegroup then titleColspan = titleColspan - 1 end&lt;br /&gt;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:cssText(args.basestyle)&lt;br /&gt;
		:cssText(args.titlestyle)&lt;br /&gt;
		:addClass('navbox-title')&lt;br /&gt;
		:attr('colspan', titleColspan)&lt;br /&gt;
&lt;br /&gt;
	renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			-- id for aria-labelledby attribute&lt;br /&gt;
			:attr('id', mw.uri.anchorEncode(args.title))&lt;br /&gt;
			:addClass(args.titleclass)&lt;br /&gt;
			:css('font-size', '114%')&lt;br /&gt;
			:css('margin', '0 4em')&lt;br /&gt;
			:wikitext(processItem(args.title))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Above/Below rows&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local function getAboveBelowColspan()&lt;br /&gt;
	local ret = 2&lt;br /&gt;
	if args.imageleft then ret = ret + 1 end&lt;br /&gt;
	if args.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.above then return end&lt;br /&gt;
&lt;br /&gt;
	tbl:tag('tr')&lt;br /&gt;
		:tag('td')&lt;br /&gt;
			:addClass('navbox-abovebelow')&lt;br /&gt;
			:addClass(args.aboveclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.abovestyle)&lt;br /&gt;
			:attr('colspan', getAboveBelowColspan())&lt;br /&gt;
			:tag('div')&lt;br /&gt;
				-- id for aria-labelledby attribute, if no title&lt;br /&gt;
				:attr('id', args.title and nil or mw.uri.anchorEncode(args.above))&lt;br /&gt;
				:wikitext(processItem(args.above, args.nowrapitems))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderBelowRow(tbl)&lt;br /&gt;
	if not args.below then return end&lt;br /&gt;
&lt;br /&gt;
	tbl:tag('tr')&lt;br /&gt;
		:tag('td')&lt;br /&gt;
			:addClass('navbox-abovebelow')&lt;br /&gt;
			:addClass(args.belowclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.belowstyle)&lt;br /&gt;
			:attr('colspan', getAboveBelowColspan())&lt;br /&gt;
			:tag('div')&lt;br /&gt;
				:wikitext(processItem(args.below, args.nowrapitems))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   List rows&lt;br /&gt;
--&lt;br /&gt;
local function renderListRow(tbl, index, listnum)&lt;br /&gt;
	local row = tbl:tag('tr')&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args.imageleft then&lt;br /&gt;
		row&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:addClass('navbox-image')&lt;br /&gt;
				:addClass(args.imageclass)&lt;br /&gt;
				:css('width', '1px')               -- Minimize width&lt;br /&gt;
				:css('padding', '0px 2px 0px 0px')&lt;br /&gt;
				:cssText(args.imageleftstyle)&lt;br /&gt;
				:attr('rowspan', #listnums)&lt;br /&gt;
				:tag('div')&lt;br /&gt;
					:wikitext(processItem(args.imageleft))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args['group' .. listnum] then&lt;br /&gt;
		local groupCell = row:tag('th')&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.title or args.above or args.group2) then&lt;br /&gt;
			groupCell&lt;br /&gt;
				:attr('id', mw.uri.anchorEncode(args.group1))&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:attr('scope', 'row')&lt;br /&gt;
			:addClass('navbox-group')&lt;br /&gt;
			:addClass(args.groupclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:css('width', args.groupwidth or '1%') -- If groupwidth not specified, minimize width&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:cssText(args.groupstyle)&lt;br /&gt;
			:cssText(args['group' .. listnum .. 'style'])&lt;br /&gt;
			:wikitext(args['group' .. listnum])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listCell = row:tag('td')&lt;br /&gt;
&lt;br /&gt;
	if args['group' .. listnum] then&lt;br /&gt;
		listCell&lt;br /&gt;
			:addClass('navbox-list1')&lt;br /&gt;
	else&lt;br /&gt;
		listCell:attr('colspan', 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not args.groupwidth then&lt;br /&gt;
		listCell:css('width', '100%')&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.oddstyle&lt;br /&gt;
	else&lt;br /&gt;
		rowstyle = args.evenstyle&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listText = args['list' .. listnum]&lt;br /&gt;
	local oddEven = ODD_EVEN_MARKER&lt;br /&gt;
	if listText:sub(1, 12) == '&amp;lt;/div&amp;gt;&amp;lt;table' 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('&amp;lt;th[^&amp;gt;]*&amp;quot;navbox%-title&amp;quot;') and RESTART_MARKER or 'odd'&lt;br /&gt;
	end&lt;br /&gt;
	listCell&lt;br /&gt;
		:css('padding', '0px')&lt;br /&gt;
		:cssText(args.liststyle)&lt;br /&gt;
		:cssText(rowstyle)&lt;br /&gt;
		:cssText(args['list' .. listnum .. 'style'])&lt;br /&gt;
		:addClass('navbox-list')&lt;br /&gt;
		:addClass('navbox-' .. oddEven)&lt;br /&gt;
		:addClass(args.listclass)&lt;br /&gt;
		:addClass(args['list' .. listnum .. 'class'])&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			:css('padding', (index == 1 and args.list1padding) or args.listpadding or '0em 0.25em')&lt;br /&gt;
			:wikitext(processItem(listText, args.nowrapitems))&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args.image then&lt;br /&gt;
		row&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:addClass('navbox-image')&lt;br /&gt;
				:addClass(args.imageclass)&lt;br /&gt;
				:css('width', '1px')               -- Minimize width&lt;br /&gt;
				:css('padding', '0px 0px 0px 2px')&lt;br /&gt;
				:cssText(args.imagestyle)&lt;br /&gt;
				:attr('rowspan', #listnums)&lt;br /&gt;
				:tag('div')&lt;br /&gt;
					:wikitext(processItem(args.image))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Tracking categories&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local function needsHorizontalLists()&lt;br /&gt;
	if border == 'subgroup' or args.tracking == 'no' then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local listClasses = {&lt;br /&gt;
		['plainlist'] = true, ['hlist'] = true, ['hlist hnum'] = true,&lt;br /&gt;
		['hlist hwrap'] = true, ['hlist vcard'] = true, ['vcard hlist'] = true,&lt;br /&gt;
		['hlist vevent'] = true,&lt;br /&gt;
	}&lt;br /&gt;
	return not (listClasses[args.listclass] or listClasses[args.bodyclass])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- there are a lot of list classes in the wild, so we have a function to find&lt;br /&gt;
-- them and add their TemplateStyles&lt;br /&gt;
local function addListStyles()&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	-- TODO?: Should maybe take a table of classes for e.g. hnum, hwrap as above&lt;br /&gt;
	-- I'm going to do the stupid thing first though&lt;br /&gt;
	-- Also not sure hnum and hwrap are going to live in the same TemplateStyles&lt;br /&gt;
	-- as hlist&lt;br /&gt;
	local function _addListStyles(htmlclass, templatestyles)&lt;br /&gt;
		local class_args = { -- rough order of probability of use&lt;br /&gt;
			'bodyclass', 'listclass', 'aboveclass', 'belowclass', 'titleclass',&lt;br /&gt;
			'navboxclass', 'groupclass', 'titlegroupclass', 'imageclass'&lt;br /&gt;
		}&lt;br /&gt;
		local patterns = {&lt;br /&gt;
			'^' .. htmlclass .. '$',&lt;br /&gt;
			'%s' .. htmlclass .. '$',&lt;br /&gt;
			'^' .. htmlclass .. '%s',&lt;br /&gt;
			'%s' .. htmlclass .. '%s'&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		local found = false&lt;br /&gt;
		for _, arg in ipairs(class_args) do&lt;br /&gt;
			for _, pattern in ipairs(patterns) do&lt;br /&gt;
				if mw.ustring.find(args[arg] or '', pattern) then&lt;br /&gt;
					found = true&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if found then break end&lt;br /&gt;
		end&lt;br /&gt;
		if found then&lt;br /&gt;
			return frame:extensionTag{&lt;br /&gt;
				name = 'templatestyles', args = { src = templatestyles }&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
			return ''&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local hlist_styles = ''&lt;br /&gt;
	-- navbar always has mini = 1, so here (on this wiki) we can assume that&lt;br /&gt;
	-- we don't need to output hlist styles in navbox again.&lt;br /&gt;
	if not has_navbar() then&lt;br /&gt;
		hlist_styles = _addListStyles('hlist', 'Flatlist/styles.css')&lt;br /&gt;
	end&lt;br /&gt;
	local plainlist_styles = _addListStyles('plainlist', 'Plainlist/styles.css')&lt;br /&gt;
	&lt;br /&gt;
	return hlist_styles .. plainlist_styles&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasBackgroundColors()&lt;br /&gt;
	for _, key in ipairs({'titlestyle', 'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do&lt;br /&gt;
		if tostring(args[key]):find('background', 1, true) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasBorders()&lt;br /&gt;
	for _, key in ipairs({'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do&lt;br /&gt;
		if tostring(args[key]):find('border', 1, true) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isIllegible()&lt;br /&gt;
	-- require('Module:Color contrast') absent on mediawiki.org&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getTrackingCategories()&lt;br /&gt;
	local cats = {}&lt;br /&gt;
	if needsHorizontalLists() then table.insert(cats, 'Navigational boxes without horizontal lists') end&lt;br /&gt;
	if hasBackgroundColors() then table.insert(cats, 'Navboxes using background colours') end&lt;br /&gt;
	if isIllegible() then table.insert(cats, 'Potentially illegible navboxes') end&lt;br /&gt;
	if hasBorders() then table.insert(cats, 'Navboxes using borders') end&lt;br /&gt;
	return cats&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTrackingCategories(builder)&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 == 'doc' or subpage == 'sandbox' or subpage == 'testcases' then return end&lt;br /&gt;
&lt;br /&gt;
	for _, cat in ipairs(getTrackingCategories()) do&lt;br /&gt;
		builder:wikitext('[[Category:' .. cat .. ']]')&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Main navbox tables&lt;br /&gt;
--&lt;br /&gt;
local function renderMainTable()&lt;br /&gt;
	local tbl = mw.html.create('table')&lt;br /&gt;
		:addClass('nowraplinks')&lt;br /&gt;
		:addClass(args.bodyclass)&lt;br /&gt;
&lt;br /&gt;
	if args.title and (args.state ~= 'plain' and args.state ~= 'off') then&lt;br /&gt;
		if args.state == 'collapsed' then args.state = 'mw-collapsed' end&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass('mw-collapsible')&lt;br /&gt;
			:addClass(args.state or 'autocollapse')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	tbl:css('border-spacing', 0)&lt;br /&gt;
	if border == 'subgroup' or border == 'none' then&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass('navbox-subgroup')&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
			:cssText(args.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('navbox-inner')&lt;br /&gt;
			:css('background', 'transparent')&lt;br /&gt;
			:css('color', 'inherit')&lt;br /&gt;
	end&lt;br /&gt;
	tbl:cssText(args.innerstyle)&lt;br /&gt;
&lt;br /&gt;
	renderTitleRow(tbl)&lt;br /&gt;
	renderAboveRow(tbl)&lt;br /&gt;
	for i, listnum in ipairs(listnums) do&lt;br /&gt;
		renderListRow(tbl, i, listnum)&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;
function p._navbox(navboxArgs)&lt;br /&gt;
	args = navboxArgs&lt;br /&gt;
	listnums = {}&lt;br /&gt;
&lt;br /&gt;
	for k, _ in pairs(args) do&lt;br /&gt;
		if type(k) == 'string' then&lt;br /&gt;
			local listnum = k:match('^list(%d+)$')&lt;br /&gt;
			if listnum then table.insert(listnums, tonumber(listnum)) end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(listnums)&lt;br /&gt;
&lt;br /&gt;
	border = mw.text.trim(args.border or args[1] or '')&lt;br /&gt;
	if border == 'child' then&lt;br /&gt;
		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()&lt;br /&gt;
	&lt;br /&gt;
	-- get templatestyles&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	local base_templatestyles = frame:extensionTag{&lt;br /&gt;
		name = 'templatestyles', args = { src = 'Module:Navbox/styles.css' }&lt;br /&gt;
	}&lt;br /&gt;
	local templatestyles = ''&lt;br /&gt;
	if args.templatestyles and args.templatestyles ~= '' then&lt;br /&gt;
		templatestyles = frame:extensionTag{&lt;br /&gt;
			name = 'templatestyles', args = { src = args.templatestyles }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local res = mw.html.create()&lt;br /&gt;
	-- 'navbox-styles' exists for two reasons:&lt;br /&gt;
	--  1. To wrap the styles to work around phab: T200206 more elegantly. Instead&lt;br /&gt;
	--	   of combinatorial rules, this ends up being linear number of CSS rules.&lt;br /&gt;
	--  2. To allow MobileFrontend to rip the styles out with 'nomobile' such that&lt;br /&gt;
	--     they are not dumped into the mobile view.&lt;br /&gt;
	res:tag('div')&lt;br /&gt;
		:addClass('navbox-styles')&lt;br /&gt;
		:addClass('nomobile')&lt;br /&gt;
		:wikitext(base_templatestyles .. templatestyles)&lt;br /&gt;
		:done()&lt;br /&gt;
	&lt;br /&gt;
	-- render the appropriate wrapper around the navbox, depending on the border param&lt;br /&gt;
	if border == 'none' then&lt;br /&gt;
		local nav = res:tag('div')&lt;br /&gt;
			:attr('role', 'navigation')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args.title or args.above or (args.group1 and not args.group2) then&lt;br /&gt;
			nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr('aria-label', 'Navbox')&lt;br /&gt;
		end&lt;br /&gt;
	elseif 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's &amp;lt;/div&amp;gt;&lt;br /&gt;
		res&lt;br /&gt;
			:wikitext('&amp;lt;/div&amp;gt;')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
			:wikitext('&amp;lt;div&amp;gt;')&lt;br /&gt;
	else&lt;br /&gt;
		local nav = res:tag('div')&lt;br /&gt;
			:attr('role', 'navigation')&lt;br /&gt;
			:addClass('navbox')&lt;br /&gt;
			:addClass(args.navboxclass)&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
			:cssText(args.style)&lt;br /&gt;
			:css('padding', '3px')&lt;br /&gt;
			:wikitext(addListStyles())&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args.title or args.above or (args.group1 and not args.group2) then&lt;br /&gt;
			nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr('aria-label', 'Navbox')&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (args.nocat or 'false'):lower() == 'false' then&lt;br /&gt;
		renderTrackingCategories(res)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return striped(tostring(res))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.navbox(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
	end&lt;br /&gt;
	args = getArgs(frame, {wrappers = {'Template:Navbox', 'Template:Navbox subgroup'}})&lt;br /&gt;
	if frame.args.border then&lt;br /&gt;
		-- This allows Template:Navbox_subgroup to use {{#invoke:Navbox|navbox|border=...}}.&lt;br /&gt;
		args.border = frame.args.border&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Read the arguments in the order they'll be output in, to make references number in the right order.&lt;br /&gt;
	local _&lt;br /&gt;
	_ = args.title&lt;br /&gt;
	_ = args.above&lt;br /&gt;
	for i = 1, 20 do&lt;br /&gt;
		_ = args[&amp;quot;group&amp;quot; .. tostring(i)]&lt;br /&gt;
		_ = args[&amp;quot;list&amp;quot; .. tostring(i)]&lt;br /&gt;
	end&lt;br /&gt;
	_ = args.below&lt;br /&gt;
&lt;br /&gt;
	return p._navbox(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Template:Plainlist/styles.css&amp;diff=201</id>
		<title>Template:Plainlist/styles.css</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Template:Plainlist/styles.css&amp;diff=201"/>
		<updated>2021-10-23T22:16:11Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Created page with &amp;quot;/**  * Unbulleted lists  */ .plainlist ul { 	line-height: inherit; 	list-style: none none; 	margin: 0; }  .plainlist ul li { 	margin-bottom: 0; }&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * Unbulleted lists&lt;br /&gt;
 */&lt;br /&gt;
.plainlist ul {&lt;br /&gt;
	line-height: inherit;&lt;br /&gt;
	list-style: none none;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.plainlist ul li {&lt;br /&gt;
	margin-bottom: 0;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Template:Flatlist/styles.css&amp;diff=197</id>
		<title>Template:Flatlist/styles.css</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Template:Flatlist/styles.css&amp;diff=197"/>
		<updated>2021-10-23T22:14:38Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Created page with &amp;quot;/**  * Style for horizontal lists (separator following item).  * @source https://www.mediawiki.org/wiki/Snippets/Horizontal_lists  * @revision 9 (2016-08-10)  * @author User...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * Style for horizontal lists (separator following item).&lt;br /&gt;
 * @source https://www.mediawiki.org/wiki/Snippets/Horizontal_lists&lt;br /&gt;
 * @revision 9 (2016-08-10)&lt;br /&gt;
 * @author [[User:Edokter]]&lt;br /&gt;
 */&lt;br /&gt;
.hlist dl,&lt;br /&gt;
.hlist ol,&lt;br /&gt;
.hlist ul {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Display list items inline */&lt;br /&gt;
.hlist dd,&lt;br /&gt;
.hlist dt,&lt;br /&gt;
.hlist li {&lt;br /&gt;
	/* don't trust the note that says margin doesn't work with inline&lt;br /&gt;
	 * removing margin: 0 makes dds have margins again */&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	display: inline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Display nested lists inline */&lt;br /&gt;
/*&lt;br /&gt;
We remove .inline since it's not used here.&lt;br /&gt;
.hlist.inline,&lt;br /&gt;
.hlist.inline dl,&lt;br /&gt;
.hlist.inline ol,&lt;br /&gt;
.hlist.inline ul,&lt;br /&gt;
*/&lt;br /&gt;
.hlist dl dl, .hlist dl ol, .hlist dl ul,&lt;br /&gt;
.hlist ol dl, .hlist ol ol, .hlist ol ul,&lt;br /&gt;
.hlist ul dl, .hlist ul ol, .hlist ul ul {&lt;br /&gt;
	display: inline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide empty list items */&lt;br /&gt;
.hlist .mw-empty-li,&lt;br /&gt;
.hlist .mw-empty-elt {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Generate interpuncts */&lt;br /&gt;
.hlist dt:after {&lt;br /&gt;
	content: &amp;quot;: &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.hlist dd:after,&lt;br /&gt;
.hlist li:after {&lt;br /&gt;
	content: &amp;quot; · &amp;quot;;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.hlist dd:last-child:after,&lt;br /&gt;
.hlist dt:last-child:after,&lt;br /&gt;
.hlist li:last-child:after {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Add parentheses around nested lists */&lt;br /&gt;
.hlist dd dd:first-child:before, .hlist dd dt:first-child:before, .hlist dd li:first-child:before,&lt;br /&gt;
.hlist dt dd:first-child:before, .hlist dt dt:first-child:before, .hlist dt li:first-child:before,&lt;br /&gt;
.hlist li dd:first-child:before, .hlist li dt:first-child:before, .hlist li li:first-child:before {&lt;br /&gt;
	content: &amp;quot; (&amp;quot;;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.hlist dd dd:last-child:after, .hlist dd dt:last-child:after, .hlist dd li:last-child:after,&lt;br /&gt;
.hlist dt dd:last-child:after, .hlist dt dt:last-child:after, .hlist dt li:last-child:after,&lt;br /&gt;
.hlist li dd:last-child:after, .hlist li dt:last-child:after, .hlist li li:last-child:after {&lt;br /&gt;
	content: &amp;quot;)&amp;quot;;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Put ordinals in front of ordered list items */&lt;br /&gt;
.hlist ol {&lt;br /&gt;
	counter-reset: listitem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.hlist ol &amp;gt; li {&lt;br /&gt;
	counter-increment: listitem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.hlist ol &amp;gt; li:before {&lt;br /&gt;
	content: &amp;quot; &amp;quot; counter(listitem) &amp;quot;\a0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.hlist dd ol &amp;gt; li:first-child:before,&lt;br /&gt;
.hlist dt ol &amp;gt; li:first-child:before,&lt;br /&gt;
.hlist li ol &amp;gt; li:first-child:before {&lt;br /&gt;
	content: &amp;quot; (&amp;quot; counter(listitem) &amp;quot;\a0&amp;quot;;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=File:Time_travel.png&amp;diff=179</id>
		<title>File:Time travel.png</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=File:Time_travel.png&amp;diff=179"/>
		<updated>2021-10-23T00:48:47Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=File:Time_rewind.png&amp;diff=178</id>
		<title>File:Time rewind.png</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=File:Time_rewind.png&amp;diff=178"/>
		<updated>2021-10-23T00:48:37Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=File:Speedforce.png&amp;diff=177</id>
		<title>File:Speedforce.png</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=File:Speedforce.png&amp;diff=177"/>
		<updated>2021-10-23T00:48:30Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=File:Soul_steal.png&amp;diff=176</id>
		<title>File:Soul steal.png</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=File:Soul_steal.png&amp;diff=176"/>
		<updated>2021-10-23T00:48:16Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=File:Mind_control.png&amp;diff=175</id>
		<title>File:Mind control.png</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=File:Mind_control.png&amp;diff=175"/>
		<updated>2021-10-23T00:48:08Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=File:Midas_touch.png&amp;diff=174</id>
		<title>File:Midas touch.png</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=File:Midas_touch.png&amp;diff=174"/>
		<updated>2021-10-23T00:47:46Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=File:Hermes%27_scroll.png&amp;diff=173</id>
		<title>File:Hermes' scroll.png</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=File:Hermes%27_scroll.png&amp;diff=173"/>
		<updated>2021-10-23T00:47:36Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=File:Hebe%27s_fountain.png&amp;diff=172</id>
		<title>File:Hebe's fountain.png</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=File:Hebe%27s_fountain.png&amp;diff=172"/>
		<updated>2021-10-23T00:47:27Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=File:Eagle_eye_her_cherry.png&amp;diff=171</id>
		<title>File:Eagle eye her cherry.png</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=File:Eagle_eye_her_cherry.png&amp;diff=171"/>
		<updated>2021-10-23T00:47:16Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=File:Boots_of_Icarus.png&amp;diff=170</id>
		<title>File:Boots of Icarus.png</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=File:Boots_of_Icarus.png&amp;diff=170"/>
		<updated>2021-10-23T00:34:13Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Judy&amp;diff=169</id>
		<title>Judy</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Judy&amp;diff=169"/>
		<updated>2021-10-23T00:25:21Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Created page with &amp;quot;{{Infobox |name = Judy |image = {{PAGENAME}}-face.png |age =  |location =  |slutskills =  |soulsteal =  |body = {{PAGENAME}}-full.png }}  == Overview == Character overview ==...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
|name = Judy&lt;br /&gt;
|image = {{PAGENAME}}-face.png&lt;br /&gt;
|age = &lt;br /&gt;
|location = &lt;br /&gt;
|slutskills = &lt;br /&gt;
|soulsteal = &lt;br /&gt;
|body = {{PAGENAME}}-full.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Character overview&lt;br /&gt;
== Quests ==&lt;br /&gt;
List of quests with how to complete&lt;br /&gt;
== SoulSteal ==&lt;br /&gt;
Capturable and if so - how&lt;br /&gt;
== Castle Kronos ==&lt;br /&gt;
Interactions at Castle Kronos.&lt;br /&gt;
== Outfits ==&lt;br /&gt;
List of Available Outfits / sets.&amp;lt;br&amp;gt;Maybe also how to obtain them.&lt;br /&gt;
&lt;br /&gt;
{{Navbox_Characters&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Grace&amp;diff=168</id>
		<title>Grace</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Grace&amp;diff=168"/>
		<updated>2021-10-23T00:22:26Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Created page with &amp;quot;{{Infobox |name =  |image = {{PAGENAME}}.png |age =  |location =  |slutskills =  |soulsteal =  |body = {{PAGENAME}}-full.png }}  == Overview == Character overview == Quests ==...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
|name = &lt;br /&gt;
|image = {{PAGENAME}}.png&lt;br /&gt;
|age = &lt;br /&gt;
|location = &lt;br /&gt;
|slutskills = &lt;br /&gt;
|soulsteal = &lt;br /&gt;
|body = {{PAGENAME}}-full.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Character overview&lt;br /&gt;
== Quests ==&lt;br /&gt;
List of quests with how to complete&lt;br /&gt;
== SoulSteal ==&lt;br /&gt;
Capturable and if so - how&lt;br /&gt;
== Castle Kronos ==&lt;br /&gt;
Interactions at Castle Kronos.&lt;br /&gt;
== Outfits ==&lt;br /&gt;
List of Available Outfits / sets.&amp;lt;br&amp;gt;Maybe also how to obtain them.&lt;br /&gt;
&lt;br /&gt;
{{Navbox_Characters&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Cypher&amp;diff=167</id>
		<title>Cypher</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Cypher&amp;diff=167"/>
		<updated>2021-10-23T00:22:19Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Created page with &amp;quot;{{Infobox |name =  |image = {{PAGENAME}}.png |age =  |location =  |slutskills =  |soulsteal =  |body = {{PAGENAME}}-full.png }}  == Overview == Character overview == Quests ==...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
|name = &lt;br /&gt;
|image = {{PAGENAME}}.png&lt;br /&gt;
|age = &lt;br /&gt;
|location = &lt;br /&gt;
|slutskills = &lt;br /&gt;
|soulsteal = &lt;br /&gt;
|body = {{PAGENAME}}-full.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Character overview&lt;br /&gt;
== Quests ==&lt;br /&gt;
List of quests with how to complete&lt;br /&gt;
== SoulSteal ==&lt;br /&gt;
Capturable and if so - how&lt;br /&gt;
== Castle Kronos ==&lt;br /&gt;
Interactions at Castle Kronos.&lt;br /&gt;
== Outfits ==&lt;br /&gt;
List of Available Outfits / sets.&amp;lt;br&amp;gt;Maybe also how to obtain them.&lt;br /&gt;
&lt;br /&gt;
{{Navbox_Characters&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Artemis&amp;diff=166</id>
		<title>Artemis</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Artemis&amp;diff=166"/>
		<updated>2021-10-23T00:22:14Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Created page with &amp;quot;{{Infobox |name =  |image = {{PAGENAME}}.png |age =  |location =  |slutskills =  |soulsteal =  |body = {{PAGENAME}}-full.png }}  == Overview == Character overview == Quests ==...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
|name = &lt;br /&gt;
|image = {{PAGENAME}}.png&lt;br /&gt;
|age = &lt;br /&gt;
|location = &lt;br /&gt;
|slutskills = &lt;br /&gt;
|soulsteal = &lt;br /&gt;
|body = {{PAGENAME}}-full.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Character overview&lt;br /&gt;
== Quests ==&lt;br /&gt;
List of quests with how to complete&lt;br /&gt;
== SoulSteal ==&lt;br /&gt;
Capturable and if so - how&lt;br /&gt;
== Castle Kronos ==&lt;br /&gt;
Interactions at Castle Kronos.&lt;br /&gt;
== Outfits ==&lt;br /&gt;
List of Available Outfits / sets.&amp;lt;br&amp;gt;Maybe also how to obtain them.&lt;br /&gt;
&lt;br /&gt;
{{Navbox_Characters&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Aria&amp;diff=165</id>
		<title>Aria</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Aria&amp;diff=165"/>
		<updated>2021-10-23T00:22:07Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Created page with &amp;quot;{{Infobox |name =  |image = {{PAGENAME}}-face.png |age =  |location =  |slutskills =  |soulsteal =  |body = {{PAGENAME}}-full.png }}  == Overview == Character overview == Ques...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
|name = &lt;br /&gt;
|image = {{PAGENAME}}-face.png&lt;br /&gt;
|age = &lt;br /&gt;
|location = &lt;br /&gt;
|slutskills = &lt;br /&gt;
|soulsteal = &lt;br /&gt;
|body = {{PAGENAME}}-full.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Character overview&lt;br /&gt;
== Quests ==&lt;br /&gt;
List of quests with how to complete&lt;br /&gt;
== SoulSteal ==&lt;br /&gt;
Capturable and if so - how&lt;br /&gt;
== Castle Kronos ==&lt;br /&gt;
Interactions at Castle Kronos.&lt;br /&gt;
== Outfits ==&lt;br /&gt;
List of Available Outfits / sets.&amp;lt;br&amp;gt;Maybe also how to obtain them.&lt;br /&gt;
&lt;br /&gt;
{{Navbox_Characters&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Zilda&amp;diff=164</id>
		<title>Zilda</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Zilda&amp;diff=164"/>
		<updated>2021-10-23T00:21:56Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Created page with &amp;quot;{{Infobox |name =  |image = {{PAGENAME}}.png |age =  |location =  |slutskills =  |soulsteal =  |body = {{PAGENAME}}-full.png }}  == Overview == Character overview == Quests ==...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
|name = &lt;br /&gt;
|image = {{PAGENAME}}.png&lt;br /&gt;
|age = &lt;br /&gt;
|location = &lt;br /&gt;
|slutskills = &lt;br /&gt;
|soulsteal = &lt;br /&gt;
|body = {{PAGENAME}}-full.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Character overview&lt;br /&gt;
== Quests ==&lt;br /&gt;
List of quests with how to complete&lt;br /&gt;
== SoulSteal ==&lt;br /&gt;
Capturable and if so - how&lt;br /&gt;
== Castle Kronos ==&lt;br /&gt;
Interactions at Castle Kronos.&lt;br /&gt;
== Outfits ==&lt;br /&gt;
List of Available Outfits / sets.&amp;lt;br&amp;gt;Maybe also how to obtain them.&lt;br /&gt;
&lt;br /&gt;
{{Navbox_Characters&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Tituba&amp;diff=163</id>
		<title>Tituba</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Tituba&amp;diff=163"/>
		<updated>2021-10-23T00:21:51Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Created page with &amp;quot;{{Infobox |name =  |image = {{PAGENAME}}.png |age =  |location =  |slutskills =  |soulsteal =  |body = {{PAGENAME}}-full.png }}  == Overview == Character overview == Quests ==...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
|name = &lt;br /&gt;
|image = {{PAGENAME}}.png&lt;br /&gt;
|age = &lt;br /&gt;
|location = &lt;br /&gt;
|slutskills = &lt;br /&gt;
|soulsteal = &lt;br /&gt;
|body = {{PAGENAME}}-full.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Character overview&lt;br /&gt;
== Quests ==&lt;br /&gt;
List of quests with how to complete&lt;br /&gt;
== SoulSteal ==&lt;br /&gt;
Capturable and if so - how&lt;br /&gt;
== Castle Kronos ==&lt;br /&gt;
Interactions at Castle Kronos.&lt;br /&gt;
== Outfits ==&lt;br /&gt;
List of Available Outfits / sets.&amp;lt;br&amp;gt;Maybe also how to obtain them.&lt;br /&gt;
&lt;br /&gt;
{{Navbox_Characters&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Summer&amp;diff=162</id>
		<title>Summer</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Summer&amp;diff=162"/>
		<updated>2021-10-23T00:21:38Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Created page with &amp;quot;{{Infobox |name =  |image = {{PAGENAME}}-face.png |age =  |location =  |slutskills =  |soulsteal =  |body = {{PAGENAME}}-full.png }}  == Overview == Character overview == Ques...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
|name = &lt;br /&gt;
|image = {{PAGENAME}}-face.png&lt;br /&gt;
|age = &lt;br /&gt;
|location = &lt;br /&gt;
|slutskills = &lt;br /&gt;
|soulsteal = &lt;br /&gt;
|body = {{PAGENAME}}-full.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Character overview&lt;br /&gt;
== Quests ==&lt;br /&gt;
List of quests with how to complete&lt;br /&gt;
== SoulSteal ==&lt;br /&gt;
Capturable and if so - how&lt;br /&gt;
== Castle Kronos ==&lt;br /&gt;
Interactions at Castle Kronos.&lt;br /&gt;
== Outfits ==&lt;br /&gt;
List of Available Outfits / sets.&amp;lt;br&amp;gt;Maybe also how to obtain them.&lt;br /&gt;
&lt;br /&gt;
{{Navbox_Characters&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Sarina&amp;diff=161</id>
		<title>Sarina</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Sarina&amp;diff=161"/>
		<updated>2021-10-23T00:21:18Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Created page with &amp;quot;{{Infobox |name =  |image = {{PAGENAME}}.png |age =  |location =  |slutskills =  |soulsteal =  |body = {{PAGENAME}}-full.png }}  == Overview == Character overview == Quests ==...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
|name = &lt;br /&gt;
|image = {{PAGENAME}}.png&lt;br /&gt;
|age = &lt;br /&gt;
|location = &lt;br /&gt;
|slutskills = &lt;br /&gt;
|soulsteal = &lt;br /&gt;
|body = {{PAGENAME}}-full.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Character overview&lt;br /&gt;
== Quests ==&lt;br /&gt;
List of quests with how to complete&lt;br /&gt;
== SoulSteal ==&lt;br /&gt;
Capturable and if so - how&lt;br /&gt;
== Castle Kronos ==&lt;br /&gt;
Interactions at Castle Kronos.&lt;br /&gt;
== Outfits ==&lt;br /&gt;
List of Available Outfits / sets.&amp;lt;br&amp;gt;Maybe also how to obtain them.&lt;br /&gt;
&lt;br /&gt;
{{Navbox_Characters&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
	<entry>
		<id>https://kronostimetitan.com/wiki/index.php?title=Linda&amp;diff=160</id>
		<title>Linda</title>
		<link rel="alternate" type="text/html" href="https://kronostimetitan.com/wiki/index.php?title=Linda&amp;diff=160"/>
		<updated>2021-10-23T00:21:06Z</updated>

		<summary type="html">&lt;p&gt;Bassrodimo: Created page with &amp;quot;{{Infobox |name =  |image = {{PAGENAME}}.png |age =  |location =  |slutskills =  |soulsteal =  |body = {{PAGENAME}}-full.png }}  == Overview == Character overview == Quests ==...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
|name = &lt;br /&gt;
|image = {{PAGENAME}}.png&lt;br /&gt;
|age = &lt;br /&gt;
|location = &lt;br /&gt;
|slutskills = &lt;br /&gt;
|soulsteal = &lt;br /&gt;
|body = {{PAGENAME}}-full.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Character overview&lt;br /&gt;
== Quests ==&lt;br /&gt;
List of quests with how to complete&lt;br /&gt;
== SoulSteal ==&lt;br /&gt;
Capturable and if so - how&lt;br /&gt;
== Castle Kronos ==&lt;br /&gt;
Interactions at Castle Kronos.&lt;br /&gt;
== Outfits ==&lt;br /&gt;
List of Available Outfits / sets.&amp;lt;br&amp;gt;Maybe also how to obtain them.&lt;br /&gt;
&lt;br /&gt;
{{Navbox_Characters&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Bassrodimo</name></author>
	</entry>
</feed>