<header><meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9"><meta name="hibp-verify" content="dweb_ahmm7tzpovjk0hkhflm8wqvu" />

<!--[if IE]>
<meta http-equiv="Refresh" content="0; URL=http://noie.ksepeses.com/">
<!--<![endif]-->
    <script charset="UTF-8" id="LA_COLLECT" src="//sdk.51.la/js-sdk-pro.min.js?id=3N8xzwWYGoxEeDm5&ck=3N8xzwWYGoxEeDm5"></script>
<link rel="icon" type="image/x-icon" href="./favicon-16.ico" sizes="16x16">
<link rel="icon" type="image/png" href="./zyom.png" sizes="512x512">
<link rel="icon" href="./favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="./favicon.ico" type="image/x-icon">
<meta name="Keywords" content="扩科偶梦,知沅考试,偶像梦幻祭,知沅偶梦,扩展科目偶像梦幻祭,知沅教育,知沅教育出版社,扩展科目">
<meta name="Description" Content="我们的梦想永不终结！欢迎来到知沅教育出版社扩展科目偶像梦幻祭课程教材教学研究所官网~(〃'▽'〃)(〃'▽'〃)">
<meta name="msvalidate.01" content="F6FE2D5F15A458308AEA9CA31A96263F" />
<meta name="baidu-site-verification" content="codeva-9r28d9psyW" />

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2824368906056698"
     crossorigin="anonymous"></script>
</header>
<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://m.ksepeses.com/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3ANavbox</id>
	<title>模块:Navbox - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://m.ksepeses.com/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3ANavbox"/>
	<link rel="alternate" type="text/html" href="https://m.ksepeses.com/index.php?title=%E6%A8%A1%E5%9D%97:Navbox&amp;action=history"/>
	<updated>2026-04-04T18:17:48Z</updated>
	<subtitle>本wiki的该页面的版本历史</subtitle>
	<generator>MediaWiki 1.35.2</generator>
	<entry>
		<id>https://m.ksepeses.com/index.php?title=%E6%A8%A1%E5%9D%97:Navbox&amp;diff=1536&amp;oldid=prev</id>
		<title>鹤訓：建立内容为“-- -- This module implements {{Navbox}} --  local p = {}  local getArgs -- lazily initialized  local args local border local listnums local ODD_EVEN_MARKER = '\12…”的新页面</title>
		<link rel="alternate" type="text/html" href="https://m.ksepeses.com/index.php?title=%E6%A8%A1%E5%9D%97:Navbox&amp;diff=1536&amp;oldid=prev"/>
		<updated>2025-10-17T02:52:01Z</updated>

		<summary type="html">&lt;p&gt;建立内容为“-- -- This module implements {{Navbox}} --  local p = {}  local getArgs -- lazily initialized  local args local border local listnums local ODD_EVEN_MARKER = &amp;#039;\12…”的新页面&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&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 getArgs -- lazily initialized&lt;br /&gt;
&lt;br /&gt;
local args&lt;br /&gt;
local border&lt;br /&gt;
local listnums&lt;br /&gt;
local ODD_EVEN_MARKER = '\127_ODDEVEN_\127'&lt;br /&gt;
local RESTART_MARKER = '\127_ODDEVEN0_\127'&lt;br /&gt;
local REGEX_MARKER = '\127_ODDEVEN(%d?)_\127'&lt;br /&gt;
&lt;br /&gt;
local lists = {&lt;br /&gt;
	plainlist_t = {&lt;br /&gt;
		patterns = {&lt;br /&gt;
			'^plainlist$',&lt;br /&gt;
			'%splainlist$',&lt;br /&gt;
			'^plainlist%s',&lt;br /&gt;
			'%splainlist%s'&lt;br /&gt;
		},&lt;br /&gt;
		found = false,&lt;br /&gt;
		styles = 'Plainlist/styles.css'&lt;br /&gt;
	},&lt;br /&gt;
	hlist_t = {&lt;br /&gt;
		patterns = {&lt;br /&gt;
			'^hlist$',&lt;br /&gt;
			'%shlist$',&lt;br /&gt;
			'^hlist%s',&lt;br /&gt;
			'%shlist%s'&lt;br /&gt;
		},&lt;br /&gt;
		found = false,&lt;br /&gt;
		styles = 'Hlist/styles.css'&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function has_list_class(args_to_check)&lt;br /&gt;
	for _, list in pairs(lists) do&lt;br /&gt;
		if not list.found then&lt;br /&gt;
			for _, arg in pairs(args_to_check) do&lt;br /&gt;
				for _, pattern in ipairs(list.patterns) do&lt;br /&gt;
					if mw.ustring.find(arg or '', pattern) then&lt;br /&gt;
						list.found = true&lt;br /&gt;
						break&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if list.found then break end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function striped(wikitext)&lt;br /&gt;
	-- Return wikitext with markers replaced for odd/even striping.&lt;br /&gt;
	-- Child (subgroup) navboxes are flagged with a category that is removed&lt;br /&gt;
	-- by parent navboxes. The result is that the category shows all pages&lt;br /&gt;
	-- where a child navbox is not contained in a parent navbox.&lt;br /&gt;
	local orphanCat = '[[Category:孤立的子导航框]]'&lt;br /&gt;
	if border == 'subgroup' and args.orphan ~= 'yes' then&lt;br /&gt;
		-- No change; striping occurs in outermost navbox.&lt;br /&gt;
		return wikitext .. orphanCat&lt;br /&gt;
	end&lt;br /&gt;
	local first, second = 'odd', 'even'&lt;br /&gt;
	if args.evenodd then&lt;br /&gt;
		if args.evenodd == 'swap' then&lt;br /&gt;
			first, second = second, first&lt;br /&gt;
		else&lt;br /&gt;
			first = args.evenodd&lt;br /&gt;
			second = first&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local changer&lt;br /&gt;
	if first == second then&lt;br /&gt;
		changer = first&lt;br /&gt;
	else&lt;br /&gt;
		local index = 0&lt;br /&gt;
		changer = function (code)&lt;br /&gt;
			if code == '0' then&lt;br /&gt;
				-- Current occurrence is for a group before a nested table.&lt;br /&gt;
				-- Set it to first as a valid although pointless class.&lt;br /&gt;
				-- The next occurrence will be the first row after a title&lt;br /&gt;
				-- in a subgroup and will also be first.&lt;br /&gt;
				index = 0&lt;br /&gt;
				return first&lt;br /&gt;
			end&lt;br /&gt;
			index = index + 1&lt;br /&gt;
			return index % 2 == 1 and first or second&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local regex = orphanCat:gsub('([%[%]])', '%%%1')&lt;br /&gt;
	return (wikitext:gsub(regex, ''):gsub(REGEX_MARKER, changer))  -- () omits gsub count&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addNewline(s)&lt;br /&gt;
	if s:match('^[*:;#]') or s:match('^{|') then&lt;br /&gt;
		return '\n' .. s ..'\n'&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 has_collapsible_toggle()&lt;br /&gt;
	return args.state ~= 'off'&lt;br /&gt;
		and args.state ~= 'plain'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function has_navbar()&lt;br /&gt;
	return args.navbar ~= 'off'&lt;br /&gt;
		and args.navbar ~= 'plain'&lt;br /&gt;
		and (&lt;br /&gt;
			args.name&lt;br /&gt;
			or (&lt;br /&gt;
				mw.getCurrentFrame():getParent():getTitle():gsub('/sandbox$', '')&lt;br /&gt;
					~= 'Template:Navbox' and&lt;br /&gt;
				mw.getCurrentFrame():getParent():getTitle():gsub('/sandbox$', '')&lt;br /&gt;
					~= 'Template:Navbox subgroup'&lt;br /&gt;
			)&lt;br /&gt;
		)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- extract text color from css, which is the only permitted inline CSS for the navbar&lt;br /&gt;
local function extract_color(css_str)&lt;br /&gt;
	-- return nil because navbar takes its argument into mw.html which handles&lt;br /&gt;
	-- nil gracefully, removing the associated style attribute&lt;br /&gt;
	return mw.ustring.match(';' .. css_str .. ';', '.*;%s*([Cc][Oo][Ll][Oo][Rr]%s*:%s*.-)%s*;') or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function removeilhSuffix(anchor)&lt;br /&gt;
	local ilh_suffix = '（%S*：%-&amp;amp;#123;.*&amp;amp;#125;%-）'&lt;br /&gt;
	return mw.ustring.gsub(anchor, ilh_suffix, '')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
	if has_navbar() then&lt;br /&gt;
		local navbar = require('Module:Navbar')._navbar&lt;br /&gt;
		titleCell:wikitext(navbar{&lt;br /&gt;
			args.name,&lt;br /&gt;
			mini = 1,&lt;br /&gt;
			fontstyle = extract_color(&lt;br /&gt;
				(args.basestyle or '') .. ';' .. (args.titlestyle or '')&lt;br /&gt;
			)&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;
	has_list_class({args.titleclass})&lt;br /&gt;
&lt;br /&gt;
	local titleRow = tbl:tag('tr')&lt;br /&gt;
&lt;br /&gt;
	local titleCell = titleRow:tag('th'):attr('scope', 'col')&lt;br /&gt;
&lt;br /&gt;
	if has_collapsible_toggle() then&lt;br /&gt;
		titleCell&lt;br /&gt;
			:addClass('collapsible-title')&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;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:cssText(args.basestyle)&lt;br /&gt;
		:cssText(args.titlestyle)&lt;br /&gt;
		:addClass('navbox-title')&lt;br /&gt;
		:attr('colspan', titleColspan)&lt;br /&gt;
&lt;br /&gt;
	renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			-- id for aria-labelledby attribute&lt;br /&gt;
			:attr('id', removeilhSuffix(mw.uri.anchorEncode(args.title)) .. args.argHash)&lt;br /&gt;
			:addClass(args.titleclass)&lt;br /&gt;
			:css('font-size', '110%')&lt;br /&gt;
			:css('margin', '0 5em')&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;
	has_list_class({ args.aboveclass })&lt;br /&gt;
&lt;br /&gt;
	tbl:tag('tr')&lt;br /&gt;
		:tag('td')&lt;br /&gt;
			:addClass('navbox-abovebelow')&lt;br /&gt;
			:addClass(args.aboveclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.abovestyle)&lt;br /&gt;
			:attr('colspan', getAboveBelowColspan())&lt;br /&gt;
			:tag('div')&lt;br /&gt;
				-- id for aria-labelledby attribute, if no title&lt;br /&gt;
				:attr('id', (not args.title) and (removeilhSuffix(mw.uri.anchorEncode(args.above)) .. args.argHash) or nil)&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;
	has_list_class({ args.belowclass })&lt;br /&gt;
&lt;br /&gt;
	tbl:tag('tr')&lt;br /&gt;
		:tag('td')&lt;br /&gt;
			:addClass('navbox-abovebelow')&lt;br /&gt;
			:addClass(args.belowclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.belowstyle)&lt;br /&gt;
			:attr('colspan', getAboveBelowColspan())&lt;br /&gt;
			:tag('div')&lt;br /&gt;
				:wikitext(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 = tbl:tag('tr')&lt;br /&gt;
&lt;br /&gt;
	if listnum == 1 and args.imageleft then&lt;br /&gt;
		has_list_class({ args.imageclass })&lt;br /&gt;
&lt;br /&gt;
		row&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:addClass('noviewer')&lt;br /&gt;
				:addClass('navbox-image')&lt;br /&gt;
				:addClass(args.imageclass)&lt;br /&gt;
				:css('width', '1px')               -- Minimize width&lt;br /&gt;
				:css('padding', '0px 2px 0px 0px')&lt;br /&gt;
				:cssText(args.imageleftstyle)&lt;br /&gt;
				:attr('rowspan', #listnums)&lt;br /&gt;
				:tag('div')&lt;br /&gt;
					:wikitext(addNewline(args.imageleft))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args['group' .. listnum] then&lt;br /&gt;
		has_list_class({ args.groupclass })&lt;br /&gt;
&lt;br /&gt;
		local groupCell = row:tag('th')&lt;br /&gt;
&lt;br /&gt;
		-- id for aria-labelledby attribute, if lone group with no title or above&lt;br /&gt;
		if listnum == 1 and not (args.title or args.above or args.group2) then&lt;br /&gt;
			groupCell&lt;br /&gt;
				:attr('id', removeilhSuffix(mw.uri.anchorEncode(args.group1)) .. args.argHash)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:attr('scope', 'row')&lt;br /&gt;
			:addClass('navbox-group')&lt;br /&gt;
			:addClass(args.groupclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:css('width', args.groupwidth or '1%') -- If groupwidth not specified, minimize width&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:cssText(args.groupstyle)&lt;br /&gt;
			:cssText(args['group' .. listnum .. 'style'])&lt;br /&gt;
			:wikitext(args['group' .. listnum])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	has_list_class({ args.listclass, args['list' .. listnum .. 'class'] })&lt;br /&gt;
&lt;br /&gt;
	local listCell = row:tag('td')&lt;br /&gt;
&lt;br /&gt;
	if args['group' .. listnum] then&lt;br /&gt;
		listCell&lt;br /&gt;
			:addClass('navbox-list-with-group')&lt;br /&gt;
	else&lt;br /&gt;
		listCell:attr('colspan', 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not args.groupwidth then&lt;br /&gt;
		listCell:css('width', '100%')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local rowstyle  -- usually nil so cssText(rowstyle) usually adds nothing&lt;br /&gt;
	if listnum % 2 == 1 then&lt;br /&gt;
		rowstyle = args.oddstyle&lt;br /&gt;
	else&lt;br /&gt;
		rowstyle = args.evenstyle&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listText = args['list' .. listnum]&lt;br /&gt;
	local oddEven = ODD_EVEN_MARKER&lt;br /&gt;
	if listText:sub(1, 12) == '&amp;lt;/div&amp;gt;&amp;lt;table' then&lt;br /&gt;
		-- Assume list text is for a subgroup navbox so no automatic striping for this row.&lt;br /&gt;
		oddEven = listText:find('&amp;lt;th[^&amp;gt;]*[&amp;quot;? ?]navbox%-title&amp;quot;') and RESTART_MARKER or 'odd'&lt;br /&gt;
	end&lt;br /&gt;
	listCell&lt;br /&gt;
		:css('padding', '0px')&lt;br /&gt;
		:cssText(args.liststyle)&lt;br /&gt;
		:cssText(rowstyle)&lt;br /&gt;
		:cssText(args['list' .. listnum .. 'style'])&lt;br /&gt;
		:addClass('navbox-list')&lt;br /&gt;
		:addClass('navbox-' .. oddEven)&lt;br /&gt;
		:addClass(args.listclass)&lt;br /&gt;
		:addClass(args['list' .. listnum .. 'class'])&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			:css('padding', (listnum == 1 and args.list1padding) or args.listpadding or '0em 0.25em')&lt;br /&gt;
			:wikitext(addNewline(listText))&lt;br /&gt;
&lt;br /&gt;
	if listnum == 1 and args.image then&lt;br /&gt;
		has_list_class({ args.imageclass })&lt;br /&gt;
&lt;br /&gt;
		row&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:addClass('noviewer')&lt;br /&gt;
				:addClass('navbox-image')&lt;br /&gt;
				:addClass(args.imageclass)&lt;br /&gt;
				:css('width', '1px')               -- Minimize width&lt;br /&gt;
				:css('padding', '0px 0px 0px 2px')&lt;br /&gt;
				:cssText(args.imagestyle)&lt;br /&gt;
				:attr('rowspan', #listnums)&lt;br /&gt;
				:tag('div')&lt;br /&gt;
					:wikitext(addNewline(args.image))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Tracking categories&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local function needsHorizontalLists()&lt;br /&gt;
	if border == 'subgroup' or args.tracking == 'no' then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return not lists.hlist_t.found and not lists.plainlist_t.found&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasBackgroundColors()&lt;br /&gt;
	for _, key in ipairs({'titlestyle', 'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do&lt;br /&gt;
		if tostring(args[key]):find('background', 1, true) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function argNameAndRealTitleAreDifferent()&lt;br /&gt;
	if border == 'subgroup' or args.tracking == 'no' then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if has_navbar() and args.name ~= mw.title.getCurrentTitle().text then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
&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, '没有使用水平列表的导航框') end&lt;br /&gt;
	if hasBackgroundColors() then table.insert(cats, '使用背景颜色的导航框') end&lt;br /&gt;
	if argNameAndRealTitleAreDifferent() then table.insert(cats, 'name參數和實際不同的導航框') end&lt;br /&gt;
	return cats&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTrackingCategories(builder)&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	if title.namespace ~= 10 then return end -- not in template space&lt;br /&gt;
	local subpage = title.subpageText&lt;br /&gt;
	if subpage == 'doc' or subpage == 'sandbox' or subpage == 'testcases' then return end&lt;br /&gt;
&lt;br /&gt;
	for _, cat in ipairs(getTrackingCategories()) do&lt;br /&gt;
		builder:wikitext('[[Category:' .. cat .. ']]')&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
-- Load the templatestyles for the navbox&lt;br /&gt;
--&lt;br /&gt;
local function loadTemplateStyles(hiding_templatestyles)&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
&lt;br /&gt;
	local hlist_templatestyles = ''&lt;br /&gt;
	if lists.hlist_t.found then&lt;br /&gt;
		hlist_templatestyles = frame:extensionTag{&lt;br /&gt;
			name = 'templatestyles', args = { src = lists.hlist_t.styles }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- a second workaround for [[phab:T303378]]&lt;br /&gt;
	-- when that issue is fixed, we can actually use has_navbar not to emit the&lt;br /&gt;
	-- tag here if we want&lt;br /&gt;
	if has_navbar() and hlist_templatestyles == '' then&lt;br /&gt;
		hlist_templatestyles = frame:extensionTag{&lt;br /&gt;
			name = 'templatestyles', args = { src = lists.hlist_t.styles }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local plainlist_templatestyles = ''&lt;br /&gt;
	if lists.plainlist_t.found then&lt;br /&gt;
		plainlist_templatestyles = frame:extensionTag{&lt;br /&gt;
			name = 'templatestyles', args = { src = lists.plainlist_t.styles }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local base_templatestyles = frame:extensionTag{&lt;br /&gt;
		name = 'templatestyles', args = { src = 'Module:Navbox/styles.css' }&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local templatestyles = ''&lt;br /&gt;
	if args['templatestyles'] then&lt;br /&gt;
		templatestyles = frame:extensionTag{&lt;br /&gt;
			name = 'templatestyles', args = { src = args['templatestyles'] }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local child_templatestyles = ''&lt;br /&gt;
	if args['child templatestyles'] then&lt;br /&gt;
		child_templatestyles = frame:extensionTag{&lt;br /&gt;
			name = 'templatestyles', args = { src = args['child templatestyles'] }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return mw.html.create('div')&lt;br /&gt;
		:addClass('navbox-styles')&lt;br /&gt;
		:wikitext(&lt;br /&gt;
			-- hlist -&amp;gt; plainlist -&amp;gt; base is best-effort to preserve old Common.css ordering.&lt;br /&gt;
			-- this ordering is not a guarantee because the rows of interest invoking&lt;br /&gt;
			-- each class may not be on a specific page&lt;br /&gt;
			hlist_templatestyles ..&lt;br /&gt;
			plainlist_templatestyles ..&lt;br /&gt;
			base_templatestyles ..&lt;br /&gt;
			templatestyles ..&lt;br /&gt;
			child_templatestyles ..&lt;br /&gt;
			table.concat(hiding_templatestyles)&lt;br /&gt;
		)&lt;br /&gt;
		:done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- work around [[phab:T303378]]&lt;br /&gt;
-- for each arg: find all the templatestyles strip markers, insert them into a&lt;br /&gt;
-- table. then remove all templatestyles markers from the arg&lt;br /&gt;
local function move_hiding_templatestyles(args)&lt;br /&gt;
	local templatestyles_markers = {}&lt;br /&gt;
	local strip_marker_pattern = '(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)'&lt;br /&gt;
	local argHash = 0&lt;br /&gt;
	for k, arg in pairs(args) do&lt;br /&gt;
		if type(arg) == 'string' then&lt;br /&gt;
			for marker in string.gfind(arg, strip_marker_pattern) do&lt;br /&gt;
				table.insert(templatestyles_markers, marker)&lt;br /&gt;
			end&lt;br /&gt;
			argHash = argHash + #arg&lt;br /&gt;
			args[k] = string.gsub(arg, strip_marker_pattern, '')&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not args.argHash then args.argHash = argHash end&lt;br /&gt;
	return templatestyles_markers&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Main navbox tables&lt;br /&gt;
--&lt;br /&gt;
local function renderMainTable()&lt;br /&gt;
	local tbl = mw.html.create('table')&lt;br /&gt;
		:addClass('nowraplinks')&lt;br /&gt;
		:addClass(args.bodyclass)&lt;br /&gt;
&lt;br /&gt;
		has_list_class({ args.bodyclass })&lt;br /&gt;
&lt;br /&gt;
	if args.title and has_collapsible_toggle() then&lt;br /&gt;
		if args.state == 'collapsed' then args.state = 'mw-collapsed' end&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass('mw-collapsible')&lt;br /&gt;
			:addClass(args.state or 'autocollapse')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	tbl:css('border-spacing', 0)&lt;br /&gt;
	if border == 'subgroup' or border == 'none' then&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass('navbox-subgroup')&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
			:cssText(args.style)&lt;br /&gt;
	else  -- regular navbox - bodystyle and style will be applied to the wrapper table&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass('navbox-inner')&lt;br /&gt;
			:css('background', 'transparent')&lt;br /&gt;
			:css('color', 'inherit')&lt;br /&gt;
	end&lt;br /&gt;
	tbl:cssText(args.innerstyle)&lt;br /&gt;
&lt;br /&gt;
	renderTitleRow(tbl)&lt;br /&gt;
	renderAboveRow(tbl)&lt;br /&gt;
	for i, listnum in ipairs(listnums) do&lt;br /&gt;
		renderListRow(tbl, 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;
	local hiding_templatestyles = move_hiding_templatestyles(args)&lt;br /&gt;
	listnums = {}&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local listnum = ('' .. k):match('^list(%d+)$')&lt;br /&gt;
		if listnum then table.insert(listnums, tonumber(listnum)) end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(listnums)&lt;br /&gt;
&lt;br /&gt;
	border = mw.text.trim(args.border or args[1] or '')&lt;br /&gt;
	if border == 'child' then&lt;br /&gt;
		border = 'subgroup'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- render the main body of the navbox&lt;br /&gt;
	local tbl = renderMainTable()&lt;br /&gt;
&lt;br /&gt;
	-- 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 == 'none' then&lt;br /&gt;
		res:node(loadTemplateStyles(hiding_templatestyles))&lt;br /&gt;
		local nav = res:tag('div')&lt;br /&gt;
			:attr('role', 'navigation')&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args.title or args.above or (args.group1 and not args.group2) then&lt;br /&gt;
			nav:attr('aria-labelledby', removeilhSuffix(mw.uri.anchorEncode(args.title or args.above or args.group1))  .. args.argHash)&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr('aria-label', 'Navbox' .. args.argHash)&lt;br /&gt;
		end&lt;br /&gt;
	elseif border == 'subgroup' then&lt;br /&gt;
		-- We assume that this navbox is being rendered in a list cell of a 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's &amp;lt;/div&amp;gt;&lt;br /&gt;
		res&lt;br /&gt;
			:wikitext('&amp;lt;/div&amp;gt;') -- mw.html 未支持 unclosed&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
			:wikitext('&amp;lt;div&amp;gt;') -- mw.html 未支持 unclosed&lt;br /&gt;
	else&lt;br /&gt;
		res:node(loadTemplateStyles(hiding_templatestyles))&lt;br /&gt;
&lt;br /&gt;
		has_list_class({ args.navboxclass })&lt;br /&gt;
&lt;br /&gt;
		local nav = res:tag('div')&lt;br /&gt;
			:attr('role', 'navigation')&lt;br /&gt;
			:addClass('navbox')&lt;br /&gt;
			:addClass(args.navboxclass)&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
			:cssText(args.style)&lt;br /&gt;
			:css('padding', '3px')&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args.title or args.above or (args.group1 and not args.group2) then&lt;br /&gt;
			nav:attr('aria-labelledby', removeilhSuffix(mw.uri.anchorEncode(args.title or args.above or args.group1))  .. args.argHash)&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr('aria-label', 'Navbox'  .. args.argHash)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (args.nocat or 'false'):lower() == 'false' then&lt;br /&gt;
		renderTrackingCategories(res)&lt;br /&gt;
	end&lt;br /&gt;
	return striped(tostring(res))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.navbox(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
	end&lt;br /&gt;
	args = getArgs(frame, {wrappers = {'Template:Navbox', 'Template:Navbox subgroup'}})&lt;br /&gt;
	if frame.args.border then&lt;br /&gt;
		-- This allows Template:Navbox_subgroup to use {{#invoke:Navbox|navbox|border=...}}.&lt;br /&gt;
		args.border = frame.args.border&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Read the arguments in the order they'll be output in, to make references number in the right order.&lt;br /&gt;
	local _&lt;br /&gt;
	_ = args.title&lt;br /&gt;
	_ = args.above&lt;br /&gt;
	for i = 1, 35 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;
	args.argHash = nil -- we shouldn't accept argHash passed from a template&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>鹤訓</name></author>
	</entry>
</feed>