Module:RequirementBox

Revision as of 16:48, 5 January 2026 by Admin Jeremy (talk | contribs)

Documentation for this module may be created at Module:RequirementBox/doc

local p = {}

local function renderCategory(title, list)
    if list == "" then return "" end
    return string.format([[
<div class="vp-requirements-category">
  <div class="requirements-header">%s</div>
  <ul class="vp-requirements-list">
%s
  </ul>
</div>]], title, list)
end

function p.render(frame)
    local args = frame.args
    local title    = args.title or "Game"
    local game     = args.game or ""
    local state    = args.state or ""

    -- preprocess each category to allow raw wikitext
    local appear   = frame:preprocess(args.appear or "")
    local visit    = frame:preprocess(args.visit or "")
    local resident = frame:preprocess(args.resident or "")
    local romance  = frame:preprocess(args.romance or "")
    local tricks   = frame:preprocess(args.tricks or "")
    local unblock = frame:preprocess(args.unblock or "")
    local evolve = frame:preprocess(args.evolve or "")
    local bait = frame:preprocess(args.bait or "")

    -- build requirements HTML
    local html = renderCategory("Appear", appear)
    html = html .. renderCategory("Visit", visit)
    html = html .. renderCategory("Resident", resident)
    html = html .. renderCategory("Romance", romance)
    html = html .. renderCategory("Tricks", tricks)
    html = html .. renderCategory("Unblock", unblock)
    html = html .. renderCategory("Evolve", evolve)
    html = html .. renderCategory("Bait", bait)


    -- decide whether <details> is open
    local openAttr = ""
    if state ~= "mw-collapsed" then
        openAttr = ' open="open"'
    end

    -- final details box
    local details = string.format([[
<details class="vp-gamebox"%s data-game="%s">
  <summary class="vp-gamebox-header">%s</summary>
  <div class="vp-gamebox-content">
%s
  </div>
</details>]], openAttr, game, title, html)

    -- <<< RETURN RAW HTML >>>
    return frame:preprocess(details)
end

return p