<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.telosrealms.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://wiki.telosrealms.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ANavbox"/>
	<link rel="alternate" type="text/html" href="https://wiki.telosrealms.com/index.php?title=Module:Navbox&amp;action=history"/>
	<updated>2026-04-30T15:25:29Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.telosrealms.com/index.php?title=Module:Navbox&amp;diff=4742&amp;oldid=prev</id>
		<title>imported&gt;Dawning: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://wiki.telosrealms.com/index.php?title=Module:Navbox&amp;diff=4742&amp;oldid=prev"/>
		<updated>2025-09-02T23:12:10Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;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 23:12, 2 September 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key tempwiki:diff:1.41:old-4744:rev-4742 --&gt;
&lt;/table&gt;</summary>
		<author><name>imported&gt;Dawning</name></author>
	</entry>
	<entry>
		<id>https://wiki.telosrealms.com/index.php?title=Module:Navbox&amp;diff=4744&amp;oldid=prev</id>
		<title>imported&gt;Westgrass: 1 revision imported: update ranger</title>
		<link rel="alternate" type="text/html" href="https://wiki.telosrealms.com/index.php?title=Module:Navbox&amp;diff=4744&amp;oldid=prev"/>
		<updated>2025-08-23T02:20:28Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported: update ranger&lt;/p&gt;
&lt;a href=&quot;https://wiki.telosrealms.com/index.php?title=Module:Navbox&amp;amp;diff=4744&amp;amp;oldid=4743&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>imported&gt;Westgrass</name></author>
	</entry>
	<entry>
		<id>https://wiki.telosrealms.com/index.php?title=Module:Navbox&amp;diff=4743&amp;oldid=prev</id>
		<title>imported&gt;RheingoldRiver: Adding default set of pages</title>
		<link rel="alternate" type="text/html" href="https://wiki.telosrealms.com/index.php?title=Module:Navbox&amp;diff=4743&amp;oldid=prev"/>
		<updated>2024-06-12T08:44:14Z</updated>

		<summary type="html">&lt;p&gt;Adding default set of pages&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
local getArgs -- lazily initialized&lt;br /&gt;
local args&lt;br /&gt;
local format = string.format&lt;br /&gt;
&lt;br /&gt;
local function get_title_arg(is_collapsible, template)&lt;br /&gt;
	local title_arg = 1&lt;br /&gt;
	if is_collapsible then title_arg = 2 end&lt;br /&gt;
	if template then title_arg = &amp;#039;template&amp;#039; end&lt;br /&gt;
	return title_arg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function add_link(link_description, ul, is_mini)&lt;br /&gt;
	local l&lt;br /&gt;
	if link_description.url then&lt;br /&gt;
		l = {&amp;#039;[&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;]&amp;#039;}&lt;br /&gt;
	else&lt;br /&gt;
		l = {&amp;#039;[[&amp;#039;, &amp;#039;|&amp;#039;, &amp;#039;]]&amp;#039;}&lt;br /&gt;
	end&lt;br /&gt;
	ul:tag(&amp;#039;li&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;nv-&amp;#039; .. link_description.full)&lt;br /&gt;
		:wikitext(l[1] .. link_description.link .. l[2])&lt;br /&gt;
		:tag(is_mini and &amp;#039;abbr&amp;#039; or &amp;#039;span&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;title&amp;#039;, link_description.html_title)&lt;br /&gt;
			:wikitext(is_mini and link_description.mini or link_description.full)&lt;br /&gt;
			:done()&lt;br /&gt;
		:wikitext(l[3])&lt;br /&gt;
		:done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function make_list(title_text, has_brackets, is_mini)&lt;br /&gt;
	local title = mw.title.new(mw.text.trim(title_text), &amp;#039;Template&amp;#039;)&lt;br /&gt;
	if not title then&lt;br /&gt;
		error(&amp;#039;Invalid title &amp;#039; .. title_text)&lt;br /&gt;
	end&lt;br /&gt;
	local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or &amp;#039;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	local link_descriptions = {&lt;br /&gt;
		{ [&amp;#039;mini&amp;#039;] = &amp;#039;v&amp;#039;, [&amp;#039;full&amp;#039;] = &amp;#039;view&amp;#039;, [&amp;#039;html_title&amp;#039;] = &amp;#039;View this template&amp;#039;,&lt;br /&gt;
			[&amp;#039;link&amp;#039;] = title.fullText, [&amp;#039;url&amp;#039;] = false },&lt;br /&gt;
		{ [&amp;#039;mini&amp;#039;] = &amp;#039;e&amp;#039;, [&amp;#039;full&amp;#039;] = &amp;#039;edit&amp;#039;, [&amp;#039;html_title&amp;#039;] = &amp;#039;Edit this template&amp;#039;,&lt;br /&gt;
			[&amp;#039;link&amp;#039;] = title:fullUrl(&amp;#039;action=edit&amp;#039;), [&amp;#039;url&amp;#039;] = true },&lt;br /&gt;
		{ [&amp;#039;mini&amp;#039;] = &amp;#039;h&amp;#039;, [&amp;#039;full&amp;#039;] = &amp;#039;hist&amp;#039;, [&amp;#039;html_title&amp;#039;] = &amp;#039;History of this template&amp;#039;,&lt;br /&gt;
			[&amp;#039;link&amp;#039;] = title:fullUrl(&amp;#039;action=history&amp;#039;), [&amp;#039;url&amp;#039;] = true },&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local ul = mw.html.create(&amp;#039;ul&amp;#039;)&lt;br /&gt;
	if has_brackets then&lt;br /&gt;
		ul:addClass(&amp;#039;navbar-brackets&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for _, description in ipairs(link_descriptions) do&lt;br /&gt;
		add_link(description, ul, is_mini)&lt;br /&gt;
	end&lt;br /&gt;
	return ul:done()&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function navbar(args)&lt;br /&gt;
	local is_collapsible = args.collapsible&lt;br /&gt;
	local is_mini = args.mini&lt;br /&gt;
	local is_plain = args.plain&lt;br /&gt;
	&lt;br /&gt;
	local collapsible_class = nil&lt;br /&gt;
	if is_collapsible then&lt;br /&gt;
		collapsible_class = &amp;#039;navbar-collapse&amp;#039;&lt;br /&gt;
		if not is_plain then is_mini = 1 end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local div = mw.html.create():tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
	div&lt;br /&gt;
		:addClass(&amp;#039;navbar&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;plainlinks&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;hlist&amp;#039;)&lt;br /&gt;
		:addClass(collapsible_class) -- we made the determination earlier&lt;br /&gt;
&lt;br /&gt;
	if is_mini then div:addClass(&amp;#039;navbar-mini&amp;#039;) end&lt;br /&gt;
&lt;br /&gt;
	local box_text = (args.text or &amp;#039;This box: &amp;#039;) .. &amp;#039; &amp;#039;&lt;br /&gt;
	 -- the concatenated space guarantees the box text is separated&lt;br /&gt;
	if not (is_mini or is_plain) then&lt;br /&gt;
		div&lt;br /&gt;
			:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;navbar-boxtext&amp;#039;)&lt;br /&gt;
				:wikitext(box_text)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local template = args.template&lt;br /&gt;
	local has_brackets = args.brackets&lt;br /&gt;
	local title_arg = get_title_arg(is_collapsible, template)&lt;br /&gt;
	local title_text = args[title_arg] or (&amp;#039;:&amp;#039; .. mw.getCurrentFrame():getParent():getTitle())&lt;br /&gt;
	local list = make_list(title_text, has_brackets, is_mini)&lt;br /&gt;
	div:node(list)&lt;br /&gt;
&lt;br /&gt;
	if is_collapsible then&lt;br /&gt;
		local title_text_class&lt;br /&gt;
		if is_mini then&lt;br /&gt;
			title_text_class = &amp;#039;navbar-ct-mini&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			title_text_class = &amp;#039;navbar-ct-full&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		div:done()&lt;br /&gt;
			:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(title_text_class)&lt;br /&gt;
			:wikitext(args[1])&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return tostring(div:done())&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function striped(wikitext, border)&lt;br /&gt;
	-- Return wikitext with markers replaced for odd/even striping.&lt;br /&gt;
	-- Child (subgroup) navboxes are flagged with a category that is removed&lt;br /&gt;
	-- by parent navboxes. The result is that the category shows all pages&lt;br /&gt;
	-- where a child navbox is not contained in a parent navbox.&lt;br /&gt;
	if border == &amp;#039;subgroup&amp;#039; and args[&amp;#039;orphan&amp;#039;] ~= &amp;#039;yes&amp;#039; then&lt;br /&gt;
		-- No change; striping occurs in outermost navbox.&lt;br /&gt;
		return wikitext&lt;br /&gt;
	end&lt;br /&gt;
	local first, second = &amp;#039;odd&amp;#039;, &amp;#039;even&amp;#039;&lt;br /&gt;
	if args[&amp;#039;evenodd&amp;#039;] then&lt;br /&gt;
		if args[&amp;#039;evenodd&amp;#039;] == &amp;#039;swap&amp;#039; then&lt;br /&gt;
			first, second = second, first&lt;br /&gt;
		else&lt;br /&gt;
			first = args[&amp;#039;evenodd&amp;#039;]&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 == &amp;#039;0&amp;#039; then&lt;br /&gt;
				-- Current occurrence is for a group before a nested table.&lt;br /&gt;
				-- Set it to first as a valid although pointless class.&lt;br /&gt;
				-- The next occurrence will be the first row after a title&lt;br /&gt;
				-- in a subgroup and will also be first.&lt;br /&gt;
				index = 0&lt;br /&gt;
				return first&lt;br /&gt;
			end&lt;br /&gt;
			index = index + 1&lt;br /&gt;
			return index % 2 == 1 and first or second&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return (wikitext:gsub(&amp;#039;\127_ODDEVEN(%d?)_\127&amp;#039;, 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) == &amp;#039;{|&amp;#039; then&lt;br /&gt;
		-- Applying nowrap to lines in a table does not make sense.&lt;br /&gt;
		-- Add newlines to compensate for trim of x in |parm=x in a template.&lt;br /&gt;
		return &amp;#039;\n&amp;#039; .. item ..&amp;#039;\n&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if nowrapitems == &amp;#039;yes&amp;#039; then&lt;br /&gt;
		local lines = {}&lt;br /&gt;
		for line in (item .. &amp;#039;\n&amp;#039;):gmatch(&amp;#039;([^\n]*)\n&amp;#039;) do&lt;br /&gt;
			local prefix, content = line:match(&amp;#039;^([*:;#]+)%s*(.*)&amp;#039;)&lt;br /&gt;
			if prefix and not content:match(&amp;#039;^&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&amp;#039;) then&lt;br /&gt;
				line = format(&amp;#039;%s&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;#039;, prefix, content)&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(lines, line)&lt;br /&gt;
		end&lt;br /&gt;
		item = table.concat(lines, &amp;#039;\n&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if item:match(&amp;#039;^[*:;#]&amp;#039;) then&lt;br /&gt;
		return &amp;#039;\n&amp;#039; .. item ..&amp;#039;\n&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return item&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- we will want this later when we want to add tstyles for hlist/plainlist&lt;br /&gt;
local function has_navbar()&lt;br /&gt;
	return args[&amp;#039;navbar&amp;#039;] ~= &amp;#039;off&amp;#039;&lt;br /&gt;
		and args[&amp;#039;navbar&amp;#039;] ~= &amp;#039;plain&amp;#039;&lt;br /&gt;
		and (&lt;br /&gt;
			args[&amp;#039;name&amp;#039;]&lt;br /&gt;
			or mw.getCurrentFrame():getParent():getTitle():gsub(&amp;#039;/sandbox$&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
				~= &amp;#039;Template:Navbox&amp;#039;&lt;br /&gt;
		)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderNavBar(titleCell)&lt;br /&gt;
	if has_navbar() then&lt;br /&gt;
		titleCell:wikitext(navbar{&lt;br /&gt;
			[1] = args[&amp;#039;name&amp;#039;],&lt;br /&gt;
			[&amp;#039;mini&amp;#039;] = 1,&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTitleRow(tbl)&lt;br /&gt;
	if not args[&amp;#039;title&amp;#039;] then return end&lt;br /&gt;
&lt;br /&gt;
	local titleRow = tbl:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	local titleCell = titleRow:tag(&amp;#039;th&amp;#039;):attr(&amp;#039;scope&amp;#039;, &amp;#039;col&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	local titleColspan = 2&lt;br /&gt;
	if args[&amp;#039;imageleft&amp;#039;] then titleColspan = titleColspan + 1 end&lt;br /&gt;
	if args[&amp;#039;image&amp;#039;] then titleColspan = titleColspan + 1 end&lt;br /&gt;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:addClass(&amp;#039;navbox-title&amp;#039;)&lt;br /&gt;
		:attr(&amp;#039;colspan&amp;#039;, titleColspan)&lt;br /&gt;
&lt;br /&gt;
	renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			-- id for aria-labelledby attribute&lt;br /&gt;
			:attr(&amp;#039;id&amp;#039;, mw.uri.anchorEncode(args[&amp;#039;title&amp;#039;]))&lt;br /&gt;
			:addClass(&amp;#039;navbox-title-text&amp;#039;)&lt;br /&gt;
			:wikitext(processItem(args[&amp;#039;title&amp;#039;]))&lt;br /&gt;
		&lt;br /&gt;
	tbl:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;navbox-spacer&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getAboveBelowColspan()&lt;br /&gt;
	local ret = 2&lt;br /&gt;
	if args[&amp;#039;imageleft&amp;#039;] then ret = ret + 1 end&lt;br /&gt;
	if args[&amp;#039;image&amp;#039;] 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[&amp;#039;above&amp;#039;] then return end&lt;br /&gt;
&lt;br /&gt;
	tbl:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;navbox-abovebelow&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;colspan&amp;#039;, getAboveBelowColspan())&lt;br /&gt;
			:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
				-- id for aria-labelledby attribute, if no title&lt;br /&gt;
				:attr(&amp;#039;id&amp;#039;, args[&amp;#039;title&amp;#039;] and nil or mw.uri.anchorEncode(args[&amp;#039;above&amp;#039;]))&lt;br /&gt;
				:wikitext(processItem(args[&amp;#039;above&amp;#039;], args[&amp;#039;nowrapitems&amp;#039;]))&lt;br /&gt;
	&lt;br /&gt;
	tbl:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;navbox-spacer&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderBelowRow(tbl)&lt;br /&gt;
	if not args[&amp;#039;below&amp;#039;] then return end&lt;br /&gt;
	&lt;br /&gt;
	tbl:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;navbox-spacer&amp;#039;)&lt;br /&gt;
		&lt;br /&gt;
	tbl:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;navbox-abovebelow&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;colspan&amp;#039;, getAboveBelowColspan())&lt;br /&gt;
			:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
				:wikitext(processItem(args[&amp;#039;below&amp;#039;], args[&amp;#039;nowrapitems&amp;#039;]))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderListRow(tbl, index, listnum, listnums_size)&lt;br /&gt;
	if index &amp;gt; 1 then&lt;br /&gt;
		tbl:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;navbox-spacer&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local row = tbl:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args[&amp;#039;imageleft&amp;#039;] then&lt;br /&gt;
		row&lt;br /&gt;
			:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;noviewer&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;navbox-image&amp;#039;)&lt;br /&gt;
				:css(&amp;#039;width&amp;#039;, &amp;#039;1px&amp;#039;)               -- Minimize width&lt;br /&gt;
				:css(&amp;#039;padding&amp;#039;, &amp;#039;0 2px 0 0&amp;#039;)&lt;br /&gt;
				:attr(&amp;#039;rowspan&amp;#039;, listnums_size)&lt;br /&gt;
				:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
					:wikitext(processItem(args[&amp;#039;imageleft&amp;#039;]))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local group_and_num = format(&amp;#039;group%d&amp;#039;, listnum)&lt;br /&gt;
	if args[group_and_num] then&lt;br /&gt;
		local groupCell = row:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
		-- id for aria-labelledby attribute, if lone group with no title or above&lt;br /&gt;
		if listnum == 1 and not (args[&amp;#039;title&amp;#039;] or args[&amp;#039;above&amp;#039;] or args[&amp;#039;group2&amp;#039;]) then&lt;br /&gt;
			groupCell&lt;br /&gt;
				:attr(&amp;#039;id&amp;#039;, mw.uri.anchorEncode(args[&amp;#039;group1&amp;#039;]))&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:attr(&amp;#039;scope&amp;#039;, &amp;#039;row&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;navbox-group&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:wikitext(args[group_and_num])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listCell = row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	if args[group_and_num] then&lt;br /&gt;
		listCell&lt;br /&gt;
			:addClass(&amp;#039;navbox-list-with-group&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		listCell:attr(&amp;#039;colspan&amp;#039;, 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local list_and_num = format(&amp;#039;list%d&amp;#039;, listnum)&lt;br /&gt;
	local listText = args[list_and_num]&lt;br /&gt;
	local oddEven = &amp;#039;\127_ODDEVEN_\127&amp;#039;&lt;br /&gt;
	if listText:sub(1, 12) == &amp;#039;&amp;lt;/div&amp;gt;&amp;lt;table&amp;#039; then&lt;br /&gt;
		-- Assume list text is for a subgroup navbox so no automatic striping for this row.&lt;br /&gt;
		oddEven = listText:find(&amp;#039;&amp;lt;th[^&amp;gt;]*&amp;quot;navbox%-title&amp;quot;&amp;#039;) and &amp;#039;\127_ODDEVEN0_\127&amp;#039; or &amp;#039;odd&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listclass_and_num = format(&amp;#039;list%dclass&amp;#039;, listnum)&lt;br /&gt;
	listCell&lt;br /&gt;
		:addClass(&amp;#039;navbox-list&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;navbox-&amp;#039; .. oddEven)&lt;br /&gt;
		:addClass(args[&amp;#039;listclass&amp;#039;])&lt;br /&gt;
		:addClass(args[listclass_and_num])&lt;br /&gt;
		:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:wikitext(processItem(listText, args[&amp;#039;nowrapitems&amp;#039;]))&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args[&amp;#039;image&amp;#039;] then&lt;br /&gt;
		row&lt;br /&gt;
			:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;noviewer&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;navbox-image&amp;#039;)&lt;br /&gt;
				:css(&amp;#039;width&amp;#039;, &amp;#039;1px&amp;#039;)               -- Minimize width&lt;br /&gt;
				:css(&amp;#039;padding&amp;#039;, &amp;#039;0 0 0 2px&amp;#039;)&lt;br /&gt;
				:attr(&amp;#039;rowspan&amp;#039;, listnums_size)&lt;br /&gt;
				:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
					:wikitext(processItem(args[&amp;#039;image&amp;#039;]))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function renderMainTable(border, listnums)&lt;br /&gt;
	local tbl = mw.html.create(&amp;#039;table&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;nowraplinks&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	local state = args[&amp;#039;state&amp;#039;]&lt;br /&gt;
	if args[&amp;#039;title&amp;#039;] and state ~= &amp;#039;plain&amp;#039; and state ~= &amp;#039;off&amp;#039; then&lt;br /&gt;
		if state == &amp;#039;collapsed&amp;#039; then&lt;br /&gt;
			state = &amp;#039;mw-collapsed&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass(&amp;#039;mw-collapsible&amp;#039;)&lt;br /&gt;
			:addClass(state or &amp;#039;autocollapse&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if border == &amp;#039;subgroup&amp;#039; or border == &amp;#039;none&amp;#039; then&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass(&amp;#039;navbox-subgroup&amp;#039;)&lt;br /&gt;
	else  -- regular navbox&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass(&amp;#039;navbox-inner&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	renderTitleRow(tbl)&lt;br /&gt;
	renderAboveRow(tbl)&lt;br /&gt;
	local listnums_size = #listnums&lt;br /&gt;
	for i, listnum in ipairs(listnums) do&lt;br /&gt;
		renderListRow(tbl, i, listnum, listnums_size)&lt;br /&gt;
	end&lt;br /&gt;
	renderBelowRow(tbl)&lt;br /&gt;
&lt;br /&gt;
	return tbl&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._navbox(navboxArgs)&lt;br /&gt;
	args = navboxArgs&lt;br /&gt;
	local listnums = {}&lt;br /&gt;
&lt;br /&gt;
	for k, _ in pairs(args) do&lt;br /&gt;
		if type(k) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			local listnum = k:match(&amp;#039;^list(%d+)$&amp;#039;)&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;
	local border = mw.text.trim(args[&amp;#039;border&amp;#039;] or args[1] or &amp;#039;&amp;#039;)&lt;br /&gt;
	if border == &amp;#039;child&amp;#039; then&lt;br /&gt;
		border = &amp;#039;subgroup&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- render the main body of the navbox&lt;br /&gt;
	local tbl = renderMainTable(border, listnums)&lt;br /&gt;
&lt;br /&gt;
	local res = mw.html.create()&lt;br /&gt;
	-- render the appropriate wrapper for the navbox, based on the border param&lt;br /&gt;
&lt;br /&gt;
	if border == &amp;#039;none&amp;#039; then&lt;br /&gt;
		local nav = res:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;role&amp;#039;, &amp;#039;navigation&amp;#039;)&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args[&amp;#039;title&amp;#039;] or args[&amp;#039;above&amp;#039;] or (args[&amp;#039;group1&amp;#039;]&lt;br /&gt;
			and not args[&amp;#039;group2&amp;#039;]) then&lt;br /&gt;
			nav:attr(&lt;br /&gt;
				&amp;#039;aria-labelledby&amp;#039;,&lt;br /&gt;
				mw.uri.anchorEncode(&lt;br /&gt;
					args[&amp;#039;title&amp;#039;] or args[&amp;#039;above&amp;#039;] or args[&amp;#039;group1&amp;#039;]&lt;br /&gt;
				)&lt;br /&gt;
			)&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr(&amp;#039;aria-label&amp;#039;, &amp;#039;Navbox&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	elseif border == &amp;#039;subgroup&amp;#039; 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&amp;#039;s &amp;lt;/div&amp;gt;&lt;br /&gt;
		res&lt;br /&gt;
			:wikitext(&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;)&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
			:wikitext(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		local nav = res:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;role&amp;#039;, &amp;#039;navigation&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;navbox&amp;#039;)&lt;br /&gt;
			:addClass(args[&amp;#039;class&amp;#039;])&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args[&amp;#039;title&amp;#039;] or args[&amp;#039;above&amp;#039;]&lt;br /&gt;
			or (args[&amp;#039;group1&amp;#039;] and not args[&amp;#039;group2&amp;#039;]) then&lt;br /&gt;
			nav:attr(&lt;br /&gt;
				&amp;#039;aria-labelledby&amp;#039;,&lt;br /&gt;
				mw.uri.anchorEncode(args[&amp;#039;title&amp;#039;] or args[&amp;#039;above&amp;#039;] or args[&amp;#039;group1&amp;#039;])&lt;br /&gt;
			)&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr(&amp;#039;aria-label&amp;#039;, &amp;#039;Navbox&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return striped(tostring(res), border)&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(&amp;#039;Module:ArgsUtil&amp;#039;).merge&lt;br /&gt;
	end&lt;br /&gt;
	args = getArgs()&lt;br /&gt;
&lt;br /&gt;
	-- Read the arguments in the order they&amp;#039;ll be output in, to make references&lt;br /&gt;
	-- number in the right order.&lt;br /&gt;
	local _&lt;br /&gt;
	_ = args[&amp;#039;title&amp;#039;]&lt;br /&gt;
	_ = args[&amp;#039;above&amp;#039;]&lt;br /&gt;
	-- Limit this to 20 as covering &amp;#039;most&amp;#039; cases (that&amp;#039;s a SWAG) and because&lt;br /&gt;
	-- iterator approach won&amp;#039;t work here&lt;br /&gt;
	for i = 1, 20 do&lt;br /&gt;
		_ = args[format(&amp;#039;group%d&amp;#039;, i)]&lt;br /&gt;
		_ = args[format(&amp;#039;list%d&amp;#039;, i)]&lt;br /&gt;
	end&lt;br /&gt;
	_ = args[&amp;#039;below&amp;#039;]&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>imported&gt;RheingoldRiver</name></author>
	</entry>
</feed>