Module:Sandbox/Monster Domosed/AbilityTable/ComplexRenderers: Difference between revisionsGive feedback
No edit summary |
No edit summary |
||
| (One intermediate revision by the same user not shown) | |||
| Line 402: | Line 402: | ||
return cells | return cells | ||
end | |||
-- Memoized Key -> label map built from Data:AbilityCards.json. The flat | |||
-- AbilityData.json records only carry { Value, Scale }; the human-readable | |||
-- label lives inside the Info1/Info2 prop entries of AbilityCards.json, where | |||
-- Title takes precedence over Name ("On Perfect Hold" before "Perfect Damage"). | |||
-- A trailing colon on a Title is stripped so it reads cleanly in "(...)". | |||
local _card_labels = nil | |||
local function build_card_label_map() | |||
if _card_labels then return _card_labels end | |||
_card_labels = {} | |||
if type(mw) ~= "table" or type(mw.loadJsonData) ~= "function" then | |||
return _card_labels | |||
end | |||
local ok, cards = pcall(mw.loadJsonData, "Data:AbilityCards.json") | |||
if not ok or type(cards) ~= "table" then return _card_labels end | |||
-- Label for a single prop entry: Title wins, else Name; strip any | |||
-- trailing colon/whitespace (a Title like "On Perfect Hold:" -> "On Perfect Hold"). | |||
local function entry_label(entry) | |||
local label = entry["Title"] or entry["Name"] | |||
if type(label) ~= "string" then return nil end | |||
if entry["Title"] ~= nil then label = label:gsub(":%s*$", "") end | |||
return label | |||
end | |||
local seen = {} | |||
local function walk(node) | |||
if type(node) ~= "table" or seen[node] then return end | |||
seen[node] = true | |||
local k = node["Key"] | |||
if type(k) == "string" and (node["Title"] ~= nil or node["Name"] ~= nil) then | |||
local label = entry_label(node) | |||
if label and label ~= "" then _card_labels[k] = label end | |||
end | |||
for _, v in pairs(node) do | |||
if type(v) == "table" then walk(v) end | |||
end | |||
end | |||
walk(cards) | |||
return _card_labels | |||
end | end | ||
| Line 438: | Line 479: | ||
and type(scale["Value"]) == "number" | and type(scale["Value"]) == "number" | ||
and scale["Value"] ~= 0 then | and scale["Value"] ~= 0 then | ||
-- Prefer a Name carried directly on the prop, then | -- Prefer a Name carried directly on the prop, then any label | ||
-- recovered from | -- recovered from nested Key/Title-or-Name entries inside this | ||
-- record, then the AbilityCards label map (Title over Name), | |||
-- else the key. | |||
local label = type(v["Name"]) == "string" and v["Name"] | local label = type(v["Name"]) == "string" and v["Name"] | ||
or names[k] or k | or names[k] | ||
or build_card_label_map()[k] | |||
or k | |||
table.insert(props, { key = k, value = scale["Value"], name = label }) | table.insert(props, { key = k, value = scale["Value"], name = label }) | ||
end | end | ||