Модуль:CategoryMenu: различия между версиями
Pok (обсуждение | вклад) Нет описания правки |
Pok (обсуждение | вклад) Нет описания правки |
||
| Строка 1: | Строка 1: | ||
local p = {} | local p = {} | ||
function p. | function p.main(frame) | ||
local args = frame:getParent().args | local args = frame:getParent().args | ||
local | local categories = {} | ||
-- | -- Собираем категории | ||
local | 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 mainContainer = | 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):text(data.name) | |||
end | |||
-- Генерируем основной контейнер | |||
local mainContainer = root:tag('div'):addClass('main-container') | |||
-- Генерируем меню | |||
local menuContainer = mainContainer:tag('div'):addClass('menu-container') | local menuContainer = mainContainer:tag('div'):addClass('menu-container') | ||
local | for category, data in pairs(categories) do | ||
local menu = menuContainer:tag('div'):addClass('menu ' .. category .. '-menu') | |||
for paragraph, paragraphData in pairs(data.paragraphs) do | |||
menu:tag('div'):addClass(category .. '-' .. paragraph):text(paragraphData.title or "") | |||
end | |||
end | |||
-- | -- Генерируем контент | ||
local | 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'):text(paragraphData.content or "") | |||
end | end | ||
end | end | ||
return tostring(root) | |||
return tostring( | |||
end | end | ||
return p | return p | ||