Module:PerkLink

local PerkLink = {}

--region Dependencies

local PerksData = require("Module:PerksData") local StyleUtils = require("Module:StyleUtils")

--endregion

--region Private member variables

-- just in case the icon isn't found but the ID and name are good local REPLACEMENT_FILENAME = "Question_mark.png"

--endregion

--region Private methods

local function resolveIconSize(iconSizeRequested)

-- default for perk links is small local size = StyleUtils.IMG_S

if iconSizeRequested == "med" then size = StyleUtils.IMG_M else if iconSizeRequested == "large" then size = StyleUtils.IMG_L else if iconSizeRequested == "huge" then size = StyleUtils.IMG_H end end end

return size end

local function makeIconPart(perkID, pageName, iconSize)

if not iconSize or iconSize == "" or iconSize == "none" then return "" end

local filename = PerksData.getIconByID(perkID) or REPLACEMENT_FILENAME local size = resolveIconSize(iconSize)

return string.format(" ", filename, size, pageName, pageName, pageName) end

local function renderWithID(perkID, iconSize)

local pageName = PerksData.getNameByID(perkID)

if not pageName then return "No perk found with that id: " .. perkID .. "."	end

local iconPart = makeIconPart(perkID, pageName, iconSize)

local pagePart = "" .. pageName .. ""

return iconPart .. pagePart end

local function renderWithName(name, iconSize)

local listOfIDs = PerksData.getAllPerkIDsByName(name) if #listOfIDs < 1 then return "No perk found with that name: " .. name .. "."	end local perkID = listOfIDs[1]

return renderWithID(perkID, iconSize) end

--endregion

--region Public methods

--- Main rendering method invoked from the template. --- ---@param frame table the MediaWiki calling context ---@return string wiki markup with the results function PerkLink.renderLink(frame)

-- Extract the template parameters. local perkID = frame.args.id	local name = frame.args.name local iconSize = frame.args.iconsize

if perkID and perkID ~= "" then return renderWithID(perkID, iconSize) else if name and name ~= "" then return renderWithName(name, iconSize) else return "The Perk_link template requires the ID or name of a perk." end end

end

--endregion

return PerkLink