Module:InventorySlot: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
(Should allow arbitrary html be inserted into the slots. Mainly used for specialized items) |
||
Line 14: | Line 14: | ||
function UISlot:SetItem(item) | function UISlot:SetItem(item) | ||
if string.sub(item,1,1) == '<' then | |||
-- If the item is already html just save that | |||
self.__html = item | |||
return self | |||
end | |||
if item == "" then item = nil end | if item == "" then item = nil end | ||
self.__sprite = item and Sprite:Item(item) --nil if item = nil else get sprite | self.__sprite = item and Sprite:Item(item) --nil if item = nil else get sprite | ||
Line 54: | Line 60: | ||
else | else | ||
slot = mw.html.create("div") | slot = mw.html.create("div") | ||
end | |||
if self.__html then | |||
return slot:wikitext(self.__html) | |||
end | end | ||
Line 59: | Line 69: | ||
if self.__sprite then | if self.__sprite then | ||
self.__sprite:GenerateHTML(slot) | local spriteDiv = self.__sprite:GenerateHTML(slot) | ||
end | end | ||
if self.__large then | if self.__large then |
Revision as of 18:38, 4 April 2019
-- Based on work by the MC wiki: https://minecraft.gamepedia.com/
local UISlot = {}
local Sprite = require([[Module:Sprite]]):new("inventory")
function UISlot:new(item, large)
o = {}
setmetatable(o, {__index = self})
o:SetItem(item)
o.__large = large
return o
end
function UISlot:SetItem(item)
if string.sub(item,1,1) == '<' then
-- If the item is already html just save that
self.__html = item
return self
end
if item == "" then item = nil end
self.__sprite = item and Sprite:Item(item) --nil if item = nil else get sprite
return self
end
function UISlot.Item(item, large, html)
return UISlot:new(item, large):GenerateHTML(html)
end
function UISlot.Call(items, width, height, size)
local w = width or 1
local h = height or 1
local grid = {}
local large = size
for i = 1,h do
grid[i] = {}
for j = 1,w do
grid[i][j] = mw.text.trim(items[j+(i-1)*w] or "")
end
end
return UISlot.Grid(grid, large)
end
function UISlot.Grid(items, large)
local root = mw.html.create( "table" ):addClass("invgrid")
for i = 1, #items do
local row = root:tag("tr"):addClass("invrow")
for j = 1, #items[i] do
UISlot.Item(items[i][j], large, row)
end
end
return root
end
function UISlot:GenerateHTML (html)
local slot
if html then
slot = html:tag("td")
else
slot = mw.html.create("div")
end
if self.__html then
return slot:wikitext(self.__html)
end
slot:addClass( "invslot" )
if self.__sprite then
local spriteDiv = self.__sprite:GenerateHTML(slot)
end
if self.__large then
slot:addClass( "invslot-large")
end
return slot
end
return UISlot