Module:ResourceLink: Difference between revisions

From Against the Storm Official Wiki
(Updated to externalize the view, making this module significantly simpler)
(now with error checking!)
 
(One intermediate revision by the same user not shown)
Line 36: Line 36:


local goodID = GoodsData.getGoodID(name)
local goodID = GoodsData.getGoodID(name)
return GoodsData.getIcon(goodID)
local validatedIcon = GoodsData.getIcon(goodID)
 
if not validatedIcon then
error("No resource found with name: " .. name .. ". Please see the template documentation for how to use the parameters")
end
 
return validatedIcon
end
end


Line 56: Line 62:


if not name or name == "" then
if not name or name == "" then
return "The Resource_link template requires the name of a resource."
error("You must specify a resource. Please see the template documentation for how to use the parameters")
end
end


Line 71: Line 77:
["name"] = name,
["name"] = name,
["iconfilename"] = validatedIcon,
["iconfilename"] = validatedIcon,
["iconsize"] = iconsize,
["iconsize"] = iconSize,
["display"] = display,
["display"] = display,
}
}

Latest revision as of 02:44, 19 October 2024

Documentation for this module may be created at Module:ResourceLink/doc

--- @module ResourceLink
local ResourceLink = {}


--region Dependencies

local GoodsData = require("Module:GoodsData")

local VIEW_TEMPLATE = "Resource_link/view"

--endregion



--region Private constants

local VALID_SIZE = {
	["none"] = true,
	["small"] = true,
	["medium"] = true,
	["large"] = true,
	["huge"] = true,
}

--endregion



--region Private methods

---validateResourceName retrieves the icon from the data module.
---
---@param name string the display name of a resource
---@return string the filename of the icon
local function validateResourceName(name)

	local goodID = GoodsData.getGoodID(name)
	local validatedIcon = GoodsData.getIcon(goodID)

	if not validatedIcon then
		error("No resource found with name: " .. name .. ". Please see the template documentation for how to use the parameters")
	end

	return validatedIcon
end

--endregion



--region Public methods

---main is called from the template to create a link, with an icon, to the page for the specified goods.
---
---@param frame table the Mediawiki template context
---@return string wikimarkup generated by the view template
function ResourceLink.main(frame)

	local name = frame.args.name
	local iconSize = frame.args.size
	local display = frame.args.display

	if not name or name == "" then
		error("You must specify a resource. Please see the template documentation for how to use the parameters")
	end

	-- Validate the name.
	validatedIcon = validateResourceName(name)

	-- Handle default icon size.
	if not iconSize or iconSize == "" or not VALID_SIZE[iconSize] then
		iconSize = "small"
	end

	-- The args to pass to the view.
	viewParameters = {
		["name"] = name,
		["iconfilename"] = validatedIcon,
		["iconsize"] = iconSize,
		["display"] = display,
	}

	return frame:expandTemplate{
		title = VIEW_TEMPLATE,
		args = viewParameters,
	}
end

--endregion

return ResourceLink