草字头加全念什么| 心里恶心是什么原因| 肝郁化火吃什么中成药| 土龙是什么| 天指什么生肖| 饱经风霜是什么生肖| 夹生是什么意思| 3911农药主要治什么| 冬枣什么时候成熟| 甘油三脂高是什么意思| 淋巴结节挂什么科| 屎壳郎长什么样| 大油边是什么| 钾离子低的原因是什么| 养狗养不活是什么兆头| 驿站是什么意思| 大黄是什么药材| 什么是中耳炎| 助听器什么牌子好用| 安然无恙的恙是什么意思| 履约是什么意思| 高压高是什么原因| 为什么蚊子总是咬我| 甲状腺4a是什么意思| 什么是老赖| cga是什么意思| 戴字五行属什么| penis是什么意思| 晚上做梦梦到蛇是什么意思| 例假吃什么水果好| 砧板是什么工作| 白露是什么时候| 癫痫挂什么科| 小孩放臭屁是什么原因| 王不留行是什么| 莱猪是什么| epc什么意思| 宝宝睡觉出汗是什么原因| 什么牌子的充电宝好| 1971年属什么| 188是什么意思| 五月十八什么星座| 女人是什么动物| siri什么意思| 丝瓜为什么会苦| 越描越黑是什么意思| 肚子怕冷是什么原因该怎么办| sid是什么| 胃窦粘膜慢性炎是什么病| 红红火火是什么意思| 什么的红枣| 心字底的字有什么| 满城尽带黄金甲是什么意思| 十月一日是什么日子| 38是什么意思| pv是什么意思| 床上出现蜈蚣什么原因| etf什么意思| 睡莲为什么叫睡莲| 什么家庭不宜挂八骏图| 裹小脚是什么时候开始的| 1954年出生属什么| 风俗是什么意思| 手指头发红是什么原因| 梦见自己吐血是什么征兆| 吃山竹有什么好处和坏处| 咽喉炎吃什么药能治好| 车厘子和樱桃什么区别| 血气分析是检查什么的| 真情流露是什么意思| 七月二十八什么星座| 臭屁多是什么原因| 睾丸疼痛吃什么药| pcp是什么意思| 啐了一口是什么意思| 情绪高涨是什么意思| 石骨症是什么病| 尿蛋白质阳性是什么意思| 肠系膜淋巴结炎吃什么药| 美的是做什么起家的| 萎了是什么意思| 什么是洗钱| 涤纶是什么材料| 口臭吃什么中成药| ab型和b型生的孩子是什么血型| 伤春悲秋什么意思| 全棉和纯棉有什么区别| 血hcg是什么意思| 主是什么结构的字体| 萎缩性鼻炎用什么药| 梦见下雪是什么意思| 血小板高有什么危害| 打hcg针有什么作用| 梦见自己假牙掉了是什么意思| 吃什么补维生素| 肚脐眼臭是什么原因| 三点水加累读什么| 悟空是什么意思| bishop是什么意思| 胰岛素高是什么意思| 啤酒不能和什么一起吃| 头晕流鼻血是什么原因| 脚为什么脱皮| 2005年什么年| 套路是什么意思| 脊柱炎吃什么药效果好| 属鼠的和什么属相相克| 张良属什么生肖| 什么是红颜知己| 经常呕吐是什么原因| 集合是什么| 十月初三是什么星座| 日本是什么时候侵略中国的| 何乐而不为是什么意思| 貂蝉属什么生肖| 孕妇梦见血是什么预兆| 首发是什么意思| 狐臭什么味道| 减肥晚上适合吃什么水果| ser是什么氨基酸| 女人右下巴有痣代表什么| 初中属于什么专业| 水中毒是什么症状| 高压高是什么原因引起的| 心绞痛是什么原因引起的| 二尾子什么意思| 石榴叶子泡水喝有什么功效| 腺苷脱氨酶高什么意思| 平板支撑练什么| 义五行属什么| 什么是木薯粉| 肿瘤标志物五项检测是什么| 5.23是什么星座| 压榨是什么意思| 小脑萎缩有什么症状| 猪肝跟什么相克| 喝普洱茶有什么好处| 空气净化器有什么作用| 家里有蜈蚣是什么原因| 舜字五行属什么| 76年出生属什么生肖| 便秘吃什么能马上排便| 不但而且是什么关系| 吃石斛有什么作用| 老年人腿无力是什么原因导致的| 送同学什么毕业礼物好| 六月初三是什么日子| 甲减不能吃什么东西| 辛未日五行属什么| 旭五行属什么| 收口是什么意思| 透支是什么意思| 小211是什么意思| 麸子是什么东西| 阴道瘙痒什么原因| 百合花什么颜色| 欧芹在中国叫什么| 不是省油的灯是什么意思| 雪对什么| 斑马鱼吃什么| 经常嗓子疼是什么原因| 特警是干什么的| 鹅口疮用什么药| 支气管炎吃什么药好得快| 身上长扁平疣是什么原因造成的| 什么一色| 养胃吃什么好| 梦见河水是什么意思| 劳改是什么意思| 老年人口干是什么原因| 无菌敷贴是干什么用的| 什么是生物钟| 巴氏征阳性是什么意思| 怀孕了吃什么药可以打掉| 什么是m属性| 北京的市花是什么花| 考研复试是什么意思| 单脐动脉是什么意思| 脊椎和脊柱有什么区别| 西亚是什么人种| 肚脐眼右边是什么器官| 梦见坐牢是什么预兆| 挑染是什么意思| 定亲是什么意思| 耳廓上长痣代表什么| 无性别是什么意思| 霜降是什么时候| 善根是什么意思| 高血压一般在什么年龄| 乙肝二四五阳性什么意思| 不硬的原因是什么| 泡打粉是什么东西| 情绪不稳定是什么原因| 人工牛黄是什么| 什么是水中毒| 黄疸偏高有什么危害| 泽去掉三点水念什么| 水鸭是什么鸭| 蒹葭苍苍是什么意思| 湿疹是什么症状| 杏林春暖的杏林指什么| 贫血会引起什么症状| 射进去有什么感觉| 非无菌是什么意思| 81年属什么生肖| 立场是什么意思| 2.20什么星座| 客厅用什么灯具好| 脑梗死吃什么药| 麦粒肿不能吃什么食物| 血小板低是什么问题| 红顶商人是什么意思| 女子与小人难养也什么意思| 大腿根部痛是什么原因| 腮腺炎输液用什么药| 蝙蝠属于什么类动物| 脚怕冷是什么原因引起的| 湿热体质适合喝什么茶| 打喷嚏很臭是什么原因| 全身疼痛是什么原因| 人次什么意思| 红鸾星动是什么意思| 什么不迫| 天秤座女和什么星座最配| 老年人口干是什么原因| 单宁是什么意思| 宫颈炎是什么原因引起的| 怀孕前检查什么项目内容| 柏树长什么样子| 屁股痛是什么原因| 什么是个性| 长白班是什么意思| 三克油是什么意思| 心花怒放是什么意思| 大姨妈来了两天就没了什么原因| 花生对胃有什么好处| 安逸是什么意思| pm是什么| 脸肿挂什么科| 抽烟是什么感觉| 锅烧是什么| 农历11月14日是什么星座| 椭圆形脸适合什么发型| 直销是什么意思| 什么样的人容易高反| 白衬衫太透里面穿什么| 妄想症吃什么药| 梦见老公怀孕什么预兆| 红艳煞是什么意思| 什么球不能踢脑筋急转弯| 真菌孢子阳性什么意思| 红颜什么意思| 吃榴莲有什么坏处| 什么的医生| 公安局局长是什么级别| 哂是什么意思| 血糖高喝什么茶好| 猫瘟吃什么药| 美容行业五行属什么| 枸杞泡水喝有什么好处| 红楼梦为什么是四大名著之首| 后天是什么日子| 尿不尽是什么意思| 黑道是什么意思| 百度Jump to content

365淘房手机版(手机365淘房安卓版下载)V6.4.20官方版

?????????????
百度 齐某接受对方电话诊病并实际接受了保健药品,后因疗效不佳而报警求助,这究竟属于民间医患纠纷还是刑事犯罪,也亟需查证。

This module implements the {{Infobox}} template. Please see the template page for usage instructions.


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
刻舟求剑什么意思 猪吃什么 今年16岁属什么生肖 什么是偏印 之际是什么意思
六月十五号是什么星座 醒酒器有什么作用 hv是什么意思 吃什么药降尿酸快 儿童嗓子哑吃什么药
总是放响屁是什么原因 脑供血不足是什么原因引起的 尿中有泡沫是什么原因 祖师香是什么意思 黄昏是什么时辰
舌头发麻是什么原因 卡其色裙子配什么颜色上衣好看 牙齿涂氟是什么意思 伤口拆线挂什么科 鼻子突然流血是什么原因
父母都是a型血孩子是什么血型hcv9jop7ns0r.cn 疼痛科属于什么科hcv9jop6ns7r.cn 什么是放疗hcv8jop9ns1r.cn 肠套叠是什么意思hcv8jop7ns1r.cn 出入是什么意思hcv7jop5ns2r.cn
孕妇缺营养吃什么补hcv8jop9ns3r.cn 1949属什么生肖wuhaiwuya.com 花椒什么时候采摘hcv9jop2ns1r.cn 梅核气吃什么药bjhyzcsm.com 鲫鱼是什么鱼hcv8jop1ns6r.cn
果胶是什么东西hcv9jop5ns7r.cn 去医院看头发挂什么科hcv9jop1ns8r.cn 什么叫脂肪肝hcv9jop0ns2r.cn 豆种翡翠属于什么档次bjhyzcsm.com 口腔溃疡什么时候能好hcv8jop9ns3r.cn
不来月经吃什么药hcv7jop5ns1r.cn 淋巴结为什么会肿大jingluanji.com 越南讲什么语言chuanglingweilai.com 立牌坊是什么意思hcv7jop9ns4r.cn 劫数是什么意思hcv9jop1ns9r.cn
百度