肛门是什么意思| 劳模是什么意思| d什么意思| 出国用什么翻译软件好| 早搏是什么原因引起的| 常流鼻血是什么原因| 古代上元节是什么节日| 损友是什么意思| 婴儿血小板低是什么原因| 今天是什么日子| 什么人容易得心肌炎| 9.28什么星座| aug是什么意思| 妈妈的姑姑叫什么| 眼睛蒙蒙的是什么原因| 白带豆腐渣状是什么原因造成的| 大肠杆菌用什么药治疗效果好| 这个梗是什么意思| 什么叫中出| 柠檬水什么时候喝最好| 什么是植物人| 私处长痘痘是什么原因| 蟑螂有什么危害| 绿豆汤放什么糖| 阴囊湿疹吃什么药| 耳后淋巴结肿大吃什么消炎药| 吃什么能升血压| 牙齿酸痛吃什么药| 什么的小船| 胃胀是什么症状| 鲁班发明了什么| pd医学上是什么意思| 看书有什么好处| 什么空调最省电| 鼻窦炎的症状是什么| 头疼是因为什么| 小妮子是什么意思| 心梗是什么病| 什么千里| lpl是什么| 什么食物补气血| 为什么孩子要跟爸爸姓| 雨露均沾是什么意思| 丙氨酸氨基转移酶是什么| 舌根放血有什么好处| thc是什么费用| 三八妇女节是什么生肖| 有妇之夫是什么意思| 血糖高可以吃什么水果| 放养是什么意思| 逆熵是什么意思| 新手摆地摊卖什么好| 女人在什么时候最容易怀孕| 逆光是什么意思| 胎盘有什么用| 沉鱼落雁闭月羞花什么意思| 耳鸣吃什么中药| 手麻木吃什么药| 清明节一般开什么生肖| 赵雅芝是什么脸型| 顾家什么意思| 鹅口疮是什么原因引起的| 水解是什么意思| 省委组织部部长什么级别| 睡觉手麻是什么原因| 白带黄绿色是什么炎症| 怀孕初期应该注意什么| 整装待发是什么意思| 瘢痕是什么| 静的部首是什么| 张紫妍为什么自杀| 胃怕凉怕冷是什么原因| 肉燕是什么| 无机盐是什么| 兽医是什么专业| 招财进宝是什么生肖| 月经量少吃什么调理最好方法| 芍药什么时候开花| 万花筒是什么| 甲鱼是什么| 半边脸疼是什么原因| 什么叫筋膜炎| 妇科杆菌是什么引起的| 龟兔赛跑的故事告诉我们什么道理| 梦见老虎狮子是什么预兆| 媚字五行属什么| 牛皮革是什么意思| 羲字五行属什么| 做爱什么姿势| 红颜是什么意思| aqi是什么| 人为什么会长痔疮| 缺铁性贫血的人吃什么补血最快| 什么烟好抽又便宜| 脾不统血吃什么中成药| 日字旁跟什么有关| 截单是什么意思| 橄榄菜长什么样子图片| 铲垃圾的工具叫什么| 19点是什么时辰| 婢女是什么意思| 鹅蛋有什么好处| 幽门螺旋杆菌是什么原因造成的| 正痛片别名叫什么| 一生一世是什么生肖| 淋巴在什么位置| 什么食物含硒量最高| 蝙蝠属于什么动物| 手脚浮肿是什么原因引起的| 莲子和什么搭配最好| 跳蚤最怕什么| 蜘蛛痣是什么样的| mastercard是什么意思| 嘉靖为什么不杀严嵩| 屁股疼挂什么科| mk包包属于什么档次| 孩子咳嗽吃什么药| 扫兴什么意思| 心房颤动是什么意思| 心脏缺血吃什么药| 胃切除手术后吃什么好| 什么泡水喝对肝脏好| 什么叫闭经| 广东是什么气候| 甲肝戊肝是什么病| 什么奶粉比较好| 什么门关不上| 去火喝什么茶最好| 小孩夜里哭闹是什么原因| 苦瓜和什么搭配最好| 什么材质| 眼睛吹风就流泪是什么原因| 吃桃子有什么好处| 名列前茅的茅是什么意思| carrera手表什么牌子| 成人大便绿色是什么原因| 血瘀是什么原因造成的| 7一9点是什么时辰| 劲爆是什么意思| 吃什么能改善睡眠| 老人双脚浮肿是什么原因| 为什么会细菌感染| 李知恩为什么叫iu| 缺血灶是什么意思| 血压低什么原因| 什么是生物制剂| 脸上白一块一块的是什么原因| 大出血是什么症状| 青蛙爱吃什么| 血糖高了会有什么危害| 暗网里面有什么| 拉姆是什么意思| 奶奶的姐姐叫什么| mechrevo是什么牌子的电脑| 肩周炎是什么引起的| 凝血六项是检查什么的| sjh是什么意思| 腰椎穿刺是检查什么的| 12月12号什么星座| 右手麻是什么原因| 龙傲天是什么意思| 咖啡加牛奶叫什么| 五味子长什么样| 阴道干燥是什么原因| 看颈椎病挂什么科| 什么的拼音怎么写| 佩戴沉香有什么好处| 用神是什么意思| 挫败感是什么意思| 腿上出汗是什么原因| 炉中火是什么意思| 腋毛上有白色附着物是什么| 肾结石看什么科| 梦到自己长白头发是什么意思| 99年发生了什么事情| 潘海利根香水什么档次| 粘粉是什么粉| 腺肌症吃什么药| 血栓是什么| 海鸥手表属于什么档次| 什么阳地名| 梦见买床是什么意思| 癸卯是什么意思| 坏肚子吃什么药| 睡觉为什么流口水| 治烫伤最好的药膏是什么| 花青素有什么作用| 三伏天什么意思| 勤劳的小蜜蜂什么意思| 左眼皮跳是什么预兆| 麦霸什么意思| 什么人适合吃红参| 胃疼想吐是什么原因| 宝宝感冒吃什么药| 椎间盘变性是什么意思| 异常灌注是什么意思| 大腿正面是什么经络| 铿锵玫瑰是什么意思| pyq是什么意思| 龟头炎是什么| 缺铁性贫血吃什么食物好| 梦见情人是什么意思啊| 什么生肖不认识路| 产妇吃什么鸡最好| 什么是纳米| roca是什么品牌| 疑似是什么意思| 三千大千世界什么意思| 什么的哭| 白细胞3个加号是什么意思| 尿红色是什么原因| 黄芪有什么好处| 生源地是指什么| 梦见和妈妈吵架是什么意思| 得莫利是什么意思| 十月份是什么季节| up主是什么意思| 喂母乳不能吃什么| 老师结婚学生送什么礼物好| 喉咙卡鱼刺挂什么科| 什么是两栖动物| 幽门螺旋杆菌阳性代表什么| 七月一号是什么节| 老鼠和什么属相相冲| 颐养天年是什么意思| 10月5号什么星座| 人为什么有五根手指| 党参不能和什么一起吃| 下海的意思是什么| 骨刺是什么原因引起的| 为什么女追男没好下场| 孙权为什么不北伐| 一本线是什么意思| 35是什么意思| 阴道润滑剂什么牌子好| 经常口腔溃疡挂什么科| 胆结石吃什么排石最快| 2.6号是什么星座| 尿液有白色絮状物是什么原因| 益生菌不能和什么一起吃| 为什么不建议切除脂肪瘤| 梦到好多蛇是什么意思| 小孩过敏吃什么药| 眉目的比喻义是什么| 码农是什么意思| 牙龈肿痛吃什么药好得快| 小三阳吃什么食物好得快| 现在去贵州穿什么衣服| 甲亢病是一种什么病| 栉风沐雨什么意思| 胃不舒服能吃什么水果| 下雨天适合穿什么衣服| 血清肌酐高说明什么问题| 电影监制是做什么的| 口语化是什么意思| 5月22日什么星座| 来月经不能吃什么| 女性盆腔炎什么症状| 吃什么能生精和提高精子质量| 行李为什么叫行李| 梦见老婆出轨是什么预兆| 补气血吃什么食物| 小孩咬人是什么原因| 海里有什么动物| 百度Jump to content

厅系统领导干部多种形式学习《致维吾尔族...

Kuchokera ku Wikipedia
百度 若仅仅从简单的因果对应关系而论,很容易得出“公路局纯属躺枪”的结论。

Module:Infobox is a module that implements the {{Infobox}} template. Please see the template page for usage instructions.

Tracking categories

[sintha gwero]

local p = {}
local args = {}
local origArgs = {}
local root
local empty_row_categories = {}
local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]'
local has_rows = false
local lists = {
	plainlist_t = {
		patterns = {
			'^plainlist$',
			'%splainlist$',
			'^plainlist%s',
			'%splainlist%s'
		},
		found = false,
		styles = 'Plainlist/styles.css'
	},
	hlist_t = {
		patterns = {
			'^hlist$',
			'%shlist$',
			'^hlist%s',
			'%shlist%s'
		},
		found = false,
		styles = 'Hlist/styles.css'
	}
}

local function has_list_class(args_to_check)
	for _, list in pairs(lists) do
		if not list.found then
			for _, arg in pairs(args_to_check) do
				for _, pattern in ipairs(list.patterns) do
					if mw.ustring.find(arg or '', pattern) then
						list.found = true
						break
					end
				end
				if list.found then break end
			end
		end
	end
end

local function fixChildBoxes(sval, tt)
	local function notempty( s ) return s and s:match( '%S' ) end
	
	if notempty(sval) then
		local marker = '<span class=special_infobox_marker>'
		local s = sval
		-- start moving templatestyles and categories inside of table rows
		local slast = ''
		while slast ~= s do
			slast = s
			s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1')
			s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1')
		end
		-- end moving templatestyles and categories inside of table rows
		s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1')
		s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker)
		if s:match(marker) then
			s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '')
			s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1')
			s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1')
			s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1')
			s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1')
			s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
			s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
			s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1')
			s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1')
		end
		if s:match(marker) then
			local subcells = mw.text.split(s, marker)
			s = ''
			for k = 1, #subcells do
				if k == 1 then
					s = s .. subcells[k] .. '</' .. tt .. '></tr>'
				elseif k == #subcells then
					local rowstyle = ' style="display:none"'
					if notempty(subcells[k]) then rowstyle = ''	end
					s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' ..
						subcells[k]
				elseif notempty(subcells[k]) then
					if (k % 2) == 0 then
						s = s .. subcells[k]
					else
						s = s .. '<tr><' .. tt .. ' colspan=2>\n' ..
							subcells[k] .. '</' .. tt .. '></tr>'
					end
				end
			end
		end
		-- the next two lines add a newline at the end of lists for the PHP parser
		-- [[Special:Diff/849054481]]
		-- remove when [[:phab:T191516]] is fixed or OBE
		s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n')
		s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n')
		s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1')
		s = mw.ustring.gsub(s, '^(%{%|)', '\n%1')
		return s
	else
		return sval
	end
end

-- Cleans empty tables
local function cleanInfobox()
	root = tostring(root)
	if has_rows == false then
		root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '')
	end
end

-- Returns the union of the values of two tables, as a sequence.
local function union(t1, t2)

	local vals = {}
	for k, v in pairs(t1) do
		vals[v] = true
	end
	for k, v in pairs(t2) do
		vals[v] = true
	end
	local ret = {}
	for k, v in pairs(vals) do
		table.insert(ret, k)
	end
	return ret
end

-- Returns a table containing the numbers of the arguments that exist
-- for the specified prefix. For example, if the prefix was 'data', and
-- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}.
local function getArgNums(prefix)
	local nums = {}
	for k, v in pairs(args) do
		local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')
		if num then table.insert(nums, tonumber(num)) end
	end
	table.sort(nums)
	return nums
end

-- Adds a row to the infobox, with either a header cell
-- or a label/data cell combination.
local function addRow(rowArgs)
	
	if rowArgs.header and rowArgs.header ~= '_BLANK_' then
		has_rows = true
		has_list_class({ rowArgs.rowclass, rowArgs.class, args.headerclass })
		
		root
			:tag('tr')
				:addClass(rowArgs.rowclass)
				:cssText(rowArgs.rowstyle)
				:tag('th')
					:attr('colspan', '2')
					:addClass('infobox-header')
					:addClass(rowArgs.class)
					:addClass(args.headerclass)
					-- @deprecated next; target .infobox-<name> .infobox-header
					:cssText(args.headerstyle)
					:cssText(rowArgs.rowcellstyle)
					:wikitext(fixChildBoxes(rowArgs.header, 'th'))
		if rowArgs.data then
			root:wikitext(
				'[[Category:Pages using infobox templates with ignored data cells]]'
			)
		end
	elseif rowArgs.data and rowArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
		has_rows = true
		has_list_class({ rowArgs.rowclass, rowArgs.class })
		
		local row = root:tag('tr')
		row:addClass(rowArgs.rowclass)
		row:cssText(rowArgs.rowstyle)
		if rowArgs.label then
			row
				:tag('th')
					:attr('scope', 'row')
					:addClass('infobox-label')
					-- @deprecated next; target .infobox-<name> .infobox-label
					:cssText(args.labelstyle)
					:cssText(rowArgs.rowcellstyle)
					:wikitext(rowArgs.label)
					:done()
		end

		local dataCell = row:tag('td')
		dataCell
			:attr('colspan', not rowArgs.label and '2' or nil)
			:addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data')
			:addClass(rowArgs.class)
			-- @deprecated next; target .infobox-<name> .infobox(-full)-data
			:cssText(rowArgs.datastyle)
			:cssText(rowArgs.rowcellstyle)
			:wikitext(fixChildBoxes(rowArgs.data, 'td'))
	else
		table.insert(empty_row_categories, rowArgs.data or '')
	end
end

local function renderTitle()
	if not args.title then return end

	has_rows = true
	has_list_class({args.titleclass})
	
	root
		:tag('caption')
			:addClass('infobox-title')
			:addClass(args.titleclass)
			-- @deprecated next; target .infobox-<name> .infobox-title
			:cssText(args.titlestyle)
			:wikitext(args.title)
	
end

local function renderAboveRow()
	if not args.above then return end

	has_rows = true
	has_list_class({ args.aboveclass })
	
	root
		:tag('tr')
			:tag('th')
				:attr('colspan', '2')
				:addClass('infobox-above')
				:addClass(args.aboveclass)
				-- @deprecated next; target .infobox-<name> .infobox-above
				:cssText(args.abovestyle)
				:wikitext(fixChildBoxes(args.above,'th'))
end

local function renderBelowRow()
	if not args.below then return end

	has_rows = true
	has_list_class({ args.belowclass })
	
	root
		:tag('tr')
			:tag('td')
				:attr('colspan', '2')
				:addClass('infobox-below')
				:addClass(args.belowclass)
				-- @deprecated next; target .infobox-<name> .infobox-below
				:cssText(args.belowstyle)
				:wikitext(fixChildBoxes(args.below,'td'))
end

local function addSubheaderRow(subheaderArgs)
	if subheaderArgs.data and
		subheaderArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
		has_rows = true
		has_list_class({ subheaderArgs.rowclass, subheaderArgs.class })
		
		local row = root:tag('tr')
		row:addClass(subheaderArgs.rowclass)

		local dataCell = row:tag('td')
		dataCell
			:attr('colspan', '2')
			:addClass('infobox-subheader')
			:addClass(subheaderArgs.class)
			:cssText(subheaderArgs.datastyle)
			:cssText(subheaderArgs.rowcellstyle)
			:wikitext(fixChildBoxes(subheaderArgs.data, 'td'))
	else
		table.insert(empty_row_categories, subheaderArgs.data or '')
	end
end

local function renderSubheaders()
	if args.subheader then
		args.subheader1 = args.subheader
	end
	if args.subheaderrowclass then
		args.subheaderrowclass1 = args.subheaderrowclass
	end
	local subheadernums = getArgNums('subheader')
	for k, num in ipairs(subheadernums) do
		addSubheaderRow({
			data = args['subheader' .. tostring(num)],
			-- @deprecated next; target .infobox-<name> .infobox-subheader
			datastyle = args.subheaderstyle,
			rowcellstyle = args['subheaderstyle' .. tostring(num)],
			class = args.subheaderclass,
			rowclass = args['subheaderrowclass' .. tostring(num)]
		})
	end
end

local function addImageRow(imageArgs)

	if imageArgs.data and
		imageArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then

		has_rows = true
		has_list_class({ imageArgs.rowclass, imageArgs.class })
		
		local row = root:tag('tr')
		row:addClass(imageArgs.rowclass)

		local dataCell = row:tag('td')
		dataCell
			:attr('colspan', '2')
			:addClass('infobox-image')
			:addClass(imageArgs.class)
			:cssText(imageArgs.datastyle)
			:wikitext(fixChildBoxes(imageArgs.data, 'td'))
	else
		table.insert(empty_row_categories, imageArgs.data or '')
	end
end

local function renderImages()
	if args.image then
		args.image1 = args.image
	end
	if args.caption then
		args.caption1 = args.caption
	end
	local imagenums = getArgNums('image')
	for k, num in ipairs(imagenums) do
		local caption = args['caption' .. tostring(num)]
		local data = mw.html.create():wikitext(args['image' .. tostring(num)])
		if caption then
			data
				:tag('div')
					:addClass('infobox-caption')
					-- @deprecated next; target .infobox-<name> .infobox-caption
					:cssText(args.captionstyle)
					:wikitext(caption)
		end
		addImageRow({
			data = tostring(data),
			-- @deprecated next; target .infobox-<name> .infobox-image
			datastyle = args.imagestyle,
			class = args.imageclass,
			rowclass = args['imagerowclass' .. tostring(num)]
		})
	end
end

-- When autoheaders are turned on, preprocesses the rows
local function preprocessRows()
	if not args.autoheaders then return end
	
	local rownums = union(getArgNums('header'), getArgNums('data'))
	table.sort(rownums)
	local lastheader
	for k, num in ipairs(rownums) do
		if args['header' .. tostring(num)] then
			if lastheader then
				args['header' .. tostring(lastheader)] = nil
			end
			lastheader = num
		elseif args['data' .. tostring(num)] and
			args['data' .. tostring(num)]:gsub(
				category_in_empty_row_pattern, ''
			):match('^%S') then
			local data = args['data' .. tostring(num)]
			if data:gsub(category_in_empty_row_pattern, ''):match('%S') then
				lastheader = nil
			end
		end
	end
	if lastheader then
		args['header' .. tostring(lastheader)] = nil
	end
end

-- Gets the union of the header and data argument numbers,
-- and renders them all in order
local function renderRows()

	local rownums = union(getArgNums('header'), getArgNums('data'))
	table.sort(rownums)
	for k, num in ipairs(rownums) do
		addRow({
			header = args['header' .. tostring(num)],
			label = args['label' .. tostring(num)],
			data = args['data' .. tostring(num)],
			datastyle = args.datastyle,
			class = args['class' .. tostring(num)],
			rowclass = args['rowclass' .. tostring(num)],
			-- @deprecated next; target .infobox-<name> rowclass
			rowstyle = args['rowstyle' .. tostring(num)],
			rowcellstyle = args['rowcellstyle' .. tostring(num)]
		})
	end
end

local function renderNavBar()
	if not args.name then return end

	has_rows = true
	root
		:tag('tr')
			:tag('td')
				:attr('colspan', '2')
				:addClass('infobox-navbar')
				:wikitext(require('Module:Navbar')._navbar{
					args.name,
					mini = 1,
				})
end

local function renderItalicTitle()
	local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title'])
	if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then
		root:wikitext(require('Module:Italic title')._main({}))
	end
end

-- Categories in otherwise empty rows are collected in empty_row_categories.
-- This function adds them to the module output. It is not affected by
-- args.decat because this module should not prevent module-external categories
-- from rendering.
local function renderEmptyRowCategories()
	for _, s in ipairs(empty_row_categories) do
		root:wikitext(s)
	end
end

-- Render tracking categories. args.decat == turns off tracking categories.
local function renderTrackingCategories()
	if args.decat == 'yes' then return end
	if args.child == 'yes' then
		if args.title then
			root:wikitext(
				'[[Category:Pages using embedded infobox templates with the title parameter]]'
			)
		end
	elseif #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then
		root:wikitext('[[Category:Articles using infobox templates with no data rows]]')
	end
end

--[=[
Loads the templatestyles for the infobox.

TODO: FINISH loading base templatestyles here rather than in
MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables.
See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :).
When we do this we should clean up the inline CSS below too.
Will have to do some bizarre conversion category like with sidebar.

]=]
local function loadTemplateStyles()
	local frame = mw.getCurrentFrame()
	
	local hlist_templatestyles = ''
	if lists.hlist_t.found then
		hlist_templatestyles = frame:extensionTag{
			name = 'templatestyles', args = { src = lists.hlist_t.styles }
		}
	end
	
	local plainlist_templatestyles = ''
	if lists.plainlist_t.found then
		plainlist_templatestyles = frame:extensionTag{
			name = 'templatestyles', args = { src = lists.plainlist_t.styles }
		}
	end
	
	-- See function description
	local base_templatestyles = frame:extensionTag{
		name = 'templatestyles', args = { src = 'Module:Infobox/styles.css' }
	}

	local templatestyles = ''
	if args['templatestyles'] then
		templatestyles = frame:extensionTag{
			name = 'templatestyles', args = { src = args['templatestyles'] }
		}
	end
	
	local child_templatestyles = ''
	if args['child templatestyles'] then
		child_templatestyles = frame:extensionTag{
			name = 'templatestyles', args = { src = args['child templatestyles'] }
		}
	end
	
	local grandchild_templatestyles = ''
	if args['grandchild templatestyles'] then
		grandchild_templatestyles = frame:extensionTag{
			name = 'templatestyles', args = { src = args['grandchild templatestyles'] }
		}
	end
	
	return table.concat({
		-- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering.
		-- this ordering is not a guarantee because the rows of interest invoking
		-- each class may not be on a specific page
		hlist_templatestyles,
		plainlist_templatestyles,
		base_templatestyles,
		templatestyles,
		child_templatestyles,
		grandchild_templatestyles
	})
end

-- common functions between the child and non child cases
local function structure_infobox_common()
	renderSubheaders()
	renderImages()
	preprocessRows()
	renderRows()
	renderBelowRow()
	renderNavBar()
	renderItalicTitle()
	renderEmptyRowCategories()
	renderTrackingCategories()
	cleanInfobox()
end

-- Specify the overall layout of the infobox, with special settings if the
-- infobox is used as a 'child' inside another infobox.
local function _infobox()
	if args.child ~= 'yes' then
		root = mw.html.create('table')

		root
			:addClass(args.subbox == 'yes' and 'infobox-subbox' or 'infobox')
			:addClass(args.bodyclass)
			-- @deprecated next; target .infobox-<name>
			:cssText(args.bodystyle)
		
		has_list_class({ args.bodyclass })

		renderTitle()
		renderAboveRow()
	else
		root = mw.html.create()

		root
			:wikitext(args.title)
	end
	structure_infobox_common()
	
	return loadTemplateStyles() .. root
end

-- If the argument exists and isn't blank, add it to the argument table.
-- Blank arguments are treated as nil to match the behaviour of ParserFunctions.
local function preprocessSingleArg(argName)
	if origArgs[argName] and origArgs[argName] ~= '' then
		args[argName] = origArgs[argName]
	end
end

-- Assign the parameters with the given prefixes to the args table, in order, in
-- batches of the step size specified. This is to prevent references etc. from
-- appearing in the wrong order. The prefixTable should be an array containing
-- tables, each of which has two possible fields, a "prefix" string and a
-- "depend" table. The function always parses parameters containing the "prefix"
-- string, but only parses parameters in the "depend" table if the prefix
-- parameter is present and non-blank.
local function preprocessArgs(prefixTable, step)
	if type(prefixTable) ~= 'table' then
		error("Non-table value detected for the prefix table", 2)
	end
	if type(step) ~= 'number' then
		error("Invalid step value detected", 2)
	end

	-- Get arguments without a number suffix, and check for bad input.
	for i,v in ipairs(prefixTable) do
		if type(v) ~= 'table' or type(v.prefix) ~= "string" or
			(v.depend and type(v.depend) ~= 'table') then
			error('Invalid input detected to preprocessArgs prefix table', 2)
		end
		preprocessSingleArg(v.prefix)
		-- Only parse the depend parameter if the prefix parameter is present
		-- and not blank.
		if args[v.prefix] and v.depend then
			for j, dependValue in ipairs(v.depend) do
				if type(dependValue) ~= 'string' then
					error('Invalid "depend" parameter value detected in preprocessArgs')
				end
				preprocessSingleArg(dependValue)
			end
		end
	end

	-- Get arguments with number suffixes.
	local a = 1 -- Counter variable.
	local moreArgumentsExist = true
	while moreArgumentsExist == true do
		moreArgumentsExist = false
		for i = a, a + step - 1 do
			for j,v in ipairs(prefixTable) do
				local prefixArgName = v.prefix .. tostring(i)
				if origArgs[prefixArgName] then
					-- Do another loop if any arguments are found, even blank ones.
					moreArgumentsExist = true
					preprocessSingleArg(prefixArgName)
				end
				-- Process the depend table if the prefix argument is present
				-- and not blank, or we are processing "prefix1" and "prefix" is
				-- present and not blank, and if the depend table is present.
				if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then
					for j,dependValue in ipairs(v.depend) do
						local dependArgName = dependValue .. tostring(i)
						preprocessSingleArg(dependArgName)
					end
				end
			end
		end
		a = a + step
	end
end

-- Parse the data parameters in the same order that the old {{infobox}} did, so
-- that references etc. will display in the expected places. Parameters that
-- depend on another parameter are only processed if that parameter is present,
-- to avoid phantom references appearing in article reference lists.
local function parseDataParameters()

	preprocessSingleArg('autoheaders')
	preprocessSingleArg('child')
	preprocessSingleArg('bodyclass')
	preprocessSingleArg('subbox')
	preprocessSingleArg('bodystyle')
	preprocessSingleArg('title')
	preprocessSingleArg('titleclass')
	preprocessSingleArg('titlestyle')
	preprocessSingleArg('above')
	preprocessSingleArg('aboveclass')
	preprocessSingleArg('abovestyle')
	preprocessArgs({
		{prefix = 'subheader', depend = {'subheaderstyle', 'subheaderrowclass'}}
	}, 10)
	preprocessSingleArg('subheaderstyle')
	preprocessSingleArg('subheaderclass')
	preprocessArgs({
		{prefix = 'image', depend = {'caption', 'imagerowclass'}}
	}, 10)
	preprocessSingleArg('captionstyle')
	preprocessSingleArg('imagestyle')
	preprocessSingleArg('imageclass')
	preprocessArgs({
		{prefix = 'header'},
		{prefix = 'data', depend = {'label'}},
		{prefix = 'rowclass'},
		{prefix = 'rowstyle'},
		{prefix = 'rowcellstyle'},
		{prefix = 'class'}
	}, 50)
	preprocessSingleArg('headerclass')
	preprocessSingleArg('headerstyle')
	preprocessSingleArg('labelstyle')
	preprocessSingleArg('datastyle')
	preprocessSingleArg('below')
	preprocessSingleArg('belowclass')
	preprocessSingleArg('belowstyle')
	preprocessSingleArg('name')
	-- different behaviour for italics if blank or absent
	args['italic title'] = origArgs['italic title']
	preprocessSingleArg('decat')
	preprocessSingleArg('templatestyles')
	preprocessSingleArg('child templatestyles')
	preprocessSingleArg('grandchild templatestyles')
end

-- If called via #invoke, use the args passed into the invoking template.
-- Otherwise, for testing purposes, assume args are being passed directly in.
function p.infobox(frame)
	if frame == mw.getCurrentFrame() then
		origArgs = frame:getParent().args
	else
		origArgs = frame
	end
	
	parseDataParameters()
	
	return _infobox()
end

-- For calling via #invoke within a template
function p.infoboxTemplate(frame)
	origArgs = {}
	for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end
	
	parseDataParameters()
	
	return _infobox()
end
return p
ghz是什么意思 尿微量白蛋白是什么意思 求租是什么意思 荨麻疹吃什么 水果什么时间段吃最好
国五行属什么 gg是什么意思 sid是什么意思 家里为什么会有跳蚤 吃饭时头晕是什么原因
杨梅不能和什么一起吃 家里为什么不能放假花 眼睛发黄什么原因 电解质水是什么水 抗核抗体弱阳性说明什么
羊悬筋是什么样子图片 血糖高适合吃什么零食 人中白是什么 胆囊壁毛糙什么意思 星星是什么的眼睛
央行放水是什么意思xjhesheng.com 咳嗽黄痰是什么原因hcv9jop6ns7r.cn 人设崩塌是什么意思hcv8jop2ns8r.cn 牡丹是什么季节开的hcv9jop2ns0r.cn 赵本山什么时候去世的clwhiglsz.com
卡卡西是什么意思hcv8jop0ns8r.cn 死灰复燃是什么意思hcv8jop7ns3r.cn 经期提前是什么原因hcv8jop2ns4r.cn 什么人不能喝大麦茶hcv8jop3ns7r.cn 冠带是什么意思hcv9jop8ns3r.cn
岁寒三友是什么意思hcv8jop8ns1r.cn 1936年中国发生了什么hcv8jop6ns2r.cn 德艺双馨是什么意思kuyehao.com 血小板低是什么原因引起的hcv8jop0ns3r.cn 大什么一什么hcv9jop2ns6r.cn
静五行属性是什么hcv8jop0ns3r.cn 一个人自言自语的说话是什么病hcv7jop5ns0r.cn prp是什么意思clwhiglsz.com 感冒了可以吃什么水果beikeqingting.com 天蝎座后面是什么星座hcv7jop4ns5r.cn
百度