Модуль:CategoryMenu: различия между версиями
Материал из Space Station 14 Вики
Pok (обсуждение | вклад) Нет описания правки |
Pok (обсуждение | вклад) Нет описания правки |
||
| Строка 16: | Строка 16: | ||
-- Собираем пункты и контент для каждой категории | -- Собираем пункты и контент для каждой категории | ||
for key, value in pairs(args) do | for key, value in pairs(args) do | ||
local category, paragraph, content = key:match("^(category%d+)-( | local category, paragraph, content = key:match("^(category%d+)-paragraph(%d+)(-content)?$") | ||
if category and categories[category] then | if category and categories[category] then | ||
if not categories[category].paragraphs[paragraph] then | |||
categories[category].paragraphs[paragraph] = {} | |||
end | |||
if content then | if content then | ||
categories[category].paragraphs[paragraph].content = value | categories[category].paragraphs[paragraph].content = value | ||
else | else | ||
categories[category].paragraphs[paragraph].title = value | categories[category].paragraphs[paragraph].title = value | ||
end | end | ||
| Строка 43: | Строка 44: | ||
output = output .. string.format('<div class="menu %s-menu">\n', category) | output = output .. string.format('<div class="menu %s-menu">\n', category) | ||
for paragraph, paragraphData in pairs(data.paragraphs) do | for paragraph, paragraphData in pairs(data.paragraphs) do | ||
output = output .. string.format('<div class="%s-%s">%s</div>\n', category, paragraph, paragraphData.title | output = output .. string.format('<div class="%s-paragraph%s">%s</div>\n', category, paragraph, paragraphData.title) | ||
end | end | ||
output = output .. '</div>\n' | output = output .. '</div>\n' | ||
| Строка 53: | Строка 54: | ||
for category, data in pairs(categories) do | for category, data in pairs(categories) do | ||
for paragraph, paragraphData in pairs(data.paragraphs) do | for paragraph, paragraphData in pairs(data.paragraphs) do | ||
output = output .. string.format('<div class="%s-%s-content">%s</div>\n', category, paragraph, paragraphData.content or "") | output = output .. string.format('<div class="%s-paragraph%s-content">%s</div>\n', category, paragraph, paragraphData.content or "") | ||
end | end | ||
end | end | ||
Версия от 02:02, 19 сентября 2024
Для документации этого модуля может быть создана страница Модуль:CategoryMenu/doc
local p = {}
function p.main(frame)
local args = frame:getParent().args
local output = ""
-- Собираем категории
local categories = {}
for key, value in pairs(args) do
local category = key:match("^(category%d+)$")
if category and not categories[category] then
categories[category] = {name = value, paragraphs = {}}
end
end
-- Собираем пункты и контент для каждой категории
for key, value in pairs(args) do
local category, paragraph, content = key:match("^(category%d+)-paragraph(%d+)(-content)?$")
if category and categories[category] then
if not categories[category].paragraphs[paragraph] then
categories[category].paragraphs[paragraph] = {}
end
if content then
categories[category].paragraphs[paragraph].content = value
else
categories[category].paragraphs[paragraph].title = value
end
end
end
-- Генерируем HTML-код для категорий
output = output .. '<div class="categories">\n'
for category, data in pairs(categories) do
output = output .. string.format('<div class="%s">%s</div>\n', category, data.name)
end
output = output .. '</div>\n\n'
-- Генерируем основной контейнер
output = output .. '<div class="main-container">\n'
-- Генерируем меню
output = output .. '<div class="menu-container">\n'
for category, data in pairs(categories) do
output = output .. string.format('<div class="menu %s-menu">\n', category)
for paragraph, paragraphData in pairs(data.paragraphs) do
output = output .. string.format('<div class="%s-paragraph%s">%s</div>\n', category, paragraph, paragraphData.title)
end
output = output .. '</div>\n'
end
output = output .. '</div>\n\n'
-- Генерируем контент
output = output .. '<div class="content">\n'
for category, data in pairs(categories) do
for paragraph, paragraphData in pairs(data.paragraphs) do
output = output .. string.format('<div class="%s-paragraph%s-content">%s</div>\n', category, paragraph, paragraphData.content or "")
end
end
output = output .. '</div>\n</div>\n'
return output
end
return p