Dantes (обсуждение | вклад) Нет описания правки |
Dantes (обсуждение | вклад) Нет описания правки |
||
| Строка 1: | Строка 1: | ||
local p = {} | local p = {} | ||
local | -- Функция для разделения строки по разделителю ';' | ||
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') | local html = mw.html.create('div') | ||
:addClass('alchemy- | :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') | |||
local card = html | :addClass('alchemy-card') | ||
:css('border-color', border_color) | |||
:css('background-color', bg_color) | |||
card:tag(' | -- Название | ||
card:tag('h3') | |||
:wikitext(name) | |||
:done() | |||
local | -- Ингредиенты (вертикально) | ||
local ingr_div = card:tag('div') | |||
:addClass('alchemy-ingredients') | |||
for _, ingr in ipairs(ingredients) do | |||
for _, | ingr_div:tag('div') | ||
:wikitext(ingr) | |||
:done() | |||
end | end | ||
-- Центр — слово "Смешайте" | |||
card:tag('div') | |||
:addClass('alchemy-mix') | |||
:wikitext('Смешайте') | |||
:done() | |||
-- Результат | |||
card:tag('div') | |||
:addClass('alchemy-result') | |||
:wikitext(result) | |||
:done() | |||
-- Эффекты (список) | |||
local eff_div = card:tag('div') | |||
:addClass('alchemy-effects') | |||
for _, eff in ipairs(effects) do | |||
eff_div:tag('div') | |||
:wikitext(eff) | |||
:done() | |||
end | |||
-- Описание эффектов | |||
if effects_desc and effects_desc ~= '' then | |||
eff_div:tag('div') | |||
:addClass('alchemy-effect-desc') | |||
:wikitext(effects_desc) | |||
:done() | |||
end | |||
html:node(card) | |||
end | end | ||
Версия от 18:34, 16 мая 2025
Для документации этого модуля может быть создана страница Модуль: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)
:done()
-- Ингредиенты (вертикально)
local ingr_div = card:tag('div')
:addClass('alchemy-ingredients')
for _, ingr in ipairs(ingredients) do
ingr_div:tag('div')
:wikitext(ingr)
:done()
end
-- Центр — слово "Смешайте"
card:tag('div')
:addClass('alchemy-mix')
:wikitext('Смешайте')
:done()
-- Результат
card:tag('div')
:addClass('alchemy-result')
:wikitext(result)
:done()
-- Эффекты (список)
local eff_div = card:tag('div')
:addClass('alchemy-effects')
for _, eff in ipairs(effects) do
eff_div:tag('div')
:wikitext(eff)
:done()
end
-- Описание эффектов
if effects_desc and effects_desc ~= '' then
eff_div:tag('div')
:addClass('alchemy-effect-desc')
:wikitext(effects_desc)
:done()
end
html:node(card)
end
return tostring(html)
end
return p