模組:Infobox VG
外观
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, 'vgrelease') 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, color)
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')
:css('background', color)
if data and label then
builder:tag('th')
: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