|
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() |