Dantes (обсуждение | вклад) Нет описания правки |
Dantes (обсуждение | вклад) Нет описания правки |
||
| Строка 3: | Строка 3: | ||
function p.main(frame) | function p.main(frame) | ||
local args = frame:getParent().args | local args = frame:getParent().args | ||
local name = args.name or "Без названия" | local name = args.name or "Без названия" | ||
local recipe = args.recipe or "" | local recipe = args.recipe or "" | ||
local effects = args.effects or "Нет описания." | local effects = args.effects or "Нет описания." | ||
local method = recipe ~= "" and "Смешайте" or "Неизвестно" | local method = (recipe ~= "" and "Смешайте") or "Неизвестно" | ||
local function formatReagents( | local function formatReagents(input) | ||
local | local result = {} | ||
for | for item in mw.text.gsplit(input, ",") do | ||
local trimmed = mw.text.trim( | local trimmed = mw.text.trim(item) | ||
local | local rname, qty = trimmed:match("^(.-)%s*%[(%d+)%]$") | ||
if | if rname and qty then | ||
table.insert( | table.insert(result, string.format( | ||
'<div class="reagent-item">🧪 <span class="reagent">%s</span> <span class="qty">[%s]</span></div>', | '<div class="reagent-item">🧪 <span class="reagent">%s</span> <span class="qty">[%s]</span></div>', | ||
mw.text.nowiki( | mw.text.nowiki(rname), mw.text.nowiki(qty) | ||
)) | )) | ||
else | else | ||
table.insert( | table.insert(result, '<div class="reagent-item">' .. mw.text.nowiki(trimmed) .. '</div>') | ||
end | end | ||
end | end | ||
return table.concat( | return table.concat(result) | ||
end | end | ||
local function | local function makeCollapsible(title, body) | ||
return string.format([[ | return string.format([[ | ||
<div class="collapsible-container"> | <div class="collapsible-container"> | ||
<div class="collapsible-header" onclick="this.nextElementSibling.classList.toggle('collapsed')">%s</div> | <div class="collapsible-header" onclick="this.nextElementSibling.classList.toggle('collapsed')">%s</div> | ||
<div class="collapsible-body collapsed">%s</div> | <div class="collapsible-body collapsed">%s</div> | ||
</div>]], title, | </div>]], title, body) | ||
end | end | ||
local html = | -- Главный HTML блок | ||
html | local html = {} | ||
table.insert(html, '<div class="alchemy-card">') | |||
table.insert(html, '<div class="alchemy-title">' .. name .. '</div>') | |||
html | table.insert(html, '<div class="alchemy-section">') | ||
table.insert(html, makeCollapsible("Рецепт", formatReagents(recipe) .. '<div class="method">🔄 ' .. method .. '</div>')) | |||
table.insert(html, '</div>') | |||
html | table.insert(html, '<div class="alchemy-section">') | ||
table.insert(html, makeCollapsible("Эффекты", effects)) | |||
table.insert(html, '</div>') | |||
html | table.insert(html, '</div>') -- end alchemy-card | ||
return | return table.concat(html, "\n") | ||
end | end | ||
return p | return p | ||
Версия от 10:42, 22 июня 2025
Для документации этого модуля может быть создана страница Модуль:AlchemyRecipe/doc
local p = {}
function p.main(frame)
local args = frame:getParent().args
local name = args.name or "Без названия"
local recipe = args.recipe or ""
local effects = args.effects or "Нет описания."
local method = (recipe ~= "" and "Смешайте") or "Неизвестно"
local function formatReagents(input)
local result = {}
for item in mw.text.gsplit(input, ",") do
local trimmed = mw.text.trim(item)
local rname, qty = trimmed:match("^(.-)%s*%[(%d+)%]$")
if rname and qty then
table.insert(result, string.format(
'<div class="reagent-item">🧪 <span class="reagent">%s</span> <span class="qty">[%s]</span></div>',
mw.text.nowiki(rname), mw.text.nowiki(qty)
))
else
table.insert(result, '<div class="reagent-item">' .. mw.text.nowiki(trimmed) .. '</div>')
end
end
return table.concat(result)
end
local function makeCollapsible(title, body)
return string.format([[
<div class="collapsible-container">
<div class="collapsible-header" onclick="this.nextElementSibling.classList.toggle('collapsed')">%s</div>
<div class="collapsible-body collapsed">%s</div>
</div>]], title, body)
end
-- Главный HTML блок
local html = {}
table.insert(html, '<div class="alchemy-card">')
table.insert(html, '<div class="alchemy-title">' .. name .. '</div>')
table.insert(html, '<div class="alchemy-section">')
table.insert(html, makeCollapsible("Рецепт", formatReagents(recipe) .. '<div class="method">🔄 ' .. method .. '</div>'))
table.insert(html, '</div>')
table.insert(html, '<div class="alchemy-section">')
table.insert(html, makeCollapsible("Эффекты", effects))
table.insert(html, '</div>')
table.insert(html, '</div>') -- end alchemy-card
return table.concat(html, "\n")
end
return p