Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Join the Playtest on Steam Now: SpiritVale

Module:GameInfo: Difference between revisions

From SpiritVale Wiki
No edit summary
No edit summary
Tags: Mobile edit Mobile web edit
Line 1: Line 1:
-- Module:GameInfo
-- Phase 4.1 (Refactor): stable entrypoint + strict routing + shared scaffolding.
--
-- Contract (new, strict):
-- - Pages are generated/updated by SVWT + pywikibot (compiled artifacts).
-- - No legacy wrappers: read args from frame.args ONLY.
-- - Submodules are pure renderers:
--    return require("Module:GameInfo/Skills").render(frame)
--  Optional:
--    return require("Module:GameInfo/Skills").STYLE_SRC = "Module:GameInfo/skills.css"
--
-- Entry points:
--  {{#invoke:GameInfo|Skills|id=...|index=...|notes=...|data=...}}
--  {{#invoke:GameInfo|Category|name=Skills|...}}  -- allowlist only
local p = {}
local p = {}


-- Default TemplateStyles source (may be overridden by submodules via STYLE_SRC).
local DEFAULT_STYLE_SRC = "Module:GameInfo/styles.css"
local DEFAULT_STYLE_SRC = "Module:GameInfo/styles.css"


-- Allowlist routes (no dynamic require by user input).
local ROUTES = {
local ROUTES = {
Skills = "Module:GameInfo/Skills",
Skills = "Module:GameInfo/Skills",
-- Future:
-- Monsters = "Module:GameInfo/Monsters",
-- Equips  = "Module:GameInfo/Equips",
}
}
-- -----------------------------------------------------------------------------
-- Small utils
-- -----------------------------------------------------------------------------


local function _trim(v)
local function _trim(v)
Line 53: Line 29:


local function _error_box(msg)
local function _error_box(msg)
-- Keep obvious + wiki-friendly (TemplateStyles will still load).
return tostring(
return tostring(
mw.html.create("div")
mw.html.create("div")
Line 60: Line 35:
)
)
end
end
-- -----------------------------------------------------------------------------
-- Args (strict: frame.args only)
-- -----------------------------------------------------------------------------


function p.arg(frame, key, fallback)
function p.arg(frame, key, fallback)
Line 87: Line 58:
return fallback
return fallback
end
end
-- -----------------------------------------------------------------------------
-- TemplateStyles
-- -----------------------------------------------------------------------------


function p.styles(frame, src)
function p.styles(frame, src)
Line 98: Line 65:
end
end


-- -----------------------------------------------------------------------------
-- Shared container builder
-- -----------------------------------------------------------------------------
-- Canonical builder: returns { root=<div>, top=<div>, bottom=<div> }.
-- Submodules fill top/bottom and tostring(root).
function p.box(opts)
function p.box(opts)
opts = opts or {}
opts = opts or {}
Line 136: Line 97:
end
end


-- Backward-friendly alias for your own codebase (not “reverse wiki compat”).
p.new_box = p.box
p.new_box = p.box


Line 149: Line 109:
return tostring(box.root)
return tostring(box.root)
end
end
-- -----------------------------------------------------------------------------
-- Dispatch
-- -----------------------------------------------------------------------------


local function _require_submodule(module_title)
local function _require_submodule(module_title)
Line 183: Line 139:
return p.styles(frame, style_src) .. tostring(out or "")
return p.styles(frame, style_src) .. tostring(out or "")
end
end
-- -----------------------------------------------------------------------------
-- Public entrypoints
-- -----------------------------------------------------------------------------


function p.Skills(frame)
function p.Skills(frame)
Line 208: Line 160:
end
end


-- Optional: sanity test for box + CSS wiring
-- {{#invoke:GameInfo|skeleton|id=sv-gi-test-1|level=1|max=10|variant=skills}}
function p.skeleton(frame)
function p.skeleton(frame)
frame = frame or mw.getCurrentFrame()
frame = frame or mw.getCurrentFrame()