Module:ResourceLink: Difference between revisions
From Against the Storm Official Wiki
(Streamlined and updated to use new GoodsData. Also streamlined the documentation, to be less duplicative with the template doc but still helpful. Also created a method modules can call directly with an ID) |
(Changed default to small for paragraphs) |
||
Line 27: | Line 27: | ||
local FLAG_NO_ICON = "none" | local FLAG_NO_ICON = "none" | ||
local DEFAULT_ICON_SIZE_TEMPLATE = " | local DEFAULT_ICON_SIZE_TEMPLATE = "ImgS" | ||
local MAP_ICON_SIZE_TEMPLATES = { | local MAP_ICON_SIZE_TEMPLATES = { | ||
["small"] = "ImgS", | ["small"] = "ImgS", |
Revision as of 22:33, 18 November 2023
Documentation for this module may be created at Module:ResourceLink/doc
--- --- This module renders the Resource_link template to draw an icon and link in --- wiki markup. --- --- The template requires an argument, the name of the resource to which --- to link. Optionally, the template accepts a second argument to change the --- size of the icon that accompanies the text hyperlink. --- --- By default, the icon will default to a small size appropriate for display --- in-line with other text. For display in tables to help with recognition, --- use iconsize=med. --- --- See the template documentation for more information about parameters and --- errors and to see examples. --- --- @module ResourceLink local ResourceLink = {} local GoodsData = require("Module:GoodsData") --region Private constants local FLAG_NO_ICON = "none" local DEFAULT_ICON_SIZE_TEMPLATE = "ImgS" local MAP_ICON_SIZE_TEMPLATES = { ["small"] = "ImgS", ["med"] = DEFAULT_ICON_SIZE_TEMPLATE, ["large"] = "ImgL", ["huge"] = "ImgH" } local NBSP = " " --endregion --region Private methods --- --- Writes the wiki markup for the icon and the link. Uses the private constant --- map to look up the size template and expands that template to conform to --- standard size for the wiki. --- ---@param goodName string the name of the goods' page to link to ---@param goodIconFilename string the complete filename to write ---@param iconSize string "none", "small", "med", "large", or "huge" ---@return string wiki markup of icon and hyperlink local function makeResourceLink(goodName, goodIconFilename, iconSize) local linkPart = "[[" .. goodName .. "]]" local iconPart = "" if iconSize and iconSize ~= FLAG_NO_ICON then local iconTemplate = MAP_ICON_SIZE_TEMPLATES[iconSize] or DEFAULT_ICON_SIZE_TEMPLATE local pxSize = mw.getCurrentFrame():expandTemplate{ title=iconTemplate } if goodIconFilename and goodIconFilename ~= "" then iconPart = "[[File: " .. goodIconFilename .. "|" .. pxSize .. "|link=" .. goodName .. "|alt=" .. goodName .. "|" .. goodName .. "]]" .. NBSP end end return iconPart .. linkPart end --endregion --region Public methods --- --- Create a resource link by passing the ID of the resource rather than --- through the template. Useful for calling from other modules. --- ---@param goodID string the ID of the good to link to ---@param iconSize string "small", "med", "large", or "huge" ---@return string wiki markup of icon and link function ResourceLink.resourceLinkWithID(goodID, iconSize) -- At runtime, this should never be nil or empty. if not goodID or goodID == "" then error("No good specified to which to make a link.") end local goodName = GoodsData.getGoodNameByID(goodID) if not goodName then return "No goods found with that ID: " .. goodID .. "." end local goodIconFilename = GoodsData.getGoodIconByID(goodID) return makeResourceLink(goodName, goodIconFilename, iconSize) end --- --- Called from Template:Resource_link to create a link, with an icon, to the --- page for the specified goods. --- ---@param frame table the Mediawiki context from the template ---@return string wikimarkup representing an icon and link function ResourceLink.resourceLink(frame) -- Extract template parameters. local argResource = frame.args["resource"] local argIconSize = frame.args["iconsize"] if not argResource or argResource == "" then return "The Resource_link template requires the name of a resource." end local goodIconFilename = GoodsData.getGoodIcon(argResource) if not goodIconFilename then return "No goods found with that name: " .. argResource .. "." end return makeResourceLink(argResource, goodIconFilename, argIconSize) end --endregion return ResourceLink