Module:Inventory slot: Difference between revisions
imported>Ttv pedro270707 m (Added parseString function to take a string and treat it to generate the item with a name) |
imported>Ttv pedro270707 m (Attempt at an inventory slot module, I hate Lua) |
||
Line 2: | Line 2: | ||
function p.createSlot( f ) | function p.createSlot( f ) | ||
local args = require( "Module: | local args = f | ||
local width = args.width or | if f == mw.getCurrentFrame() then | ||
local height = args.height or | args = require( 'Module:ProcessArgs' ).merge( true ) | ||
else | |||
f = mw.getCurrentFrame() | |||
end | |||
local sprite = require( "Module:Sprite" ).get | |||
local ids = mw.loadData( "Module:InvSprite" ).ids | |||
local width = args.width or 32 | |||
local height = args.height or 32 | |||
local item = args.item | local item = args.item | ||
local link = args.link | local link = args.link | ||
local pageName = mw.title.getCurrentTitle().text | local pageName = mw.title.getCurrentTitle().text | ||
local slotContainerCss = { | |||
mw. | "width: " .. width .. "px", | ||
"height: " .. height .. "px", | |||
"position: relative" | |||
} | |||
local slotContainer = mw.html.create( "div" ) | |||
slotContainer:addClass( "inventory-slot" ) | |||
:cssText( table.concat( slotContainerCss, ";" ) ) | |||
local slotCss = { | |||
"width: 32px", | |||
"height: 32px", | |||
"position: relative" | |||
} | |||
for i, value in ipairs(p.parseString( args.item )) do | |||
local display = i == 1 and "display: inline-block" or "display: none" | |||
local name = value.name | |||
local item = value.item | |||
local slot = mw.html.create( "div" ) | |||
slot:addClass( "minecraft-item" ) | |||
:cssText( table.concat( slotCss, ";" ) .. ";" .. display ) | |||
:attr( "data-mctitle", name ) | |||
slot:wikitext( sprite( { data = "InvSprite", id = ids[item] } ) ) | |||
slotContainer:node( slot ) | |||
end | end | ||
return slotContainer | return slotContainer |
Revision as of 00:20, 11 March 2023
This module creates an inventory slot. {{Inventory slot}}
should be preferred, rather than directly invoking this module on the article.
local p = {} function p.createSlot( f ) local args = f if f == mw.getCurrentFrame() then args = require( 'Module:ProcessArgs' ).merge( true ) else f = mw.getCurrentFrame() end local sprite = require( "Module:Sprite" ).get local ids = mw.loadData( "Module:InvSprite" ).ids local width = args.width or 32 local height = args.height or 32 local item = args.item local link = args.link local pageName = mw.title.getCurrentTitle().text local slotContainerCss = { "width: " .. width .. "px", "height: " .. height .. "px", "position: relative" } local slotContainer = mw.html.create( "div" ) slotContainer:addClass( "inventory-slot" ) :cssText( table.concat( slotContainerCss, ";" ) ) local slotCss = { "width: 32px", "height: 32px", "position: relative" } for i, value in ipairs(p.parseString( args.item )) do local display = i == 1 and "display: inline-block" or "display: none" local name = value.name local item = value.item local slot = mw.html.create( "div" ) slot:addClass( "minecraft-item" ) :cssText( table.concat( slotCss, ";" ) .. ";" .. display ) :attr( "data-mctitle", name ) slot:wikitext( sprite( { data = "InvSprite", id = ids[item] } ) ) slotContainer:node( slot ) end return slotContainer end function p.parseString(input) local strings = {} for str in input:gmatch("[^;]+") do table.insert(strings, str:match("^%s*(.-)%s*$")) end local result = {} for _, str in ipairs(strings) do local name, item = str:match("^%[(.-)%](.*)$") if name then table.insert(result, { name = name:gsub("^%s*(.-)%s*$", "%1"), item = item:gsub("^%s*(.-)%s*$", "%1") }) else table.insert(result, { name = str:gsub("^%s*(.-)%s*$", "%1"), item = str:gsub("^%s*(.-)%s*$", "%1") }) end end return result end return p