<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.americanmusicclub.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.americanmusicclub.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ANavbox"/>
	<link rel="alternate" type="text/html" href="https://wiki.americanmusicclub.com/index.php?title=Module:Navbox&amp;action=history"/>
	<updated>2026-04-04T14:27:14Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://wiki.americanmusicclub.com/index.php?title=Module:Navbox&amp;diff=29487&amp;oldid=prev</id>
		<title>Amc-admin: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://wiki.americanmusicclub.com/index.php?title=Module:Navbox&amp;diff=29487&amp;oldid=prev"/>
		<updated>2018-03-08T18:28:27Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&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(&amp;#039;Module:Navbar&amp;#039;)._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 = &amp;#039;\127_ODDEVEN_\127&amp;#039;&lt;br /&gt;
local RESTART_MARKER = &amp;#039;\127_ODDEVEN0_\127&amp;#039;&lt;br /&gt;
local REGEX_MARKER = &amp;#039;\127_ODDEVEN(%d?)_\127&amp;#039;&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 = &amp;#039;[[Category:Navbox orphans]]&amp;#039;&lt;br /&gt;
	if border == &amp;#039;subgroup&amp;#039; and args.orphan ~= &amp;#039;yes&amp;#039; 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 = &amp;#039;odd&amp;#039;, &amp;#039;even&amp;#039;&lt;br /&gt;
	if args.evenodd then&lt;br /&gt;
		if args.evenodd == &amp;#039;swap&amp;#039; 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 == &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;
	local regex = orphanCat:gsub(&amp;#039;([%[%]])&amp;#039;, &amp;#039;%%%1&amp;#039;)&lt;br /&gt;
	return (wikitext:gsub(regex, &amp;#039;&amp;#039;):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) == &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 = prefix .. &amp;#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&amp;#039; .. content .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&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;
local function renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
	if args.navbar ~= &amp;#039;off&amp;#039; and args.navbar ~= &amp;#039;plain&amp;#039; and not (not args.name and mw.getCurrentFrame():getParent():getTitle():gsub(&amp;#039;/sandbox$&amp;#039;, &amp;#039;&amp;#039;) == &amp;#039;Template:Navbox&amp;#039;) then&lt;br /&gt;
		titleCell:wikitext(navbar{&lt;br /&gt;
			args.name,&lt;br /&gt;
			mini = 1,&lt;br /&gt;
			fontstyle = (args.basestyle or &amp;#039;&amp;#039;) .. &amp;#039;;&amp;#039; .. (args.titlestyle or &amp;#039;&amp;#039;) .. &amp;#039;;background:none transparent;border:none;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;&amp;#039;&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(&amp;#039;tr&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	if args.titlegroup then&lt;br /&gt;
		titleRow&lt;br /&gt;
			:tag(&amp;#039;th&amp;#039;)&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;
				: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(&amp;#039;th&amp;#039;):attr(&amp;#039;scope&amp;#039;, &amp;#039;col&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	if args.titlegroup then&lt;br /&gt;
		titleCell&lt;br /&gt;
			:css(&amp;#039;border-left&amp;#039;, &amp;#039;2px solid #fdfdfd&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;)&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(&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;
			:attr(&amp;#039;id&amp;#039;, mw.uri.anchorEncode(args.title))&lt;br /&gt;
			:addClass(args.titleclass)&lt;br /&gt;
			:css(&amp;#039;font-size&amp;#039;, &amp;#039;114%&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;margin&amp;#039;, &amp;#039;0 4em&amp;#039;)&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(&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;
			:addClass(args.aboveclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.abovestyle)&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.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(&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;
			:addClass(args.belowclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.belowstyle)&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.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(&amp;#039;tr&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args.imageleft then&lt;br /&gt;
		row&lt;br /&gt;
			:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;navbox-image&amp;#039;)&lt;br /&gt;
				:addClass(args.imageclass)&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;0px 2px 0px 0px&amp;#039;)&lt;br /&gt;
				:cssText(args.imageleftstyle)&lt;br /&gt;
				:attr(&amp;#039;rowspan&amp;#039;, #listnums)&lt;br /&gt;
				:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
					:wikitext(processItem(args.imageleft))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args[&amp;#039;group&amp;#039; .. listnum] then&lt;br /&gt;
		local groupCell = row:tag(&amp;#039;th&amp;#039;)&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;
			:addClass(args.groupclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
            :css(&amp;#039;width&amp;#039;, args.groupwidth or &amp;#039;1%&amp;#039;) -- If groupwidth not specified, minimize width&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:cssText(args.groupstyle)&lt;br /&gt;
			:cssText(args[&amp;#039;group&amp;#039; .. listnum .. &amp;#039;style&amp;#039;])&lt;br /&gt;
			:wikitext(args[&amp;#039;group&amp;#039; .. listnum])&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[&amp;#039;group&amp;#039; .. listnum] then&lt;br /&gt;
		listCell&lt;br /&gt;
			:css(&amp;#039;text-align&amp;#039;, &amp;#039;left&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;border-left-width&amp;#039;, &amp;#039;2px&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;border-left-style&amp;#039;, &amp;#039;solid&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;
	if not args.groupwidth then&lt;br /&gt;
		listCell:css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local rowstyle  -- usually nil so cssText(rowstyle) usually adds nothing&lt;br /&gt;
	if index % 2 == 1 then&lt;br /&gt;
		rowstyle = args.oddstyle&lt;br /&gt;
	else&lt;br /&gt;
		rowstyle = args.evenstyle&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listText = args[&amp;#039;list&amp;#039; .. listnum]&lt;br /&gt;
	local oddEven = ODD_EVEN_MARKER&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 RESTART_MARKER or &amp;#039;odd&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	listCell&lt;br /&gt;
		:css(&amp;#039;padding&amp;#039;, &amp;#039;0px&amp;#039;)&lt;br /&gt;
		:cssText(args.liststyle)&lt;br /&gt;
		:cssText(rowstyle)&lt;br /&gt;
		:cssText(args[&amp;#039;list&amp;#039; .. listnum .. &amp;#039;style&amp;#039;])&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.listclass)&lt;br /&gt;
		:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;padding&amp;#039;, (index == 1 and args.list1padding) or args.listpadding or &amp;#039;0em 0.25em&amp;#039;)&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(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;navbox-image&amp;#039;)&lt;br /&gt;
				:addClass(args.imageclass)&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;0px 0px 0px 2px&amp;#039;)&lt;br /&gt;
				:cssText(args.imagestyle)&lt;br /&gt;
				:attr(&amp;#039;rowspan&amp;#039;, #listnums)&lt;br /&gt;
				:tag(&amp;#039;div&amp;#039;)&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 == &amp;#039;subgroup&amp;#039; or args.tracking == &amp;#039;no&amp;#039; then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local listClasses = {&lt;br /&gt;
		[&amp;#039;plainlist&amp;#039;] = true, [&amp;#039;hlist&amp;#039;] = true, [&amp;#039;hlist hnum&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;hlist hwrap&amp;#039;] = true, [&amp;#039;hlist vcard&amp;#039;] = true, [&amp;#039;vcard hlist&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;hlist vevent&amp;#039;] = 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;
local function hasBackgroundColors()&lt;br /&gt;
	for _, key in ipairs({&amp;#039;titlestyle&amp;#039;, &amp;#039;groupstyle&amp;#039;, &amp;#039;basestyle&amp;#039;, &amp;#039;abovestyle&amp;#039;, &amp;#039;belowstyle&amp;#039;}) do&lt;br /&gt;
		if tostring(args[key]):find(&amp;#039;background&amp;#039;, 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({&amp;#039;groupstyle&amp;#039;, &amp;#039;basestyle&amp;#039;, &amp;#039;abovestyle&amp;#039;, &amp;#039;belowstyle&amp;#039;}) do&lt;br /&gt;
		if tostring(args[key]):find(&amp;#039;border&amp;#039;, 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;
	local styleratio = require(&amp;#039;Module:Color contrast&amp;#039;)._styleratio&lt;br /&gt;
&lt;br /&gt;
	for key, style in pairs(args) do&lt;br /&gt;
		if tostring(key):match(&amp;quot;style$&amp;quot;) then&lt;br /&gt;
			if styleratio{mw.text.unstripNoWiki(style)} &amp;lt; 4.5 then&lt;br /&gt;
				return true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getTrackingCategories()&lt;br /&gt;
	local cats = {}&lt;br /&gt;
	if needsHorizontalLists() then table.insert(cats, &amp;#039;Navigational boxes without horizontal lists&amp;#039;) end&lt;br /&gt;
	if hasBackgroundColors() then table.insert(cats, &amp;#039;Navboxes using background colours&amp;#039;) end&lt;br /&gt;
	if isIllegible() then table.insert(cats, &amp;#039;Potentially illegible navboxes&amp;#039;) end&lt;br /&gt;
	if hasBorders() then table.insert(cats, &amp;#039;Navboxes using borders&amp;#039;) 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 == &amp;#039;doc&amp;#039; or subpage == &amp;#039;sandbox&amp;#039; or subpage == &amp;#039;testcases&amp;#039; then return end&lt;br /&gt;
&lt;br /&gt;
	for _, cat in ipairs(getTrackingCategories()) do&lt;br /&gt;
		builder:wikitext(&amp;#039;[[Category:&amp;#039; .. cat .. &amp;#039;]]&amp;#039;)&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(&amp;#039;table&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;nowraplinks&amp;#039;)&lt;br /&gt;
		:addClass(args.bodyclass)&lt;br /&gt;
&lt;br /&gt;
	if args.title and (args.state ~= &amp;#039;plain&amp;#039; and args.state ~= &amp;#039;off&amp;#039;) then&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass(&amp;#039;collapsible&amp;#039;)&lt;br /&gt;
			:addClass(args.state or &amp;#039;autocollapse&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	tbl:css(&amp;#039;border-spacing&amp;#039;, 0)&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;
			: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(&amp;#039;navbox-inner&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;background&amp;#039;, &amp;#039;transparent&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;color&amp;#039;, &amp;#039;inherit&amp;#039;)&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;
&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;
	border = mw.text.trim(args.border 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()&lt;br /&gt;
&lt;br /&gt;
	-- render the appropriate wrapper around the navbox, depending on the border param&lt;br /&gt;
	local res = mw.html.create()&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;
		if args.title then&lt;br /&gt;
			nav:attr(&amp;#039;aria-labelledby&amp;#039;, mw.uri.anchorEncode(args.title))&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 parent navbox, and is&lt;br /&gt;
		-- therefore inside a div with padding:0em 0.25em. We start with a &amp;lt;/div&amp;gt; to avoid the&lt;br /&gt;
		-- padding being applied, and at the 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;
			:cssText(args.bodystyle)&lt;br /&gt;
			:cssText(args.style)&lt;br /&gt;
			:css(&amp;#039;padding&amp;#039;, &amp;#039;3px&amp;#039;)&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		if args.title then&lt;br /&gt;
			nav:attr(&amp;#039;aria-labelledby&amp;#039;, mw.uri.anchorEncode(args.title))&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;
	renderTrackingCategories(res)&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(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
	end&lt;br /&gt;
	args = getArgs(frame, {wrappers = {&amp;#039;Template:Navbox&amp;#039;, &amp;#039;Template:Navbox subgroup&amp;#039;}})&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&amp;#039;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>Amc-admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.americanmusicclub.com/index.php?title=Module:Navbox&amp;diff=27629&amp;oldid=prev</id>
		<title>Amc-admin: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://wiki.americanmusicclub.com/index.php?title=Module:Navbox&amp;diff=27629&amp;oldid=prev"/>
		<updated>2017-09-18T16:56:51Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&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(&amp;#039;Module:Navbar&amp;#039;)._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 = &amp;#039;\127_ODDEVEN_\127&amp;#039;&lt;br /&gt;
local RESTART_MARKER = &amp;#039;\127_ODDEVEN0_\127&amp;#039;&lt;br /&gt;
local REGEX_MARKER = &amp;#039;\127_ODDEVEN(%d?)_\127&amp;#039;&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 = &amp;#039;[[Category:Navbox orphans]]&amp;#039;&lt;br /&gt;
	if border == &amp;#039;subgroup&amp;#039; and args.orphan ~= &amp;#039;yes&amp;#039; 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 = &amp;#039;odd&amp;#039;, &amp;#039;even&amp;#039;&lt;br /&gt;
	if args.evenodd then&lt;br /&gt;
		if args.evenodd == &amp;#039;swap&amp;#039; 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 == &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;
	local regex = orphanCat:gsub(&amp;#039;([%[%]])&amp;#039;, &amp;#039;%%%1&amp;#039;)&lt;br /&gt;
	return (wikitext:gsub(regex, &amp;#039;&amp;#039;):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) == &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 = prefix .. &amp;#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&amp;#039; .. content .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&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;
local function renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
	if args.navbar ~= &amp;#039;off&amp;#039; and args.navbar ~= &amp;#039;plain&amp;#039; and not (not args.name and mw.getCurrentFrame():getParent():getTitle():gsub(&amp;#039;/sandbox$&amp;#039;, &amp;#039;&amp;#039;) == &amp;#039;Template:Navbox&amp;#039;) then&lt;br /&gt;
		titleCell:wikitext(navbar{&lt;br /&gt;
			args.name,&lt;br /&gt;
			mini = 1,&lt;br /&gt;
			fontstyle = (args.basestyle or &amp;#039;&amp;#039;) .. &amp;#039;;&amp;#039; .. (args.titlestyle or &amp;#039;&amp;#039;) .. &amp;#039;;background:none transparent;border:none;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;&amp;#039;&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(&amp;#039;tr&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	if args.titlegroup then&lt;br /&gt;
		titleRow&lt;br /&gt;
			:tag(&amp;#039;th&amp;#039;)&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;
				: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(&amp;#039;th&amp;#039;):attr(&amp;#039;scope&amp;#039;, &amp;#039;col&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	if args.titlegroup then&lt;br /&gt;
		titleCell&lt;br /&gt;
			:css(&amp;#039;border-left&amp;#039;, &amp;#039;2px solid #fdfdfd&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;)&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(&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;
			:attr(&amp;#039;id&amp;#039;, mw.uri.anchorEncode(args.title))&lt;br /&gt;
			:addClass(args.titleclass)&lt;br /&gt;
			:css(&amp;#039;font-size&amp;#039;, &amp;#039;114%&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;margin&amp;#039;, &amp;#039;0 4em&amp;#039;)&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(&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;
			:addClass(args.aboveclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.abovestyle)&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.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(&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;
			:addClass(args.belowclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.belowstyle)&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.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(&amp;#039;tr&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args.imageleft then&lt;br /&gt;
		row&lt;br /&gt;
			:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;navbox-image&amp;#039;)&lt;br /&gt;
				:addClass(args.imageclass)&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;0px 2px 0px 0px&amp;#039;)&lt;br /&gt;
				:cssText(args.imageleftstyle)&lt;br /&gt;
				:attr(&amp;#039;rowspan&amp;#039;, #listnums)&lt;br /&gt;
				:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
					:wikitext(processItem(args.imageleft))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args[&amp;#039;group&amp;#039; .. listnum] then&lt;br /&gt;
		local groupCell = row:tag(&amp;#039;th&amp;#039;)&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;
			:addClass(args.groupclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
            :css(&amp;#039;width&amp;#039;, args.groupwidth or &amp;#039;1%&amp;#039;) -- If groupwidth not specified, minimize width&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:cssText(args.groupstyle)&lt;br /&gt;
			:cssText(args[&amp;#039;group&amp;#039; .. listnum .. &amp;#039;style&amp;#039;])&lt;br /&gt;
			:wikitext(args[&amp;#039;group&amp;#039; .. listnum])&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[&amp;#039;group&amp;#039; .. listnum] then&lt;br /&gt;
		listCell&lt;br /&gt;
			:css(&amp;#039;text-align&amp;#039;, &amp;#039;left&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;border-left-width&amp;#039;, &amp;#039;2px&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;border-left-style&amp;#039;, &amp;#039;solid&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;
	if not args.groupwidth then&lt;br /&gt;
		listCell:css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local rowstyle  -- usually nil so cssText(rowstyle) usually adds nothing&lt;br /&gt;
	if index % 2 == 1 then&lt;br /&gt;
		rowstyle = args.oddstyle&lt;br /&gt;
	else&lt;br /&gt;
		rowstyle = args.evenstyle&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listText = args[&amp;#039;list&amp;#039; .. listnum]&lt;br /&gt;
	local oddEven = ODD_EVEN_MARKER&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 RESTART_MARKER or &amp;#039;odd&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	listCell&lt;br /&gt;
		:css(&amp;#039;padding&amp;#039;, &amp;#039;0px&amp;#039;)&lt;br /&gt;
		:cssText(args.liststyle)&lt;br /&gt;
		:cssText(rowstyle)&lt;br /&gt;
		:cssText(args[&amp;#039;list&amp;#039; .. listnum .. &amp;#039;style&amp;#039;])&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.listclass)&lt;br /&gt;
		:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;padding&amp;#039;, (index == 1 and args.list1padding) or args.listpadding or &amp;#039;0em 0.25em&amp;#039;)&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(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;navbox-image&amp;#039;)&lt;br /&gt;
				:addClass(args.imageclass)&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;0px 0px 0px 2px&amp;#039;)&lt;br /&gt;
				:cssText(args.imagestyle)&lt;br /&gt;
				:attr(&amp;#039;rowspan&amp;#039;, #listnums)&lt;br /&gt;
				:tag(&amp;#039;div&amp;#039;)&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 == &amp;#039;subgroup&amp;#039; or args.tracking == &amp;#039;no&amp;#039; then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local listClasses = {&lt;br /&gt;
		[&amp;#039;plainlist&amp;#039;] = true, [&amp;#039;hlist&amp;#039;] = true, [&amp;#039;hlist hnum&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;hlist hwrap&amp;#039;] = true, [&amp;#039;hlist vcard&amp;#039;] = true, [&amp;#039;vcard hlist&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;hlist vevent&amp;#039;] = 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;
local function hasBackgroundColors()&lt;br /&gt;
	for _, key in ipairs({&amp;#039;titlestyle&amp;#039;, &amp;#039;groupstyle&amp;#039;, &amp;#039;basestyle&amp;#039;}) do&lt;br /&gt;
		if tostring(args[key]):find(&amp;#039;background&amp;#039;, 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;
	local styleratio = require(&amp;#039;Module:Color contrast&amp;#039;)._styleratio&lt;br /&gt;
&lt;br /&gt;
	for key, style in pairs(args) do&lt;br /&gt;
		if tostring(key):match(&amp;quot;style$&amp;quot;) then&lt;br /&gt;
			if styleratio{mw.text.unstripNoWiki(style)} &amp;lt; 4.5 then&lt;br /&gt;
				return true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getTrackingCategories()&lt;br /&gt;
	local cats = {}&lt;br /&gt;
	if needsHorizontalLists() then table.insert(cats, &amp;#039;Navigational boxes without horizontal lists&amp;#039;) end&lt;br /&gt;
	if hasBackgroundColors() then table.insert(cats, &amp;#039;Navboxes using background colours&amp;#039;) end&lt;br /&gt;
	if isIllegible() then table.insert(cats, &amp;#039;Potentially illegible navboxes&amp;#039;) 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 == &amp;#039;doc&amp;#039; or subpage == &amp;#039;sandbox&amp;#039; or subpage == &amp;#039;testcases&amp;#039; then return end&lt;br /&gt;
&lt;br /&gt;
	for _, cat in ipairs(getTrackingCategories()) do&lt;br /&gt;
		builder:wikitext(&amp;#039;[[Category:&amp;#039; .. cat .. &amp;#039;]]&amp;#039;)&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(&amp;#039;table&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;nowraplinks&amp;#039;)&lt;br /&gt;
		:addClass(args.bodyclass)&lt;br /&gt;
&lt;br /&gt;
	if args.title and (args.state ~= &amp;#039;plain&amp;#039; and args.state ~= &amp;#039;off&amp;#039;) then&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass(&amp;#039;collapsible&amp;#039;)&lt;br /&gt;
			:addClass(args.state or &amp;#039;autocollapse&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	tbl:css(&amp;#039;border-spacing&amp;#039;, 0)&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;
			: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(&amp;#039;navbox-inner&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;background&amp;#039;, &amp;#039;transparent&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;color&amp;#039;, &amp;#039;inherit&amp;#039;)&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;
&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;
	border = mw.text.trim(args.border 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()&lt;br /&gt;
&lt;br /&gt;
	-- render the appropriate wrapper around the navbox, depending on the border param&lt;br /&gt;
	local res = mw.html.create()&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;
		if args.title then&lt;br /&gt;
			nav:attr(&amp;#039;aria-labelledby&amp;#039;, mw.uri.anchorEncode(args.title))&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 parent navbox, and is&lt;br /&gt;
		-- therefore inside a div with padding:0em 0.25em. We start with a &amp;lt;/div&amp;gt; to avoid the&lt;br /&gt;
		-- padding being applied, and at the 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;
			:cssText(args.bodystyle)&lt;br /&gt;
			:cssText(args.style)&lt;br /&gt;
			:css(&amp;#039;padding&amp;#039;, &amp;#039;3px&amp;#039;)&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		if args.title then&lt;br /&gt;
			nav:attr(&amp;#039;aria-labelledby&amp;#039;, mw.uri.anchorEncode(args.title))&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;
	renderTrackingCategories(res)&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(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
	end&lt;br /&gt;
	args = getArgs(frame, {wrappers = &amp;#039;Template:Navbox&amp;#039;})&lt;br /&gt;
&lt;br /&gt;
	-- Read the arguments in the order they&amp;#039;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>Amc-admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.americanmusicclub.com/index.php?title=Module:Navbox&amp;diff=5106&amp;oldid=prev</id>
		<title>Amc-admin: 66 revisions imported</title>
		<link rel="alternate" type="text/html" href="https://wiki.americanmusicclub.com/index.php?title=Module:Navbox&amp;diff=5106&amp;oldid=prev"/>
		<updated>2016-10-31T22:22:53Z</updated>

		<summary type="html">&lt;p&gt;66 revisions imported&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&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(&amp;#039;Module:Navbar&amp;#039;)._navbar&lt;br /&gt;
local getArgs -- lazily initialized&lt;br /&gt;
&lt;br /&gt;
local args&lt;br /&gt;
local tableRowAdded = false&lt;br /&gt;
local border&lt;br /&gt;
local listnums = {}&lt;br /&gt;
&lt;br /&gt;
local function trim(s)&lt;br /&gt;
    return (mw.ustring.gsub(s, &amp;quot;^%s*(.-)%s*$&amp;quot;, &amp;quot;%1&amp;quot;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addNewline(s)&lt;br /&gt;
    if s:match(&amp;#039;^[*:;#]&amp;#039;) or s:match(&amp;#039;^{|&amp;#039;) then&lt;br /&gt;
        return &amp;#039;\n&amp;#039; .. s ..&amp;#039;\n&amp;#039;&lt;br /&gt;
    else&lt;br /&gt;
        return s&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addTableRow(tbl)&lt;br /&gt;
    -- If any other rows have already been added, then we add a 2px gutter row.&lt;br /&gt;
    if tableRowAdded then&lt;br /&gt;
        tbl&lt;br /&gt;
            :tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
                :css(&amp;#039;height&amp;#039;, &amp;#039;2px&amp;#039;)&lt;br /&gt;
                :tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
                    :attr(&amp;#039;colspan&amp;#039;,2)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    tableRowAdded = true&lt;br /&gt;
&lt;br /&gt;
    return tbl:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderNavBar(titleCell)&lt;br /&gt;
    -- Depending on the presence of the navbar and/or show/hide link, we may need to add a spacer div on the left&lt;br /&gt;
    -- or right to keep the title centered.&lt;br /&gt;
    local spacerSide = nil&lt;br /&gt;
&lt;br /&gt;
    if args.navbar == &amp;#039;off&amp;#039; then&lt;br /&gt;
        -- No navbar, and client wants no spacer, i.e. wants the title to be shifted to the left. If there&amp;#039;s&lt;br /&gt;
        -- also no show/hide link, then we need a spacer on the right to achieve the left shift.&lt;br /&gt;
        if args.state == &amp;#039;plain&amp;#039; then spacerSide = &amp;#039;right&amp;#039; end&lt;br /&gt;
    elseif args.navbar == &amp;#039;plain&amp;#039; or (not args.name and mw.getCurrentFrame():getParent():getTitle():gsub(&amp;#039;/sandbox$&amp;#039;, &amp;#039;&amp;#039;) == &amp;#039;Template:Navbox&amp;#039;) then&lt;br /&gt;
        -- No navbar. Need a spacer on the left to balance out the width of the show/hide link.&lt;br /&gt;
        if args.state ~= &amp;#039;plain&amp;#039; then spacerSide = &amp;#039;left&amp;#039; end&lt;br /&gt;
    else&lt;br /&gt;
        -- Will render navbar (or error message). If there&amp;#039;s no show/hide link, need a spacer on the right&lt;br /&gt;
        -- to balance out the width of the navbar.&lt;br /&gt;
        if args.state == &amp;#039;plain&amp;#039; then spacerSide = &amp;#039;right&amp;#039; end&lt;br /&gt;
&lt;br /&gt;
        titleCell:wikitext(navbar{&lt;br /&gt;
            args.name,&lt;br /&gt;
            mini = 1,&lt;br /&gt;
            fontstyle = (args.basestyle or &amp;#039;&amp;#039;) .. &amp;#039;;&amp;#039; .. (args.titlestyle or &amp;#039;&amp;#039;) ..  &amp;#039;;background:none transparent;border:none;&amp;#039;&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Render the spacer div.&lt;br /&gt;
    if spacerSide then&lt;br /&gt;
        titleCell&lt;br /&gt;
            :tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
                :css(&amp;#039;float&amp;#039;, spacerSide)&lt;br /&gt;
                :css(&amp;#039;width&amp;#039;, &amp;#039;6em&amp;#039;)&lt;br /&gt;
                :wikitext(&amp;#039;&amp;amp;nbsp;&amp;#039;)&lt;br /&gt;
    end&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 = addTableRow(tbl)&lt;br /&gt;
&lt;br /&gt;
    if args.titlegroup then&lt;br /&gt;
        titleRow&lt;br /&gt;
            :tag(&amp;#039;th&amp;#039;)&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;
                :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(&amp;#039;th&amp;#039;):attr(&amp;#039;scope&amp;#039;, &amp;#039;col&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    if args.titlegroup then&lt;br /&gt;
        titleCell&lt;br /&gt;
            :css(&amp;#039;border-left&amp;#039;, &amp;#039;2px solid #fdfdfd&amp;#039;)&lt;br /&gt;
            :css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;)&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(&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;
            :attr(&amp;#039;id&amp;#039;, mw.uri.anchorEncode(args.title))&lt;br /&gt;
            :addClass(args.titleclass)&lt;br /&gt;
            :css(&amp;#039;font-size&amp;#039;, &amp;#039;114%&amp;#039;)&lt;br /&gt;
            :wikitext(addNewline(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;
    addTableRow(tbl)&lt;br /&gt;
        :tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
            :addClass(&amp;#039;navbox-abovebelow&amp;#039;)&lt;br /&gt;
            :addClass(args.aboveclass)&lt;br /&gt;
            :cssText(args.basestyle)&lt;br /&gt;
            :cssText(args.abovestyle)&lt;br /&gt;
            :attr(&amp;#039;colspan&amp;#039;, getAboveBelowColspan())&lt;br /&gt;
            :tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
                :wikitext(addNewline(args.above))&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;
    addTableRow(tbl)&lt;br /&gt;
        :tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
            :addClass(&amp;#039;navbox-abovebelow&amp;#039;)&lt;br /&gt;
            :addClass(args.belowclass)&lt;br /&gt;
            :cssText(args.basestyle)&lt;br /&gt;
            :cssText(args.belowstyle)&lt;br /&gt;
            :attr(&amp;#039;colspan&amp;#039;, getAboveBelowColspan())&lt;br /&gt;
            :tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
                :wikitext(addNewline(args.below))&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, listnum)&lt;br /&gt;
    local row = addTableRow(tbl)&lt;br /&gt;
&lt;br /&gt;
    if listnum == 1 and args.imageleft then&lt;br /&gt;
        row&lt;br /&gt;
            :tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
                :addClass(&amp;#039;navbox-image&amp;#039;)&lt;br /&gt;
                :addClass(args.imageclass)&lt;br /&gt;
                :css(&amp;#039;width&amp;#039;, &amp;#039;0%&amp;#039;)&lt;br /&gt;
                :css(&amp;#039;padding&amp;#039;, &amp;#039;0px 2px 0px 0px&amp;#039;)&lt;br /&gt;
                :cssText(args.imageleftstyle)&lt;br /&gt;
                :attr(&amp;#039;rowspan&amp;#039;, 2 * #listnums - 1)&lt;br /&gt;
                :tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
                    :wikitext(addNewline(args.imageleft))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if args[&amp;#039;group&amp;#039; .. listnum] then&lt;br /&gt;
        local groupCell = row:tag(&amp;#039;th&amp;#039;)&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;
            :addClass(args.groupclass)&lt;br /&gt;
            :cssText(args.basestyle)&lt;br /&gt;
&lt;br /&gt;
        if args.groupwidth then&lt;br /&gt;
            groupCell:css(&amp;#039;width&amp;#039;, args.groupwidth)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        groupCell&lt;br /&gt;
            :cssText(args.groupstyle)&lt;br /&gt;
            :cssText(args[&amp;#039;group&amp;#039; .. listnum .. &amp;#039;style&amp;#039;])&lt;br /&gt;
            :wikitext(args[&amp;#039;group&amp;#039; .. listnum])&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[&amp;#039;group&amp;#039; .. listnum] then&lt;br /&gt;
        listCell&lt;br /&gt;
            :css(&amp;#039;text-align&amp;#039;, &amp;#039;left&amp;#039;)&lt;br /&gt;
            :css(&amp;#039;border-left-width&amp;#039;, &amp;#039;2px&amp;#039;)&lt;br /&gt;
            :css(&amp;#039;border-left-style&amp;#039;, &amp;#039;solid&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;
    if not args.groupwidth then&lt;br /&gt;
        listCell:css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local isOdd = (listnum % 2) == 1&lt;br /&gt;
    local rowstyle = args.evenstyle&lt;br /&gt;
    if isOdd then rowstyle = args.oddstyle end&lt;br /&gt;
&lt;br /&gt;
    local evenOdd&lt;br /&gt;
    if args.evenodd == &amp;#039;swap&amp;#039; then&lt;br /&gt;
        if isOdd then evenOdd = &amp;#039;even&amp;#039; else evenOdd = &amp;#039;odd&amp;#039; end&lt;br /&gt;
    else&lt;br /&gt;
        if isOdd then evenOdd = args.evenodd or &amp;#039;odd&amp;#039; else evenOdd = args.evenodd or &amp;#039;even&amp;#039; end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    listCell&lt;br /&gt;
        :css(&amp;#039;padding&amp;#039;, &amp;#039;0px&amp;#039;)&lt;br /&gt;
        :cssText(args.liststyle)&lt;br /&gt;
        :cssText(rowstyle)&lt;br /&gt;
        :cssText(args[&amp;#039;list&amp;#039; .. listnum .. &amp;#039;style&amp;#039;])&lt;br /&gt;
        :addClass(&amp;#039;navbox-list&amp;#039;)&lt;br /&gt;
        :addClass(&amp;#039;navbox-&amp;#039; .. evenOdd)&lt;br /&gt;
        :addClass(args.listclass)&lt;br /&gt;
        :tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
            :css(&amp;#039;padding&amp;#039;, (listnum == 1 and args.list1padding) or args.listpadding or &amp;#039;0em 0.25em&amp;#039;)&lt;br /&gt;
            :wikitext(addNewline(args[&amp;#039;list&amp;#039; .. listnum]))&lt;br /&gt;
&lt;br /&gt;
    if listnum == 1 and args.image then&lt;br /&gt;
        row&lt;br /&gt;
            :tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
                :addClass(&amp;#039;navbox-image&amp;#039;)&lt;br /&gt;
                :addClass(args.imageclass)&lt;br /&gt;
                :css(&amp;#039;width&amp;#039;, &amp;#039;0%&amp;#039;)&lt;br /&gt;
                :css(&amp;#039;padding&amp;#039;, &amp;#039;0px 0px 0px 2px&amp;#039;)&lt;br /&gt;
                :cssText(args.imagestyle)&lt;br /&gt;
                :attr(&amp;#039;rowspan&amp;#039;, 2 * #listnums - 1)&lt;br /&gt;
                :tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
                    :wikitext(addNewline(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 == &amp;#039;child&amp;#039; or border == &amp;#039;subgroup&amp;#039;  or args.tracking == &amp;#039;no&amp;#039; then return false end&lt;br /&gt;
&lt;br /&gt;
    local listClasses = {&amp;#039;plainlist&amp;#039;, &amp;#039;hlist&amp;#039;, &amp;#039;hlist hnum&amp;#039;, &amp;#039;hlist hwrap&amp;#039;, &amp;#039;hlist vcard&amp;#039;, &amp;#039;vcard hlist&amp;#039;, &amp;#039;hlist vevent&amp;#039;}&lt;br /&gt;
    for i, cls in ipairs(listClasses) do&lt;br /&gt;
        if args.listclass == cls or args.bodyclass == cls then&lt;br /&gt;
            return false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasBackgroundColors()&lt;br /&gt;
    return mw.ustring.match(args.titlestyle or &amp;#039;&amp;#039;,&amp;#039;background&amp;#039;) or mw.ustring.match(args.groupstyle or &amp;#039;&amp;#039;,&amp;#039;background&amp;#039;) or mw.ustring.match(args.basestyle or &amp;#039;&amp;#039;,&amp;#039;background&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isIllegible()&lt;br /&gt;
    local styleratio = require(&amp;#039;Module:Color contrast&amp;#039;)._styleratio&lt;br /&gt;
&lt;br /&gt;
    for key, style in pairs(args) do&lt;br /&gt;
        if tostring(key):match(&amp;quot;style$&amp;quot;) then&lt;br /&gt;
            if styleratio{mw.text.unstripNoWiki(style)} &amp;lt; 4.5 then&lt;br /&gt;
                return true &lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getTrackingCategories()&lt;br /&gt;
    local cats = {}&lt;br /&gt;
    if needsHorizontalLists() then table.insert(cats, &amp;#039;Navigational boxes without horizontal lists&amp;#039;) end&lt;br /&gt;
    if hasBackgroundColors() then table.insert(cats, &amp;#039;Navboxes using background colours&amp;#039;) end&lt;br /&gt;
    if isIllegible() then table.insert(cats, &amp;#039;Potentially illegible navboxes&amp;#039;) 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 == &amp;#039;doc&amp;#039; or subpage == &amp;#039;sandbox&amp;#039; or subpage == &amp;#039;testcases&amp;#039; then return end&lt;br /&gt;
&lt;br /&gt;
    for i, cat in ipairs(getTrackingCategories()) do&lt;br /&gt;
        builder:wikitext(&amp;#039;[[Category:&amp;#039; .. cat .. &amp;#039;]]&amp;#039;)&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(&amp;#039;table&amp;#039;)&lt;br /&gt;
        :addClass(&amp;#039;nowraplinks&amp;#039;)&lt;br /&gt;
        :addClass(args.bodyclass)&lt;br /&gt;
&lt;br /&gt;
    if args.title and (args.state ~= &amp;#039;plain&amp;#039; and args.state ~= &amp;#039;off&amp;#039;) then&lt;br /&gt;
        tbl&lt;br /&gt;
            :addClass(&amp;#039;collapsible&amp;#039;)&lt;br /&gt;
            :addClass(args.state or &amp;#039;autocollapse&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    tbl:css(&amp;#039;border-spacing&amp;#039;, 0)&lt;br /&gt;
    if border == &amp;#039;subgroup&amp;#039; or border == &amp;#039;child&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;
            :cssText(args.bodystyle)&lt;br /&gt;
            :cssText(args.style)&lt;br /&gt;
    else -- regular navobx - bodystyle and style will be applied to the wrapper table&lt;br /&gt;
        tbl&lt;br /&gt;
            :addClass(&amp;#039;navbox-inner&amp;#039;)&lt;br /&gt;
            :css(&amp;#039;background&amp;#039;, &amp;#039;transparent&amp;#039;)&lt;br /&gt;
            :css(&amp;#039;color&amp;#039;, &amp;#039;inherit&amp;#039;)&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, 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;
&lt;br /&gt;
    for k, v in pairs(args) do&lt;br /&gt;
        local listnum = (&amp;#039;&amp;#039; .. 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;
    table.sort(listnums)&lt;br /&gt;
&lt;br /&gt;
    border = trim(args.border or args[1] or &amp;#039;&amp;#039;)&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;
    -- render the appropriate wrapper around the navbox, depending on the border param&lt;br /&gt;
    local res = mw.html.create()&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;
        if args.title then&lt;br /&gt;
            nav:attr(&amp;#039;aria-labelledby&amp;#039;, mw.uri.anchorEncode(args.title))&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; or border == &amp;#039;child&amp;#039; then&lt;br /&gt;
        -- We assume that this navbox is being rendered in a list cell of a parent navbox, and is&lt;br /&gt;
        -- therefore inside a div with padding:0em 0.25em. We start with a &amp;lt;/div&amp;gt; to avoid the&lt;br /&gt;
        -- padding being applied, and at the 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;) -- XXX: hack due to lack of unclosed support in mw.html.&lt;br /&gt;
            :node(tbl)&lt;br /&gt;
            :wikitext(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;) -- XXX: hack due to lack of unclosed support in mw.html.&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;
            :cssText(args.bodystyle)&lt;br /&gt;
            :cssText(args.style)&lt;br /&gt;
            :css(&amp;#039;padding&amp;#039;, &amp;#039;3px&amp;#039;)&lt;br /&gt;
            :node(tbl)&lt;br /&gt;
        if args.title then&lt;br /&gt;
            nav:attr(&amp;#039;aria-labelledby&amp;#039;, mw.uri.anchorEncode(args.title))&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;
    renderTrackingCategories(res)&lt;br /&gt;
&lt;br /&gt;
    return 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(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
    end&lt;br /&gt;
    args = getArgs(frame, {wrappers = &amp;#039;Template:Navbox&amp;#039;})&lt;br /&gt;
&lt;br /&gt;
    -- Read the arguments in the order they&amp;#039;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>Amc-admin</name></author>
	</entry>
</feed>