Module:SpeciesLink
From Against the Storm Official Wiki
Documentation for this module may be created at Module:SpeciesLink/doc
--- @module SpeciesLink
local SpeciesLink = {}
--region Dependencies
local SpeciesData = require("Module:SpeciesData")
local VIEW_TEMPLATE = "Species_link/view"
--endregion
--region Private constants
local VALID_SIZES = {
["none"] = true,
["small"] = true,
["medium"] = true,
["large"] = true,
["huge"] = true,
}
--endregion
--region Private methods
local function validateSpeciesName(name)
-- Try a quick match with the keys first.
local speciesFound = SpeciesData.species[name]
if speciesFound then
return speciesFound
else
-- Look into the data to see if the name matches any of the names in the data.
for _, species in pairs(SpeciesData.species) do
if name == species[SpeciesData.NAME] then
return species
end
end
end
error("You specified an invalid species name. Please see the template documentation for how to use the parameters.")
end
--endregion
--region Public methods
function SpeciesLink.main(frame)
local name = frame.args.species or frame.args[1]
local iconSize = frame.args.iconsize or frame.args[2]
local skipText = frame.args.display
-- Check that something at all was provided for the name before we can validate it.
if not name or name == "" then
error("You must specify the name of the species. Please see the template documentation for how to use the parameters.")
end
local validatedSpecies = validateSpeciesName(name)
local speciesName = validatedSpecies[SpeciesData.NAME]
local iconFilename = validatedSpecies[SpeciesData.ICON_FILENAME] .. ".png"
-- Defer to the view to handle the iconSize. We don't need to validate it.
-- The only valid term here is `notext`, which should be passed through; anything else we blank out.
if skipText ~= "notext" then
skipText = ""
end
local parameters = {
["name"] = speciesName,
["iconfilename"] = iconFilename,
["size"] = iconSize,
[1] = skipText,
}
return frame:expandTemplate{
title = VIEW_TEMPLATE,
args = parameters,
}
end
--endregion
return SpeciesLink


