Module:Inventory slot: Difference between revisions

m
no edit summary
imported>Ttv pedro270707
mNo edit summary
imported>Ttv pedro270707
mNo edit summary
 
(125 intermediate revisions by 2 users not shown)
Line 1: Line 1:
local p = {}
local p = {}


p.itemSets = {
function p.formatDescription(description, preferredLineLength)
["Any Wool"] = {
local lineLength = 0
"White Wool",
local result = ""
"Orange Wool",
 
"Magenta Wool",
for i = 1, #description do
"Light Blue Wool",
local c = description:sub(i, i)
"Yellow Wool",
    if c == " " then
"Lime Wool",
    if lineLength > preferredLineLength then
"Pink Wool",
        lineLength = 0
"Gray Wool",
        result = result .. "\\n§8"
"Light Gray Wool",
    else
"Cyan Wool",
        result = result .. c
"Purple Wool",
    end
"Blue Wool",
    else
"Brown Wool",
    lineLength = lineLength + 1
"Green Wool",
    result = result .. c
"Red Wool",
    end
"Black Wool"
end
},
 
["Any Planks"] = {
return result
"Wooden Planks",
end
"White Wooden Planks",
"Orange Wooden Planks",
"Magenta Wooden Planks",
"Light Blue Wooden Planks",
"Yellow Wooden Planks",
"Lime Wooden Planks",
"Pink Wooden Planks",
"Gray Wooden Planks",
"Light Gray Wooden Planks",
"Cyan Wooden Planks",
"Purple Wooden Planks",
"Blue Wooden Planks",
"Brown Wooden Planks",
"Green Wooden Planks",
"Red Wooden Planks",
"Black Wooden Planks"
}
}


function p.createSlot( f )
function p.createSlot( f )
local args = f
local args = f
if f == mw.getCurrentFrame() then  
local currentFrame = mw.getCurrentFrame()
if f == currentFrame then  
args = require( 'Module:ProcessArgs' ).merge( true )
args = require( 'Module:ProcessArgs' ).merge( true )
else
else
f = mw.getCurrentFrame()
f = currentFrame
end
end
local aliases = require( "Module:Inventory slot/aliases" ).aliases
local descriptions = require( "Module:Inventory slot/descriptions" ).descriptions
local sprite = require( "Module:Sprite" ).get
local sprite = require( "Module:Sprite" ).get
Line 53: Line 39:
local width = args.width or 32
local width = args.width or 32
local height = args.height or 32
local height = args.height or 32
local item = args.item
local item = args.item or ""
local pageName = mw.title.getCurrentTitle().text
local pageName = mw.title.getCurrentTitle().text
Line 63: Line 49:
local slotContainer = mw.html.create( "div" )
local slotContainer = mw.html.create( "div" )
slotContainer:addClass( "inventory-slot" )
slotContainer:addClass( "inventory-slot" )
:addClass( "animated" )
:cssText( table.concat( slotContainerCss, ";" ) )
:cssText( table.concat( slotContainerCss, ";" ) )
Line 69: Line 56:
"width: 32px",
"width: 32px",
"height: 32px",
"height: 32px",
"position: relative"
"position: relative",
"padding: 2px"
}
}
for i, value in ipairs(p.parseString( args.item )) do
for i, value in ipairs(p.parseString( args.item )) do
Line 75: Line 63:
local item = value.item
local item = value.item
local count = value.count
local count = value.count
if p.itemSets[item] then
if aliases[item] then
for j, subvalue in ipairs(p.itemSets[item]) do
for j, subvalue in ipairs(aliases[item]) do
local display = i == j == 1 and "display: inline-block" or "display: none"
local display = i == j == 1 and "display: inline-block" or "display: none" -- sets display of the first element to `inline-block` and the rest to `none`
local link = nil
-- Set name, item and description
local subname = nil
local subitem = nil
local subdescription = nil
if type(subvalue) == "string" then
subname = subvalue
subitem = subvalue
subdescription = subvalue
else
subname = subvalue.name or subvalue.item
subitem = subvalue.item
subdescription = subvalue.description or subvalue.item
end
local slot = mw.html.create( "div" )
local slot = mw.html.create( "div" )
slot:addClass( "minecraft-item" )
slot:addClass( "minecraft-item" )
:cssText( table.concat( slotCss, ";" ) )
:cssText( table.concat( slotCss, ";" ) )
:attr( "data-mctitle", (name or subvalue) )
:attr( "data-mctitle", (name or subname or subitem) )
slot:wikitext( sprite( { data = "InvSprite", id = subvalue } ) )
if descriptions[subdescription] or descriptions[subitem] or descriptions[subname] then
if item ~= pageName and subvalue then
slot:attr( "data-mcdesc", p.formatDescription((descriptions[subdescription] or descriptions[subitem] or descriptions[subname]), 16) )
link = subvalue
end
if not subitem:match( '\.gif$' ) and not subitem:match( '\.png$' ) then
slot:wikitext( sprite( { data = "InvSprite", id = subitem } ) )
end
end
-- Set link
local link = nil
if args.link and args.link ~= "y" then
if args.link ~= "n" then
link = args.link
end
elseif (subname ~= pageName and subname) or args.link == "y" then
link = require("Module:Inventory slot/links").links[subname]
end
-- Set the item count
if count then
if count then
local itemCount = mw.html.create( "span" )
local itemCount = mw.html.create( "span" )
itemCount:cssText( "position: absolute; right: -2px; bottom: -5px; pointer-events: none;" )
itemCount:cssText( "position: absolute; right: 0; bottom: -2px; pointer-events: none;" )
:addClass( "c-f" )
:addClass( "c-0" )
:addClass( "shadow" )
:addClass( "shadow" )
:wikitext( count )
:wikitext( count )
slot:node( itemCount )
end
end
if link and mw.title.new( link ).exists then
-- Use an image if the item ends in .gif or .png
slotContainer:wikitext( "<span style='" .. display .. "'>" .. "[[" .. link .. "|" .. tostring( slot ) .. "]]" .. "</span>" )
if subitem:match( '\.gif$' ) or subitem:match( '\.png$' ) then
slot:wikitext( "<span class=\"sprite pixelated\" style=\"width: 32px; height: 32px;\">[[File:" .. subitem .. "|160px|link=" .. (link or "") .. "]]</span>" )
slotContainer:wikitext( tostring( slot ) )
else
else
slotContainer:wikitext( "<span style='" .. display .. "'>" .. tostring( slot ) .. "</span>" )
if link then
slotContainer:wikitext( "<span style='" .. display .. "' class='no-external-icon'>" .. "[https://bta.miraheze.org/wiki/" .. link:gsub(" ", "_") .. " " .. tostring( slot ) .. "]" .. "</span>" )
else
slotContainer:wikitext( "<span style='" .. display .. "'>" .. tostring( slot ) .. "</span>" )
end
end
end
end
end
else
else
local display = i == 1 and "display: inline-block" or "display: none"
local display = i == 1 and "display: inline-block" or "display: none"
local link = nil
local slot = mw.html.create( "div" )
slot:addClass( "minecraft-item" )
:cssText( table.concat( slotCss, ";" ) )
:attr( "data-mctitle", (name or item) )
slot:wikitext( sprite( { data = "InvSprite", id = item } ) )
if item ~= pageName and item then
link = item
end
if link and mw.title.new( link ).exists then
if item ~= 'Air' then
slotContainer:wikitext( "<span style='" .. display .. "'>" .. "[[" .. link .. "|" .. tostring( slot ) .. "]]" .. "</span>" )
local slot = mw.html.create( "div" )
slot:addClass( "minecraft-item" )
:cssText( table.concat( slotCss, ";" ) )
:attr( "data-mctitle", (name or item) )
if descriptions[item] then
slot:attr( "data-mcdesc", p.formatDescription(descriptions[item], 16) )
end
slot:wikitext( sprite( { data = "InvSprite", id = item } ) )
local link = nil
if args.link and args.link ~= "y" then
if args.link ~= "n" then
link = args.link
end
elseif (require("Module:Inventory slot/links").links[item] ~= pageName and item) or args.link == "y" then
link = require("Module:Inventory slot/links").links[item]
end
if count then
local itemCount = mw.html.create( "span" )
itemCount:cssText( "position: absolute; right: 0; bottom: -2px; pointer-events: none;" )
:addClass( "c-0" )
:addClass( "shadow" )
:wikitext( count )
slot:node( itemCount )
end
if link or (args.link and args.link ~= "y" and args.link ~= "n") then
slotContainer:wikitext( "<span style='" .. display .. "' class='no-external-icon'>" .. "[https://bta.miraheze.org/wiki/" .. link:gsub(" ", "_") .. " " .. tostring( slot ) .. "]" .. "</span>" )
else
slotContainer:wikitext( "<span style='" .. display .. "'>" .. tostring( slot ) .. "</span>" )
end
else
else
slotContainer:wikitext( "<span style='" .. display .. "'>" .. tostring( slot ) .. "</span>" )
slotContainer:wikitext( "<span style='" .. display .. "'><!-- Air --></span>")
end
end
end
end
Line 125: Line 171:
end
end


function p.parseString(input)
p.value = {
local strings = {}
["Steel Ingot"] = "Hello",
for str in input:gmatch("[^;]+") do
["Steel Ingot5"] = "Hello",
    table.insert(strings, str:match("^%s*(.-)%s*$"))
["Steel Ingot10"] = "Hello"
end
}
 
local result = {}


for _, str in ipairs(strings) do
function p.test(value)
local name, item, count = str:match("^%[(.-)%](.-),(%d+)$")
if value == 1 then
if not name then
for i = 1, 1000 do
name, item = str:match("^%[(.-)%](.-)$")
if require("Module:Inventory slot/descriptions").descriptions["Steel Ingot"] then
end
mw.log("Exists")
if name then
if count == nil then
table.insert(result, { name = name:gsub("^%s*(.-)%s*$", "%1"), item = item:gsub("^%s*(.-)%s*$", "%1"), count = nil })
else
else
table.insert(result, { name = name:gsub("^%s*(.-)%s*$", "%1"), item = item:gsub("^%s*(.-)%s*$", "%1"), count = tonumber(count) })
mw.log("Does not exist")
end
else
if count == nil then
table.insert(result, { name = nil, item = str:gsub("^%s*(.-)%s*$", "%1"), count = nil })
else
table.insert(result, { name = nil, item = str:gsub("^%s*(.-)%s*$", "%1"), count = tonumber(count) })
end
end
end
else
for i = 1, 101 do
mw.log(mw.title.new("Steel Ingot" .. i).exists)
end
end
end
end
end


return result
function p.parseString(input)
if input then
    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, count = str:match("^%[(.-)%](.-),?(%d*)$")
        if name then
            table.insert(result, { name = name:gsub("^%s*(.-)%s*$", "%1"), item = item:gsub("^%s*(.-)%s*$", "%1"), count = tonumber(count) })
        else
            item, count = str:match("(.-),?(%d*)$")
            table.insert(result, { name = nil, item = item:gsub("^%s*(.-)%s*$", "%1"), count = tonumber(count) })
        end
    end
   
    return result
else
return {}
end
end
end


return p
return p