<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans">
	<id>https://unimage.wcnm.pw/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3ADev%2FNavbox</id>
	<title>模块:Dev/Navbox - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://unimage.wcnm.pw/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3ADev%2FNavbox"/>
	<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Navbox&amp;action=history"/>
	<updated>2026-08-31T23:32:24Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Navbox&amp;diff=716&amp;oldid=prev</id>
		<title>WikiAdmin：​从 Fandom Developer Wiki 本地化全局模块，源修订 210054</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Navbox&amp;diff=716&amp;oldid=prev"/>
		<updated>2026-08-31T12:54:51Z</updated>

		<summary type="html">&lt;p&gt;从 Fandom Developer Wiki 本地化全局模块，源修订 210054&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- 来源：https://dev.fandom.com/wiki/Module%3ANavbox&lt;br /&gt;
-- 许可：CC BY-SA，作者与修订记录见来源页面&lt;br /&gt;
--------------------------------------------------------------------&lt;br /&gt;
--&amp;lt;pre&amp;gt; Navbox Module&lt;br /&gt;
--&lt;br /&gt;
-- * Fully CSS styled (inline styles possible but not default)&lt;br /&gt;
-- * Supports unlimited rows&lt;br /&gt;
-- * Automatic striping alternation, including for child navbox subsections&lt;br /&gt;
--&lt;br /&gt;
-- Original module by User:Tjcool007 from layton.fandom.com&lt;br /&gt;
--------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local i18n = require(&amp;#039;Module:Dev/i18n&amp;#039;).loadMessages(&amp;#039;Navbox&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local showText, hideText = i18n:useLanguageConversionType(&amp;#039;userLanguage&amp;#039;):msg(&amp;#039;show&amp;#039;), i18n:useLanguageConversionType(&amp;#039;userLanguage&amp;#039;):msg(&amp;#039;hide&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local showText_zh_hans, hideText_zh_hans = i18n:inLang(&amp;#039;zh-hans&amp;#039;):msg(&amp;#039;show&amp;#039;), i18n:inLang(&amp;#039;zh-hans&amp;#039;):msg(&amp;#039;hide&amp;#039;)&lt;br /&gt;
local showText_zh_hant, hideText_zh_hant = i18n:inLang(&amp;#039;zh-hant&amp;#039;):msg(&amp;#039;show&amp;#039;), i18n:inLang(&amp;#039;zh-hant&amp;#039;):msg(&amp;#039;hide&amp;#039;)&lt;br /&gt;
local showText_zh_hant_hk, hideText_zh_hant_hk = i18n:inLang(&amp;#039;zh-hk&amp;#039;):msg(&amp;#039;show&amp;#039;), i18n:inLang(&amp;#039;zh-hk&amp;#039;):msg(&amp;#039;hide&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local cfg = {&lt;br /&gt;
	marker = {&lt;br /&gt;
		oddeven = &amp;#039;\127_ODDEVEN_\127&amp;#039;,&lt;br /&gt;
		contains_subgroup = &amp;#039;\127_ODDEVEN0_\127&amp;#039;,&lt;br /&gt;
		restart_header = &amp;#039;\127_ODDEVEN1_\127&amp;#039;,&lt;br /&gt;
		regex_changer = &amp;#039;\127_ODDEVEN([01]?)_\127&amp;#039;,&lt;br /&gt;
		odd = &amp;#039;\127_ODD_\127&amp;#039;,&lt;br /&gt;
		even = &amp;#039;\127_EVEN_\127&amp;#039;,&lt;br /&gt;
		oddeven_sep = &amp;#039;\127_ODDEVEN2_\127&amp;#039;,&lt;br /&gt;
		oddeven_end = &amp;#039;\127_ODDEVEN3_\127&amp;#039;,&lt;br /&gt;
		regex_oddeven_sep = &amp;#039;\127_ODDEVEN[23]_\127&amp;#039;,&lt;br /&gt;
		regex_odd = &amp;#039;(\127_ODD_\127[^\127]*)\127_ODDEVEN2_\127([^\127]*)\127_ODDEVEN2_\127[^\127]*\127_ODDEVEN3_\127&amp;#039;,&lt;br /&gt;
		regex_even = &amp;#039;(\127_EVEN_\127[^\127]*)\127_ODDEVEN2_\127[^\127]*\127_ODDEVEN2_\127([^\127]*)\127_ODDEVEN3_\127&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	pattern = {&lt;br /&gt;
		hlist = &amp;#039;hlist&amp;#039;,&lt;br /&gt;
		plainlist = &amp;#039;plainlist&amp;#039;,&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	category = {&lt;br /&gt;
		error = &amp;#039;[[Category:Navboxes with internal errors]]&amp;#039;,&lt;br /&gt;
		orphan = &amp;#039;[[Category:Navbox orphans]]&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------&lt;br /&gt;
-- ARGUMENTS PREPROCESSOR&lt;br /&gt;
-- * Extracts arguments from frame and stores them in args table&lt;br /&gt;
-- * At the same time, checks for valid row numbers&lt;br /&gt;
------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--- Preprocessor for the arguments.&lt;br /&gt;
-- Will fill up the args table with the parameters from the frame grouped by their type.&lt;br /&gt;
--&lt;br /&gt;
-- @param frame The frame passed to the Module.&lt;br /&gt;
local function preProcessArgs(frame)&lt;br /&gt;
	local tmp, args, rownums, skiprows = {}, {}, {}, {}&lt;br /&gt;
&lt;br /&gt;
	if frame == mw.getCurrentFrame() then&lt;br /&gt;
		tmp = frame:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		tmp = frame&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Storage tables&lt;br /&gt;
	local nums, subnums = {}, {}&lt;br /&gt;
&lt;br /&gt;
	-- Loop over all the args&lt;br /&gt;
	for k, v in pairs(tmp) do&lt;br /&gt;
		-- Skip empty args, which are useless&lt;br /&gt;
		if v ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			local str = tostring(k)&lt;br /&gt;
			local cat, num, subnum = str:match(&amp;#039;^(%a+)([1-9]%d*)%.([1-9][%d%.]*)$&amp;#039;)&lt;br /&gt;
			if subnum then&lt;br /&gt;
				nums[num] = true&lt;br /&gt;
				if type(subnums[num]) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
					subnums[num] = {}&lt;br /&gt;
				end&lt;br /&gt;
				subnums[num][cat..subnum] = v&lt;br /&gt;
			else&lt;br /&gt;
				cat, num = str:match(&amp;#039;^(%a+)([1-9]%d*)$&amp;#039;)&lt;br /&gt;
				if cat == &amp;#039;header&amp;#039; or cat == &amp;#039;list&amp;#039; then&lt;br /&gt;
					nums[num] = true&lt;br /&gt;
				end&lt;br /&gt;
				args[k] = v -- Simple copy&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Generate child navboxes&lt;br /&gt;
	for k, v in pairs(subnums) do&lt;br /&gt;
		for _, arg in ipairs({&amp;#039;showall&amp;#039;, &amp;#039;alternaterows&amp;#039;, &amp;#039;titlestyle&amp;#039;, &amp;#039;titleclass&amp;#039;, &amp;#039;abovestyle&amp;#039;, &amp;#039;aboveclass&amp;#039;, &amp;#039;rowclass&amp;#039;, &amp;#039;altrowclass&amp;#039;, &amp;#039;groupstyle&amp;#039;, &amp;#039;groupclass&amp;#039;, &amp;#039;altgroupstyle&amp;#039;, &amp;#039;altgroupclass&amp;#039;, &amp;#039;liststyle&amp;#039;, &amp;#039;listclass&amp;#039;, &amp;#039;altliststyle&amp;#039;, &amp;#039;altlistclass&amp;#039;, &amp;#039;belowstyle&amp;#039;, &amp;#039;belowclass&amp;#039;, &amp;#039;defaultstate&amp;#039;, &amp;#039;defaultcollapsetext&amp;#039;, &amp;#039;defaultexpandtext&amp;#039;}) do&lt;br /&gt;
			v[arg] = args[arg]&lt;br /&gt;
		end&lt;br /&gt;
		v.border = &amp;#039;child&amp;#039;&lt;br /&gt;
		args[&amp;#039;list&amp;#039;..k] = p.main(v)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs(nums) do&lt;br /&gt;
		rownums[#rownums+1] = tonumber(k)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	table.sort(rownums)&lt;br /&gt;
&lt;br /&gt;
	-- Calculate skip rows&lt;br /&gt;
	local cSection, cSkip&lt;br /&gt;
	local showall = args.showall&lt;br /&gt;
	for i=1,#rownums do&lt;br /&gt;
		local num = rownums[i]&lt;br /&gt;
		if args[&amp;#039;header&amp;#039;..num] then&lt;br /&gt;
			cSection = true&lt;br /&gt;
			cSkip = false&lt;br /&gt;
			local showme = args[&amp;#039;show&amp;#039;..num]&lt;br /&gt;
			if showme == &amp;#039;no&amp;#039; then&lt;br /&gt;
				cSkip = true&lt;br /&gt;
			elseif showme == &amp;#039;auto&amp;#039; or (showme ~= &amp;#039;yes&amp;#039; and showall ~= &amp;#039;yes&amp;#039;) then&lt;br /&gt;
				if not args[&amp;#039;list&amp;#039;..num] then&lt;br /&gt;
					local nextNum = rownums[i+1]&lt;br /&gt;
					cSkip = not nextNum or args[&amp;#039;header&amp;#039;..nextNum] -- If next has a header -&amp;gt; skip&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if cSection and cSkip then&lt;br /&gt;
			skiprows[num] = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Insert markers into class and style parameters where needed&lt;br /&gt;
	for i, v in ipairs({&amp;#039;groupclass&amp;#039;, &amp;#039;groupstyle&amp;#039;, &amp;#039;listclass&amp;#039;, &amp;#039;liststyle&amp;#039;}) do&lt;br /&gt;
		if args[&amp;#039;alt&amp;#039; .. v] then&lt;br /&gt;
			args[v] = cfg.marker.oddeven_sep .. (args[v] or &amp;#039;&amp;#039;) .. cfg.marker.oddeven_sep .. args[&amp;#039;alt&amp;#039; .. v] .. cfg.marker.oddeven_end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return args, rownums, skiprows&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------&lt;br /&gt;
-- MAIN FUNCTIONS&lt;br /&gt;
------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--- Processes the arguments to create the navbox.&lt;br /&gt;
--&lt;br /&gt;
-- @return A string with HTML that is the navbox.&lt;br /&gt;
local function _navbox(args, rownums, skiprows)&lt;br /&gt;
	local navbox -- Actual navbox&lt;br /&gt;
	local navbox_zh_hans, navbox_zh_hant, navbox_zh_hant_hk&lt;br /&gt;
&lt;br /&gt;
	local hasrows, hasData, hasTitle, hasChild = false, false, false, false&lt;br /&gt;
	local activeSection, sections, cimage, cimageleft&lt;br /&gt;
	&lt;br /&gt;
	local border = args.border or mw.text.trim(args[1] or &amp;#039;&amp;#039;) or &amp;#039;&amp;#039;&lt;br /&gt;
	if border == &amp;#039;child&amp;#039; then border = &amp;#039;subgroup&amp;#039; end&lt;br /&gt;
	local isChild = (border == &amp;#039;subgroup&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	local colspan = args.image and 3 or 2&lt;br /&gt;
	if args.imageleft then colspan = colspan + 1 end&lt;br /&gt;
	local rowspan = 0&lt;br /&gt;
	&lt;br /&gt;
	-- Language converter support&lt;br /&gt;
	local useZhConverter = false&lt;br /&gt;
    if mw.language.getContentLanguage():toBcp47Code() == &amp;#039;zh&amp;#039; then&lt;br /&gt;
    	useZhConverter = true&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	--- Wraps text in newlines if it begins with a list or table&lt;br /&gt;
	local function processItem(item)&lt;br /&gt;
		if item:sub(1, 2) == &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;
		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;
	--- Returns navbox contents with markers replaced for odd/even striping&lt;br /&gt;
	local function striped(wikitext, border)&lt;br /&gt;
		-- Child (subgroup) navboxes are flagged with a category that is removed&lt;br /&gt;
		-- by parent navboxes. The result is that the category shows all pages&lt;br /&gt;
		-- where a child navbox is not contained in a parent navbox.&lt;br /&gt;
		local orphanCat = cfg.category.orphan&lt;br /&gt;
		if border == &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 altrowclass = args.altrowclass or &amp;#039;alt&amp;#039;&lt;br /&gt;
		altrowclass = &amp;#039; &amp;#039; .. altrowclass&lt;br /&gt;
		local first, second = &amp;#039;&amp;#039;, altrowclass&lt;br /&gt;
		if args.alternaterows then&lt;br /&gt;
			if args.alternaterows == &amp;#039;swap&amp;#039; then&lt;br /&gt;
				first, second = second, first&lt;br /&gt;
			elseif args.alternaterows == &amp;#039;no&amp;#039; or args.alternaterows == &amp;#039;odd&amp;#039; then&lt;br /&gt;
				second = &amp;#039;&amp;#039;&lt;br /&gt;
			elseif args.alternaterows == &amp;#039;even&amp;#039; then&lt;br /&gt;
				first = altrowclass&lt;br /&gt;
			else&lt;br /&gt;
				first = args.alternaterows&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 = cfg.marker.odd&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;
					-- Subgroup encountered.&lt;br /&gt;
					-- Return a marker without incrementing the index.&lt;br /&gt;
					return index % 2 == 0 and cfg.marker.odd or cfg.marker.even&lt;br /&gt;
				elseif code == &amp;#039;1&amp;#039; then&lt;br /&gt;
					-- Title or header encountered.&lt;br /&gt;
					-- Restart the index and remove the marker.&lt;br /&gt;
					-- The next occurrence will use the initial class.&lt;br /&gt;
					index = 0&lt;br /&gt;
					return &amp;#039;&amp;#039;&lt;br /&gt;
				end&lt;br /&gt;
				index = index + 1&lt;br /&gt;
				return index % 2 == 1 and cfg.marker.odd or cfg.marker.even&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;
		wikitext = wikitext:gsub(regex, &amp;#039;&amp;#039;):gsub(cfg.marker.regex_changer, changer)&lt;br /&gt;
		local prevWikitext, hasNoMoreOddevenMarkers&lt;br /&gt;
		repeat&lt;br /&gt;
			prevWikitext = wikitext&lt;br /&gt;
			wikitext = wikitext:gsub(cfg.marker.regex_odd, &amp;#039;%1%2&amp;#039;):gsub(cfg.marker.regex_even, &amp;#039;%1%2&amp;#039;)&lt;br /&gt;
			hasNoMoreOddevenMarkers = wikitext:match(cfg.marker.regex_oddeven_sep) == nil&lt;br /&gt;
		until hasNoMoreOddevenMarkers or wikitext == prevWikitext&lt;br /&gt;
		wikitext = wikitext:gsub(cfg.marker.odd, first):gsub(cfg.marker.even, second)&lt;br /&gt;
		if not hasNoMoreOddevenMarkers then&lt;br /&gt;
			-- Something went wrong. Flag for investigation.&lt;br /&gt;
			-- See &amp;lt;https://discord.com/channels/246075715714416641/1266361437484486778&amp;gt; for details.&lt;br /&gt;
			wikitext = wikitext .. cfg.category.error&lt;br /&gt;
		end&lt;br /&gt;
		return wikitext&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	------------------------------------------------&lt;br /&gt;
	-- Title&lt;br /&gt;
	------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	--- Processes the VDE links in the title&lt;br /&gt;
	--&lt;br /&gt;
	-- @param titlecell The table cell of the title&lt;br /&gt;
	local function processVde( titlecell )&lt;br /&gt;
		if not args.template then return end&lt;br /&gt;
&lt;br /&gt;
		titlecell:wikitext(&amp;#039;&amp;lt;span class=&amp;quot;navbox-vde&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
			.. mw.getCurrentFrame():expandTemplate({&lt;br /&gt;
				title = &amp;#039;vdelinks&amp;#039;,&lt;br /&gt;
				args = { args.template, [&amp;#039;type&amp;#039;] = &amp;#039;navbox&amp;#039; }&lt;br /&gt;
			}) .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--- Processes the main title row&lt;br /&gt;
	local function processTitle()&lt;br /&gt;
		if not hasTitle then return end&lt;br /&gt;
&lt;br /&gt;
		local titlerow = mw.html.create(&amp;#039;tr&amp;#039;):addClass(&amp;#039;navbox-title&amp;#039;..cfg.marker.restart_header)&lt;br /&gt;
		local titlecell = mw.html.create(&amp;#039;th&amp;#039;):attr(&amp;#039;colspan&amp;#039;,colspan):attr(&amp;#039;scope&amp;#039;,&amp;#039;col&amp;#039;)&lt;br /&gt;
		local titlediv = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
		if not pcall( processVde, titlecell ) then&lt;br /&gt;
			titlediv:wikitext( &amp;#039;&amp;lt;b class=&amp;quot;navbox-vde error&amp;quot; title=&amp;quot;Missing Template:Vdelinks&amp;quot;&amp;gt;!!!&amp;lt;/b&amp;gt;&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		titlediv:wikitext( args.title or &amp;#039;{{{title}}}&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
		-- Padding&lt;br /&gt;
		local hasTemplate = args.template ~= nil&lt;br /&gt;
		local hasState = not args.state or args.state ~= &amp;#039;plain&amp;#039;&lt;br /&gt;
&lt;br /&gt;
		if hasTemplate or hasState then&lt;br /&gt;
			-- remove redundant classes in future if it won&amp;#039;t break the display of wikis&amp;#039; navboxes&lt;br /&gt;
			titlediv:addClass(&amp;#039;navbox-title-pad navbox-title-padleft navbox-title-padright&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args.titleclass then titlerow:addClass( args.titleclass ) end&lt;br /&gt;
		if args.titlestyle then titlecell:cssText( args.titlestyle ) end&lt;br /&gt;
&lt;br /&gt;
		titlecell:node(titlediv)&lt;br /&gt;
		titlerow:node(titlecell)&lt;br /&gt;
&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			navbox_zh_hans:node(titlerow)&lt;br /&gt;
			navbox_zh_hant:node(titlerow)&lt;br /&gt;
			navbox_zh_hant_hk:node(titlerow)&lt;br /&gt;
		else&lt;br /&gt;
			navbox:node(titlerow)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function _addGutter( parent, incRowspan )&lt;br /&gt;
		parent:tag(&amp;#039;tr&amp;#039;):addClass(&amp;#039;navbox-gutter&amp;#039;):tag(&amp;#039;td&amp;#039;):attr(&amp;#039;colspan&amp;#039;,2)&lt;br /&gt;
&lt;br /&gt;
		if incRowspan then&lt;br /&gt;
			rowspan = rowspan + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	------------------------------------------------&lt;br /&gt;
	-- Above/Below&lt;br /&gt;
	------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	--- Processes the above and below rows&lt;br /&gt;
	--&lt;br /&gt;
	-- @param rowtype Either &amp;#039;above&amp;#039; or &amp;#039;below&amp;#039;&lt;br /&gt;
	local function processAboveBelow( rowtype )&lt;br /&gt;
		if not args[rowtype] then return end&lt;br /&gt;
&lt;br /&gt;
		local abrow = mw.html.create(&amp;#039;tr&amp;#039;):addClass(&amp;#039;navbox-&amp;#039;..rowtype)&lt;br /&gt;
		local abcell = mw.html.create(&amp;#039;td&amp;#039;):attr(&amp;#039;colspan&amp;#039;,colspan):wikitext( processItem(args[rowtype]) )&lt;br /&gt;
&lt;br /&gt;
		if args[rowtype .. &amp;#039;class&amp;#039;] then abrow:addClass( args[rowtype .. &amp;#039;class&amp;#039;] ) end&lt;br /&gt;
		if args[rowtype .. &amp;#039;style&amp;#039;] then abcell:cssText( args[rowtype .. &amp;#039;style&amp;#039;] ) end&lt;br /&gt;
&lt;br /&gt;
		abrow:node( abcell )&lt;br /&gt;
		if hasTitle or rowtype == &amp;#039;below&amp;#039; then&lt;br /&gt;
			if useZhConverter then&lt;br /&gt;
				_addGutter( navbox_zh_hans )&lt;br /&gt;
				_addGutter( navbox_zh_hant )&lt;br /&gt;
				_addGutter( navbox_zh_hant_hk )&lt;br /&gt;
			else&lt;br /&gt;
				_addGutter( navbox )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			navbox_zh_hans:node( abrow )&lt;br /&gt;
			navbox_zh_hant:node( abrow )&lt;br /&gt;
			navbox_zh_hant_hk:node( abrow )&lt;br /&gt;
		else&lt;br /&gt;
			navbox:node( abrow )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	------------------------------------------------&lt;br /&gt;
	-- Main Rows&lt;br /&gt;
	------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	--- Processes the images&lt;br /&gt;
	local function _processImage(row, imgtype)&lt;br /&gt;
		if not args[imgtype] then return end&lt;br /&gt;
&lt;br /&gt;
		local iclass = imgtype == &amp;#039;image&amp;#039; and &amp;#039;navbox-image-right&amp;#039; or &amp;#039;navbox-image-left&amp;#039;&lt;br /&gt;
&lt;br /&gt;
		local imagecell = mw.html.create(&amp;#039;td&amp;#039;):addClass(&amp;#039;navbox-image&amp;#039;):addClass(iclass)&lt;br /&gt;
&lt;br /&gt;
		local image = args[imgtype]&lt;br /&gt;
		if image:sub(1,1) ~= &amp;#039;[&amp;#039; then&lt;br /&gt;
			local width = args[imgtype .. &amp;#039;width&amp;#039;] or &amp;#039;100px&amp;#039;&lt;br /&gt;
			imagecell:css(&amp;#039;width&amp;#039;,width):wikitext(&amp;#039;[&amp;#039;..&amp;#039;[&amp;#039; .. image  .. &amp;#039;|&amp;#039; .. width .. &amp;#039;|link=&amp;#039; .. (args[imgtype .. &amp;#039;link&amp;#039;] or &amp;#039;&amp;#039;) .. &amp;#039;]]&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			imagecell:css(&amp;#039;width&amp;#039;,&amp;#039;0%&amp;#039;):wikitext(image)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args[imgtype .. &amp;#039;class&amp;#039;] then imagecell:addClass( args[imgtype .. &amp;#039;class&amp;#039;] ) end&lt;br /&gt;
		if args[imgtype .. &amp;#039;style&amp;#039;] then imagecell:cssText( args[imgtype .. &amp;#039;style&amp;#039;] ) end&lt;br /&gt;
&lt;br /&gt;
		row:node( imagecell )&lt;br /&gt;
		if imgtype == &amp;#039;image&amp;#039; then&lt;br /&gt;
			cimage = imagecell&lt;br /&gt;
		else&lt;br /&gt;
			cimageleft = imagecell&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--- Closes the currently active section (if any)&lt;br /&gt;
	local function _closeCurrentSection()&lt;br /&gt;
		if not activeSection then return end&lt;br /&gt;
&lt;br /&gt;
		local row = mw.html.create(&amp;#039;tr&amp;#039;):addClass(&amp;#039;navbox-section-row&amp;#039;)&lt;br /&gt;
		local cell = mw.html.create(&amp;#039;td&amp;#039;):attr(&amp;#039;colspan&amp;#039;, 2)&lt;br /&gt;
&lt;br /&gt;
		if not hasrows then&lt;br /&gt;
			_processImage(row, &amp;#039;imageleft&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		cell:node(sections[activeSection])&lt;br /&gt;
		row:node(cell)&lt;br /&gt;
&lt;br /&gt;
		local firstRow = false&lt;br /&gt;
		if not hasrows then&lt;br /&gt;
			firstRow = true&lt;br /&gt;
			hasrows = true&lt;br /&gt;
			_processImage(row, &amp;#039;image&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if not isChild or not firstRow or hasTitle or args.above then&lt;br /&gt;
			if useZhConverter then&lt;br /&gt;
				_addGutter(navbox_zh_hans, not firstRow)&lt;br /&gt;
				_addGutter(navbox_zh_hant, not firstRow)&lt;br /&gt;
				_addGutter(navbox_zh_hant_hk, not firstRow)&lt;br /&gt;
			else&lt;br /&gt;
				_addGutter(navbox, not firstRow)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			navbox_zh_hans:node(row)&lt;br /&gt;
			navbox_zh_hant:node(row)&lt;br /&gt;
			navbox_zh_hant_hk:node(row)&lt;br /&gt;
		else&lt;br /&gt;
			navbox:node(row)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		rowspan = rowspan + 1&lt;br /&gt;
&lt;br /&gt;
		activeSection = false&lt;br /&gt;
		hasData = false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--- Process a single Header &amp;quot;row&amp;quot;&lt;br /&gt;
	--&lt;br /&gt;
	-- @param num Number of the row to be processed&lt;br /&gt;
	local function processHeader(num)&lt;br /&gt;
		if not args[&amp;#039;header&amp;#039;..num] then return end&lt;br /&gt;
&lt;br /&gt;
		_closeCurrentSection()&lt;br /&gt;
&lt;br /&gt;
		local subtable = mw.html.create(&amp;#039;table&amp;#039;):addClass(&amp;#039;navbox-section&amp;#039;)&lt;br /&gt;
		local headerrow = mw.html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		local header = mw.html.create(&amp;#039;th&amp;#039;):addClass(&amp;#039;navbox-header&amp;#039;..cfg.marker.restart_header):attr(&amp;#039;colspan&amp;#039;,2):attr(&amp;#039;scope&amp;#039;,&amp;#039;col&amp;#039;)&lt;br /&gt;
		local headerdiv = mw.html.create(&amp;#039;div&amp;#039;):wikitext( args[&amp;#039;header&amp;#039;..num] )&lt;br /&gt;
&lt;br /&gt;
		local collapseme = args[&amp;#039;state&amp;#039;..num] or false&lt;br /&gt;
		local state = false&lt;br /&gt;
&lt;br /&gt;
		if collapseme then&lt;br /&gt;
			-- Look at this one&lt;br /&gt;
			if collapseme ~= &amp;#039;plain&amp;#039; then&lt;br /&gt;
				state = collapseme == &amp;#039;expanded&amp;#039; and &amp;#039;expanded&amp;#039; or &amp;#039;collapsed&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- Look at default&lt;br /&gt;
			local collapseall = args.defaultstate or false&lt;br /&gt;
			if collapseall then&lt;br /&gt;
				state = collapseall == &amp;#039;expanded&amp;#039; and &amp;#039;expanded&amp;#039; or &amp;#039;collapsed&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if state then&lt;br /&gt;
			subtable:addClass(&amp;#039;mw-collapsible&amp;#039;):attr(&amp;#039;data-expandtext&amp;#039;,args[&amp;#039;expandtext&amp;#039;..num] or args[&amp;#039;defaultexpandtext&amp;#039;] or showText):attr(&amp;#039;data-collapsetext&amp;#039;,args[&amp;#039;collapsetext&amp;#039;..num] or args[&amp;#039;defaultcollapsetext&amp;#039;] or hideText)&lt;br /&gt;
			if state == &amp;#039;collapsed&amp;#039; then&lt;br /&gt;
				subtable:addClass(&amp;#039;mw-collapsed&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
			-- remove redundant classes in future if it won&amp;#039;t break the display of wikis&amp;#039; navboxes&lt;br /&gt;
			headerdiv:addClass(&amp;#039;navbox-header-pad navbox-title-padleft navbox-title-padright&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args.headerclass then headerrow:addClass( args.headerclass ) end&lt;br /&gt;
		if args.headerstyle then header:cssText( args.headerstyle ) end&lt;br /&gt;
&lt;br /&gt;
		header:node(headerdiv)&lt;br /&gt;
		headerrow:node(header)&lt;br /&gt;
		subtable:node(headerrow)&lt;br /&gt;
&lt;br /&gt;
		sections[num] = subtable&lt;br /&gt;
		activeSection = num&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Check if a string contains a particular CSS class&lt;br /&gt;
	local function hasListClass(htmlclass, arg)&lt;br /&gt;
		local patterns = {&lt;br /&gt;
			&amp;#039;^&amp;#039; .. htmlclass .. &amp;#039;$&amp;#039;,&lt;br /&gt;
			&amp;#039;%s&amp;#039; .. htmlclass .. &amp;#039;$&amp;#039;,&lt;br /&gt;
			&amp;#039;^&amp;#039; .. htmlclass .. &amp;#039;%s&amp;#039;,&lt;br /&gt;
			&amp;#039;%s&amp;#039; .. htmlclass .. &amp;#039;%s&amp;#039;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		for _, pattern in ipairs(patterns) do&lt;br /&gt;
			if mw.ustring.find(args[arg] or &amp;#039;&amp;#039;, pattern) then&lt;br /&gt;
				return true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--- Processes a single list row&lt;br /&gt;
	--&lt;br /&gt;
	-- @param num Number of the row to be processed&lt;br /&gt;
	local function processList(num)&lt;br /&gt;
		if not args[&amp;#039;list&amp;#039;..num] then return end&lt;br /&gt;
&lt;br /&gt;
		local oddEven = cfg.marker.oddeven&lt;br /&gt;
&lt;br /&gt;
		local data = args[&amp;#039;list&amp;#039;..num]&lt;br /&gt;
&lt;br /&gt;
		hasChild = false&lt;br /&gt;
&lt;br /&gt;
		if data:sub(1, 12) == &amp;#039;&amp;lt;/div&amp;gt;&amp;lt;table&amp;#039; then&lt;br /&gt;
			hasChild = true&lt;br /&gt;
			oddEven = cfg.marker.contains_subgroup&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local row = mw.html.create(&amp;#039;tr&amp;#039;):addClass(&amp;#039;navbox-row&amp;#039;..oddEven)&lt;br /&gt;
&lt;br /&gt;
		if not hasrows and not activeSection then&lt;br /&gt;
			_processImage(row, &amp;#039;imageleft&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local listcell = mw.html.create(&amp;#039;td&amp;#039;):addClass(&amp;#039;navbox-list&amp;#039;)&lt;br /&gt;
		local hlistcell = listcell:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
		&lt;br /&gt;
		-- Only add hlist class if listclass parameter does not contain hlist or plainlist&lt;br /&gt;
		if not (args.listclass and (hasListClass(cfg.pattern.hlist, &amp;#039;listclass&amp;#039;) or hasListClass(cfg.pattern.plainlist, &amp;#039;listclass&amp;#039;))) then&lt;br /&gt;
			hlistcell:addClass(&amp;#039;hlist&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		hlistcell:wikitext( processItem(data) )&lt;br /&gt;
&lt;br /&gt;
		if args.rowclass then row:addClass( args.rowclass ) end&lt;br /&gt;
		if args.listclass then listcell:addClass( args.listclass ) end&lt;br /&gt;
		if args.liststyle then listcell:cssText( args.liststyle ) end&lt;br /&gt;
&lt;br /&gt;
		if hasChild then&lt;br /&gt;
			listcell:cssText(&amp;#039;background: none&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args[&amp;#039;group&amp;#039;..num] then&lt;br /&gt;
			local groupcell = mw.html.create(&amp;#039;th&amp;#039;):addClass(&amp;#039;navbox-group&amp;#039;):attr(&amp;#039;scope&amp;#039;,&amp;#039;row&amp;#039;):wikitext( args[&amp;#039;group&amp;#039;..num] )&lt;br /&gt;
&lt;br /&gt;
			if args.groupclass then groupcell:addClass( args.groupclass ) end&lt;br /&gt;
			if args.groupstyle then groupcell:cssText( args.groupstyle ) end&lt;br /&gt;
&lt;br /&gt;
			row:node( groupcell )&lt;br /&gt;
		else&lt;br /&gt;
			listcell:attr(&amp;#039;colspan&amp;#039;,2)&lt;br /&gt;
			if not hasChild then&lt;br /&gt;
				listcell:addClass(&amp;#039;no-group&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		row:node( listcell )&lt;br /&gt;
&lt;br /&gt;
		local firstRow = false&lt;br /&gt;
		if not hasrows and not activeSection then&lt;br /&gt;
			firstRow = true&lt;br /&gt;
			hasrows = true&lt;br /&gt;
			_processImage(row, &amp;#039;image&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if activeSection then&lt;br /&gt;
			local parent = sections[activeSection]&lt;br /&gt;
			if not isChild or not firstRow then&lt;br /&gt;
				_addGutter(parent)&lt;br /&gt;
			end&lt;br /&gt;
			parent:node(row)&lt;br /&gt;
			hasData = true&lt;br /&gt;
		else&lt;br /&gt;
			if not isChild or not firstRow or hasTitle or args.above then&lt;br /&gt;
				if useZhConverter then&lt;br /&gt;
					_addGutter(navbox_zh_hans, not firstRow)&lt;br /&gt;
					_addGutter(navbox_zh_hant, not firstRow)&lt;br /&gt;
					_addGutter(navbox_zh_hant_hk, not firstRow)&lt;br /&gt;
				else&lt;br /&gt;
					_addGutter(navbox, not firstRow)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if useZhConverter then&lt;br /&gt;
				navbox_zh_hans:node( row )&lt;br /&gt;
				navbox_zh_hant:node( row )&lt;br /&gt;
				navbox_zh_hant_hk:node( row )&lt;br /&gt;
			else&lt;br /&gt;
				navbox:node( row )&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			rowspan = rowspan + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--- Processes all rows&lt;br /&gt;
	local function processRows()&lt;br /&gt;
		sections = {}&lt;br /&gt;
		for i=1,#rownums do&lt;br /&gt;
			local num = rownums[i]&lt;br /&gt;
			if not skiprows[num] then&lt;br /&gt;
				processHeader(num)&lt;br /&gt;
				processList(num)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		_closeCurrentSection()&lt;br /&gt;
&lt;br /&gt;
		if cimageleft then&lt;br /&gt;
			cimageleft:attr(&amp;#039;rowspan&amp;#039;,rowspan)&lt;br /&gt;
		end&lt;br /&gt;
		if cimage then&lt;br /&gt;
			cimage:attr(&amp;#039;rowspan&amp;#039;,rowspan)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Create the root HTML element&lt;br /&gt;
&lt;br /&gt;
	if isChild then&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			navbox_zh_hans = mw.html.create(&amp;#039;table&amp;#039;):addClass(&amp;#039;navbox-subgroup&amp;#039;)&lt;br /&gt;
			navbox_zh_hant = mw.html.create(&amp;#039;table&amp;#039;):addClass(&amp;#039;navbox-subgroup&amp;#039;)&lt;br /&gt;
			navbox_zh_hant_hk = mw.html.create(&amp;#039;table&amp;#039;):addClass(&amp;#039;navbox-subgroup&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			navbox = mw.html.create(&amp;#039;table&amp;#039;):addClass(&amp;#039;navbox-subgroup&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			navbox_zh_hans = mw.html.create(&amp;#039;table&amp;#039;):addClass(&amp;#039;navbox&amp;#039;)&lt;br /&gt;
			navbox_zh_hant = mw.html.create(&amp;#039;table&amp;#039;):addClass(&amp;#039;navbox&amp;#039;)&lt;br /&gt;
			navbox_zh_hant_hk = mw.html.create(&amp;#039;table&amp;#039;):addClass(&amp;#039;navbox&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			navbox = mw.html.create(&amp;#039;table&amp;#039;):addClass(&amp;#039;navbox&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not isChild or args.title then&lt;br /&gt;
		hasTitle = true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if hasTitle and isChild then&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			navbox_zh_hans:addClass(&amp;#039;navbox-subgroup-with-title&amp;#039;)&lt;br /&gt;
			navbox_zh_hant:addClass(&amp;#039;navbox-subgroup-with-title&amp;#039;)&lt;br /&gt;
			navbox_zh_hant_hk:addClass(&amp;#039;navbox-subgroup-with-title&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			navbox:addClass(&amp;#039;navbox-subgroup-with-title&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if hasTitle and args.state ~= &amp;#039;plain&amp;#039; then&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			navbox_zh_hans:addClass(&amp;#039;mw-collapsible&amp;#039;):attr(&amp;#039;data-expandtext&amp;#039;, args[&amp;#039;expandtext_zh-hans&amp;#039;] or args[&amp;#039;expandtext&amp;#039;] or args[&amp;#039;defaultexpandtext_zh-hans&amp;#039;] or args[&amp;#039;defaultexpandtext&amp;#039;] or showText_zh_hans or showText):attr(&amp;#039;data-collapsetext&amp;#039;, args[&amp;#039;collapsetext_zh-hans&amp;#039;] or args[&amp;#039;collapsetext&amp;#039;] or args[&amp;#039;defaultcollapsetext_zh-hans&amp;#039;] or args[&amp;#039;defaultcollapsetext&amp;#039;] or hideText_zh_hans or hideText)&lt;br /&gt;
			navbox_zh_hant:addClass(&amp;#039;mw-collapsible&amp;#039;):attr(&amp;#039;data-expandtext&amp;#039;, args[&amp;#039;expandtext_zh-hant&amp;#039;] or args[&amp;#039;expandtext&amp;#039;] or args[&amp;#039;defaultexpandtext_zh-hant&amp;#039;] or args[&amp;#039;defaultexpandtext&amp;#039;] or showText_zh_hant or showText):attr(&amp;#039;data-collapsetext&amp;#039;, args[&amp;#039;collapsetext_zh-hant&amp;#039;] or args[&amp;#039;collapsetext&amp;#039;] or args[&amp;#039;defaultcollapsetext_zh-hant&amp;#039;] or args[&amp;#039;defaultcollapsetext&amp;#039;] or hideText_zh_hant or hideText)&lt;br /&gt;
			navbox_zh_hant_hk:addClass(&amp;#039;mw-collapsible&amp;#039;):attr(&amp;#039;data-expandtext&amp;#039;, args[&amp;#039;expandtext_zh-hant-hk&amp;#039;] or args[&amp;#039;expandtext_zh-hant&amp;#039;] or args[&amp;#039;expandtext&amp;#039;] or args[&amp;#039;defaultexpandtext_zh-hant-hk&amp;#039;] or args[&amp;#039;defaultexpandtext_zh-hant&amp;#039;] or args[&amp;#039;defaultexpandtext&amp;#039;] or showText_zh_hant_hk or showText_zh_hant or showText):attr(&amp;#039;data-collapsetext&amp;#039;, args[&amp;#039;collapsetext_zh-hant-hk&amp;#039;] or args[&amp;#039;collapsetext_zh-hant&amp;#039;] or args[&amp;#039;collapsetext&amp;#039;] or args[&amp;#039;defaultcollapsetext_zh-hant-hk&amp;#039;] or args[&amp;#039;defaultcollapsetext_zh-hant&amp;#039;] or args[&amp;#039;defaultcollapsetext&amp;#039;] or hideText_zh_hant_hk or hideText_zh_hant or hideText)&lt;br /&gt;
		else&lt;br /&gt;
			navbox:addClass(&amp;#039;mw-collapsible&amp;#039;):attr(&amp;#039;data-expandtext&amp;#039;, args[&amp;#039;expandtext&amp;#039;] or args[&amp;#039;defaultexpandtext&amp;#039;] or showText):attr(&amp;#039;data-collapsetext&amp;#039;, args[&amp;#039;collapsetext&amp;#039;] or args[&amp;#039;defaultcollapsetext&amp;#039;] or hideText)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args.state == &amp;#039;collapsed&amp;#039; then&lt;br /&gt;
			if useZhConverter then&lt;br /&gt;
				navbox_zh_hans:addClass(&amp;#039;mw-collapsed&amp;#039;)&lt;br /&gt;
				navbox_zh_hant:addClass(&amp;#039;mw-collapsed&amp;#039;)&lt;br /&gt;
				navbox_zh_hant_hk:addClass(&amp;#039;mw-collapsed&amp;#039;)&lt;br /&gt;
			else&lt;br /&gt;
				navbox:addClass(&amp;#039;mw-collapsed&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
 	if args.bodyclass then&lt;br /&gt;
 		if useZhConverter then&lt;br /&gt;
 			navbox_zh_hans:addClass(args.bodyclass)&lt;br /&gt;
 			navbox_zh_hant:addClass(args.bodyclass)&lt;br /&gt;
 			navbox_zh_hant_hk:addClass(args.bodyclass)&lt;br /&gt;
 		else&lt;br /&gt;
 			navbox:addClass(args.bodyclass)&lt;br /&gt;
 		end&lt;br /&gt;
 	end&lt;br /&gt;
	if args.bodystyle then&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			navbox_zh_hans:cssText(args.bodystyle)&lt;br /&gt;
			navbox_zh_hant:cssText(args.bodystyle)&lt;br /&gt;
			navbox_zh_hant_hk:cssText(args.bodystyle)&lt;br /&gt;
		else&lt;br /&gt;
			navbox:cssText(args.bodystyle)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Process...&lt;br /&gt;
	processTitle()&lt;br /&gt;
	processAboveBelow(&amp;#039;above&amp;#039;)&lt;br /&gt;
	processRows()&lt;br /&gt;
	processAboveBelow(&amp;#039;below&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	if not isChild then&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			return &amp;#039;-{|&amp;#039; ..&lt;br /&gt;
				&amp;#039;zh-hans:-{zh-cn|&amp;#039; .. striped(tostring(navbox_zh_hans), border) .. &amp;#039;}-; &amp;#039; ..&lt;br /&gt;
				&amp;#039;zh-hant:-{zh-tw|&amp;#039; .. striped(tostring(navbox_zh_hant), border) .. &amp;#039;}-; &amp;#039; ..&lt;br /&gt;
				&amp;#039;zh-hk:-{zh-hk|&amp;#039; .. striped(tostring(navbox_zh_hant_hk), border) .. &amp;#039;}-;&amp;#039; ..&lt;br /&gt;
				&amp;#039;}-&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		return striped(tostring(navbox), border)&lt;br /&gt;
	else&lt;br /&gt;
		local wrapper = mw.html.create(&amp;#039;&amp;#039;)&lt;br /&gt;
		wrapper:wikitext(&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			wrapper:wikitext(&amp;#039;-{|&amp;#039;)&lt;br /&gt;
			wrapper:wikitext(&amp;#039;zh-hans:-{zh-cn|&amp;#039;)&lt;br /&gt;
			wrapper:node(navbox_zh_hans)&lt;br /&gt;
			wrapper:wikitext(&amp;#039;}-; &amp;#039;)&lt;br /&gt;
			wrapper:wikitext(&amp;#039;zh-hant:-{zh-tw|&amp;#039;)&lt;br /&gt;
			wrapper:node(navbox_zh_hant)&lt;br /&gt;
			wrapper:wikitext(&amp;#039;}-; &amp;#039;)&lt;br /&gt;
			wrapper:wikitext(&amp;#039;zh-hk:-{zh-hk|&amp;#039;)&lt;br /&gt;
			wrapper:node(navbox_zh_hant_hk)&lt;br /&gt;
			wrapper:wikitext(&amp;#039;}-; &amp;#039;)&lt;br /&gt;
			wrapper:wikitext(&amp;#039;}-&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			wrapper:node(navbox)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		wrapper:wikitext(&amp;#039;&amp;lt;div class=&amp;quot;hlist&amp;quot;&amp;gt;&amp;#039;)&lt;br /&gt;
		return striped(tostring(wrapper), border)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Main module entry point.&lt;br /&gt;
-- To be called with {{#invoke:navbox|main}} or directly from another module.&lt;br /&gt;
--&lt;br /&gt;
-- @param frame The frame passed to the module via the #invoke. If called from another&lt;br /&gt;
--              module directly, this should be a table with the parameter definition.&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	return _navbox(preProcessArgs(frame))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
</feed>