<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://armsofgod.wiki.spellsandguns.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ANavbox</id>
	<title>Module:Navbox - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://armsofgod.wiki.spellsandguns.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ANavbox"/>
	<link rel="alternate" type="text/html" href="https://armsofgod.wiki.spellsandguns.com/index.php?title=Module:Navbox&amp;action=history"/>
	<updated>2026-06-18T04:29:07Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://armsofgod.wiki.spellsandguns.com/index.php?title=Module:Navbox&amp;diff=2084&amp;oldid=prev</id>
		<title>Ta1ha: bot: documentation pass — editor-facing docs (data descriptions, module comments, template usage, Help rewrite)</title>
		<link rel="alternate" type="text/html" href="https://armsofgod.wiki.spellsandguns.com/index.php?title=Module:Navbox&amp;diff=2084&amp;oldid=prev"/>
		<updated>2026-06-10T16:04:41Z</updated>

		<summary type="html">&lt;p&gt;bot: documentation pass — editor-facing docs (data descriptions, module comments, template usage, Help rewrite)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:04, 10 June 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- Module:Navbox — &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;per-category &lt;/del&gt;bottom&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-of-page navigation (Arms &lt;/del&gt;of &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;God).&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- Module:Navbox — &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;the collapsible navigation box at the &lt;/ins&gt;bottom of&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-- RENDER-TIME DERIVATION: reads the category&#039;s own source&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;detail &lt;/ins&gt;pages.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-- Data:&amp;lt;Category&amp;gt;.json via Module:Core and groups members at render time.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;No Data:Navbox_* &lt;/del&gt;pages.&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;--&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;--&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;--   &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{#invoke:Navbox|render|Weapons}} &lt;/del&gt;  &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(wrapped &lt;/del&gt;by &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Template:Navbox_&amp;lt;Cat&amp;gt;&lt;/del&gt;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-- WHAT IT DOES&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;--   &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Renders a category&#039;s full member list, bucketed into rows (by tier,&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-- &lt;/ins&gt;  by &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;type, or one flat row&lt;/ins&gt;)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, with each member as icon + link. Rows&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;--   are computed at render time from the category&#039;s own Data page, so&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;--   a new record appears in every navbox on purge — no stored lists.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;--&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;--&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Grouping config &lt;/del&gt;is presentation, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;so it lives here (editable on&lt;/del&gt;-&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;wiki)&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;HOW TO INVOKE&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;--   {{#invoke:Navbox|render|Weapons}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;--   ...but pages should normally use the wrapper template instead:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;--   {{Navbox_Weapons}}, {{Navbox_Crux}}, etc.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;--&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-- SOURCE DATA IT READS (via Module:Core)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;--   Data:&amp;lt;Category&amp;gt;.json for whichever category is named in the call.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;--&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-- EDITING NOTES&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;--   The CONFIG table below &lt;/ins&gt;is &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;the &lt;/ins&gt;presentation &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;contract per category:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;--   group = record field to bucket by (nil = single row), order = bucket&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;--   order, label = row label format&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;icon = icon size in px. Categories&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-&lt;/ins&gt;- &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;  absent from CONFIG render nothing&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local Core = require(&amp;#039;Module:Core&amp;#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local Core = require(&amp;#039;Module:Core&amp;#039;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local p = {}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local p = {}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key armsofgodwiki:diff:1.41:old-1930:rev-2084:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Ta1ha</name></author>
	</entry>
	<entry>
		<id>https://armsofgod.wiki.spellsandguns.com/index.php?title=Module:Navbox&amp;diff=1930&amp;oldid=prev</id>
		<title>Ta1ha: bot: render-time derivation refactor (phase 1)</title>
		<link rel="alternate" type="text/html" href="https://armsofgod.wiki.spellsandguns.com/index.php?title=Module:Navbox&amp;diff=1930&amp;oldid=prev"/>
		<updated>2026-06-10T08:29:14Z</updated>

		<summary type="html">&lt;p&gt;bot: render-time derivation refactor (phase 1)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Module:Navbox — per-category bottom-of-page navigation (Arms of God).&lt;br /&gt;
-- RENDER-TIME DERIVATION: reads the category&amp;#039;s own source&lt;br /&gt;
-- Data:&amp;lt;Category&amp;gt;.json via Module:Core and groups members at render time.&lt;br /&gt;
-- No Data:Navbox_* pages.&lt;br /&gt;
--&lt;br /&gt;
--   {{#invoke:Navbox|render|Weapons}}   (wrapped by Template:Navbox_&amp;lt;Cat&amp;gt;)&lt;br /&gt;
--&lt;br /&gt;
-- Grouping config is presentation, so it lives here (editable on-wiki).&lt;br /&gt;
local Core = require(&amp;#039;Module:Core&amp;#039;)&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local CONFIG = {&lt;br /&gt;
  Weapons    = {group = &amp;#039;tier&amp;#039;, order = {&amp;#039;1&amp;#039;, &amp;#039;2&amp;#039;, &amp;#039;3&amp;#039;}, label = &amp;#039;Tier %s (%d)&amp;#039;,&lt;br /&gt;
                row_header = &amp;#039;Tier&amp;#039;, items_header = &amp;#039;Weapons&amp;#039;, icon = 24},&lt;br /&gt;
  Characters = {group = nil, label = &amp;#039;Characters (%d)&amp;#039;,&lt;br /&gt;
                row_header = &amp;#039;&amp;#039;, items_header = &amp;#039;Characters&amp;#039;, icon = 48},&lt;br /&gt;
  Blessings  = {group = &amp;#039;tier&amp;#039;, order = {&amp;#039;1&amp;#039;, &amp;#039;2&amp;#039;, &amp;#039;3&amp;#039;}, label = &amp;#039;Tier %s (%d)&amp;#039;,&lt;br /&gt;
                row_header = &amp;#039;Tier&amp;#039;, items_header = &amp;#039;Blessings&amp;#039;, icon = 24},&lt;br /&gt;
  Upgrades   = {group = &amp;#039;tier&amp;#039;, order = {&amp;#039;1&amp;#039;, &amp;#039;2&amp;#039;, &amp;#039;3&amp;#039;}, label = &amp;#039;Tier %s (%d)&amp;#039;,&lt;br /&gt;
                row_header = &amp;#039;Tier&amp;#039;, items_header = &amp;#039;Upgrades&amp;#039;, icon = 24},&lt;br /&gt;
  Passives   = {group = &amp;#039;tier&amp;#039;, order = {&amp;#039;1&amp;#039;, &amp;#039;2&amp;#039;, &amp;#039;3&amp;#039;}, label = &amp;#039;Tier %s (%d)&amp;#039;,&lt;br /&gt;
                row_header = &amp;#039;Tier&amp;#039;, items_header = &amp;#039;Passives&amp;#039;, icon = 24},&lt;br /&gt;
  Crux       = {group = &amp;#039;type&amp;#039;, order = {&amp;#039;Unique&amp;#039;, &amp;#039;Action&amp;#039;, &amp;#039;Buff&amp;#039;, &amp;#039;Debuff&amp;#039;, &amp;#039;Aura&amp;#039;},&lt;br /&gt;
                label = &amp;#039;%s (%d)&amp;#039;, row_header = &amp;#039;Type&amp;#039;,&lt;br /&gt;
                items_header = &amp;#039;Crux powers&amp;#039;, icon = 24},&lt;br /&gt;
  Enemies    = {group = nil, label = &amp;#039;Enemies (%d)&amp;#039;,&lt;br /&gt;
                row_header = &amp;#039;&amp;#039;, items_header = &amp;#039;Enemies&amp;#039;, icon = 32},&lt;br /&gt;
  Codex      = {group = &amp;#039;type&amp;#039;, order = {&amp;#039;Enemies&amp;#039;, &amp;#039;Weapons&amp;#039;, &amp;#039;Events&amp;#039;, &amp;#039;Tips&amp;#039;},&lt;br /&gt;
                label = &amp;#039;%s (%d)&amp;#039;, row_header = &amp;#039;Type&amp;#039;,&lt;br /&gt;
                items_header = &amp;#039;Entries&amp;#039;, icon = 24},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function chain(items, size)&lt;br /&gt;
  if #items == 0 then return &amp;#039;—&amp;#039; end&lt;br /&gt;
  local parts = {}&lt;br /&gt;
  for _, rec in ipairs(items) do&lt;br /&gt;
    parts[#parts + 1] = Core.iconLink(rec, size)&lt;br /&gt;
  end&lt;br /&gt;
  return table.concat(parts, &amp;#039;, &amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function buildRows(cat, cfg)&lt;br /&gt;
  local recs = Core.load(cat)&lt;br /&gt;
  -- bucket&lt;br /&gt;
  local buckets, seen = {}, {}&lt;br /&gt;
  for _, r in ipairs(recs) do&lt;br /&gt;
    local key&lt;br /&gt;
    if cfg.group == nil then&lt;br /&gt;
      key = &amp;#039;all&amp;#039;&lt;br /&gt;
    else&lt;br /&gt;
      key = tostring(r[cfg.group] or &amp;#039;&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    if key ~= &amp;#039;&amp;#039; then&lt;br /&gt;
      if not buckets[key] then buckets[key] = {}; seen[#seen + 1] = key end&lt;br /&gt;
      local b = buckets[key]&lt;br /&gt;
      b[#b + 1] = r&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  local keys = cfg.order or (cfg.group == nil and {&amp;#039;all&amp;#039;} or seen)&lt;br /&gt;
  if cfg.order then&lt;br /&gt;
    -- append unknown keys after the declared order&lt;br /&gt;
    local inOrder = {}&lt;br /&gt;
    for _, k in ipairs(cfg.order) do inOrder[k] = true end&lt;br /&gt;
    keys = {}&lt;br /&gt;
    for _, k in ipairs(cfg.order) do keys[#keys + 1] = k end&lt;br /&gt;
    for _, k in ipairs(seen) do&lt;br /&gt;
      if not inOrder[k] then keys[#keys + 1] = k end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  local rows = {}&lt;br /&gt;
  for _, k in ipairs(keys) do&lt;br /&gt;
    local b = buckets[k]&lt;br /&gt;
    if b and #b &amp;gt; 0 then&lt;br /&gt;
      table.sort(b, function(x, y)&lt;br /&gt;
        return mw.ustring.lower(x.name or &amp;#039;&amp;#039;) &amp;lt; mw.ustring.lower(y.name or &amp;#039;&amp;#039;)&lt;br /&gt;
      end)&lt;br /&gt;
      local label&lt;br /&gt;
      if cfg.group == nil then&lt;br /&gt;
        label = string.format(cfg.label, #b)&lt;br /&gt;
      else&lt;br /&gt;
        label = string.format(cfg.label, k, #b)&lt;br /&gt;
      end&lt;br /&gt;
      rows[#rows + 1] = {label = label, items = b}&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return rows&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
  local cat = (frame.args[1] or frame.args.category or &amp;#039;&amp;#039;):gsub(&amp;#039;^%s+&amp;#039;, &amp;#039;&amp;#039;):gsub(&amp;#039;%s+$&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
  cat = Core.resolveCategory(cat) or cat&lt;br /&gt;
  local cfg = CONFIG[cat]&lt;br /&gt;
  if not cfg then return &amp;#039;&amp;#039; end&lt;br /&gt;
  local rows = buildRows(cat, cfg)&lt;br /&gt;
  if #rows == 0 then return &amp;#039;&amp;#039; end&lt;br /&gt;
&lt;br /&gt;
  local hsty = &amp;#039;! style=&amp;quot;background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);&amp;quot; | &amp;#039;&lt;br /&gt;
  local lines = {&lt;br /&gt;
    &amp;#039;{| class=&amp;quot;wikitable mw-collapsible&amp;quot; style=&amp;quot;font-size:90%; width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);&amp;quot;&amp;#039;,&lt;br /&gt;
    &amp;#039;|-&amp;#039;,&lt;br /&gt;
    hsty .. cfg.row_header .. &amp;#039; !&amp;#039; .. hsty .. cfg.items_header,&lt;br /&gt;
  }&lt;br /&gt;
  for _, row in ipairs(rows) do&lt;br /&gt;
    lines[#lines + 1] = &amp;#039;|-&amp;#039;&lt;br /&gt;
    lines[#lines + 1] = &amp;quot;| &amp;#039;&amp;#039;&amp;#039;&amp;quot; .. row.label .. &amp;quot;&amp;#039;&amp;#039;&amp;#039; || &amp;quot; .. chain(row.items, cfg.icon)&lt;br /&gt;
  end&lt;br /&gt;
  lines[#lines + 1] = &amp;#039;|}&amp;#039;&lt;br /&gt;
  local body = table.concat(lines, &amp;#039;\n&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
  local title_link = &amp;#039;[[&amp;#039; .. cat .. &amp;#039;|&amp;#039; .. cat .. &amp;#039;]]&amp;#039;&lt;br /&gt;
  return string.format(&lt;br /&gt;
    &amp;#039;\n----\n&amp;lt;div class=&amp;quot;navbox&amp;quot; style=&amp;quot;margin-top:1em; clear:both; border:1px solid var(--navbox-border, #3a3c44); background:var(--navbox-bg, #1c1d22); color:var(--navbox-text, #dcdcdc);&amp;quot;&amp;gt;\n&amp;#039; ..&lt;br /&gt;
    &amp;#039;&amp;lt;div class=&amp;quot;navbox-bar&amp;quot; style=&amp;quot;padding:6px 10px; background:var(--navbox-bar-bg, #26272e); color:var(--navbox-bar-fg, #f1e9d2); font-weight:bold; text-align:center; border:1px solid var(--navbox-border, #3a3c44);&amp;quot;&amp;gt;&amp;#039; ..&lt;br /&gt;
    &amp;#039;&amp;lt;span style=&amp;quot;float:left; font-size:85%%; color:#eee;&amp;quot;&amp;gt;[v · e]&amp;lt;/span&amp;gt;%s&amp;lt;/div&amp;gt;\n%s\n&amp;lt;/div&amp;gt;&amp;#039;,&lt;br /&gt;
    title_link, body&lt;br /&gt;
  )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Ta1ha</name></author>
	</entry>
</feed>