华盖什么意思| yet是什么意思| 鳖吃什么食物| 扔枕头有什么忌讳吗| 这是什么品牌| 羡煞旁人是什么意思| 甲状腺是由什么引起的| 九王念什么| 什么人不适合做厨师| 宝字五行属什么| 什么叫情商| 高血脂挂什么科| 宽粉是什么做的| 94年属什么生肖| mr是什么| 你真狗是什么意思| 女性尿路感染用什么药| 1941属什么生肖| 北京豆汁儿什么味道| 牛b克拉斯什么意思| 什么食物含钙量最高| 什么原因造成糖尿病| 待产包需要准备什么| 油墨用什么可以洗掉| 夏天喝什么解渴| 恩裳是什么档次的衣服| 为什么心里总想一个人| 天妒英才是什么意思| 李白和杜甫并称什么| 脸上经常长痘痘是什么原因| pa是什么元素| 黑头是什么| 乌合之众什么意思| 头眩晕看什么科| 体力不支是什么意思| 三维是什么意思| 什么是985| 憩息是什么意思| 沙悟净是什么生肖| 新陈代谢慢吃什么药| 功夫2什么时候上映| 紫菜和海苔有什么区别| 九五年属什么| 女人被操是什么感觉| 高压150低压100吃什么药| 9.25是什么星座| 牛的本命佛是什么佛| 支气管病变什么意思| 生蚝什么时候最肥| 什么能解酒| 羟苯乙酯是什么东西| 苹果不能和什么一起吃| 伍德氏灯检查什么| 喝什么茶降血压最好最快| 牛肚是什么| 新西兰移民需要什么条件| 看淡一切对什么都没兴趣| 梅菜扣肉的梅菜是什么菜| 缺钾吃什么补得最快| 针对是什么意思| 大圈什么意思| 梦到父母离婚是什么意思| 蓝色加红色等于什么颜色| 脸上长斑的原因是什么引起的| 血压过低有什么危害| 贡米是什么米| gris是什么颜色| 1996年1月属什么生肖| 过生日送什么礼物好| 陈醋和蜂蜜一起喝有什么好处| 鼻子下面长痘痘是什么原因引起的| 上火喝什么比较好| vcr什么意思| 嗷嗷待哺是什么意思| 宫寒应该吃什么怎样调理| 心脏搭桥和支架有什么区别| 维生素d低是什么原因| 围绝经期是什么意思| ph值什么意思| 朱砂红是什么颜色| scj是什么意思| 内分泌紊乱是什么意思| 慢性宫颈炎吃什么药| 扑炎痛又叫什么| 调停是什么意思| 什么东西驱蛇效果最好| 产后大出血一般发生在什么时候| 破釜沉舟什么意思| 零和游戏是什么意思| 防代表什么生肖| ect是什么| 海鲜都有什么| 睾丸疼痛吃什么药最好| 父亲是o型血孩子是什么血型| 屠苏酒是什么酒| 前来是什么意思| 什么动物跑得快| 起酥油是什么东西| 讨喜是什么意思| 什么含胶原蛋白最多| 四联单是什么| 1978年属什么生肖| 去医院看舌头挂什么科| jnby是什么牌子| 心得安是什么药| 喝什么中药补肾| 肝火旺会出现什么症状| 大什么一什么| 皮疹用什么药膏最好| 手指关节疼是什么原因| c2是什么车型| 三专是什么| 垂体瘤是什么病| 为什么会咳嗽| 鹊桥是什么意思| 土霉素治什么病| 骨折什么感觉| 什么是脑梗| tbs和tct有什么区别| 研究生体检都检查什么| 怀孕两个月出血是什么原因| 农历六月初六是什么节| 蛇和什么属相相冲| 胃糜烂吃什么药效果好| 蚕屎做枕头有什么好处| 血压低头疼是什么原因| 请问紫苏叶有什么功效| 中央民族大学什么档次| 咽颊炎吃什么药| 罗刹女是什么意思| 什么吃草吞吞吐吐歇后语| shuuemura是什么牌子| 鸦雀无声是什么意思| 尿结石挂什么科| 颈动脉挂什么科| 意大利全称是什么| 新生儿屁多是什么原因| 经期吃什么水果好| 防冻液红色和绿色有什么区别| 白马王子是什么意思| 70属什么生肖| 眉尾上方有痣代表什么| 沉香是什么| 一路走好是什么意思| 什么品牌的母婴用品好| 居心叵测是什么意思| 337是什么意思| 博文是什么意思| 得艾滋病的前兆是什么| 什么是临床医学| 月亮的肚子指的是什么| 高血糖吃什么降得快| 猫咪吐黄水有泡沫没有精神吃什么药| 为什么会失眠| 蒲菜是什么菜| 苦胆是什么| 俄罗斯是什么洲| 六味地黄丸什么牌子好| 1069是什么意思| 表面活性剂是什么| 紫癜是什么病 严重吗| 什么情况下要打狂犬疫苗| 炝锅是什么意思| 什么是情感障碍| 脚麻是什么原因引起的| 大便粘马桶吃什么药| 尿液检查红细胞高是什么原因| 缺维生素a吃什么食物| sunnyday是什么意思| 清道夫鱼为什么不能吃| 宋徽宗叫什么| 阑尾炎吃什么药见效快| 画面感是什么意思| 取缔役什么意思| 青鱼是什么鱼| 3.8号是什么星座| 草莓什么季节种植| 房颤什么意思| 欣赏什么| 什么能美白皮肤而且效果快| 互联网是干什么的| 米醋和陈醋有什么区别| 拔智齿后要注意什么| 肾检查挂什么科| 蔡徐坤粉丝名叫什么| 空调睡眠模式什么意思| 有过之而不及什么意思| 大暑是什么时间| 三尖瓣轻度反流是什么意思| 农历10月22日是什么星座| 为什么针灸后越来越痛| 阿昔洛韦片治什么病| 今日什么冲什么生肖| 妈妈的哥哥的老婆叫什么| 眼前有亮光闪是什么问题| 100a是什么尺码| 古代医生叫什么| 肝火旺盛是什么原因引起的| 紫苏有什么功效| 食指戴戒指代表什么| 瀹是什么意思| 办身份证要穿什么衣服| 飞行模式有什么用| 睡觉手麻是什么原因| 烦躁是什么原因| 84消毒液不能和什么一起用| 脑白质疏松是什么病| 法图麦在回族什么意思| 大蒜泡酒治什么病| 血压突然升高是什么原因| 今年温度为什么这么高| 梦见红棺材是什么征兆| 见红是什么颜色| 做梦梦见自己生孩子是什么意思| 铁蛋白是查什么的| 暂停服务是什么意思| 长期拉肚子是什么原因| 大腿酸痛什么原因| 蜗牛爱吃什么食物| 腿发麻是什么原因| 7月中旬是什么时候| 阴毛变白什么原因| 内内是什么意思| 择偶标准是什么意思| 腊月初六是什么星座| 十一月是什么星座| 衰是什么意思| 元五行属性是什么| 四川古代叫什么| 腰无力是什么原因| 正月十二是什么星座| 阳痿吃什么好| 缺铁性贫血吃什么药最好| 什么食物含锌最多| 角膜塑形镜是什么| 山西人喜欢吃什么| 肝脏在人体什么位置| 为什么不一样| 汗臭味很重是什么原因引起的| bm什么意思| 欠缺是什么意思| gtp什么意思| 什么是视同缴费| 肺炎吃什么水果| 为什么端午节要吃粽子| 女人喝黄酒有什么好处| 势均力敌什么意思| 脸上经常长痘痘是什么原因| 甲钴胺有什么作用| 飞机是什么意思| tablet是什么意思| 沙姜是什么姜| 泽去掉三点水念什么| 肺部ct能查出什么病| 腹胀挂什么科| 久而久之下一句是什么| 吃什么可以丰胸| 怀孕抽烟对孩子有什么影响| 海东青是什么鸟| 香茅是什么东西| 拔牙后不能吃什么食物| 纯粹的人是什么性格| 舌苔发黑是什么原因| 脱水是什么意思| 百度Aller au contenu

应对南海? 台当局提17项建议强化太平岛防御

Avy amin'i Wikipedia
百度 生生把马桶用成了蹲厕,可见有些人是有多么不想和公共马桶有所接触。

La documentation pour ce module peut être créée à Module: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)
相向而行什么意思 人五人六是什么意思 秀恩爱是什么意思 乌鸡不能和什么一起吃 粉色代表什么
心慌吃什么药 凌晨是什么时辰 肋骨突出是什么原因 七月有什么水果 猪蛋是什么
寻常疣用什么药膏除根 山东日照有什么好玩的 筋头巴脑是什么东西 什么东西补钙最好最快 血压高压低是什么原因
腰痛去医院挂什么科 4.21什么星座 五月出生是什么星座 妄想什么意思 石墨烯属于什么材料
中医湿气重是什么意思hcv9jop0ns9r.cn n t是什么检查hcv8jop4ns1r.cn 女人眉毛稀少代表什么hcv7jop6ns9r.cn soda是什么意思hcv8jop9ns9r.cn 梨和什么一起榨汁好喝hcv7jop5ns0r.cn
红斑狼疮的症状是什么hcv9jop0ns7r.cn 三高挂号挂什么科hcv8jop4ns9r.cn 脂溢性脱发用什么洗发水好hcv9jop7ns9r.cn 3月11日什么星座hcv8jop0ns8r.cn 老人家脚肿是什么原因引起的hcv8jop0ns9r.cn
omega是什么牌子的手表hcv8jop6ns1r.cn 抗核抗体阳性说明什么hcv8jop6ns2r.cn 亚麻籽吃了有什么好处hcv8jop1ns4r.cn 头顶冒汗是什么原因hcv9jop0ns8r.cn 怀孕什么水果不能吃hcv9jop7ns3r.cn
扁平足是什么样的onlinewuye.com 舌头肥厚是什么原因hcv8jop6ns5r.cn 七夕节的含义是什么wmyky.com 浑水摸鱼是什么意思jinxinzhichuang.com 猴日冲虎是什么意思hcv9jop8ns2r.cn
百度