230是什么意思| 手指关节疼痛是什么原因| 独守空房是什么意思| 疯狂动物城闪电是什么动物| 铁路12306什么时候放票| 水瓶座是什么象| 经停是什么意思| 拉肚子为什么会发烧| 逸五行属性是什么| 长期大便不成形是什么原因造成的| 纺锤形是什么形状| 孩子发烧按摩什么部位退烧| 连坐是什么意思| 赤日对什么| 手上有红点是什么原因| 老年人反复发烧是什么原因引起的| vr眼镜是什么| 回民不吃什么| 浙江属于什么方向| 合肥有什么好吃的| 过敏性鼻炎吃什么药| 色盲是什么意思| 咏字五行属什么| 贵阳有什么特产| 属猪的和什么属相最配| 感冒咳嗽一直不好是什么原因| 孕妇什么情况容易早产| 来姨妈吃什么水果好| 什么血型招蚊子叮咬| 农村适合养殖什么| 同样的药为什么价格相差很多| 头发是什么组织| 血糖高吃什么好| 后背凉凉的是什么原因| 青瓜是什么| 蛇靠什么爬行| q币有什么用| 每天吃一个西红柿有什么好处| 低压高吃什么| 农历六月六是什么日子| 眼睛有红血丝是什么原因| 治疗肺部气肿有什么方法| 乙酉日五行属什么| 海南简称是什么| 为什么医生很少开阿斯美| 印度属于什么人种| 孕妇梦见自己出轨是什么意思| 白头翁是什么鸟| 傲娇什么意思| 迈之灵治什么病| 当逃兵会有什么后果| 为什么会起鸡皮疙瘩| 掉头发严重吃什么东西可以改善| 人体缺钾是什么症状| 夏天脚出汗是什么原因| 为什么总是流鼻血| sle是什么病的缩写| 阿米巴是什么意思| 眼睛胀痛是什么原因| 仪态什么什么| 不知道吃什么| 静脉曲张看什么科| 什么叫潮汐车道| 公主和郡主有什么区别| 肚子拉稀吃什么药| 八十岁叫什么之年| 秦二世为什么姓胡| 韭菜苔炒什么好吃| 什么叫做罹患疾病| cd什么意思| 文竹的寓意是什么| 94狗跟什么属相配最好| 打耳洞后不能吃什么| 迪奥是什么| 为什么超市大米不生虫| 习惯是什么意思| 吃什么能增加免疫力| 什么是生辰八字| xo酱是什么酱| 项羽字什么| 6月30号什么星座| 鼻炎用什么药好| 写意是什么意思| 拔了智齿需要注意什么| 1月4号是什么星座| 吃槟榔有什么好处和坏处| 吃什么清肺养肺| 巴戟天为什么要抽芯| 村支部书记是什么级别| 枸杞泡茶喝有什么功效| 亲嘴有什么好处| 8月7日什么星座| 爱吃甜食是缺乏什么| 屁股痛挂什么科| joy是什么意思| 领袖是什么意思| 什么的竹叶| 甲状腺结节吃什么药好| 急性扁桃体化脓是什么原因引起的| 小龙虾吃什么食物| 医院查过敏源挂什么科| 肌张力高有什么症状| 什么东西最伤肾| 顶胯是什么意思| 液氮是什么东西| 什么叫游走性关节疼痛| 神经节是什么| 制动是什么意思| 榴莲壳有什么用| 全自动洗衣机不排水是什么原因| 什么叫烟雾病| 市宣传部长是什么级别| 吉加页读什么| 绿壳鸡蛋是什么鸡生的| 琴代表什么生肖| 怀孕要检查什么项目| 孩子为什么厌学| 伤口感染化脓用什么药| 为什么头发总是很油| 小脚趾麻木是什么原因| 口述是什么意思| 召力念什么| 晚上吃什么减肥效果最好| 陈皮泡水喝有什么功效| 灶心土是什么| tj是什么意思| 718是什么星座| 殿试是什么意思| mrn是什么意思| 鸡屎藤和什么相克| 213什么意思| 经常落枕是什么原因引起的| 乳腺实性结节是什么意思| 黑棕色是什么颜色| 丙肝是什么病| 染色体由什么组成| 舒克是什么职业| 93年什么命| 阴道炎应该吃什么药| 腊肉炒什么菜最好吃| 2017属什么生肖| 硬伤是什么意思| 为什么十二生肖老鼠排第一| 月经期后是什么期| 身上长白色的斑点是什么原因| mpa什么意思| 三月十八是什么星座| 背水一战什么意思| cp什么意思| 微循环是什么意思| 腰酸胀是什么原因男性| 女性尿血是什么原因| 婴儿什么时候开始认人| sweat是什么意思| vt是什么| 亢进是什么意思| cordura是什么面料| 什么转自如| 富二代是什么意思| 土命适合什么颜色| 螃蟹不能和什么水果一起吃| 正切是什么| 午餐肉是什么肉| tct什么意思| 睡觉老是流口水是什么原因| 市局副局长什么级别| rh血型D阳性是什么意思| adhd是什么病| 北伐是什么意思| 什么是紫河车| 哨兵是什么意思| 五月初九是什么星座| aj是什么意思| 7月22号是什么日子| 乳腺结节是什么病| 吃什么最容易消化| 金匮肾气丸有什么作用| 灭活疫苗是什么意思| 皮肤软组织感染用什么消炎药| 新疆以前叫什么| 女人血虚吃什么补最快| 孩子咳嗽有痰吃什么药| 补肾壮阳吃什么好| pp材质是什么材料| 精索静脉曲张是什么意思| 反水什么意思| 十五的月亮十六圆是什么意思| 月经期间能吃什么水果| 忠于自己是什么意思| 星期六打喷嚏代表什么| 妖艳是什么意思| 嘴巴旁边长痘痘是为什么| 不排卵是什么原因| 生意兴隆是什么意思| 为什么口臭| 眼睛疼滴什么眼药水| 白带是什么| 岁月如歌什么意思| 内裤用什么洗比较好| 沦丧是什么意思| 雾灯什么时候开| 为什么经常打嗝| 俱往矣是什么意思| 为什么相爱的人却不能在一起| 政绩是什么意思| 董五行属什么| 虹膜是什么意思| 陈醋和香醋有什么区别| 白癜风是什么| 大便为什么是绿色的| 尚清是什么意思| 头疼按什么穴位| 乳臭未干是什么意思| 男人吃什么药时间长| 线雕是什么| 瓶颈期什么意思| 胎菊和金银花一起泡水有什么效果| 尿路感染用什么药| 拘留所和看守所有什么区别| 小孩耳鸣是什么原因引起的| 黄金有什么作用| 总是什么意思| 土中金是什么生肖| 大白条是什么鱼| 结甲是什么病| 前列腺增生有什么危害| 卵巢囊肿术后吃什么食物好| 如你所愿是什么意思| 心悸心慌吃什么药| 小腿胀痛是什么原因| 日晡是什么意思| 味精是什么做的| 尾盘拉升意味着什么| 一个月一个元念什么| 慢性气管炎吃什么药最有效| 喝酒后头疼吃什么药| 2月19日是什么星座| 怀疑心梗做什么检查| 扁桃体发炎不能吃什么东西| 嗓子不舒服做什么检查| 边沿是什么意思| 压马路什么意思| 周瑜为什么打黄盖| 八月二号是什么星座| 老年人缺钾吃什么好| 什么是流程| 酸奶有什么营养价值| 刘晓庆为什么坐牢| 反胃是什么原因引起的| 肝的主要功能是什么| 县长是什么级别| va是什么车牌| 手指缝里长水泡还痒是什么原因| tr什么意思| 泌尿科挂什么科| 肛门口瘙痒涂什么药膏| 胆小如鼠是什么生肖| 天麻有什么功效| 6月7号是什么星座| 什么时候闰十月| 宝宝低烧吃什么药| abo溶血症是什么意思| 干什么挣钱快| 玻璃瓶属于什么垃圾| 百度?????????? ???????????

抹大拉的马利亚:在耶稣墓前垂泪,见证他复活的女人

???????????? ??
百度 东方体育仅提供信息发布平台。

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('strict')
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
		elseif ns == 104 then
			obj.cfg = cfg.pmbox -- page 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.lang  = args.lang
	self.dir   = args.dir or (args.lang and 'auto' or nil)
	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
                if self.isSmall then
                    local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. '#' .. talk)
                    talkText = string.format('([[%s|talk]])', talkLink)
                else
                    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
                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

	root:wikitext(mw.getCurrentFrame():extensionTag('templatestyles', '', { src = 'Module:Message box/styles.css' }))

	-- 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.lang then
		boxTable:attr('lang', self.lang)
	end
	if self.dir then
		boxTable:attr('dir', self.dir)
	end
	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) 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)
猴和什么属相相冲相克 蓝色妖姬适合送什么人 人肉是什么味道的 快闪店是什么意思 月经9天了还没干净是什么原因
郁闷什么意思 加盟资质需要什么条件 小腹隐隐作痛是什么原因女性 电泳是什么意思 妇炎康片有什么副作用
输液葡萄糖有什么作用 便秘吃什么能马上排便 肝回声细密是什么意思 离宫是什么意思 暮春是什么意思
海藻是什么东西 残疾证有什么好处 海燕是什么鸟 子时右眼跳是什么预兆 潜意识是什么
咽痛吃什么药hcv9jop1ns0r.cn 嘴巴经常长溃疡是什么原因hcv9jop6ns5r.cn 眼睛干涩痒是什么原因hcv8jop2ns3r.cn 磨牙是什么原因kuyehao.com 小孩风热感冒吃什么药hcv8jop8ns6r.cn
居高临下是什么意思hkuteam.com 败血症是什么症状hcv7jop5ns1r.cn 报捕是什么意思hcv8jop9ns5r.cn 喝酒后肚子疼什么原因0735v.com 特诊科是什么意思hcv8jop1ns8r.cn
调理脾胃吃什么药hcv7jop9ns3r.cn 脑梗可以吃什么水果xjhesheng.com 血糖为什么会高hcv9jop6ns0r.cn 突然头晕是什么原因hcv9jop4ns2r.cn 睡前吃什么有助于睡眠hcv8jop5ns6r.cn
三保是什么hcv9jop6ns0r.cn 梦见自己结婚了是什么征兆zhongyiyatai.com 头头是道什么意思hcv9jop6ns9r.cn few是什么意思hcv7jop6ns7r.cn 胆固醇高吃什么食物最好travellingsim.com
百度