Модуль:CategoryMenu: различия между версиями

Материал из Space Station 14 Вики
(Новая страница: «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 -- Собираем пункты и контент дл...»)
 
Нет описания правки
(не показано 8 промежуточных версий этого же участника)
Строка 3: Строка 3:
function p.main(frame)
function p.main(frame)
     local args = frame:getParent().args
     local args = frame:getParent().args
     local output = ""
     local categories = {}


     -- Собираем категории
     -- Собираем категории
    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 and not categories[category] then
         if category then
             categories[category] = {name = value, paragraphs = {}}
             categories[category] = {name = value, paragraphs = {}}
         end
         end
Строка 27: Строка 26:
         end
         end
     end
     end
    -- Создаем главный контейнер
    local root = mw.html.create('div')


     -- Генерируем HTML-код для категорий
     -- Генерируем HTML-код для категорий
     output = output .. '<div class="categories">\n'
     local categoriesDiv = root:tag('div'):addClass('categories')
     for category, data in pairs(categories) do
     for category, data in pairs(categories) do
         output = output .. string.format('<div class="%s">%s</div>\n', category, data.name)
         categoriesDiv:tag('div'):addClass(category):text(data.name)
     end
     end
    output = output .. '</div>\n\n'


     -- Генерируем основной контейнер
     -- Генерируем основной контейнер
     output = output .. '<div class="main-container">\n'
     local mainContainer = root:tag('div'):addClass('main-container')
   
 
     -- Генерируем меню
     -- Генерируем меню
     output = output .. '<div class="menu-container">\n'
     local menuContainer = mainContainer:tag('div'):addClass('menu-container')
     for category, data in pairs(categories) do
     for category, data in pairs(categories) do
         output = output .. string.format('<div class="menu %s-menu">\n', category)
         local menu = menuContainer:tag('div'):addClass('menu ' .. category .. '-menu')
         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)
             menu:tag('div'):addClass(category .. '-' .. paragraph):text(paragraphData.title or "")
         end
         end
        output = output .. '</div>\n'
     end
     end
    output = output .. '</div>\n\n'
 
   
     -- Генерируем контент
     -- Генерируем контент
     output = output .. '<div class="content">\n'
     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
             output = output .. string.format('<div class="%s-%s-content">%s</div>\n', category, paragraph, paragraphData.content or "")
             if paragraphData.content then
                contentDiv:tag('div'):addClass(category .. '-' .. paragraph .. '-content'):text(paragraphData.content)
            end
         end
         end
     end
     end
    output = output .. '</div>\n</div>\n'


     return output
     return tostring(root)
end
end


return p
return p

Версия от 02:22, 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):text(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('menu ' .. category .. '-menu')
        for paragraph, paragraphData in pairs(data.paragraphs) do
            menu:tag('div'):addClass(category .. '-' .. paragraph):text(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
            if paragraphData.content then
                contentDiv:tag('div'):addClass(category .. '-' .. paragraph .. '-content'):text(paragraphData.content)
            end
        end
    end

    return tostring(root)
end

return p