Toggle menu
66
63
2
559
Fisk's Superheroes Wiki
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Module:Slot

From Fisk's Superheroes Wiki
Revision as of 21:17, 15 November 2025 by DeathRealms (talk | contribs)

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

local p = {}

local function isUrl(value)
    return type(value) == "string" and value:match("^https?://")
end

local function isHtmlImg(value)
    return type(value) == "string" and value:match("^<img")
end

local function getFileUrl(fileName)
    if isUrl(fileName) then
        return fileName
    end

    if isHtmlImg(fileName) then
        return fileName
    end

    return mw.getCurrentFrame():callParserFunction("filepath", fileName)
end

function p.slot(frame)
    local args = frame.args
    local scale = tonumber(args.scale) or 1

    local html = mw.html.create("div")
        :addClass("slots")
        :css{
            position = "relative",
            width = "100%",
            height = 18 * scale .. "px",
            ["align-items"] = "center",
            ["justify-content"] = "center",
            display = "flex",
        }

    local slots = {}
    for key, value in pairs(args) do
        if key:match("^slot%d+$") then
            local index = tonumber(key:sub(5))
            slots[index] = value
        end
    end

    for _, name in ipairs(slots) do
        local slot = html:tag("div")
            :addClass("slot")
            :css{
                position = "relative",
                width = 18 * scale .. "px",
                height = 18 * scale .. "px",
                margin = scale .. "px",
            }

        slot:tag("img")
            :attr("src", getFileUrl("Slot.png"))
            :css{
                position = "absolute",
                ["image-rendering"] = "pixelated",
                width = 18 * scale .. "px",
                height = 18 * scale .. "px",

				-- The image is shifted to the right when in an Infobox if the top and left are not set to 0
                top = "0",
                left = "0",
            }

        local value = name
        if isHtmlImg(value) then
            slot:wikitext(value)
        else
            slot:tag("img")
                :attr("src", getFileUrl(value))
                :css{
                    position = "absolute",
                    ["image-rendering"] = "pixelated",
                    top = scale .. "px",
                    left = scale .. "px",
                    width = 16 * scale .. "px",
                    height = 16 * scale .. "px",
                }
        end
    end

    return frame:extensionTag("html", tostring(html))
end

return p