Module:Inventory: Difference between revisions
Jump to navigation
Jump to search
No edit summary Tag: Reverted |
No edit summary Tags: Manual revert Reverted |
||
Line 2: | Line 2: | ||
local hasc = require('Module:Paramtest').has_content | local hasc = require('Module:Paramtest').has_content | ||
function formatAmount(_x) | |||
local x = tonumber(_x) or 1 | |||
local | 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 | ||
end | end | ||
function p.main(frame) | |||
local bgType = frame.args.bgType | |||
local | if bgType == nil then | ||
bgType = "inventory" | |||
local | end | ||
local args = frame:getParent().args | |||
local | 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 | |||
local clickable_x = false -- Added line | |||
if hasc(v) then | |||
v = v:gsub('[][]','') | |||
amt_x = tonumber(v:match('\\(%d+)')) or 1 | |||
note_x = v:match(';n') == ';n' | |||
clickable_x = v:match(';c=yes') == ';c=yes' or v:match(';c=true') == ';c=true' -- Modified line | |||
local v2 = mw.text.split(v,'[;\\]') | |||
item_x = v2[1] | |||
end | |||
table.insert(items,{item=item_x,amt=amt_x,isnoted=note_x,clickable=clickable_x}) -- Modified line | |||
end | end | ||
local align = args.align | |||
local | local acss | ||
if hasc(align) then | |||
local | align = align:lower() | ||
if align == 'right' then | |||
align = "storage-right" | |||
elseif align == 'left' then | |||
align = "storage-left" | |||
else | else | ||
align = "storage-center" | |||
end | end | ||
end | end | ||
return p._main(items,align,bgType) | |||
end | end | ||
function p. | function p._main(items,align,bgType) | ||
local className = bgType .. "table" | |||
local ret = mw.html.create('table') | |||
local | :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 clickable_x = items[item].clickable | |||
local td = ret_row:tag('td') | |||
local | if hasc(itemx) then | ||
local | if clickable_x then | ||
td:wikitext(string.format('[[File:%s.png|%s|link=%s|32x32px|frameless]]', itemx, itemx)) | |||
else | |||
td:wikitext(string.format('[[File:%s.png|link=|32x32px|frameless]]', itemx, 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 | end | ||
return | return ret | ||
end | end | ||
return p | return p |
Revision as of 11:54, 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
local clickable_x = false -- Added line
if hasc(v) then
v = v:gsub('[][]','')
amt_x = tonumber(v:match('\\(%d+)')) or 1
note_x = v:match(';n') == ';n'
clickable_x = v:match(';c=yes') == ';c=yes' or v:match(';c=true') == ';c=true' -- Modified line
local v2 = mw.text.split(v,'[;\\]')
item_x = v2[1]
end
table.insert(items,{item=item_x,amt=amt_x,isnoted=note_x,clickable=clickable_x}) -- Modified line
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 amtx = items[item].amt
local amtx_f, amtx_c = formatAmount(amtx)
local notex = items[item].isnoted
local clickable_x = items[item].clickable
local td = ret_row:tag('td')
if hasc(itemx) then
if clickable_x then
td:wikitext(string.format('[[File:%s.png|%s|link=%s|32x32px|frameless]]', itemx, itemx))
else
td:wikitext(string.format('[[File:%s.png|link=|32x32px|frameless]]', itemx, 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