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

Материал из Space Stories Wiki
м (Dantes переименовал страницу Модуль:AlchemyRecipeAligned в Модуль:AlchemyRecipe без оставления перенаправления)
Нет описания правки
Строка 1: Строка 1:
local p = {}
local p = {}


local darkColors = {
local function split(str, sep)
    border = "#338833",
     local result = {}
    bg = "#1a2a1a",
     for part in mw.text.gsplit(str, sep) do
    border2 = "#cc7744",
         table.insert(result, mw.text.trim(part))
    bg2 = "#2a1a12",
    border3 = "#2277cc",
    bg3 = "#121a26"
}
 
local function renderIngredients(ingredients)
     local parts = {}
     for _, item in ipairs(ingredients) do
         table.insert(parts, mw.html.create("div"):wikitext(item):allDone())
     end
     end
     return table.concat(parts, "\n")
     return result
end
end


local function renderEffect(text)
function p.card(frame)
     return mw.html.create("div"):addClass("alchemy-effect"):wikitext(text):allDone()
     local args = frame:getParent().args or {}
end


local function renderRecipe(text)
    local name = args['Название'] or ''
     return mw.html.create("div"):addClass("alchemy-recipe-block"):wikitext(text):allDone()
    local ingredients_raw = args['Ингредиенты'] or ''
end
    local result = args['Результат'] or ''
    local effects_raw = args['Эффекты'] or ''
    local effects_desc = args['ОписаниеЭффектов'] or ''
     local border_color = args['ЦветРамки'] or '#338833'
    local bg_color = args['ЦветФона'] or '#1a2a1a'


function p.main(frame)
    local ingredients = split(ingredients_raw, ';')
     local args = frame:getParent().args
     local effects = split(effects_raw, ';')


     local ingredients = {}
     local card = mw.html.create('div')
    for k,v in pairs(args) do
         :addClass('alchemy-card')
         if k:match("^ingredient%d*$") then
        :css('border-color', border_color)
            table.insert(ingredients, v)
         :css('background-color', bg_color)
         end
    end


     local result = args.result or "?"
     card:tag('h3'):wikitext(name)
    local effect = args.effect or ""
    local recipe = args.recipe or ""


     local html = mw.html.create("div")
     local ingr_div = card:tag('div'):addClass('alchemy-ingredients')
        :addClass("alchemy-card")
     for _, ingr in ipairs(ingredients) do
 
         ingr_div:tag('div'):wikitext(ingr)
     local content = mw.html.create("div")
    end
         :addClass("alchemy-content")
        :css("display", "flex")
        :css("justify-content", "center")
        :css("align-items", "center")


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


     -- Центр: слово Смешайте
     card:tag('div'):addClass('alchemy-result'):wikitext(result)
    local center = mw.html.create("div")
        :addClass("alchemy-mix")
        :css("margin", "0 20px")
        :css("font-weight", "bold")
        :css("color", darkColors.border)
        :wikitext("Смешайте")


    -- Правая колонка: результат
     local eff_div = card:tag('div'):addClass('alchemy-effects')
     local right = mw.html.create("div")
    for _, eff in ipairs(effects) do
        :addClass("alchemy-result")
         eff_div:tag('div'):addClass('alchemy-effect-line'):wikitext(eff)
        :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
         right:node(mw.html.create("div"):addClass("alchemy-effect-block"):wikitext(effect))
     end
     end


     if recipe ~= "" then
     if effects_desc and effects_desc ~= '' then
         right:node(mw.html.create("div"):addClass("alchemy-recipe-block"):wikitext(recipe))
         eff_div:tag('div'):addClass('alchemy-effect-desc'):wikitext(effects_desc)
     end
     end


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


return p
return p

Версия от 18:39, 16 мая 2025

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

local p = {}

local function split(str, sep)
    local result = {}
    for part in mw.text.gsplit(str, sep) do
        table.insert(result, mw.text.trim(part))
    end
    return result
end

function p.card(frame)
    local args = frame:getParent().args or {}

    local name = args['Название'] or ''
    local ingredients_raw = args['Ингредиенты'] or ''
    local result = args['Результат'] or ''
    local effects_raw = args['Эффекты'] or ''
    local effects_desc = args['ОписаниеЭффектов'] or ''
    local border_color = args['ЦветРамки'] or '#338833'
    local bg_color = args['ЦветФона'] or '#1a2a1a'

    local ingredients = split(ingredients_raw, ';')
    local effects = split(effects_raw, ';')

    local card = mw.html.create('div')
        :addClass('alchemy-card')
        :css('border-color', border_color)
        :css('background-color', bg_color)

    card:tag('h3'):wikitext(name)

    local ingr_div = card:tag('div'):addClass('alchemy-ingredients')
    for _, ingr in ipairs(ingredients) do
        ingr_div:tag('div'):wikitext(ingr)
    end

    card:tag('div'):addClass('alchemy-mix'):wikitext('Смешайте')

    card:tag('div'):addClass('alchemy-result'):wikitext(result)

    local eff_div = card:tag('div'):addClass('alchemy-effects')
    for _, eff in ipairs(effects) do
        eff_div:tag('div'):addClass('alchemy-effect-line'):wikitext(eff)
    end

    if effects_desc and effects_desc ~= '' then
        eff_div:tag('div'):addClass('alchemy-effect-desc'):wikitext(effects_desc)
    end

    return tostring(card)
end

return p