Module:SpeciesLink: Difference between revisions
From Against the Storm Official Wiki
Rewrote to be more lightweight, externalize the view, and to include frogs |
Allowing a display parameter for skipping the text part of the link |
||
| Line 59: | Line 59: | ||
local name = frame.args.species or frame.args[1] | local name = frame.args.species or frame.args[1] | ||
local iconSize = frame.args.iconsize or frame.args[2] | 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. | -- Check that something at all was provided for the name before we can validate it. | ||
| Line 70: | Line 71: | ||
-- Defer to the view to handle the iconSize. We don't need to validate it. | -- 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 = { | local parameters = { | ||
["name"] = speciesName, | ["name"] = speciesName, | ||
["iconfilename"] = iconFilename, | ["iconfilename"] = iconFilename, | ||
["size"] = iconSize, | ["size"] = iconSize, | ||
[1] = skipText, | |||
} | } | ||
Revision as of 03:50, 10 October 2024
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


