Module:SpriteFinder

--- --- Replaces sprite XML tags in descriptions with small icons. --- ---@module SpriteFinder SpriteFinder = {}

--region Dependencies

local GoodsData = require("Module:GoodsData")

--endregion

--region Private constants

local ARG_ID = "id"

local BLANK_RETURN = "?"

local ICON_SIZE = mw.getCurrentFrame:expandTemplate{ title="ImgS" }

local TEMPLATE_GRADE_ICON = { ["grade1"] = "1Star", ["grade2"] = "2Star", ["grade3"] = "3Star" }

--endregion

--region Private methods

local function toTitleCase(lowercaseString)

return lowercaseString:gsub("(%a)([%w_']*)", function(first, rest)       -- Skip the word "of" in packs of goods        if first == "o" and rest == "f" then            return first .. rest        end        return first:upper .. rest:lower    end) end

--endregion

--region public methods

function SpriteFinder.main(frame)

local id = frame.args[ARG_ID] if not id or "" == id then return BLANK_RETURN end

-- Filter out the stars first. if TEMPLATE_GRADE_ICON[id] then return frame:expandTemplate{ title = TEMPLATE_GRADE_ICON[id] } -- The rest are IDs for goods. else id = toTitleCase(id) local goodName = GoodsData.getGoodNameByID(id) if not goodName or "" == goodName then return BLANK_RETURN end local goodIcon = GoodsData.getGoodIconByID(id) if not goodIcon or "" == goodIcon then return BLANK_RETURN end

return "" end end

--endregion

return SpriteFinder