Module:Inventory

From RuneRealm Wiki
Jump to navigation Jump to search
Module documentation
This documentation is transcluded from Template:No documentation/doc. [edit] [history] [purge]
This module does not have any documentation. Please consider adding documentation at Module:Inventory/doc. [edit]
Module:Inventory's function main is invoked by Template:Inventory.
Module:Inventory's function main is invoked by Template:Looting bag.
Module:Inventory requires Module:Paramtest.

-- <pre>
local p = {}

local hasc = require('Module:Paramtest').has_content

function formatAmount(_x)
    local x = tonumber(_x) or 1
    if x < 100000 then
        return x, 'qty-1'
    elseif x < 10000000 then
        return tostring(math.floor(x/1000))..'K', 'qty-100k'
    else
        return tostring(math.floor(x/1000000))..'M', 'qty-10m'
    end
end

function p.main(frame)
    local bgType = frame.args.bgType
    if bgType == nil then
        bgType = "inventory"
    end
    local args = frame:getParent().args
    local items = {}
    for i=1,28 do
        local v = mw.text.trim(args[i] or '')
        local item_x
        local link_x
        local amt_x = 1
        local note_x = false
        if hasc(v) then
            v = v:gsub('[][]','')
            amt_x = tonumber(v:match('\\(%d+)')) or 1
            note_x = v:match(';n') == ';n'
            local v2 = mw.text.split(v,'[;\\]')
            item_x = v2[1]
            link_x = v2[2] or item_x
            if link_x == "n" or tonumber(link_x) then
            	link_x = item_x
        	end
        end
        table.insert(items,{item=item_x,link=link_x,amt=amt_x,isnoted=note_x})
    end
    local align = args.align
    local acss
    if hasc(align) then
        align = align:lower()
        if align == 'right' then
            align = "storage-right"
        elseif align == 'left' then
            align = "storage-left"
        else
            align = "storage-center"
        end
    end
    return p._main(items,align,bgType)
end

function p._main(items,align,bgType)
    local className = bgType .. "table"
    local ret = mw.html.create('table')
        :addClass(className)
        :addClass(align)
    local item = 0
    for i=1,7 do
        local ret_row = ret:tag('tr')
        for j=1,4 do
            item = item + 1
            local itemx = items[item].item
            local linkx = items[item].link
            local amtx = items[item].amt
            local amtx_f, amtx_c = formatAmount(amtx)
            local notex = items[item].isnoted
            local td = ret_row:tag('td')
            if hasc(itemx) then
                td:wikitext(string.format('[[File:%s.png|link=%s|32x32px|frameless]]', itemx, linkx))
                if notex then
                    td:addClass('noted-item')
                end
                if amtx > 1 or notex then
                    td:tag('span')
                      :addClass('inv-quantity-text')
                      :addClass(amtx_c)
                      :wikitext(amtx_f)
                end
            end
        end
    end

    return ret
end

return p