Jump to content

Module:Sprite

From SankoQuest Wiki

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

local p = {}
local itemData = mw.loadData('Module:Sprite/Item')

local function trim(value)
    if value == nil then
        return ''
    end
    return mw.text.trim(tostring(value))
end

local function spriteFor(name, size, link)
    local key = trim(name)
    local entry = itemData.items[key]
    local cell = tonumber(itemData.cell) or 32
    local width = tonumber(itemData.width) or cell
    local height = tonumber(itemData.height) or cell
    local renderedSize = tonumber(size) or cell
    local scale = renderedSize / cell

    if not entry then
        return tostring(mw.html.create('span')
            :addClass('sanko-sprite')
            :addClass('sanko-sprite-missing')
            :attr('data-minetip-title', key ~= '' and key or 'Unknown item')
            :css('width', renderedSize .. 'px')
            :css('height', renderedSize .. 'px')
            :wikitext('?'))
    end

    local x = math.floor((tonumber(entry.x) or 0) * scale)
    local y = math.floor((tonumber(entry.y) or 0) * scale)
    local bgWidth = math.floor(width * scale)
    local bgHeight = math.floor(height * scale)

    local node = mw.html.create('span')
        :addClass('sanko-sprite')
        :attr('role', 'img')
        :attr('aria-label', key)
        :attr('data-minetip-title', key)
        :css('background-position', '-' .. x .. 'px -' .. y .. 'px')
        :css('background-size', bgWidth .. 'px ' .. bgHeight .. 'px')
        :css('width', renderedSize .. 'px')
        :css('height', renderedSize .. 'px')

    if link and link ~= '' then
        return tostring(mw.html.create('span')
            :addClass('sanko-sprite-link')
            :wikitext('[[' .. link .. '|' .. tostring(node) .. ']]'))
    end

    return tostring(node)
end

function p.item(frame)
    local args = frame.args
    return spriteFor(args.name or args[1], args.size, args.link)
end

return p