是什么字| 发烧为什么会浑身酸疼| 燕窝有什么功效| 河蚌吃什么| 猪日冲蛇什么意思| 紫米和小米什么关系| 心电图窦性心律是什么意思| 音召念什么| 开指是什么意思| 小腹痛吃什么药| 胀气吃什么药| 蹭饭是什么意思| 鸭锁骨是什么部位| 门静脉高压是什么意思| 眼袋是什么原因引起的| 笋吃多了有什么危害| 一路长虹什么意思| 璟五行属什么| 什么是信念| 有机食品是什么意思| 缺席是什么意思| 儿童去火吃什么药| 出汗多吃什么好| 车前草治什么病最好| 咽喉痒干咳吃什么药| 流产什么样的症状表现| 天秤和什么星座最配| 什么地舞动| 阴虱长什么样| 支气管炎不能吃什么| 双排是什么意思| 墨池为什么不爱柔嘉了| 规培是什么意思| 长期玩手机会得什么病| 白丝是什么| 夜不能寐什么意思| 法西斯是什么意思啊| quake是什么意思| 夜阑珊是什么意思| 肩膀酸痛什么原因| 蓝莓和什么不能一起吃| 小便痒痒是什么原因女| 96120是什么电话| iga肾病是什么意思| 韩国古代叫什么| 王字旁的字跟什么有关| 眼睛有异物感是什么原因| 生吃大蒜有什么好处和坏处| 什么品牌补水效果好| 吃什么降血压最快最好方法| 罹是什么意思| 血栓吃什么药| 红细胞分布宽度偏高是什么意思| 亚裔人是什么意思| 幕后是什么意思| 花生碎能做什么食物吃| 104是什么意思| 十斋日是什么意思| 什么食物维生素b含量高| 高丽棒子是什么意思| 白袜子是什么意思| 十二月二号是什么星座| 抑郁症挂什么科| 川流不息什么意思| 胶体金法是什么意思| 布洛芬过量有什么危害| 卵巢囊肿吃什么药好得最快| 翻白草长什么样| 气短挂什么科| 白玫瑰代表什么| dce是什么溶剂| 什么东西补精子最快| 促狭一笑是什么意思| 唔该是什么意思| 欠缺是什么意思| 蚂蚱长什么样| 核磁共振和ct有什么区别| 乙醇对人体有什么伤害| 打呼噜什么原因| 孕妇吃鸽子蛋对胎儿有什么好处| 喉咙发炎吃什么消炎药| 理想主义是什么意思| 昙花什么时候开花| 黄精配什么提高性功能| 接吻是什么样的感觉| 蜗牛什么梗| 平躺头晕是什么原因| pop店铺是什么意思| 依西美坦最佳服用时间是什么时间| 什么是直肠炎| 深谙是什么意思| 1997年属牛是什么命| 百合和什么一起煮可以治失眠| 守望先锋是什么类型的游戏| ddi是什么意思| 低血钾吃什么补上来的快| 珍珠龟吃什么| u盘什么牌子好| 点了斑不能吃什么| 眼睛红红的是什么原因| jsdun是什么牌子的手表| 五花肉炒什么配菜好吃| 油茶是什么| 目赤肿痛吃什么药最好| 在家里做什么能赚钱| 子宫是什么样子图片| 小熊衣服叫什么牌子| 锐步是什么档次| 负荆请罪的负是什么意思| 霸屏是什么意思| 路人甲什么意思| 阴阳互补什么意思| 为什么讨厌犹太人| 火腿是什么动物的腿| 什么什么二什么成语| 十二月是什么星座| 免疫球蛋白适合什么人| 贼是什么生肖| 女性提高免疫力吃什么| 阳痿早泄吃什么药| 阴茎插入阴道是什么感觉| ch是什么牌子| 什么产品美白效果最好最快| 做梦梦到鬼是什么意思| 九月一日什么节日| 为什么额头反复长痘痘| 低烧是什么原因引起的| 什么是黄体期| 皮肤白斑点是什么原因| 看血管挂什么科| 血脂四项包括什么| 栖字五行属什么| 白发用什么染发最安全| 头晕看什么科| 太虚幻境是什么意思| 飞地是什么意思| 鼠的守护神是什么菩萨| 甲功是什么| 自信过头叫什么| 荠菜长什么样子图片| 婴儿头发竖起来是什么原因| 庚申五行属什么| 鸟屎掉脸上有什么预兆| 日希是什么字| 绿主是什么意思| 胃烧心吃什么食物好| 不完全骨折是什么意思| 天赦日是什么意思| 1026什么星座| 大人睡觉流口水是什么原因引起的| 血糖高的人应该吃什么食物最好| 补气血吃什么药| 小孩黄疸是什么原因引起的| 口腔医学技术是什么| 稷是什么作物| 曹操是什么生肖| 半夜惊醒是什么原因| 变应性鼻炎是什么意思| 梦见狗死了是什么预兆| 月下老人什么意思| 静若幽兰什么意思| 心气虚吃什么中成药| 颜狗是什么意思| 孕妇梦见黑蛇是什么意思| 进击的巨人真相是什么| 鹿茸是鹿的什么部位| 王字旁一个行念什么| 1960年是什么年| 刚怀孕吃什么水果对胎儿好| 润月是什么意思| 九月六号是什么星座| 洗牙喷砂是什么意思| 钠氯偏低是什么原因| 炀是什么意思| 猪笼入水是什么意思| 为什么月经来是黑色的| 升学宴选什么日子好| 鸡胸是什么病| 总警监是什么级别| 跃跃欲试什么意思| 霉菌性阴炎用什么药止痒效果好| 食少便溏是什么意思| 什么叫末法时代| 手心干燥是什么原因| 火气旺盛有什么症状| 最高检检察长什么级别| 黄精什么人不能吃| 医学影像技术是什么| 除了肠镜还有什么方法检查肠道| 克罗恩病有什么症状| 陶渊明是什么朝代| 白塞氏吃什么药| 聚精会神的看是什么词语| 肺结节是什么症状| 樵是什么意思| 1988年什么命| 吴亦凡为什么叫牛| 4月15日什么星座| 12月出生的是什么星座| 巨蟹女喜欢什么样的男生| 姨妈发黑量少什么原因| 蛛网膜囊肿是什么病| 杺是什么意思| x片和ct有什么区别| ngu是什么意思| 深沉是什么意思| 蚂蚁上树是什么意思| 阳痿是什么原因引起的| 鸡内金有什么作用| 中性粒细胞偏低是什么意思| 梦见车掉水里了什么征兆| 过问是什么意思| 乔迁送什么花| 牙齿痛用什么药| 早搏有什么症状| 化生是什么意思| 珎是什么意思| 排便方式改变指什么| 手足口病用什么药最好| 固执是什么意思| 鸭肚是鸭的什么部位| 人的脂肪是什么颜色| 7月23号是什么星座| 舌头发麻看什么科| 盐酸二甲双胍缓释片什么时候吃| 为什么哭会流鼻涕| 脖子后面有痣代表什么| 睑腺炎是什么原因造成| y什么意思| 鹅和什么一起炖最好吃| o是什么| 中校军衔是什么级别| 乍一看是什么意思| c919是什么意思| ab型血可以接受什么血型| 在干什么| BCG是什么意思| 高血压三级是什么意思| 什么啤酒度数高| 无常是什么意思| 蝶窦囊肿是什么病| 口痰多是什么原因| 汪字五行属什么| 菠菜和豆腐为什么不能一起吃| 七上八下是什么生肖| 美商是什么意思| 小孩拉肚子吃什么药好| 流弹是什么意思| 一直咳嗽是什么原因| 领衔是什么意思| 幽默什么意思| 喝红糖水有什么好处和坏处| 五月十三日是什么星座| 早泄是什么| 婚车头车一般用什么车| 00年是什么年| 雌激素低有什么症状| 胎次是什么意思| 想吃咸的是身体缺什么| 什么是类风湿| 三心二意是指什么生肖| 梦见雪是什么征兆| 送女生什么礼物比较好| 右肺结节是什么意思| 百度??????? ?? ?? ????

什么是太监

???? ????? ???????? ????????? ??
Documentation icon ??????? [?????] [?????] [???????] [?????]
百度 根据比利时媒体《DH》的消息,因为罗马俱乐部目前的财政状况并不符合欧洲足联规定的财政公平法案的要求,因此这就意味着这家老牌劲旅,今年夏天将不得不继续通过卖人来填补赤字。

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>...</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
    if self.isSmall and args.smalltext then
        self.issue = args.smalltext
    else
        local sect, sect2
        if args.sect == '' then
            sect = '?? ' .. (cfg.sectionDefault or '????')
        elseif type(args.sect) == 'string' then
            sect = '?? ' .. args.sect
        end

        if args.sect2 == '' then
            sect2 = '?? ' .. (cfg.sectionDefault or '????') .. ' ???'
        elseif type(args.sect2) == 'string' then
            sect2 = '?? ' .. args.sect2 .. ' ???'
        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, sect2)
        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|?????? ????]].',
						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:10px;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 = '??'
	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, '?????? ?? ?????? ?????? ???? ?? ?????')
			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', '????????? ???? ????? ???????? ?? ???? ???? ?? ????? ??', allSort)
	end
	if self.isSubstituted then
		self:addCat('all', '??? ?????? ?????? ???? ?????')
	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> ??? ????? ?? ????? ??? ??? ???',
				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)
124什么意思 吃什么养心 酒后吃什么解酒最快 乳头瘤是什么病 乳糖不耐受是什么症状
太阳又什么又什么 尿量变少是什么原因 缺锌有什么表现和症状 10.25是什么星座 你正在干什么用英语怎么说
疮痈是什么意思 胆结石有什么症状有哪些 为什么会流鼻血什么原因引起的 蛇盘疮吃什么药好得快 浅卡其色裤子配什么颜色上衣
复视是什么意思 动物园里面有什么动物 孕妇贫血吃什么补血最好 羊肚是羊的什么部位 情人节送什么花
湿疹是什么症状hcv7jop7ns2r.cn 肾炎什么症状hcv9jop0ns4r.cn 内分泌失调是什么原因引起的hcv9jop0ns3r.cn 雪村和赵英俊什么关系hcv8jop1ns2r.cn 指甲上有竖条纹是什么原因hcv9jop5ns3r.cn
血氨高会导致什么后果hcv7jop6ns3r.cn 蜂王浆有什么功效hcv8jop8ns7r.cn 宵字五行属什么hcv7jop9ns8r.cn abo溶血是什么意思hcv9jop6ns9r.cn 两规是什么意思hcv8jop3ns4r.cn
脚痛是什么原因hcv8jop2ns8r.cn 为什么一躺下就头晕目眩shenchushe.com ea7是什么品牌hcv8jop1ns6r.cn 10月16日出生的是什么星座shenchushe.com 分子量是什么hcv7jop6ns4r.cn
桂鱼吃什么食物hcv9jop5ns1r.cn 龄字五行属什么hcv8jop8ns5r.cn 付之一炬是什么意思hcv8jop3ns0r.cn 低烧是什么症状和感觉hcv9jop4ns7r.cn 潼字五行属什么wmyky.com
百度