农历10月14日是什么星座| 和尚代表什么生肖| 添堵是什么意思| 麦冬有什么作用与功效| 甲亢多吃什么食物比较好| 身份证穿什么衣服| 质量是什么| 小节是什么意思| feat什么意思| 鬼压床是什么原因造成的| 石灰的主要成分是什么| ochirly是什么牌子| cd20阳性什么意思| 胃食管反流能吃什么水果| 什么鬼大家都喜欢| 龙肉指的是什么肉| 国家是什么| 吻合是什么意思| 九月什么花开| 李五行属性是什么| 梦见被蛇追着咬是什么意思| 胃不消化吃什么药效果最好| 九月十五日是什么星座| 瘊子是什么| 颈椎钙化是什么意思严重么| 12月28日什么星座| 为什么在| 女人后脑勺出汗多是什么原因| 眉毛长痘是什么原因| 粘纤是什么| 白蜡金是什么金| 小脑延髓池是什么意思| 大熊猫生活在什么地方| 喝桑叶茶有什么好处| 二月花是什么花| 什么原因会引起胎停| 无疾而终是什么意思| 求人办事送什么礼物好| 女人30如狼40如虎是什么意思| 净空是什么意思| 穿梭是什么意思| 糖类抗原高是什么意思| 梦见掉粪坑里了是什么意思| 不良于行是什么意思| 四时是什么时辰| 拥趸是什么意思| 全身瘙痒是什么原因| 属虎的是什么命| otc是什么药| 逃之夭夭是什么意思| 安乃近又叫什么名| 为什么会得霉菌感染| 疑难杂症是什么意思| 大姨妈来了喝红糖水有什么功效| 女左上眼皮跳是什么预兆| 积劳成疾的疾是什么意思| 吃什么东西能通便| 钙化点是什么意思| 怀孕了挂什么科| 头胀痛吃什么药| 激素6项检查是些什么| 病理单克隆抗体检测是什么| 美女的胸长什么样| 梁子是什么意思| 槟榔长什么样| 番外是什么意思| 脚拇指外翻是什么原因造成的| 指甲黄是什么原因| 去医院看头发挂什么科| 养什么宠物好| 阳历12月是什么星座| 封建迷信是什么| 什么是冰晶| grace什么意思中文| 榴莲吃了对身体有什么好处| 寅是什么意思| 小孩为什么吃果糖二磷酸钠| 36是什么罩杯| 红肿痒是什么原因| 罗贯中是什么朝代的| 黑猫警长为什么只有5集| 82属什么生肖| 百香果什么味道| 芋圆是什么| 双相是什么| 脚上有痣代表什么| 李逵代表什么生肖| 二月二十二日是什么星座| 健康管理是什么专业| 钠是什么| 淋巴结核是什么病| 为什么叫985大学| 稳重什么意思| 小孩尿味道很重是什么原因| cfu是什么单位| 梦见自己搬家是什么意思| 什么是低筋面粉| 呕吐拉肚子吃什么药| 氢什么意思| 恶心是什么原因| 阴超是检查什么的| 美国总统叫什么名字| 为什么喜欢一个人| 为什么的拼音怎么写| 尿蛋白阳性什么意思| mlb是什么档次| 叒字什么意思| 蹀愫女鞋什么档次| 右脸突然肿了是什么原因| itp是什么病的简称| 尿路感染是什么原因引起的| 老夫是什么意思| 红霉素软膏治什么病| 体检胸片是检查什么的| 尘埃落定什么意思| 抗宫炎软胶囊主要治什么| dp什么意思| 不洁是什么意思| 77代表什么意思| 牛磺酸是什么| 毛豆吃多了有什么坏处| bm是什么牌子| 老爹鞋适合什么人穿| 打饱嗝是什么病的前兆| crs是什么意思| 混动是什么意思| 心有不甘是什么意思| 手指头麻是什么原因引起的| 龙和什么属相相克| 办健康证需要带什么证件| 办理结婚证需要什么材料| 斯里兰卡说什么语言| 胸前有痣代表什么意思| 屁股一侧疼是什么原因| 送长辈什么礼物合适| 牵牛花是什么颜色| wis是什么牌子| 痔疮应该挂什么科室| 玫瑰金是什么颜色| 尿酸高什么水果不能吃| 20度穿什么衣服合适| 铋剂是什么药| 早上起来嘴苦口臭是什么原因| 带状疱疹是什么症状| 南瓜有什么营养| 视黄醇结合蛋白是什么| 九个月的宝宝吃什么辅食食谱| 报复是什么意思| 尿气味很重是什么原因| 右眼袋跳动是什么原因| 成人晚上磨牙是什么原因| 双肺纹理增多是什么意思| 嘴角起泡用什么药膏好| 什么人不适合去高原| 明星经纪人是干什么的| 雍正姓什么| 黏膜是什么意思| 马上风为什么拔不出来| 赫尔墨斯是什么神| 增强记忆力吃什么| 北边是什么生肖| 山药对人体有什么好处| 开封有什么好玩的地方| 小孩指甲有白点是什么原因| 空调什么品牌好| 170是什么号码| 腰椎mri是什么检查| 亡羊补牢的亡是什么意思| 女人手心脚心发热是什么原因| spyder是什么品牌| 陈醋和白醋有什么区别| 什么叫飘窗| 小孩子注意力不集中是什么原因| 吉加页读什么| 天井是什么意思| 请自重是什么意思| 什么烟最好抽| 陕西有什么烟| yw是什么| 大驿土命是什么意思| 鳞状上皮乳头状瘤是什么| 子宫后位什么意思| 痛风可以吃什么鱼| 初心不改是什么意思| 因人而异什么意思| 拉屎肛门疼是什么原因| 牙根出血是什么原因| 第三代试管是什么意思| 尿培养能查出什么病| 化脓性扁桃体炎吃什么药| 黄油是什么| 女s是什么| 肾气不固吃什么中成药| 神态自若是什么意思| 拔牙后不能吃什么食物| goldlion是什么档次| May什么意思| 痛风可以吃什么肉类和蔬菜| 检查肺挂什么科| 什么样的人容易得甲减| 区人大代表是什么级别| 糖尿病筛查做什么检查| 明年属什么生肖| 修为是什么意思| poems是什么意思| 斗战胜佛是什么意思| 宫内感染有什么症状| 阴虚火旺吃什么中成药好| u盘什么牌子好| 女人脚底有痣代表什么| 文心什么字| 减肥头晕是什么原因| 下载什么软件可以赚钱| 坏是什么意思| 湿疹吃什么中药| 梦到离婚是什么征兆| 头皮毛囊炎用什么洗发水| 百折不挠的意思是什么| 产后吃什么水果好| 宫外孕术后可以吃什么| 怀不上孕是什么原因| 孩子咬指甲什么原因| 儿童吃什么长个子最快| 什么的母鸡| 中午12点到1点是什么时辰| 白术适合什么地方种植| 政协是干什么的| 抗组胺药是什么意思| 85年属于什么生肖| 尿气味重是什么原因| 插肩袖是什么意思| 秦始皇为什么焚书坑儒| 嘴角开裂是什么原因| 腹部彩超可以检查什么| 梦之蓝是什么香型| 定增股票是什么意思| 腱鞘炎吃什么药最好| 恨天高是什么意思| 生粉是什么粉| 睡觉张嘴是什么原因| 斯字五行属什么| 小说be是什么意思| 补肺养肺吃什么食物最好| 为什么叫黄牛| 月经崩漏吃什么止血| 吃榴莲对女人有什么好处| 尿ph值高是什么意思| 卵巢囊性结构是什么| 肚子拉稀像水一样是什么情况| 鑫字代表什么生肖| 更是什么结构的字| 看心理医生挂什么科| 狮子男和什么星座最配| 天克地冲是什么意思| 见利忘义是什么生肖| s属性什么意思| 低热是什么症状| 为什么干红那么难喝| 女人左眼跳是什么预兆| 血红素高是什么原因| 牛奶加咖啡叫什么| 什么时候需要打破伤风针| 扁尖是什么| 丝瓜不能和什么食物一起吃| 百度Pāriet uz saturu

从政策“过山车”到柳暗花明

Permanently protected module
Vikipēdijas lapa
Dokumentācijas ikona Modu?a dokumentācija[izveidot]
百度 然而,实际结果如何却无从证实,到20世纪50年代时,由于这些药物无法被证实具有能促使服药者讲真话的效果而遭到许多科学家的否定和质疑,美国大多数法庭不再通过吐真药来获取证词。
-- This is a meta-module for producing message box templates, including
-- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.

-- Require necessary modules.
local getArgs = require('Module:Arguments').getArgs
local htmlBuilder = require('Module:HtmlBuilder')
local categoryHandler = require('Module:Category handler').main
local yesno = require('Module:Yesno')

-- Load the configuration page.
local cfgTables = mw.loadData('Module:Message box/configuration')

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

-- Set aliases for often-used functions to reduce table lookups.
local format = mw.ustring.format
local tinsert = table.insert
local tconcat = table.concat
local trim = mw.text.trim

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

local function getTitleObject(page, ...)
	if type(page) == 'string' then
		-- 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, page, ...)
		if success then
			return title
		end
	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
		tinsert(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
			tinsert(nums, tonumber(num))
		end
	end
	table.sort(nums)
	return nums
end

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

local box = {}
box.__index = box

function box.new()
	local obj = {}
	setmetatable(obj, box)
	return obj
end

function box.getNamespaceId(ns)
	if not ns then return end
	if type(ns) == 'string' then
		ns = lang:ucfirst(mw.ustring.lower(ns))
		if ns == 'Main' then
			ns = 0
		end
	end
	local nsTable = mw.site.namespaces[ns]
	if nsTable then
		return nsTable.id
	end
end

function box.getMboxType(nsid)
	-- Gets the mbox type from a namespace number.
	if nsid == 0 then
		return 'ambox' -- main namespace
	elseif nsid == 6 then
		return 'imbox' -- file namespace
	elseif nsid == 14 then
		return 'cmbox' -- category namespace
	else
		local nsTable = mw.site.namespaces[nsid]
		if nsTable and nsTable.isTalk then
			return 'tmbox' -- any talk namespace
		else
			return 'ombox' -- other namespaces or invalid input
		end
	end
end

function box:addCat(ns, cat, sort)
	if type(cat) ~= 'string' then return end
	local nsVals = {'main', 'template', 'all'}
	local tname
	for i, val in ipairs(nsVals) do
		if ns == val then
			tname = ns .. 'Cats'
		end
	end
	if not tname then
		for i, val in ipairs(nsVals) do
			nsVals[i] = format('"%s"', val)
		end
		error(
			'invalid ns parameter passed to box:addCat; valid values are '
			.. mw.text.listToText(nsVals, nil, ' or ')
		)
	end
	self[tname] = self[tname] or {}
	if type(sort) == 'string' then
		tinsert(self[tname], format('[[Category:%s|%s]]', cat, sort))
	else
		tinsert(self[tname], format('[[Category:%s]]', cat))
	end
end

function box:addClass(class)
	if type(class) ~= 'string' then return end
	self.classes = self.classes or {}
	tinsert(self.classes, class)
end

function box:addAttr(attr, val)
	if type(attr) ~= 'string' or type(val) ~= 'string' then return end
	self.attrs = self.attrs or {}
	tinsert(self.attrs, attr)
end

function box:setTitle(args)
	-- Get the title object and the namespace.
	self.pageTitle = getTitleObject(args.page ~= '' and args.page)
	self.title = self.pageTitle or mw.title.getCurrentTitle()
	self.demospace = args.demospace ~= '' and args.demospace or nil
	self.nsid = box.getNamespaceId(self.demospace) or self.title.namespace
end

function box:getConfig(boxType)
	-- Get the box config data from the data page.
	if boxType == 'mbox' then
		boxType = box.getMboxType(self.nsid)
	end
	local cfg = cfgTables[boxType]
	if not cfg then
		local boxTypes = {}
		for k, v in pairs(dataTables) do
			tinsert(boxTypes, format('"%s"', k))
		end
		tinsert(boxTypes, '"mbox"')
		error(format(
			'invalid message box type "%s"; valid types are %s',
			tostring(boxType),
			mw.text.listToText(boxTypes)
		), 2)
	end
	return cfg
end

function box:removeBlankArgs(cfg, args)
	-- Only allow blank arguments for the parameter names listed in
	-- cfg.allowBlankParams.
	local newArgs = {}
	for k, v in pairs(args) do
		if v ~= '' then
			newArgs[k] = v
		end
	end
	for i, param in ipairs(cfg.allowBlankParams or {}) do
		newArgs[param] = args[param]
	end
	return newArgs
end

function box:setBoxParameters(cfg, args)
	-- Get type data.
	self.type = args.type
	local typeData = cfg.types[self.type]
	self.invalidTypeError = cfg.showInvalidTypeError
		and self.type
		and not typeData
		and true
		or false
	typeData = typeData or cfg.types[cfg.default]
	self.typeClass = typeData.class
	self.typeImage = typeData.image

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

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

	-- Add attributes, classes and styles.
	if cfg.allowId then
		self.id = args.id
	end
	self:addClass(
		cfg.usePlainlinksParam and yesno(args.plainlinks or true) and 'plainlinks'
	)
	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)
			or false
	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 = {}
			tinsert(issues, sect)
			tinsert(issues, issue)
			tinsert(issues, text)
			self.issue = tconcat(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 = format(
						'%s [[%s|%s]].',
						talkText,
						talk,
						talkTitle.prefixedText
					)
				else
					talkText = 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 = format(" <small>''(%s)''</small>", date)
		end
		self.info = args.info
	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 and true or false
	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 = 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

	-- Add mainspace categories. At the moment these are only used in {{ambox}}.
	if cfg.allowMainspaceCategories then
		if args.cat then
			args.cat1 = args.cat
		end
		self.catNums = getArgNums(args, 'cat')
		if args.category then
			args.category1 = args.category
		end
		self.categoryNums = getArgNums(args, 'category')
		if args.all then
			args.all1 = args.all
		end
		self.allNums = getArgNums(args, 'all')
		self.categoryParamNums = union(self.catNums, self.categoryNums)
		self.categoryParamNums = union(self.categoryParamNums, self.allNums)
		-- 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(self.categoryParamNums) 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 = format('%s %s %s', mainCat, preposition, date)
				self:addCat('main', catTitle)
				catTitle = getTitleObject('Category:' .. catTitle)
				if not catTitle or not catTitle.exists then
					self:addCat(
						'main',
						'Articles with invalid date parameter in template'
					)
				end
			elseif mainCat and (not date or date == '') then
				self:addCat('main', mainCat)
			end
			if allCat then
				self:addCat('main', allCat)
			end
		end
	end

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

	-- Add template error category.
	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('template', templateCat, templateSort)
	end

	-- Categories for all namespaces.
	if self.invalidTypeError then
		local allSort = (self.nsid == 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

	-- Convert category tables to strings and pass them through
	-- [[Module:Category handler]].
	self.categories = categoryHandler{
		main = tconcat(self.mainCats or {}),
		template = tconcat(self.templateCats or {}),
		all = tconcat(self.allCats or {}),
		nocat = args.nocat,
		demospace = self.demospace,
		page = self.pageTitle and self.pageTitle.prefixedText or nil
	}
end

function box:export()
	local root = htmlBuilder.create()

	-- Add the subst check error.
	if self.isSubstituted and self.name then
		root
			.tag('b')
				.addClass('error')
				.wikitext(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)
	for i, class in ipairs(self.classes or {}) do
		boxTable
			.addClass(class)
	end
	boxTable
		.cssText(self.style)
		.attr('role', 'presentation')
	for attr, val in pairs(self.attrs or {}) do
		boxTable
			.attr(attr, val)
	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)
	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)
	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)
		local textCellDiv = textCell.tag('div')
		textCellDiv
			.addClass('mbox-text-span')
			.wikitext(self.issue)
		if not self.isSmall then
			textCellDiv
				.tag('div')
					.addClass('hide-when-compact')
					.wikitext(self.talk and ' ' .. self.talk)
					.wikitext(self.fix and ' ' .. self.fix)
		end
		textCellDiv
			.wikitext(self.date and ' ' .. self.date)
		if not self.isSmall then
			textCellDiv
				.tag('div')
				.addClass('hide-when-compact')
				.wikitext(self.info and ' ' .. self.info)
		end
	else
		-- Default text formatting - anything goes.
		textCell
			.cssText(self.textstyle)
			.wikitext(self.text)
	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)
	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)
				.wikitext(self.below)
	end

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

	-- Add categories.
	root
		.wikitext(self.categories)

	return tostring(root)
end

local function main(boxType, args)
	local outputBox = box.new()
	outputBox:setTitle(args)
	local cfg = outputBox:getConfig(boxType)
	args = outputBox:removeBlankArgs(cfg, args)
	outputBox:setBoxParameters(cfg, args)
	return outputBox:export()
end

local function makeWrapper(boxType)
	return function (frame)
		local args = getArgs(frame, {trim = false, removeBlanks = false})
		return main(boxType, args)
	end
end

local p = {
	main = main,
	mbox = makeWrapper('mbox')
}

for boxType in pairs(cfgTables) do
	p[boxType] = makeWrapper(boxType)
end

return p
什么是包容 孔子是什么圣人 吐纳是什么意思 膀胱炎尿道炎吃什么药 第一次同房是什么感觉
闰六月要给父母买什么 吃什么东西可以除湿气 曹丕为什么不杀曹植 治疗梅毒用什么药最好 lsp什么意思
小别胜新婚是什么意思 教师编制是什么意思 股市量比什么意思 九寨沟属于什么市 地藏菩萨的坐骑是什么
缺钾吃什么好 人流后需要注意什么 数九寒天是什么意思 4月1号什么星座 米酒不甜是什么原因
秀才相当于现在的什么学历hcv8jop6ns1r.cn 心率过快吃什么药hcv9jop6ns1r.cn 什么然而至hcv8jop9ns1r.cn 鼻子有臭味是什么原因hcv8jop1ns9r.cn 加拿大签证需要什么材料hcv9jop5ns7r.cn
过敏去医院挂什么科hcv8jop6ns3r.cn 5月是什么月hcv8jop2ns9r.cn 胆汁是什么颜色hcv9jop3ns4r.cn 笑刑是什么hcv7jop5ns6r.cn 引什么大叫hcv9jop1ns1r.cn
舌头有齿痕吃什么药hcv9jop3ns0r.cn 知性女性是什么意思hcv7jop9ns0r.cn 备孕检查都检查什么项目hcv9jop3ns8r.cn 半月板后角变性什么意思hcv9jop5ns7r.cn 网球肘用什么方法能彻底治好呢hcv9jop7ns0r.cn
榴莲对孕妇有什么好处xinmaowt.com 红细胞减少是什么原因hcv9jop4ns4r.cn 洋葱有什么功效与作用hcv8jop4ns6r.cn 胶原蛋白是什么1949doufunao.com alex是什么意思hcv8jop6ns1r.cn
百度