Module:AbilityTableGive feedback
This module exposes two functions.
rendergenerates a table of hero abilities matching a named list, and is invoked via{{AbilityTable}}.is_member(list, ability_key, ability_num)is a shared function that decides whether a single ability belongs to a list (applying the same properties and exclusions); it is used both internally byrenderand externally by Module:AbilityHints, so the ability-hint icons always stay in sync with these tables.
See also
- Template:AbilityTable — the template that invokes this module
- Module:AbilityTable/Lists — defines which properties each list matches on, and which abilities to exclude
- Module:AbilityTable/Notes — editor-authored notes displayed in the Notes column
- Module:AbilityTable/ComplexRenderers — custom column renderers for lists that need more than just Notes
- Module:AbilityHints — reuses
is_memberto render interaction-hint icons on ability cards
-- Module:AbilityTables
-- Renders sortable wikitables of abilities filtered by a named stat.
-- Backing module for Template:AbilityTable.
--
-- Usage on wiki pages: {{AbilityTable|charges}}
--
-- Adding a new stat:
-- 1. Add an entry to friendly_to_internal below, mapping the friendly
-- name (lowercase) to the list of internal AbilityData property keys.
-- 2. The table will appear automatically on any page using {{AbilityTable|<stat>}}.
local p = {}
local GameData = require("Module:GameData")
-- Maps lowercase friendly stat names to internal AbilityData property keys.
-- A single friendly name may map to multiple internal keys if the stat can
-- be represented differently across abilities.
local friendly_to_internal = {
["charges"] = { "AbilityCharges" },
}
-- Entry point invoked by Template:AbilityTable.
-- frame.args[1] is the friendly stat name (e.g. "charges").
function p.abilityPropTable(frame)
local stat = mw.text.trim(frame.args[1] or ""):lower()
local internal_keys = friendly_to_internal[stat]
if not internal_keys then
return '<span class="error">AbilityTable: unknown stat "' .. stat .. '".</span>'
end
local abilities = GameData.get_entities(GameData.Dataset.ABILITIES, internal_keys)
if #abilities == 0 then
return "No abilities found for stat: " .. stat
end
-- Sort alphabetically by ability name
table.sort(abilities, function(a, b)
return (a["Name"] or "") < (b["Name"] or "")
end)
-- Render wikitable
local out = {}
table.insert(out, '{| class="wikitable sortable"')
table.insert(out, "! Ability")
for _, ability in ipairs(abilities) do
local ability_cell = frame:expandTemplate{
title = "AbilityIcon",
args = { ability["Key"] or ability["Name"] }
}
table.insert(out, "|-")
table.insert(out, "| " .. ability_cell)
end
table.insert(out, "|}")
return table.concat(out, "\n")
end
return p