Module:Inventory: Difference between revisions

From Roat Pkz
Jump to navigation Jump to search
No edit summary
Tag: Manual revert
No edit summary
Line 1: Line 1:
-- <pre>
local p = {}
local p = {}


Line 48: Line 47:
         end
         end
     end
     end
     return p._main(items,align,bgType)
   
    local clickableItems = {
        -- Add items and URLs here
        -- Example: ["item1"] = "URL1",
    }
 
     return p._main(items, align, bgType, clickableItems)
end
end


function p._main(items,align,bgType)
function p._main(items, align, bgType, clickableItems)
     local className = bgType .. "table"
     local className = bgType .. "table"
     local ret = mw.html.create('table')
     local ret = mw.html.create('table')
Line 57: Line 62:
         :addClass(align)
         :addClass(align)
     local item = 0
     local item = 0
     for i=1,7 do
     for i = 1, 7 do
         local ret_row = ret:tag('tr')
         local ret_row = ret:tag('tr')
         for j=1,4 do
         for j = 1, 4 do
             item = item + 1
             item = item + 1
             local itemx = items[item].item
             local itemx = items[item].item
Line 67: Line 72:
             local td = ret_row:tag('td')
             local td = ret_row:tag('td')
             if hasc(itemx) then
             if hasc(itemx) then
                 td:wikitext(string.format('[[File:%s.png|%s|link=|32x32px|frameless]]', itemx, itemx))
                 if clickableItems[itemx] then
                    -- If the item is clickable, add a link to the image tag
                    td:wikitext(string.format('[[File:%s.png|%s|link=%s|32x32px|frameless]]', itemx, itemx, clickableItems[itemx]))
                else
                    -- If the item is not clickable, just add the image tag without a link
                    td:wikitext(string.format('[[File:%s.png|%s|link=|32x32px|frameless]]', itemx, itemx))
                end
                 if notex then
                 if notex then
                     td:addClass('noted-item')
                     td:addClass('noted-item')
Line 80: Line 91:
         end
         end
     end
     end
     return ret
     return ret
end
end


return p
return p

Revision as of 12:04, 6 May 2024

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

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 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]
        end
        table.insert(items,{item=item_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
    
    local clickableItems = {
        -- Add items and URLs here
        -- Example: ["item1"] = "URL1",
    }

    return p._main(items, align, bgType, clickableItems)
end

function p._main(items, align, bgType, clickableItems)
    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 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
                if clickableItems[itemx] then
                    -- If the item is clickable, add a link to the image tag
                    td:wikitext(string.format('[[File:%s.png|%s|link=%s|32x32px|frameless]]', itemx, itemx, clickableItems[itemx]))
                else
                    -- If the item is not clickable, just add the image tag without a link
                    td:wikitext(string.format('[[File:%s.png|%s|link=|32x32px|frameless]]', itemx, itemx))
                end
                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