Jump to content

Module:OOOInfoBox

From Out of Ore Wiki
Revision as of 20:21, 6 October 2025 by T-Bone (talk | contribs)

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