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

Материал из Space Station 14 Вики
Нет описания правки
Нет описания правки
(не показаны 3 промежуточные версии этого же участника)
Строка 1: Строка 1:
local p = {}
local p = {}


function p.generate(frame)
function p.main(frame)
     local args = frame:getParent().args
     local args = frame:getParent().args
     local html = mw.html.create()
     local categories = {}


     -- Контейнер для категорий
     -- Собираем категории
     local categoriesDiv = html:tag('div'):addClass('categories')
    for key, value in pairs(args) do
      
        local category = key:match("^(category%d+)$")
     -- Контейнер для меню и контента
        if category then
     local mainContainer = html:tag('div'):addClass('main-container')
            categories[category] = {name = value, paragraphs = {}}
     local menuContainer = mainContainer:tag('div'):addClass('menu-container')
        end
     local contentContainer = mainContainer:tag('div'):addClass('content')
    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


     -- Проходим по всем параметрам и генерируем HTML
     -- Генерируем основной контейнер
     for i = 1, 10 do
     local mainContainer = root:tag('div'):addClass('main-container')
        local category = args['category' .. i]
        if category then
            -- Добавляем категорию в categories
            categoriesDiv:tag('div'):addClass('category' .. i):wikitext(category)


            -- Создаём меню для этой категории
    -- Генерируем меню
            local menu = menuContainer:tag('div'):addClass('menu'):addClass('category' .. i .. '-menu')
    local menuContainer = mainContainer:tag('div'):addClass('menu-container')
            for j = 1, 10 do
    for category, data in pairs(categories) do
                local paragraph = args['category' .. i .. '-paragraph' .. j]
        local menu = menuContainer:tag('div'):addClass('menu ' .. category .. '-menu')
                local paragraphContent = args['category' .. i .. '-paragraph' .. j .. '-content']
        for paragraph, paragraphData in pairs(data.paragraphs) do
                if paragraph and paragraphContent then
            menu:tag('div'):addClass(category .. '-' .. paragraph):text(paragraphData.title or "")
                    -- Добавляем пункт в меню
        end
                    menu:tag('div'):addClass('category' .. i .. '-paragraph' .. j):wikitext(paragraph)
    end


                    -- Добавляем контент для пункта
    -- Генерируем контент
                    contentContainer:tag('div'):addClass('category' .. i .. '-paragraph' .. j .. '-content'):wikitext(paragraphContent)
    local contentDiv = mainContainer:tag('div'):addClass('content')
                end
    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
         end
     end
     end


    -- Возвращаем сгенерированный HTML-код
     return tostring(root)
     return tostring(html)
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