Module:OOOInfoBox: Difference between revisions
Appearance
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
local DATA = require('Module:OOO/Data') | |||
local p = {} | local p = {} | ||
local function trim(s) return s and mw.text.trim(tostring(s)) or s end | local function trim(s) return s and mw.text.trim(tostring(s)) or s end | ||
local function pick(args, data, key) | local function pick(args, data, key) | ||
local v = args[key]; if v and trim(v) ~= '' then return trim(v) end | |||
v = data and data[key]; if v ~= nil and tostring(v) ~= '' then return v end | |||
end | end | ||
local function warn(msg) | local function warn(msg) | ||
return '<div class="mw-message-box mw-message-box-warning"><b>OOOInfoBox</b>: '..msg..'</div>' | |||
end | end | ||
function p.building(frame) | |||
local parent = frame:getParent() or frame | |||
local args = parent.args or {} | |||
-- Required inputs | |||
local domain = trim(args.type or args.domain or 'Buildings') -- default to Buildings for convenience | |||
local art = trim(args.art or args.artNumber or args.id) | |||
if not art or art == '' then | |||
return warn('Use |art=ART_NUMBER (e.g. 400113).') | |||
end | |||
-- Lookup record | |||
local data = DATA.get(domain, art) | |||
if not data then | |||
return warn(('No record for %s:%s.'):format(domain, art)) | |||
end | |||
-- Build table | |||
local box = mw.html.create('table'):addClass('infobox') | |||
local title = pick(args, data, 'displayName') or ('Item '..art) | |||
box:tag('tr'):tag('th'):attr('colspan','2'):wikitext(title) | |||
local function row(label, key, fixed) | |||
local v = fixed or pick(args, data, key) | |||
if v ~= nil and tostring(v) ~= '' then | |||
local tr = box:tag('tr') | |||
tr:tag('th'):wikitext(label) | |||
tr:tag('td'):wikitext(v) | |||
end | end | ||
end | |||
row('Domain', nil, domain) | |||
row('Art Number', nil, art) | |||
row('Type', 'type') | |||
row('Throughput (m³/h)', 'throughput_m3h') | |||
row('Power (kW)', 'power_kw') | |||
row('Capacity', 'capacity') | |||
return tostring(box) | |||
end | end | ||
return p | return p |
Revision as of 20:21, 6 October 2025
Documentation for this module may be created at Module:OOOInfoBox/doc
local DATA = require('Module:OOO/Data')
local p = {}
local function trim(s) return s and mw.text.trim(tostring(s)) or s end
local function pick(args, data, key)
local v = args[key]; if v and trim(v) ~= '' then return trim(v) end
v = data and data[key]; if v ~= nil and tostring(v) ~= '' then return v end
end
local function warn(msg)
return '<div class="mw-message-box mw-message-box-warning"><b>OOOInfoBox</b>: '..msg..'</div>'
end
function p.building(frame)
local parent = frame:getParent() or frame
local args = parent.args or {}
-- Required inputs
local domain = trim(args.type or args.domain or 'Buildings') -- default to Buildings for convenience
local art = trim(args.art or args.artNumber or args.id)
if not art or art == '' then
return warn('Use |art=ART_NUMBER (e.g. 400113).')
end
-- Lookup record
local data = DATA.get(domain, art)
if not data then
return warn(('No record for %s:%s.'):format(domain, art))
end
-- Build table
local box = mw.html.create('table'):addClass('infobox')
local title = pick(args, data, 'displayName') or ('Item '..art)
box:tag('tr'):tag('th'):attr('colspan','2'):wikitext(title)
local function row(label, key, fixed)
local v = fixed or pick(args, data, key)
if v ~= nil and tostring(v) ~= '' then
local tr = box:tag('tr')
tr:tag('th'):wikitext(label)
tr:tag('td'):wikitext(v)
end
end
row('Domain', nil, domain)
row('Art Number', nil, art)
row('Type', 'type')
row('Throughput (m³/h)', 'throughput_m3h')
row('Power (kW)', 'power_kw')
row('Capacity', 'capacity')
return tostring(box)
end
return p