Module:Infobox
From GameBrew
More actions
Documentation for this module may be created at Module:Infobox/doc
-- Simple infobox module with enhanced flexibility and cleaner structure
local p = {}
--- Main function: generates an infobox table
function p.infobox(frame)
-- Retrieve arguments (from template or direct call)
local args = (frame.args and frame.args) or (frame:getParent() and frame:getParent().args) or {}
-- Create the container table
local infobox = mw.html.create('table'):addClass('infobox')
-- Top ad slot
infobox:node(
mw.html.create('div')
:attr('id', 'Ads-InfoboxTop')
)
-- Title row (defaults to page title)
local title = args.title or mw.title.getCurrentTitle().text
infobox:tag('tr')
:tag('th')
:addClass('infobox-title')
:attr{scope = 'col', colspan = '2'}
:wikitext(title)
-- Optional description row
if args.description and args.description ~= '' then
infobox:tag('tr')
:tag('td')
:addClass('infobox-description')
:attr('colspan', 2)
:wikitext(args.description)
end
-- Image block (with optional width and caption)
if args.image and args.image ~= '' then
local img = args.image
-- Wrap in File: namespace if needed
if not img:match('%[%[') then
if not img:find(':') then img = 'File:' .. img end
local width = args.imagewidth or '300px'
img = string.format('[[%s|%s]]', img, width)
end
local imgCell = infobox:tag('tr')
:tag('td')
:addClass('infobox-image')
:attr('colspan', 2)
:wikitext(img)
if args.imagecaption and args.imagecaption ~= '' then
imgCell:tag('div')
:addClass('infobox-caption')
:wikitext(args.imagecaption)
end
end
-- Data rows: uses args.rows to limit iterations or defaults to 30
local maxRows = tonumber(args.rows or 30)
for i = 1, maxRows do
local header = args['header' .. i]
if header and header ~= '' then
infobox:tag('tr')
:tag('th')
:addClass('infobox-header')
:attr{scope = 'col', colspan = '2'}
:wikitext(header)
end
local label = args['label' .. i]
local data = args['data' .. i]
if data and data ~= '' then
if label and label ~= '' then
local row = infobox:tag('tr')
row:tag('th')
:addClass('infobox-label')
:attr('scope', 'row')
:wikitext(label)
row:tag('td')
:addClass('infobox-data')
:wikitext(data)
else
infobox:tag('tr')
:tag('td')
:addClass('infobox-data')
:attr{colspan = '2', style = 'text-align:center;'}
:wikitext(data)
end
end
end
-- Optional footer row
if args.below and args.below ~= '' then
infobox:tag('tr')
:tag('td')
:addClass('infobox-below')
:attr('colspan', 2)
:wikitext(args.below)
end
-- Return HTML string
return tostring(infobox)
end
return p