Модуль:AlchemyRecipe: различия между версиями

Материал из Space Stories Wiki
Нет описания правки
Метка: ручная отмена
Нет описания правки
Строка 3: Строка 3:
local darkColors = {
local darkColors = {
     border = "#338833",
     border = "#338833",
     bg = "#1a2a1a",
     bg = "#101910",
     border2 = "#cc7744",
     border2 = "#cc7744",
     bg2 = "#2a1a12",
     bg2 = "#1a110a",
     border3 = "#2277cc",
     border3 = "#2277cc",
     bg3 = "#121a26"
     bg3 = "#0d1117"
}
}


local function renderIngredients(ingredients)
local function renderIngredients(ingredients)
     local parts = {}
     local list = mw.html.create("ul"):addClass("alchemy-ingredient-list")
     for _, item in ipairs(ingredients) do
     for _, item in ipairs(ingredients) do
         table.insert(parts, mw.html.create("div"):wikitext(item):allDone())
         list:tag("li"):wikitext(item)
     end
     end
     return table.concat(parts, "\n")
     return tostring(list)
end
 
local function renderEffect(text)
    return mw.html.create("div"):addClass("alchemy-effect"):wikitext(text):allDone()
end
 
local function renderRecipe(text)
    return mw.html.create("div"):addClass("alchemy-recipe-block"):wikitext(text):allDone()
end
end


Строка 30: Строка 22:


     local ingredients = {}
     local ingredients = {}
     for k,v in pairs(args) do
     for k, v in pairs(args) do
         if k:match("^ingredient%d*$") then
         if k:match("^ingredient%d*$") then
             table.insert(ingredients, v)
             table.insert(ingredients, v)
Строка 40: Строка 32:
     local recipe = args.recipe or ""
     local recipe = args.recipe or ""


     local html = mw.html.create("div")
     local card = mw.html.create("div")
         :addClass("alchemy-card")
         :addClass("alchemy-card")
        :css({
            ["border"] = "1px solid " .. darkColors.border,
            ["background-color"] = darkColors.bg,
            ["padding"] = "12px",
            ["margin"] = "8px",
            ["border-radius"] = "10px",
            ["width"] = "280px",
            ["box-shadow"] = "0 0 6px rgba(0,0,0,0.6)",
            ["display"] = "flex",
            ["flex-direction"] = "column",
            ["gap"] = "10px"
        })


     local content = mw.html.create("div")
     card:tag("div")
         :addClass("alchemy-content")
         :addClass("alchemy-result-name")
         :css("display", "flex")
         :css("color", darkColors.border)
         :css("justify-content", "center")
         :css("font-size", "18px")
         :css("align-items", "center")
         :css("font-weight", "bold")
        :wikitext(result)


     -- Левая колонка: ингредиенты вертикально
     card:tag("div")
    local left = mw.html.create("div")
         :addClass("alchemy-ingredients")
         :addClass("alchemy-ingredients")
        :css("display", "flex")
        :css("flex-direction", "column")
        :css("gap", "6px")
        :css("min-width", "150px")
         :wikitext(renderIngredients(ingredients))
         :wikitext(renderIngredients(ingredients))


     -- Центр: слово Смешайте
     if recipe ~= "" then
    local center = mw.html.create("div")
         card:tag("div")
         :addClass("alchemy-mix")
            :addClass("alchemy-recipe")
        :css("margin", "0 20px")
            :css("color", darkColors.border2)
        :css("font-weight", "bold")
            :wikitext("Способ: " .. recipe)
        :css("color", darkColors.border)
     end
        :wikitext("Смешайте")
 
    -- Правая колонка: результат
    local right = mw.html.create("div")
        :addClass("alchemy-result")
        :css("display", "flex")
        :css("flex-direction", "column")
        :css("gap", "10px")
 
     right:node(mw.html.create("div"):addClass("alchemy-result-name"):wikitext(result))


     if effect ~= "" then
     if effect ~= "" then
         right:node(mw.html.create("div"):addClass("alchemy-effect-block"):wikitext(effect))
         card:tag("div")
    end
            :addClass("alchemy-effect")
 
            :css("color", "#ccc")
    if recipe ~= "" then
            :wikitext(effect)
        right:node(mw.html.create("div"):addClass("alchemy-recipe-block"):wikitext(recipe))
     end
     end


    content
     return tostring(card)
        :node(left)
        :node(center)
        :node(right)
 
    html
        :node(content)
 
     return tostring(html)
end
end


return p
return p

Версия от 23:52, 6 июня 2025

Для документации этого модуля может быть создана страница Модуль:AlchemyRecipe/doc

local p = {}

local darkColors = {
    border = "#338833",
    bg = "#101910",
    border2 = "#cc7744",
    bg2 = "#1a110a",
    border3 = "#2277cc",
    bg3 = "#0d1117"
}

local function renderIngredients(ingredients)
    local list = mw.html.create("ul"):addClass("alchemy-ingredient-list")
    for _, item in ipairs(ingredients) do
        list:tag("li"):wikitext(item)
    end
    return tostring(list)
end

function p.main(frame)
    local args = frame:getParent().args

    local ingredients = {}
    for k, v in pairs(args) do
        if k:match("^ingredient%d*$") then
            table.insert(ingredients, v)
        end
    end

    local result = args.result or "?"
    local effect = args.effect or ""
    local recipe = args.recipe or ""

    local card = mw.html.create("div")
        :addClass("alchemy-card")
        :css({
            ["border"] = "1px solid " .. darkColors.border,
            ["background-color"] = darkColors.bg,
            ["padding"] = "12px",
            ["margin"] = "8px",
            ["border-radius"] = "10px",
            ["width"] = "280px",
            ["box-shadow"] = "0 0 6px rgba(0,0,0,0.6)",
            ["display"] = "flex",
            ["flex-direction"] = "column",
            ["gap"] = "10px"
        })

    card:tag("div")
        :addClass("alchemy-result-name")
        :css("color", darkColors.border)
        :css("font-size", "18px")
        :css("font-weight", "bold")
        :wikitext(result)

    card:tag("div")
        :addClass("alchemy-ingredients")
        :wikitext(renderIngredients(ingredients))

    if recipe ~= "" then
        card:tag("div")
            :addClass("alchemy-recipe")
            :css("color", darkColors.border2)
            :wikitext("Способ: " .. recipe)
    end

    if effect ~= "" then
        card:tag("div")
            :addClass("alchemy-effect")
            :css("color", "#ccc")
            :wikitext(effect)
    end

    return tostring(card)
end

return p