Модуль:CategoryMenu: различия между версиями
Материал из Space Station 14 Вики
Pok (обсуждение | вклад) Нет описания правки |
Pok (обсуждение | вклад) Нет описания правки |
||
Строка 3: | Строка 3: | ||
function p.main(frame) | function p.main(frame) | ||
local args = frame:getParent().args | local args = frame:getParent().args | ||
local | local categories = {} | ||
-- Собираем категории | -- Собираем категории | ||
for key, value in pairs(args) do | for key, value in pairs(args) do | ||
local category = key:match("^(category%d+)$") | local category = key:match("^(category%d+)$") | ||
if category | if category then | ||
categories[category] = {name = value, paragraphs = {}} | categories[category] = {name = value, paragraphs = {}} | ||
end | end | ||
Строка 16: | Строка 15: | ||
-- Собираем пункты и контент для каждой категории | -- Собираем пункты и контент для каждой категории | ||
for key, value in pairs(args) do | for key, value in pairs(args) do | ||
local category, paragraph, content = key:match("^(category%d+)-paragraph | local category, paragraph, content = key:match("^(category%d+)-(paragraph%d+)(-content)?$") | ||
if category and categories[category] then | if category and categories[category] then | ||
if content then | if content then | ||
categories[category].paragraphs[paragraph] = categories[category].paragraphs[paragraph] or {} | |||
categories[category].paragraphs[paragraph].content = value | categories[category].paragraphs[paragraph].content = value | ||
else | else | ||
categories[category].paragraphs[paragraph] = categories[category].paragraphs[paragraph] or {} | |||
categories[category].paragraphs[paragraph].title = value | categories[category].paragraphs[paragraph].title = value | ||
end | end | ||
Строка 29: | Строка 27: | ||
end | end | ||
-- Создаем главный контейнер | |||
local root = mw.html.create('div') | |||
-- Генерируем HTML-код для категорий | -- Генерируем HTML-код для категорий | ||
local categoriesDiv = root:tag('div'):addClass('categories') | |||
for category, data in pairs(categories) do | for category, data in pairs(categories) do | ||
categoriesDiv:tag('div'):addClass(category):wikitext(data.name) | |||
end | end | ||
-- Генерируем основной контейнер | -- Генерируем основной контейнер | ||
local mainContainer = root:tag('div'):addClass('main-container') | |||
-- Генерируем меню | -- Генерируем меню | ||
local menuContainer = mainContainer:tag('div'):addClass('menu-container') | |||
for category, data in pairs(categories) do | for category, data in pairs(categories) do | ||
local menu = menuContainer:tag('div'):addClass(category .. '-menu') | |||
for paragraph, paragraphData in pairs(data.paragraphs) do | for paragraph, paragraphData in pairs(data.paragraphs) do | ||
menu:tag('div'):addClass(category .. '-' .. paragraph):wikitext(paragraphData.title or "") | |||
end | end | ||
end | end | ||
-- Генерируем контент | -- Генерируем контент | ||
local contentDiv = mainContainer:tag('div'):addClass('content') | |||
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 | ||
contentDiv:tag('div'):addClass(category .. '-' .. paragraph .. '-content'):wikitext(paragraphData.content or "") | |||
end | end | ||
end | end | ||
return | return tostring(root) | ||
end | end | ||
return p | return p |
Версия от 02:05, 19 сентября 2024
Для документации этого модуля может быть создана страница Модуль:CategoryMenu/doc
local p = {} function p.main(frame) local args = frame:getParent().args local categories = {} -- Собираем категории for key, value in pairs(args) do local category = key:match("^(category%d+)$") if 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 content then categories[category].paragraphs[paragraph] = categories[category].paragraphs[paragraph] or {} categories[category].paragraphs[paragraph].content = value else categories[category].paragraphs[paragraph] = categories[category].paragraphs[paragraph] or {} categories[category].paragraphs[paragraph].title = value end end end -- Создаем главный контейнер local root = mw.html.create('div') -- Генерируем HTML-код для категорий local categoriesDiv = root:tag('div'):addClass('categories') for category, data in pairs(categories) do categoriesDiv:tag('div'):addClass(category):wikitext(data.name) end -- Генерируем основной контейнер local mainContainer = root:tag('div'):addClass('main-container') -- Генерируем меню local menuContainer = mainContainer:tag('div'):addClass('menu-container') for category, data in pairs(categories) do local menu = menuContainer:tag('div'):addClass(category .. '-menu') for paragraph, paragraphData in pairs(data.paragraphs) do menu:tag('div'):addClass(category .. '-' .. paragraph):wikitext(paragraphData.title or "") end end -- Генерируем контент local contentDiv = mainContainer:tag('div'):addClass('content') for category, data in pairs(categories) do for paragraph, paragraphData in pairs(data.paragraphs) do contentDiv:tag('div'):addClass(category .. '-' .. paragraph .. '-content'):wikitext(paragraphData.content or "") end end return tostring(root) end return p