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

Материал из Space Station 14 Вики
Нет описания правки
Нет описания правки
Строка 1: Строка 1:
local p = {}
local p = {}


function p.main(frame)
function p.renderCategory(paragraphs, contents, categoryName, categoryIndex)
     local args = frame:getParent().args
     local html = mw.html.create()
    local categories = {}
   
    -- Генерация названия категории
    html:tag('div')
        :addClass('category' .. categoryIndex)
        :wikitext(categoryName)


     -- Собираем категории
     -- Меню
     for key, value in pairs(args) do
    local menu = html:tag('div'):addClass('menu-container')
         local category = key:match("^(category%d+)$")
   
         if category then
    local categoryMenu = menu:tag('div'):addClass('menu category' .. categoryIndex .. '-menu')
             categories[category] = {name = value, paragraphs = {}}
   
        end
     for i, paragraph in ipairs(paragraphs) do
         categoryMenu:tag('div')
            :addClass('category' .. categoryIndex .. '-paragraph' .. i)
            :wikitext(paragraph)
    end
   
    -- Контент
    local content = html:tag('div'):addClass('content')
   
    for i, contentText in ipairs(contents) do
         content:tag('div')
             :addClass('category' .. categoryIndex .. '-paragraph' .. i .. '-content')
            :wikitext(contentText)
     end
     end
   
    return tostring(html)
end


    -- Собираем пункты и контент для каждой категории
function p.main(frame)
     for key, value in pairs(args) do
     local args = frame:getParent().args
        local category, paragraph, content = key:match("^(category%d+)-(paragraph%d+)(-content)?$")
    local html = mw.html.create()
        if category and categories[category] then
   
            if content then
    -- Генерация списка категорий
                categories[category].paragraphs[paragraph] = categories[category].paragraphs[paragraph] or {}
    local categories = html:tag('div'):addClass('categories')
                categories[category].paragraphs[paragraph].content = value
   
             else
    for i = 1, 2 do
                 categories[category].paragraphs[paragraph] = categories[category].paragraphs[paragraph] or {}
        local categoryName = args['category' .. i]
                 categories[category].paragraphs[paragraph].title = value
        if categoryName then
            end
             categories:tag('div')
                 :addClass('category' .. i)
                 :wikitext(categoryName)
         end
         end
     end
     end


     -- Создаем главный контейнер
     -- Основной контейнер
     local root = mw.html.create('div')
     local mainContainer = html:tag('div'):addClass('main-container')


     -- Генерируем HTML-код для категорий
     -- Генерация контента для каждой категории
     local categoriesDiv = root:tag('div'):addClass('categories')
     for i = 1, 2 do
    for category, data in pairs(categories) do
         local categoryName = args['category' .. i]
         categoriesDiv:tag('div'):addClass(category):text(data.name)
        if categoryName then
    end
            local paragraphs = {}
            local contents = {}


    -- Генерируем основной контейнер
            for j = 1, 3 do
    local mainContainer = root:tag('div'):addClass('main-container')
                table.insert(paragraphs, args['category' .. i .. '-paragraph' .. j])
 
                table.insert(contents, args['category' .. i .. '-paragraph' .. j .. '-content'])
    -- Генерируем меню
            end
    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


    -- Генерируем контент
            mainContainer:wikitext(p.renderCategory(paragraphs, contents, categoryName, i))
    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
     end
     end


     return tostring(root)
     return tostring(html)
end
end


return p
return p

Версия от 19:25, 19 сентября 2024

Для документации этого модуля может быть создана страница Модуль:CategoryMenu/doc

local p = {}

function p.renderCategory(paragraphs, contents, categoryName, categoryIndex)
    local html = mw.html.create()
    
    -- Генерация названия категории
    html:tag('div')
        :addClass('category' .. categoryIndex)
        :wikitext(categoryName)

    -- Меню
    local menu = html:tag('div'):addClass('menu-container')
    
    local categoryMenu = menu:tag('div'):addClass('menu category' .. categoryIndex .. '-menu')
    
    for i, paragraph in ipairs(paragraphs) do
        categoryMenu:tag('div')
            :addClass('category' .. categoryIndex .. '-paragraph' .. i)
            :wikitext(paragraph)
    end
    
    -- Контент
    local content = html:tag('div'):addClass('content')
    
    for i, contentText in ipairs(contents) do
        content:tag('div')
            :addClass('category' .. categoryIndex .. '-paragraph' .. i .. '-content')
            :wikitext(contentText)
    end
    
    return tostring(html)
end

function p.main(frame)
    local args = frame:getParent().args
    local html = mw.html.create()
    
    -- Генерация списка категорий
    local categories = html:tag('div'):addClass('categories')
    
    for i = 1, 2 do
        local categoryName = args['category' .. i]
        if categoryName then
            categories:tag('div')
                :addClass('category' .. i)
                :wikitext(categoryName)
        end
    end

    -- Основной контейнер
    local mainContainer = html:tag('div'):addClass('main-container')

    -- Генерация контента для каждой категории
    for i = 1, 2 do
        local categoryName = args['category' .. i]
        if categoryName then
            local paragraphs = {}
            local contents = {}

            for j = 1, 3 do
                table.insert(paragraphs, args['category' .. i .. '-paragraph' .. j])
                table.insert(contents, args['category' .. i .. '-paragraph' .. j .. '-content'])
            end

            mainContainer:wikitext(p.renderCategory(paragraphs, contents, categoryName, i))
        end
    end

    return tostring(html)
end

return p