Module:InfoboxMinimal
Documentation for this module may be created at Module:InfoboxMinimal/doc
-- Module:InfoboxMinimal
local p = {}
local function blank(s)
if s == nil then return true end
s = tostring(s)
return mw.text.trim(s) == ''
end
-- Prefer wrapper (#invoke) args first, then parent (template/page) args
local function get(inv, par, key)
return (inv and inv[key]) or (par and par[key])
end
local function addRow(root, label, data)
if blank(data) then return end
local tr = root:tag('tr')
tr:tag('th')
:attr('scope','row')
:addClass('infobox-label')
:wikitext(label or '')
tr:tag('td')
:addClass('infobox-data')
:wikitext(data)
end
function p.infobox(frame)
local inv = frame.args -- args set in {{#invoke:...}}
local par = (frame:getParent() and frame:getParent().args) or {} -- args from calling template/page
-- Wrapper table
local classes = 'infobox'
local bodyclass = get(inv, par, 'bodyclass')
if not blank(bodyclass) then classes = classes .. ' ' .. tostring(bodyclass) end
local root = mw.html.create('table')
:addClass(classes)
:attr('role', 'presentation')
-- Title / caption element
local title = get(inv, par, 'title') or get(inv, par, 'name') or mw.title.getCurrentTitle().baseText
root:tag('caption'):addClass('infobox-title'):wikitext(title)
-- Optional top image (filename only; no "File:" or "[[]]")
local image = get(inv, par, 'image')
local caption = get(inv, par, 'caption')
local alttext = get(inv, par, 'alt')
local upright = get(inv, par, 'upright') -- e.g. "1.1"
local size = get(inv, par, 'imagesize') -- e.g. "200px"
if not blank(image) then
local opts = { 'frameless', 'center' }
if not blank(upright) then table.insert(opts, 'upright=' .. tostring(upright)) end
if not blank(size) then table.insert(opts, tostring(size)) end
if not blank(alttext) then table.insert(opts, 'alt=' .. tostring(alttext)) end
local imgRow = root:tag('tr')
imgRow:tag('td')
:attr('colspan', 2)
:addClass('infobox-image')
:wikitext(string.format('[[File:%s|%s|%s]]',
tostring(image),
table.concat(opts, '|'),
caption or ''
))
end
-- Data rows: label1/data1 ... label100/data100 (skips blanks)
for i = 1, 100 do
local label = get(inv, par, 'label' .. i)
local data = get(inv, par, 'data' .. i)
addRow(root, label, data)
end
return tostring(root)
end
return p