Для документации этого модуля может быть создана страница Модуль:AlchemyRecipesGrid/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.grid(frame)
local args = frame:getParent().args or {}
local count = tonumber(args.count) or 0
local html = mw.html.create('div')
:addClass('alchemy-grid-container')
for i = 1, count do
local name = args['Название' .. i] or ''
local ingredients_raw = args['Ингредиенты' .. i] or ''
local result = args['Результат' .. i] or ''
local effects_raw = args['Эффекты' .. i] or ''
local effects_desc = args['ОписаниеЭффектов' .. i] or ''
local border_color = args['ЦветРамки' .. i] or '#338833'
local bg_color = args['ЦветФона' .. i] 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)
-- Эффекты — теперь просто блоки div, без списков
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
html:node(card)
end
return tostring(html)
end
return p