跳转到内容

模組:Infobox VG

被永久保护的模块
维基百科,自由的百科全书

这是本页的一个历史版本,由風中的刀劍留言 | 贡献2015年7月24日 (五) 09:08编辑。这可能和当前版本存在着巨大的差异。

require('Module:No globals')

local getArgs = require('Module:Arguments').getArgs
local para = mw.loadData('Module:Infobox VG/parameterList')
local p = {}

local function lang(content)
	
	return string.gsub(content, '^(.-) *: *(.+)$', '{{lang|%1|%2}}') or content
	
end

local function spml(content)
	local pattern = '(.-[(\127UNIQ%-%-ref%-%x+%-QINU\127)]* *、)'
	local repl = '<span class="nowrap">%1</span><wbr>'
	
	if string.find(content, '、')  == nil then
		return content
	elseif string.find(content, pattern) == nil then
		return content
	elseif string.find(content, '[Vv]grelease') then
		return content
	end
	
	content = content .. '、'
	content = string.gsub(content, pattern, repl)
	content = string.sub(content, 1, -16) .. '</span>'
	
	return content
end

local function getLabel(args, idx)
	if para[idx].labelOL and args.onlinegame then
		return para[idx].labelOL
	else
		return para[idx].label
	end
end

local function getData(args, idx)
	
	for i, v in ipairs(para[idx]) do
		if args[v] then 
			if para[idx].func == 'spml' then
				return spml(args[v])
			elseif para[idx].func == 'lang' then
				return lang(args[v])
			else
				return args[v]
			end
		end
	end
end

local function getHeader(args, idx)
	if para[idx].header == nil then return end
	for i, v in ipairs(para[idx]) do
		if args[v] then return args[v] end
	end
end

local function renderImage(args)
	local ret
	local InfoboxImage = function(img) return require('Module:InfoboxImage').InfoboxImage{ args = { image = img, sizedefault = 'frameless', upright = '1.15' } } end
	
	local var = { '', '-hans', '-hant', '-cn', '-hk', '-mo', '-sg', '-tw' }
	if (args['image-hans'] or args['image-cn']) and (args['image-hant'] or args['image-hk'] or args['image-tw']) then
		ret = '-{ '
		for i, v in ipairs(var) do
			if args['image' .. v] then
				ret = ret .. 'zh' .. v .. ':' .. InfoboxImage(args['image' .. v]) .. '; '
			end
		end
		ret = ret .. '}-'
	else
		ret = InfoboxImage(getData(args, 'image'))
	end
	
	return ret
end

local function addRow(ret, args, idx)
	local data, label, header = getData(args, idx), getLabel(args, idx), getHeader(args, idx)

	if (data and label) or header then else return end
	
	local builder = ret:tag('tr')
	
	if data and label then
		builder:tag('th')
			:css('background', '#f0f0f0')
			:css('text-align', 'left')
			:css('white-space', 'nowrap')
			:wikitext(label)
			:done()
		builder:tag('td')
			:wikitext(data)
	end
	
	builder:tag('th')
		:attr('colspan', '2')
		:css('background', '#f0f0f0')
		:css('text-align', 'center')
		:wikitext(header)

end	

function p.main(frame)
	local args = getArgs(frame)
	return p._main(args)
end

function p._main(args)
	-- Main module code goes here.

	local ret = mw.html.create('table')
	ret
		:addClass('infobox')
		:attr('cellspacing', '3')
		:css( 'border-spacing', '3px')
		:css('text-align', 'left')
		:css('font-size', 'small')
		:css('line-height', '1.5em')
		:css('width', '264px')
		
	do
		local builder = ret:tag('tr')
		builder:tag('th')
				:attr('colspan', '2')
				:css('text-align', 'center')
				:css('font-size', '125%')
				:css('font-weight', 'bold')
				:wikitext( getData(args, 'above') or tostring(mw.title.getCurrentTitle()) )
	end

	if getData(args, 'japanese') then

		local builder = ret:tag('tr')
			builder:tag('td')
				:attr('colspan', '2')
				:css('lang', 'ja')
				:css('text-align', 'center')
				:wikitext( getData(args, 'japanese') )
	end
	
	if getData(args, 'english') then

		local builder = ret:tag('tr')
			builder:tag('td')
				:attr('colspan', '2')
				:css('lang', 'en')
				:css('text-align', 'center')
				:css('font-style', 'italic')
				:wikitext( getData(args, 'english') )
	end
	
	if getData(args, 'image') then

		local builder = ret:tag('tr')
			builder:tag('td')
				:attr('colspan', '2')
				:css('text-align', 'center')
				:wikitext( string.format('%s%s%s', renderImage(args), getData(args, 'caption') and '<br />' or '', getData(args, 'caption') or '') )
	end
	
	for idx, _ in ipairs(para) do
		addRow(ret, args, idx)
	end
	
	return ret
end

return p