Module:CraftingJSON

From JCraft Wiki
Revision as of 11:33, 27 April 2026 by KasaneTetoLover (talk | contribs) (Created page with "local p = {} local slot = require('Module:Inventory slot') local function formatItemName(rawName) if not rawName then return "" end local name = rawName:gsub("^[^:]+:", "") name = name:gsub("_", " ") name = name:gsub("(%a)([%w_']*)", function(first, rest) return first:upper() .. rest:lower() end) return name end function p.render(frame) local args = frame:getParent().args local jsonStr = args[1] or "{}" local data = mw.text...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Documentation for this module may be created at Module:CraftingJSON/doc

local p = {}
local slot = require('Module:Inventory slot')

local function formatItemName(rawName)
    if not rawName then return "" end
    local name = rawName:gsub("^[^:]+:", "")
    name = name:gsub("_", " ")
    name = name:gsub("(%a)([%w_']*)", function(first, rest) 
        return first:upper() .. rest:lower() 
    end)
    return name
end

function p.render(frame)
    local args = frame:getParent().args
    local jsonStr = args[1] or "{}"
    local data = mw.text.jsonDecode(jsonStr)
    
    if not data or not data.pattern then 
        return "Error: Invalid or missing JSON pattern." 
    end

    local container = mw.html.create('div'):addClass('mc-crafting-wrapper')
    local grid = container:tag('div'):addClass('mc-grid')

    for r = 1, 3 do
        local rowStr = data.pattern[r] or "   "
        rowStr = rowStr .. string.rep(" ", 3 - #rowStr)
        
        for c = 1, 3 do
            local char = rowStr:sub(c, c)
            local cell = grid:tag('div'):addClass('mc-cell')
            
            if char ~= " " and data.key and data.key[char] then
                local itemName = formatItemName(data.key[char].item)
                cell:wikitext(slot.slot{itemName})
            end
        end
    end

    container:tag('div'):addClass('mc-arrow'):wikitext('→')
    
    local resultCell = container:tag('div'):addClass('mc-result')
    if data.result and data.result.item then
        local resultName = formatItemName(data.result.item)
        local resultAmount = data.result.count or 1
        
        if resultAmount > 1 then
            resultCell:wikitext(slot.slot{resultName, resultAmount})
        else
            resultCell:wikitext(slot.slot{resultName})
        end
    end

    return tostring(container)
end

return p