Module:Inventory slot: Difference between revisions

m
no edit summary
imported>Ttv pedro270707
mNo edit summary
imported>Ttv pedro270707
mNo edit summary
 
(113 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 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
-- 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
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 )
Line 98: Line 113:
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 count then
if item ~= 'Air' then
local itemCount = mw.html.create( "span" )
local slot = mw.html.create( "div" )
itemCount:cssText( "position: absolute; right: -2px; bottom: -5px; pointer-events: none;" )
slot:addClass( "minecraft-item" )
:addClass( "c-f" )
:cssText( table.concat( slotCss, ";" ) )
:addClass( "shadow" )
:attr( "data-mctitle", (name or item) )
:wikitext( count )
if descriptions[item] then
slot:attr( "data-mcdesc", p.formatDescription(descriptions[item], 16) )
slot:node( itemCount )
end
end
slot:wikitext( sprite( { data = "InvSprite", id = item } ) )
if link and mw.title.new( link ).exists then
local link = nil
slotContainer:wikitext( "<span style='" .. display .. "'>" .. "[[" .. link .. "|" .. tostring( slot ) .. "]]" .. "</span>" )
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 135: Line 169:
return slotContainer
return slotContainer
end
p.value = {
["Steel Ingot"] = "Hello",
["Steel Ingot5"] = "Hello",
["Steel Ingot10"] = "Hello"
}
function p.test(value)
if value == 1 then
for i = 1, 1000 do
if require("Module:Inventory slot/descriptions").descriptions["Steel Ingot"] then
mw.log("Exists")
else
mw.log("Does not exist")
end
end
else
for i = 1, 101 do
mw.log(mw.title.new("Steel Ingot" .. i).exists)
end
end
end
end