就诊卡号是什么| 征兵初检检查什么| 菠菜和豆腐为什么不能一起吃| 何德何能是什么意思| 为什么会得hpv| 艾滋通过什么途径传播| 刹那芳华是什么意思| 脚心发热是什么原因| 零零年属什么| 突然间头晕是什么原因| 杨桃什么味道| 脚底板痛什么原因| 二级医院什么意思| 七月份是什么季节| 甲功三项是检查什么| 小儿病毒性感冒吃什么药效果好| 浅笑安然是什么意思| 占位是什么意思| 潜血试验阳性什么意思| 黑色素痣看什么科| 高压低是什么原因引起的| 真菌阳性是什么意思| 罗马布是什么面料| 梦见别人开车撞死人是什么意思| 草鱼喜欢吃什么| 宝宝睡觉突然大哭是什么原因| 27属相是什么生肖| 什么是畸胎瘤| 痔疮很痒是什么原因| 中医学学什么| 毛骨悚然是什么意思| 怀孕10天左右有什么症状| 眼袋浮肿什么原因| shadow是什么意思| 隐血阳性什么意思| 必承其重上一句是什么| 胃湿热吃什么中成药| 孕妇喝咖啡有什么危害| 溥仪为什么没有生育能力| 耳耵聍是什么东西| 油碟是什么| 专长是什么意思| 做爱是什么感觉| 起痱子是什么原因| 天方夜谭是什么生肖| 小河虾吃什么| 西地那非有什么副作用| 冷面是什么面做的| 肺胃热盛吃什么中成药| 不屑一顾的意思是什么| 什么鸟好养| 障碍是什么意思| 免疫组化是什么意思| 僵尸为什么怕糯米| 去医院看乳房挂什么科| 佛历是什么意思| 差强人意什么意思| 超脱是什么意思| 醋粉是什么做的| 水痘可以吃什么水果| 血小板低吃什么水果好| 依字五行属什么| 什么冲冲| 扶他林是什么药| 胳膊肘往外拐是什么意思| 世界上最软的东西是什么| 压缩性骨折是什么意思| 什么补肾效果最好| 血红蛋白浓度是什么意思| 大腿外侧疼痛是什么原因| 荷尔蒙是什么| 肉炒什么菜谱大全| 背疼挂什么科室最好| 牛属相和什么属相配| 铜罗是什么生肖| 胆红素高说明什么| 胰管扩张是什么意思| 2024什么年属什么年| 刘邦为什么要杀张良| 不忘初心方得始终是什么意思| 男性hpv挂什么科| 星座之王是什么座| 潘粤明老婆现任叫什么| 维生素c有什么用| 亲嘴什么感觉| 粥样动脉硬化是什么意思| 子宫小有什么影响| 生动形象是什么意思| 河南什么烟出名| 嘴唇干燥是什么原因引起的| 办准生证需要什么资料| 紫茉莉什么时候开花| 无菌性前列腺炎吃什么药效果好| 孕期吃什么长胎不长肉| 承上启下是什么意思| 胃溃疡吃什么食物| 双肺门不大是什么意思| 渗析是什么意思| 一厢情愿指什么生肖| 12月25日什么星座| 骁字五行属什么| 乔木是什么| 碗摔碎了预示着什么| 澳大利亚人说什么语言| 5月30号是什么星座| 什么是破窗效应| 看空是什么意思| 八面玲珑是什么数字| 八朵玫瑰花代表什么意思| 芸豆是什么| 银耳为什么助湿气| 跳蚤咬了擦什么药| 肝血不足吃什么补最快| 人生观价值观世界观是什么意思| 什么是爱情观| 女性经常手淫有什么危害| 抗性糊精是什么| 哈库呐玛塔塔什么意思| 滥竽充数的充是什么意思| 牙膏尾部的颜色代表什么意思| 蒙脱石是什么| 交工是什么意思| 哺乳期可以喝什么饮料| 油麦菜不能和什么一起吃| 蝉联是什么意思| 绿色衣服搭配什么颜色的裤子| 仙境是什么意思| 病毒的遗传物质是什么| 腰椎间盘膨出是什么意思| 肺结节吃什么食物散结节最快| 血脂高是什么原因引起的| 皮肤病是什么原因造成的| 云南有什么名酒| 肚脐下四指是什么位置| 梦见自己生了个女儿是什么预兆| 头顶长白头发是什么原因造成的| 茶寿为什么是108岁| 优势卵泡是什么意思| 白带像豆腐渣用什么药| 精分是什么| 牙膏洗脸有什么好处和坏处| 洁面慕斯和洗面奶有什么区别| 公安局是干什么的| 昔字五行属什么| 小腿抽筋是什么原因| 17年属什么生肖| 交替脉见于什么病| 一个口一个我念什么| 梁子是什么意思| 殷是什么意思| 活化部分凝血活酶时间偏高是什么意思| 幽门螺杆菌是什么病| 拜复乐是什么药| 尿胆红素2十是什么意思| 煮玉米加什么才会香甜| fml什么意思| 熬中药用什么锅最好| 左手小手指麻木是什么原因引起的| 吃饭后胃疼是什么原因| 青云志3什么时候上映| 双向情感障碍是什么意思| 阿拉伯人属于什么人种| 陕西有什么特产| 主页是什么意思| 攒肚是什么意思| 83年属什么| 美帝是什么意思| 1014是什么星座| 做梦梦见生孩子是什么意思| 胃不好的人适合吃什么水果| 惊雷是什么意思| 高风亮节是什么意思| 马躺下睡觉为什么会死| 走之底的字与什么有关| 参事是什么级别| 脚底灼热是什么原因| 护肝吃什么| 了了什么意思| 出院记录是什么| 桓是什么意思| 为什么会吐| 眼睛干涩疼痛用什么滴眼液好| cdc是什么意思| 芈月和秦始皇什么关系| 带状疱疹不能吃什么| 什么是电子烟| 木薯淀粉是什么粉| 早泄吃什么药| 艾滋病什么症状| 21三体高风险是什么意思| 不声不响是什么意思| 鱼加思读什么| 儿童嗓子哑了什么原因| 搞基什么意思| 小儿风寒感冒吃什么药最好| 阑尾炎在什么位置| 冠心病喝什么茶最好| 什么是复句| 五行海中金是什么意思| 吃什么可以快速美白| 半夜尿多是什么原因| 颈动脉b超是检查什么| 以什么乱什么| 检查血压挂什么科| 化疗后吃什么恢复快| 青出于蓝是什么意思| 吃什么能化解肾结石| 葡萄上的白霜是什么| 什么叫柞蚕丝| 为什么吃了饭就想睡觉| 覆水难收是什么意思| 狗跟什么生肖最配| 感冒发烧吃什么水果好| 眼睛红肿是什么原因| 什么什么美景| 人乳头瘤病毒33型阳性是什么意思| 1987年出生属什么| 龙跟什么生肖配对最好| 一开车就犯困是什么原因| 上善若水下一句是什么| 舌苔厚腻是什么原因| 10月10是什么星座| pr什么意思| 喝酒后吃什么解酒最快| 天秤男和什么星座最配| 蒸鱼用什么鱼| 心血管堵塞吃什么药| 猪红是什么| 最小的一位数是什么| 经常喝柠檬水有什么好处和坏处| 肝血虚吃什么食物调理| 阳离子是什么面料| hvb是什么意思| pos是什么意思| 1218是什么星座| 芹菜不能和什么食物一起吃| 反复发烧挂什么科| 酸辣土豆丝用什么醋| 气场强大是什么意思| 转氨酶高吃什么药| 棉纱是什么面料| 次长是什么职位| 尿路感染检查什么项目| 幻觉幻听是什么症状| 男的叫少爷女的叫什么| 内分泌失调吃什么药| 西四命是什么意思| 托是什么意思| 血压高什么原因引起的| 口干咽干是什么原因| 日十组成什么字| 射手座和什么星座最配| 双子座是什么象| 脚热是什么原因引起的| 乙肝五项15阳性是什么意思| 什么是多动症| 维生素B1有什么副作用| 4像什么| 蚂蝗吃什么| 尿隐血是什么原因| 水果都有什么| h202阳性是什么意思| 月亮是什么生肖| 生姜和红糖熬水有什么作用| 百度? ????? ????? ???

世锦赛丁俊晖德比战三杆破百 首阶段7-2周跃龙

??? ???? [[:?????:SITENAMEP]] ???
百度 同时,我们也相信,在无锡市人民政府的大力主张下,无锡市人民的全民健身意识将大幅提高,锡马将带动更多市民参与到全民健身行列中来,共同为树立新无锡强、富、美、高的良好形象而共同努力。

Documentation for this module may be created at ????????:Message box/doc

-- This is a meta-module for producing message box templates, including
-- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.

-- Load necessary modules.
require('Module:No globals')
local getArgs
local yesno = require('Module:Yesno')

-- Get a language object for formatDate and ucfirst.
local lang = mw.language.getContentLanguage()

-- Define constants
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}

--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------

local function getTitleObject(...)
	-- Get the title object, passing the function through pcall
	-- in case we are over the expensive function count limit.
	local success, title = pcall(mw.title.new, ...)
	if success then
		return title
	end
end

local function union(t1, t2)
	-- Returns the union of two arrays.
	local vals = {}
	for i, v in ipairs(t1) do
		vals[v] = true
	end
	for i, v in ipairs(t2) do
		vals[v] = true
	end
	local ret = {}
	for k in pairs(vals) do
		table.insert(ret, k)
	end
	table.sort(ret)
	return ret
end

local function getArgNums(args, prefix)
	local nums = {}
	for k, v in pairs(args) do
		local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
		if num then
			table.insert(nums, tonumber(num))
		end
	end
	table.sort(nums)
	return nums
end

--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------

local MessageBox = {}
MessageBox.__index = MessageBox

function MessageBox.new(boxType, args, cfg)
	args = args or {}
	local obj = {}

	-- Set the title object and the namespace.
	obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()

	-- Set the config for our box type.
	obj.cfg = cfg[boxType]
	if not obj.cfg then
		local ns = obj.title.namespace
		-- boxType is "mbox" or invalid input
		if args.demospace and args.demospace ~= '' then
			-- implement demospace parameter of mbox
			local demospace = string.lower(args.demospace)
			if DEMOSPACES[demospace] then
				-- use template from DEMOSPACES
				obj.cfg = cfg[DEMOSPACES[demospace]]
			elseif string.find( demospace, 'talk' ) then
				-- demo as a talk page
				obj.cfg = cfg.tmbox
			else
				-- default to ombox
				obj.cfg = cfg.ombox
			end
		elseif ns == 0 then
			obj.cfg = cfg.ambox -- main namespace
		elseif ns == 6 then
			obj.cfg = cfg.imbox -- file namespace
		elseif ns == 14 then
			obj.cfg = cfg.cmbox -- category namespace
		else
			local nsTable = mw.site.namespaces[ns]
			if nsTable and nsTable.isTalk then
				obj.cfg = cfg.tmbox -- any talk namespace
			else
				obj.cfg = cfg.ombox -- other namespaces or invalid input
			end
		end
	end

	-- Set the arguments, and remove all blank arguments except for the ones
	-- listed in cfg.allowBlankParams.
	do
		local newArgs = {}
		for k, v in pairs(args) do
			if v ~= '' then
				newArgs[k] = v
			end
		end
		for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
			newArgs[param] = args[param]
		end
		obj.args = newArgs
	end

	-- Define internal data structure.
	obj.categories = {}
	obj.classes = {}
	-- For lazy loading of [[Module:Category handler]].
	obj.hasCategories = false

	return setmetatable(obj, MessageBox)
end

function MessageBox:addCat(ns, cat, sort)
	if not cat then
		return nil
	end
	if sort then
		cat = string.format('[[Category:%s|%s]]', cat, sort)
	else
		cat = string.format('[[Category:%s]]', cat)
	end
	self.hasCategories = true
	self.categories[ns] = self.categories[ns] or {}
	table.insert(self.categories[ns], cat)
end

function MessageBox:addClass(class)
	if not class then
		return nil
	end
	table.insert(self.classes, class)
end

function MessageBox:setParameters()
	local args = self.args
	local cfg = self.cfg

	-- Get type data.
	self.type = args.type
	local typeData = cfg.types[self.type]
	self.invalidTypeError = cfg.showInvalidTypeError
		and self.type
		and not typeData
	typeData = typeData or cfg.types[cfg.default]
	self.typeClass = typeData.class
	self.typeImage = typeData.image

	-- Find if the box has been wrongly substituted.
	self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'

	-- Find whether we are using a small message box.
	self.isSmall = cfg.allowSmall and (
		cfg.smallParam and args.small == cfg.smallParam
		or not cfg.smallParam and yesno(args.small)
	)

	-- Add attributes, classes and styles.
	self.id = args.id
	self.name = args.name
	if self.name then
		self:addClass('box-' .. string.gsub(self.name,' ','_'))
	end
	if yesno(args.plainlinks) ~= false then
		self:addClass('plainlinks')
	end
	for _, class in ipairs(cfg.classes or {}) do
		self:addClass(class)
	end
	if self.isSmall then
		self:addClass(cfg.smallClass or 'mbox-small')
	end
	self:addClass(self.typeClass)
	self:addClass(args.class)
	self.style = args.style
	self.attrs = args.attrs

	-- Set text style.
	self.textstyle = args.textstyle

	-- Find if we are on the template page or not. This functionality is only
	-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
	-- and cfg.templateCategoryRequireName are set.
	self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
	if self.useCollapsibleTextFields
		or cfg.templateCategory
		and cfg.templateCategoryRequireName
	then
		if self.name then
			local templateName = mw.ustring.match(
				self.name,
				'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
			) or self.name
			templateName = 'Template:' .. templateName
			self.templateTitle = getTitleObject(templateName)
		end
		self.isTemplatePage = self.templateTitle
			and mw.title.equals(self.title, self.templateTitle)
	end
	
	-- Process data for collapsible text fields. At the moment these are only
	-- used in {{ambox}}.
	if self.useCollapsibleTextFields then
		-- Get the self.issue value.
		if self.isSmall and args.smalltext then
			self.issue = args.smalltext
		else
			local sect
			if args.sect == '' then
				sect = 'This ' .. (cfg.sectionDefault or 'page')
			elseif type(args.sect) == 'string' then
				sect = 'This ' .. args.sect
			end
			local issue = args.issue
			issue = type(issue) == 'string' and issue ~= '' and issue or nil
			local text = args.text
			text = type(text) == 'string' and text or nil
			local issues = {}
			table.insert(issues, sect)
			table.insert(issues, issue)
			table.insert(issues, text)
			self.issue = table.concat(issues, ' ')
		end

		-- Get the self.talk value.
		local talk = args.talk
		-- Show talk links on the template page or template subpages if the talk
		-- parameter is blank.
		if talk == ''
			and self.templateTitle
			and (
				mw.title.equals(self.templateTitle, self.title)
				or self.title:isSubpageOf(self.templateTitle)
			)
		then
			talk = '#'
		elseif talk == '' then
			talk = nil
		end
		if talk then
			-- If the talk value is a talk page, make a link to that page. Else
			-- assume that it's a section heading, and make a link to the talk
			-- page of the current page with that section heading.
			local talkTitle = getTitleObject(talk)
			local talkArgIsTalkPage = true
			if not talkTitle or not talkTitle.isTalkPage then
				talkArgIsTalkPage = false
				talkTitle = getTitleObject(
					self.title.text,
					mw.site.namespaces[self.title.namespace].talk.id
				)
			end
			if talkTitle and talkTitle.exists then
				local talkText = 'Relevant discussion may be found on'
				if talkArgIsTalkPage then
					talkText = string.format(
						'%s [[%s|%s]].',
						talkText,
						talk,
						talkTitle.prefixedText
					)
				else
					talkText = string.format(
						'%s the [[%s#%s|talk page]].',
						talkText,
						talkTitle.prefixedText,
						talk
					)
				end
				self.talk = talkText
			end
		end

		-- Get other values.
		self.fix = args.fix ~= '' and args.fix or nil
		local date
		if args.date and args.date ~= '' then
			date = args.date
		elseif args.date == '' and self.isTemplatePage then
			date = lang:formatDate('F Y')
		end
		if date then
			self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date)
		end
		self.info = args.info
		if yesno(args.removalnotice) then
			self.removalNotice = cfg.removalNotice
		end
	end

	-- Set the non-collapsible text field. At the moment this is used by all box
	-- types other than ambox, and also by ambox when small=yes.
	if self.isSmall then
		self.text = args.smalltext or args.text
	else
		self.text = args.text
	end

	-- Set the below row.
	self.below = cfg.below and args.below

	-- General image settings.
	self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
	self.imageEmptyCell = cfg.imageEmptyCell
	if cfg.imageEmptyCellStyle then
		self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px'
	end

	-- Left image settings.
	local imageLeft = self.isSmall and args.smallimage or args.image
	if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
		or not cfg.imageCheckBlank and imageLeft ~= 'none'
	then
		self.imageLeft = imageLeft
		if not imageLeft then
			local imageSize = self.isSmall
				and (cfg.imageSmallSize or '30x30px')
				or '40x40px'
			self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage
				or 'Imbox notice.png', imageSize)
		end
	end

	-- Right image settings.
	local imageRight = self.isSmall and args.smallimageright or args.imageright
	if not (cfg.imageRightNone and imageRight == 'none') then
		self.imageRight = imageRight
	end
end

function MessageBox:setMainspaceCategories()
	local args = self.args
	local cfg = self.cfg

	if not cfg.allowMainspaceCategories then
		return nil
	end

	local nums = {}
	for _, prefix in ipairs{'cat', 'category', 'all'} do
		args[prefix .. '1'] = args[prefix]
		nums = union(nums, getArgNums(args, prefix))
	end

	-- The following is roughly equivalent to the old {{Ambox/category}}.
	local date = args.date
	date = type(date) == 'string' and date
	local preposition = 'from'
	for _, num in ipairs(nums) do
		local mainCat = args['cat' .. tostring(num)]
			or args['category' .. tostring(num)]
		local allCat = args['all' .. tostring(num)]
		mainCat = type(mainCat) == 'string' and mainCat
		allCat = type(allCat) == 'string' and allCat
		if mainCat and date and date ~= '' then
			local catTitle = string.format('%s %s %s', mainCat, preposition, date)
			self:addCat(0, catTitle)
			catTitle = getTitleObject('Category:' .. catTitle)
			if not catTitle or not catTitle.exists then
				self:addCat(0, 'Articles with invalid date parameter in template')
			end
		elseif mainCat and (not date or date == '') then
			self:addCat(0, mainCat)
		end
		if allCat then
			self:addCat(0, allCat)
		end
	end
end

function MessageBox:setTemplateCategories()
	local args = self.args
	local cfg = self.cfg

	-- Add template categories.
	if cfg.templateCategory then
		if cfg.templateCategoryRequireName then
			if self.isTemplatePage then
				self:addCat(10, cfg.templateCategory)
			end
		elseif not self.title.isSubpage then
			self:addCat(10, cfg.templateCategory)
		end
	end

	-- Add template error categories.
	if cfg.templateErrorCategory then
		local templateErrorCategory = cfg.templateErrorCategory
		local templateCat, templateSort
		if not self.name and not self.title.isSubpage then
			templateCat = templateErrorCategory
		elseif self.isTemplatePage then
			local paramsToCheck = cfg.templateErrorParamsToCheck or {}
			local count = 0
			for i, param in ipairs(paramsToCheck) do
				if not args[param] then
					count = count + 1
				end
			end
			if count > 0 then
				templateCat = templateErrorCategory
				templateSort = tostring(count)
			end
			if self.categoryNums and #self.categoryNums > 0 then
				templateCat = templateErrorCategory
				templateSort = 'C'
			end
		end
		self:addCat(10, templateCat, templateSort)
	end
end

function MessageBox:setAllNamespaceCategories()
	-- Set categories for all namespaces.
	if self.invalidTypeError then
		local allSort = (self.title.namespace == 0 and 'Main:' or '') .. self.title.prefixedText
		self:addCat('all', 'Wikipedia message box parameter needs fixing', allSort)
	end
	if self.isSubstituted then
		self:addCat('all', 'Pages with incorrectly substituted templates')
	end
end

function MessageBox:setCategories()
	if self.title.namespace == 0 then
		self:setMainspaceCategories()
	elseif self.title.namespace == 10 then
		self:setTemplateCategories()
	end
	self:setAllNamespaceCategories()
end

function MessageBox:renderCategories()
	if not self.hasCategories then
		-- No categories added, no need to pass them to Category handler so,
		-- if it was invoked, it would return the empty string.
		-- So we shortcut and return the empty string.
		return ""
	end
	-- Convert category tables to strings and pass them through
	-- [[Module:Category handler]].
	return require('Module:Category handler')._main{
		main = table.concat(self.categories[0] or {}),
		template = table.concat(self.categories[10] or {}),
		all = table.concat(self.categories.all or {}),
		nocat = self.args.nocat,
		page = self.args.page
	}
end

function MessageBox:export()
	local root = mw.html.create()

	-- Add the subst check error.
	if self.isSubstituted and self.name then
		root:tag('b')
			:addClass('error')
			:wikitext(string.format(
				'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
				mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
			))
	end

	-- Create the box table.
	local boxTable = root:tag('table')
	boxTable:attr('id', self.id or nil)
	for i, class in ipairs(self.classes or {}) do
		boxTable:addClass(class or nil)
	end
	boxTable
		:cssText(self.style or nil)
		:attr('role', 'presentation')

	if self.attrs then
		boxTable:attr(self.attrs)
	end

	-- Add the left-hand image.
	local row = boxTable:tag('tr')
	if self.imageLeft then
		local imageLeftCell = row:tag('td'):addClass('mbox-image')
		if self.imageCellDiv then
			-- If we are using a div, redefine imageLeftCell so that the image
			-- is inside it. Divs use style="width: 52px;", which limits the
			-- image width to 52px. If any images in a div are wider than that,
			-- they may overlap with the text or cause other display problems.
			imageLeftCell = imageLeftCell:tag('div'):css('width', '52px')
		end
		imageLeftCell:wikitext(self.imageLeft or nil)
	elseif self.imageEmptyCell then
		-- Some message boxes define an empty cell if no image is specified, and
		-- some don't. The old template code in templates where empty cells are
		-- specified gives the following hint: "No image. Cell with some width
		-- or padding necessary for text cell to have 100% width."
		row:tag('td')
			:addClass('mbox-empty-cell')
			:cssText(self.imageEmptyCellStyle or nil)
	end

	-- Add the text.
	local textCell = row:tag('td'):addClass('mbox-text')
	if self.useCollapsibleTextFields then
		-- The message box uses advanced text parameters that allow things to be
		-- collapsible. At the moment, only ambox uses this.
		textCell:cssText(self.textstyle or nil)
		local textCellDiv = textCell:tag('div')
		textCellDiv
			:addClass('mbox-text-span')
			:wikitext(self.issue or nil)
		if (self.talk or self.fix) and not self.isSmall then
			textCellDiv:tag('span')
				:addClass('hide-when-compact')
				:wikitext(self.talk and (' ' .. self.talk) or nil)
				:wikitext(self.fix and (' ' .. self.fix) or nil)
		end
		textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
		if self.info and not self.isSmall then
			textCellDiv
				:tag('span')
				:addClass('hide-when-compact')
				:wikitext(self.info and (' ' .. self.info) or nil)
		end
		if self.removalNotice then
			textCellDiv:tag('small')
				:addClass('hide-when-compact')
				:tag('i')
					:wikitext(string.format(" (%s)", self.removalNotice))
		end
	else
		-- Default text formatting - anything goes.
		textCell
			:cssText(self.textstyle or nil)
			:wikitext(self.text or nil)
	end

	-- Add the right-hand image.
	if self.imageRight then
		local imageRightCell = row:tag('td'):addClass('mbox-imageright')
		if self.imageCellDiv then
			-- If we are using a div, redefine imageRightCell so that the image
			-- is inside it.
			imageRightCell = imageRightCell:tag('div'):css('width', '52px')
		end
		imageRightCell
			:wikitext(self.imageRight or nil)
	end

	-- Add the below row.
	if self.below then
		boxTable:tag('tr')
			:tag('td')
				:attr('colspan', self.imageRight and '3' or '2')
				:addClass('mbox-text')
				:cssText(self.textstyle or nil)
				:wikitext(self.below or nil)
	end

	-- Add error message for invalid type parameters.
	if self.invalidTypeError then
		root:tag('div')
			:css('text-align', 'center')
			:wikitext(string.format(
				'This message box is using an invalid "type=%s" parameter and needs fixing.',
				self.type or ''
			))
	end

	-- Add categories.
	root:wikitext(self:renderCategories() or nil)

	return tostring(root)
end

--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------

local p, mt = {}, {}

function p._exportClasses()
	-- For testing.
	return {
		MessageBox = MessageBox
	}
end

function p.main(boxType, args, cfgTables)
	local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
	box:setParameters()
	box:setCategories()
	return box:export()
end

function mt.__index(t, k)
	return function (frame)
		if not getArgs then
			getArgs = require('Module:Arguments').getArgs
		end
		return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
	end
end

return setmetatable(p, mt)
手臂疼痛挂什么科 医生代表什么生肖 爱爱是什么感觉 热伤风流鼻涕吃什么药 早上喝一杯温开水有什么好处
红斑狼疮吃什么药最好 第一次世界大战是什么时候 四月18号是什么星座的 八面玲珑指什么生肖 痔疮属于什么科室
芸豆长什么样子 身体不出汗是什么原因 拔牙前需要做什么检查 m3是什么意思 DDP是什么
黄体期是什么 男人眉毛短是什么面相 18岁是什么生肖 cpa是什么意思 迪卡侬属于什么档次
心肌炎用什么药治疗最好hcv7jop6ns6r.cn 什么是树洞cl108k.com 月非念什么hcv8jop3ns3r.cn 忌出行是什么意思hcv9jop5ns4r.cn 牛肉烧什么好吃hcv9jop2ns5r.cn
为什么心里总想一个人hcv9jop6ns9r.cn 一个月一个非念什么hcv8jop0ns8r.cn 醋泡葡萄干有什么功效和作用hcv9jop6ns2r.cn 杠杆是什么意思hcv8jop0ns6r.cn 世界上最难的字是什么字hcv9jop8ns0r.cn
气短吃什么药立马见效hcv8jop1ns0r.cn 孙权为什么不北伐gangsutong.com 钵钵鸡是什么hcv9jop4ns7r.cn 为什么尽量抽混合型烟onlinewuye.com 器质性心脏病是什么意思520myf.com
声东击西是什么意思hcv7jop6ns1r.cn 成什么结什么hcv8jop9ns9r.cn 结晶高是什么原因hcv7jop9ns5r.cn 糖类抗原199是什么意思hcv9jop5ns0r.cn 阿迪达斯是什么牌子zsyouku.com
百度