Module:RecipeLoader: Difference between revisions

From Evospace
Jump to navigation Jump to search
No edit summary
No edit summary
Line 2: Line 2:


local function renderRecipe(recipe)
local function renderRecipe(recipe)
    local inputs = recipe.input or {}
    local outputs = recipe.output or {}
    local ticks = recipe.ticks or recipe.time or ""
     local tableNode = mw.html.create("table")
     local tableNode = mw.html.create("table")
         :addClass("wikitable recipe-table")
         :addClass("wikitable recipe-table")
Line 8: Line 12:
         :css("min-width", "300px")
         :css("min-width", "300px")


     -- ===== Input =====
     -- Input
     tableNode:tag("tr")
     tableNode:tag("tr"):tag("th"):attr("colspan", 3):wikitext("Input")
        :tag("th"):attr("colspan", 3):wikitext("Input"):done()
     if next(inputs) then
        :done()
         for _, ing in pairs(inputs) do
 
    local inputs = recipe.input or {}
     if #inputs > 0 then
         for _, ing in ipairs(inputs) do
             tableNode:tag("tr")
             tableNode:tag("tr")
                 :tag("td"):wikitext(string.format("[[File:T_%s.png|32px]]", ing[1])):done()
                 :tag("td"):wikitext(string.format("[[File:T_%s.png|32px]]", ing[1])):done()
Line 22: Line 22:
         end
         end
     else
     else
         tableNode:tag("tr")
         tableNode:tag("tr"):tag("td"):attr("colspan", 3):wikitext("—")
            :tag("td"):attr("colspan", 3):wikitext("—"):done()
     end
     end


     -- ===== Output =====
     -- Output
     tableNode:tag("tr")
     tableNode:tag("tr"):tag("th"):attr("colspan", 3):wikitext("Output")
        :tag("th"):attr("colspan", 3):wikitext("Output"):done()
     if next(outputs) then
        :done()
         for _, res in pairs(outputs) do
 
    local outputs = recipe.output or {}
     if #outputs > 0 then
         for _, res in ipairs(outputs) do
             tableNode:tag("tr")
             tableNode:tag("tr")
                 :tag("td"):wikitext(string.format("[[File:T_%s.png|32px]]", res[1])):done()
                 :tag("td"):wikitext(string.format("[[File:T_%s.png|32px]]", res[1])):done()
Line 40: Line 35:
         end
         end
     else
     else
         tableNode:tag("tr")
         tableNode:tag("tr"):tag("td"):attr("colspan", 3):wikitext("—")
            :tag("td"):attr("colspan", 3):wikitext("—"):done()
     end
     end


     -- ===== Time =====
     -- Time
     tableNode:tag("tr")
     tableNode:tag("tr"):tag("th"):attr("colspan", 3):wikitext("Time")
        :tag("th"):attr("colspan", 3):wikitext("Time"):done()
     tableNode:tag("tr"):tag("td"):attr("colspan", 3):wikitext(tostring(ticks) .. " ticks")
        :done()
     tableNode:tag("tr")
        :tag("td"):attr("colspan", 3):wikitext(tostring(recipe.ticks or recipe.time or "") .. " ticks"):done()


     return tableNode
     return tableNode

Revision as of 12:46, 31 July 2025

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

local p = {}

local function renderRecipe(recipe)
    local inputs = recipe.input or {}
    local outputs = recipe.output or {}
    local ticks = recipe.ticks or recipe.time or ""

    local tableNode = mw.html.create("table")
        :addClass("wikitable recipe-table")
        :css("text-align", "left")
        :css("margin-bottom", "15px")
        :css("min-width", "300px")

    -- Input
    tableNode:tag("tr"):tag("th"):attr("colspan", 3):wikitext("Input")
    if next(inputs) then
        for _, ing in pairs(inputs) do
            tableNode:tag("tr")
                :tag("td"):wikitext(string.format("[[File:T_%s.png|32px]]", ing[1])):done()
                :tag("td"):wikitext(string.format("[[%s]]", ing[1])):done()
                :tag("td"):wikitext("× " .. tostring(ing[2])):done()
        end
    else
        tableNode:tag("tr"):tag("td"):attr("colspan", 3):wikitext("—")
    end

    -- Output
    tableNode:tag("tr"):tag("th"):attr("colspan", 3):wikitext("Output")
    if next(outputs) then
        for _, res in pairs(outputs) do
            tableNode:tag("tr")
                :tag("td"):wikitext(string.format("[[File:T_%s.png|32px]]", res[1])):done()
                :tag("td"):wikitext(string.format("[[%s]]", res[1])):done()
                :tag("td"):wikitext("× " .. tostring(res[2])):done()
        end
    else
        tableNode:tag("tr"):tag("td"):attr("colspan", 3):wikitext("—")
    end

    -- Time
    tableNode:tag("tr"):tag("th"):attr("colspan", 3):wikitext("Time")
    tableNode:tag("tr"):tag("td"):attr("colspan", 3):wikitext(tostring(ticks) .. " ticks")

    return tableNode
end

-- Вывод одного конкретного рецепта
function p.get(frame)
    local dictName = frame.args[1]
    local recipeName = frame.args[2]

    if not dictName or not recipeName then
        return "❌ Missing parameters: {{Recipe|DictionaryName|RecipeName}}"
    end

    local success, recipes = pcall(mw.loadData, "Module:" .. dictName)
    if not success or type(recipes) ~= "table" then
        return "❌ Recipe dictionary not found: " .. tostring(dictName)
    end

    local html = mw.html.create()
    for _, recipe in ipairs(recipes) do
        if recipe.name == recipeName then
            html:node(renderRecipe(recipe))
        end
    end

    if tostring(html) == "" then
        return "⚠️ Recipe not found: " .. tostring(recipeName)
    end

    return tostring(html)
end

-- Вывод всех рецептов из словаря
function p.getAll(frame)
    local dictName = frame.args[1]

    if not dictName then
        return "❌ Missing parameter: {{AllRecipes|DictionaryName}}"
    end

    local success, recipes = pcall(mw.loadData, "Module:" .. dictName)
    if not success or type(recipes) ~= "table" then
        return "❌ Recipe dictionary not found: " .. tostring(dictName)
    end

    local html = mw.html.create()

    for _, recipe in ipairs(recipes) do
        html:tag("h4"):wikitext(recipe.name or "(no name)"):done()
        html:node(renderRecipe(recipe))
    end

    return tostring(html)
end

return p