糖醋里脊是什么菜系| 男人时间短吃什么药好| 抗环瓜氨酸肽抗体高是什么意思| 妲是什么意思| 肾上腺素是什么东西| 化疗后吃什么增加白细胞| 晚字五行属什么| 为什么耳朵后面会臭| 菲拉格慕属于什么档次| 挑染是什么意思| touch是什么牌子| 抗糖是什么意思| 酸菜鱼放什么配菜好吃| 心电图逆钟向转位什么意思| gg什么意思| 雯是什么意思| 高血压药什么时候吃最好| 椎间盘突出挂什么科| 丙酮是什么| 花胶适合什么人吃| 酱油和生抽有什么区别| 水柔棉是什么面料| 梦见火烧房子是什么预兆| 宫缩疼是什么感觉| 为什么腹部隐隐作痛| bae是什么意思| 登基是什么意思| dha中文叫什么| 指甲硬是什么原因| 什么是尘肺病| 龋牙是什么意思| 6月20是什么星座| 莱特兄弟发明了什么| 类风湿性关节炎用什么药| 张飞的武器叫什么| 扎心是什么意思| 正连级相当于地方什么级别| 嚣张是什么意思| 大白话是什么意思| 床咚是什么意思啊| 冻感冒吃什么药| 打呼噜吃什么药最管用| 异口同声什么意思| 醒酒是什么意思| 2025是什么生肖年| 两个夫一个车是什么字| 大嘴巴是什么意思| 十八岁是什么年华| 什么车最省油| 巨蟹男喜欢什么样的女生| 什么是人乳头瘤病毒| 神经衰弱吃什么中成药| 女人为什么会喷水| leu是什么氨基酸| 什么生长| 尿很臭是什么原因女性| 哀鸿遍野什么意思| 女人绝经后靠什么排毒| 梦见被雷劈什么意思| 做梦钓到大鱼什么意思| 什么鱼最好养不容易死| vk是什么意思| 川芎有什么功效与作用| 反射是什么意思| 什么是普洱茶| 羽毛球拍什么材质的好| 关节镜是什么| 拍身份证照片穿什么颜色衣服好看| 晨尿有泡沫是什么原因| 鹿晗女朋友叫什么名字| 姜为什么不能晚上吃| 斜视是什么| 苯醚甲环唑防治什么病| 榴莲什么时候成熟| 眼睛怕光是什么原因| 11.4什么星座| 维生素c阳性是什么意思| 橘子什么季节成熟| 脾胃虚弱有什么症状| 布洛芬缓释胶囊是什么药| 同房疼痛什么原因| 1月16日什么星座| 梅毒rpr是什么| 月经期间喝什么好排毒排污血| ip什么意思| 日久见人心是什么意思| 牙龈肿痛用什么药| 轻微食物中毒吃什么药| 龙骨是什么骨头| 致电是什么意思| 生化是什么原因引起的| 女生肾疼是什么原因| 移花接木什么意思| 胆囊壁稍毛糙是什么意思| 装清高是什么意思| 气虚血虚吃什么中成药| 肝腹水是什么症状| 头出汗多至头发湿透是什么原因| upi是什么意思| 诗情画意的意思是什么| 大便干燥是什么原因| 吃什么补筋和韧带最快| 虫草有什么作用与功效| HlV是什么| 神是什么| 乔字五行属什么| 手足口病咳嗽吃什么药| 坐地能吸土是什么意思| 表面是什么意思| 淀粉酶高是什么原因| 6月22是什么星座| 伏天吃羊肉有什么好处| 泉州和晋江什么关系| 2月5号是什么星座| 哺乳期感冒了能吃什么药| 一什么面包| 十八罗汉是什么意思| 李世民是什么生肖| 夏天为什么热| 下肢静脉血栓吃什么药| 怀孕后为什么会生化| 子宫内膜回声欠均匀什么意思| 血瘀吃什么中成药| 什么是二型糖尿病| 漠河什么时候可以看到极光| 打日本电话前面加什么| 蚂蚁上树什么姿势| 病毒性发烧吃什么药| 办理护照需要什么| 牙冠什么材质的好| 什么的朝霞| 欲是什么意思| 畈是什么意思| 三月18号是什么星座的| 香薰是什么| 印堂发红是什么的征兆| ast是什么| 丙型肝炎病毒抗体阴性什么意思| 牛油果坏了是什么样| 十二年义务教育什么时候开始| 婴儿八个月可以吃什么辅食| 突兀什么| 吃虾有什么好处| 藏红花泡水喝有什么功效和作用| 小麦是什么粮食| 什么动物三只爪| 四季平安是什么生肖| 大姨妈来了能吃什么水果| 割包皮挂什么科| 肚子咕噜咕噜响是什么原因| 郑声是什么意思| 尿不尽是什么症状| yp是什么意思| 食粉是什么粉| 什么的鸟儿| 蜜蜂怕什么| 子宫前置是什么意思| 前胸后背疼是什么病| 生殖科检查什么| 否极泰来是什么生肖| 拍肺部片子挂什么科| t1什么意思| 弼马温是什么意思| 为什么不敢挖雍正陵墓| 彩虹像什么挂在天空| 牡丹花是什么颜色的| 什么样的红点是艾滋病| 人生苦短什么意思| 荨麻疹可以吃什么水果| 病毒感染有什么症状| 手麻脚麻是什么原因引起的| 吃什么会导致流产| 精神洁癖是什么意思| 尿隐血阴性是什么意思| 肝素是什么| 什么是生理期| 输血前四项检查是什么| 忍冬是什么意思| 九四年属什么| 检查食管做什么检查| 9月3号是什么纪念日| 大便出血什么原因| 恩客是什么意思| 生僻字什么意思| 栗子不能和什么一起吃| 辣椒是什么时候传入中国的| 有什么软件可以赚钱| 吕洞宾属什么生肖| 毛很长的狗是什么品种| 老鼠疣长什么样子图片| 什么是冷血动物| 刘秀和刘邦是什么关系| 圆脸适合什么眉形| 七个月宝宝可以吃什么辅食| 小孩便秘有什么办法| 8000年前是什么朝代| 隐翅虫长什么样子| 脚心热吃什么药| 小个子适合什么发型| 痰湿吃什么食物| 卡布奇诺是什么咖啡| 为什么会有牙结石| 俄罗斯被称为什么| 铁蛋白高挂什么科| 心肌梗塞有什么症状| 长字五行属什么| 甲状腺结节吃什么食物好| 西米露是什么做的| 梦龙什么口味好吃| 03年属什么| 什么时候上环是最佳时期| 小腿酸软无力是什么原因| 什么运动长高最快| 玉和石头有什么区别| complex是什么意思| 存在感是什么意思| 夏天做什么菜| 荸荠读音是什么| 双手麻木是什么原因| 佛龛是什么| 胆囊切除后对身体有什么影响| 庶母是什么意思| 人大是干什么的| 延时吃什么药| bpm什么意思| 星星像什么| 肝介入治疗是什么意思| 胎盘厚有什么影响| 9999是什么意思| 属牛跟什么属相最配| 百年好合是什么意思| 0n是什么意思| 嘴唇颜色深是什么原因| 为什么土豆不能炒鸡蛋| 肩膀麻木是什么原因引起的| 炸酱面用什么酱| 黑户什么意思| 胃寒是什么原因引起的| 有一种水果叫什么竹| 肝胃郁热吃什么中成药| 明天吃什么| 总流鼻血是什么原因| 大枕大池有什么危害| 什么的列车| 儿童风热感冒吃什么药| 电子烟有什么危害| 亲家是什么意思| 8月26日什么星座| 尿血是什么问题| ga是什么牌子| 嗜睡是什么病| 水瓶女和什么星座最配| 为什么超市大米不生虫| 益生菌有什么作用| 盆腔积液吃什么消炎药| 只要睡觉就做梦是什么原因| 不靠谱是什么意思| 孢子是什么| 深呼吸有什么好处| 甲醛超标有什么反应| 感冒没胃口吃什么好| 藕粉是什么颜色| 荔枝吃了有什么好处| 晚上做梦梦到蛇是什么意思| 百度????? ????

【途观L 2017款 380TSI 自动四驱豪华版报价】途观L报价

???????? ???
百度 ”可见,伏羲、女娲的“滚磨成婚”只是一种比喻,是对阴阳这一对概念的形象说明。


This is a meta-module that implements the message box templates {{mbox}}, {{ambox}}, {{cmbox}}, {{fmbox}}, {{imbox}}, {{ombox}}, and {{tmbox}}. It is intended to be used from Lua modules, and should not be used directly from wiki pages. If you want to use this module's functionality from a wiki page, please use the individual message box templates instead.

To use this module from another Lua module, first you need to load it.

local messageBox = require('Module:Message box')

To create a message box, use the main function. It takes two parameters: the first is the box type (as a string), and the second is a table containing the message box parameters.

local box = messageBox.main( boxType, {
    param1 = param1,
    param2 = param2,
    -- More parameters...
})

There are seven available box types:

Box type Template Purpose
mbox {{mbox}} For message boxes to be used in multiple namespaces
ambox {{ambox}} For article message boxes
cmbox {{cmbox}} For category message boxes
fmbox {{fmbox}} For interface message boxes
imbox {{imbox}} For file namespace message boxes
tmbox {{tmbox}} For talk page message boxes
ombox {{ombox}} For message boxes in other namespaces

See the template page of each box type for the available parameters.

Usage from #invoke

[???????? ???]

As well as the main function, this module has separate functions for each box type. They are accessed using the code {{#invoke:Message box|mbox|...}}, {{#invoke:Message box|ambox|...}}, etc. These will work when called from other modules, but they access code used to process arguments passed from #invoke, and so calling them will be less efficient than calling main.

Technical details

[???????? ???]

The module uses the same basic code for each of the templates listed above; the differences between each of them are configured using the data at Module:Message box/configuration. Here are the various configuration options and what they mean:

  • types - a table containing data used by the type parameter of the message box. The table keys are the values that can be passed to the type parameter, and the table values are tables containing the class and the image used by that type.
  • default - the type to use if no value was passed to the type parameter, or if an invalid value was specified.
  • showInvalidTypeError - whether to show an error if the value passed to the type parameter was invalid.
  • allowBlankParams - usually blank values are stripped from parameters passed to the module. However, whitespace is preserved for the parameters included in the allowBlankParams table.
  • allowId - whether it is possible to set an "id" attribute to the html table tag.
  • allowSmall - whether a small version of the message box can be produced with "small=yes".
  • smallParam - a custom name for the small parameter. For example, if set to "left" you can produce a small message box using "small=left".
  • smallClass - the class to use for small message boxes.
  • substCheck - whether to perform a subst check or not.
  • classes - an array of classes to use with the message box.
  • usePlainlinksParam - whether to allow "plainlinks=no" to turn off the plainlinks class.
  • imageEmptyCell - whether to use an empty td cell if there is no image set. This is used to preserve spacing for message boxes with a width of less than 100% of the screen.
  • imageEmptyCellStyle - whether empty image cells should be styled.
  • imageCheckBlank - whether "image=blank" results in no image being displayed.
  • imageSmallSize - usually, images used in small message boxes are set to 30x30px. This sets a custom size.
  • imageCellDiv - whether to enclose the image in a div enforcing a maximum image size.
  • useCollapsibleTextFields - whether to use text fields that can be collapsed, i.e. "issue", "fix", "talk", etc. Currently only used in ambox.
  • imageRightNone - whether imageright=none results in no image being displayed on the right-hand side of the message box.
  • sectionDefault - the default name for the "section" parameter. Depends on useCollapsibleTextFields.
  • allowMainspaceCategories - allow categorisation in the main namespace.
  • templateCategory - the name of a category to be placed on the template page.
  • templateCategoryRequireName - whether the name parameter is required to display the template category.
  • templateErrorCategory - the name of the error category to be used on the template page.
  • templateErrorParamsToCheck - an array of parameter names to check. If any are absent, the templateErrorCategory is applied to the template page.

-- 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 categoryHandler = require('Module:Category handler')._main
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'

--------------------------------------------------------------------------------
-- 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 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 = {}

	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.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
	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
		self.name = args.name
		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>''(%s)''</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()
	-- Convert category tables to strings and pass them through
	-- [[Module:Category handler]].
	return categoryHandler{
		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 textCellSpan = textCell:tag('span')
		textCellSpan
			:addClass('mbox-text-span')
			:wikitext(self.issue or nil)
		if (self.talk or self.fix) and not self.isSmall then
			textCellSpan:tag('span')
				:addClass('hide-when-compact')
				:wikitext(self.talk and (' ' .. self.talk) or nil)
				:wikitext(self.fix and (' ' .. self.fix) or nil)
		end
		textCellSpan:wikitext(self.date and (' ' .. self.date) or nil)
		if self.info and not self.isSmall then
			textCellSpan
				:tag('span')
				:addClass('hide-when-compact')
				:wikitext(self.info and (' ' .. self.info) or nil)
		end
		if self.removalNotice then
			textCellSpan: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)
用什么泡脚可以脸上祛斑 心衰竭吃什么药效果好 amp是什么意思 毕生是什么意思 男性疝气是什么病
2012什么年 照影是什么意思 承认是什么意思 思利及人是什么意思 1985年属牛的是什么命
驾驶证b2能开什么车 什么是0 全血是什么 1月11日是什么星座 鼻干眼干口干属于什么症状
心存善念是什么意思 蛀虫指什么生肖 封心锁爱什么意思 什么泡水喝可降血压 温州有什么好玩的
小肚子鼓鼓的什么原因hcv8jop6ns0r.cn 乙肝五项245阳性是什么意思hcv8jop7ns0r.cn 射手座最配什么星座hcv9jop1ns8r.cn 凭什么姐xscnpatent.com 什么样的孙悟空hcv9jop5ns4r.cn
1.20是什么星座hcv8jop9ns5r.cn 夏天喝什么解渴hcv8jop8ns0r.cn 脚后跟疼挂什么科hcv8jop6ns9r.cn 83年属什么hcv8jop5ns6r.cn 降火祛痘喝什么茶hcv8jop4ns8r.cn
姓蔡的女孩起什么名字hcv9jop6ns0r.cn 吴亦凡为什么退出exohcv9jop6ns6r.cn 贤妻良母是什么意思hcv9jop4ns2r.cn 男生染头发什么颜色好看hcv7jop9ns1r.cn 1975年属兔五行属什么hcv8jop6ns6r.cn
hivab是什么检测beikeqingting.com 牛肉不能和什么一起吃bjcbxg.com 沙漠为什么是三点水hcv9jop4ns7r.cn 饧是什么意思hcv7jop9ns8r.cn 全飞秒手术是什么naasee.com
百度