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

Материал из Space Station 14 Вики
мНет описания правки
Метка: ручная отмена
Нет описания правки
Строка 2: Строка 2:


function p.main(frame)
function p.main(frame)
-- Подключение CSS файла
    -- Подключение CSS файла
local cssLink = frame:extensionTag('templatestyles', '', { src = 'Шаблон:CategoryMenu/styles.css' })
    local cssLink = frame:extensionTag('templatestyles', '', { src = 'Шаблон:CategoryMenu/styles.css' })


-- Функция для получения аргумента или значения по умолчанию
    -- Функция для получения аргумента или значения по умолчанию
local function getArg(name)
    local function getArg(name)
return frame.args[name] or nil
        return frame.args[name] or nil
end
    end


-- Обработка неограниченного количества категорий
    -- Обработка неограниченного количества категорий
local categories = {}
    local categories = {}
local i = 1
    local i = 1


while true do
    while true do
local categoryName = getArg("category" .. i)
        local categoryName = getArg("category" .. i)


-- Если категория не задана, выходим из цикла
        -- Если категория не задана, выходим из цикла
if not categoryName then
        if not categoryName then
break
            break
end
        end


local category = {
        local category = {
name = categoryName,
            name = categoryName,
paragraphs = {},
            paragraphs = {},
contents = {}
            contents = {}
}
        }


-- Обработка неограниченного количества пунктов для каждой категории
        -- Обработка неограниченного количества пунктов для каждой категории
local j = 1
        local j = 1
while true do
        while true do
local paragraph = getArg("category" .. i .. "-paragraph" .. j)
            local paragraph = getArg("category" .. i .. "-paragraph" .. j)
local content = getArg("category" .. i .. "-paragraph" .. j .. "-content")
            local content = getArg("category" .. i .. "-paragraph" .. j .. "-content")


-- Если пункт или контент не заданы, выходим из цикла
            -- Если пункт или контент не заданы, выходим из цикла
if not paragraph or not content then
            if not paragraph or not content then
break
                break
end
            end


table.insert(category.paragraphs, paragraph)
            table.insert(category.paragraphs, paragraph)
table.insert(category.contents, content)
            table.insert(category.contents, content)


j = j + 1
            j = j + 1
end
        end


table.insert(categories, category)
        table.insert(categories, category)
i = i + 1
        i = i + 1
end
    end


-- Формирование HTML
    -- Формирование HTML
local result = cssLink -- Подключение CSS в результат
    local result = cssLink -- Подключение CSS в результат
   
-- Внешний контейнер   
    -- Внешний контейнер   
result = result .. '<div class="category-menu">\n'
    result = result .. '<div class="category-menu">\n'
   
-- Кнопка для открытия/закрытия меню
    -- Кнопка для открытия/закрытия меню
     result = result .. '<div class="menu-toggle">☰</div>\n'
     result = result .. '<div class="menu-toggle">☰</div>\n'


-- Внутренний контейнер
    -- Внутренний контейнер
result = result .. '<div class="main-container">\n'
    result = result .. '<div class="main-container">\n'


-- Меню
    -- Контейнер для категорий
if #categories > 0 then
    result = result .. '<div class="categories-container">\n'
result = result .. '<div class="menu-container">\n'
    -- Стрелки для переключения категорий
-- Стрелки для переключения категорий
    result = result .. '<div class="category-switcher">\n'
result = result .. '<div class="category-switcher">\n'
    result = result .. '<div id="prev-category" class="arrow">❮</div>\n'
result = result .. '<div id="prev-category" class="arrow">❮</div>\n'
    result = result .. '<div class="categories">\n'
result = result .. '<div class="categories">\n'


-- Категории
    -- Категории
if #categories > 0 then
    if #categories > 0 then
for i, category in ipairs(categories) do
        for i, category in ipairs(categories) do
result = result .. '<div class="category' .. i .. '">' .. category.name .. '</div>\n'
            result = result .. '<div class="category' .. i .. '">' .. category.name .. '</div>\n'
end
        end
end
    end
result = result .. '</div>\n'
    result = result .. '</div>\n'
result = result .. '<div id="next-category" class="arrow">❯</div>\n'
    result = result .. '<div id="next-category" class="arrow">❯</div>\n'
result = result .. '</div>\n' -- Закрытие category-switcher
    result = result .. '</div>\n' -- Закрытие category-switcher
for i, category in ipairs(categories) do
    result = result .. '</div>\n' -- Закрытие categories-container
if #category.paragraphs > 0 then
result = result .. '<div class="menu category' .. i .. '-menu">\n'
for j, paragraph in ipairs(category.paragraphs) do
result = result .. '<div class="category' .. i .. '-paragraph' .. j .. '">' .. paragraph .. '</div>\n'
end
result = result .. '</div>\n'
end
end
result = result .. '</div>\n'
end


-- Контент
    -- Контейнер для меню и контента
if #categories > 0 then
    result = result .. '<div class="menu-and-content">\n'
result = result .. '<div class="content">\n'
   
for i, category in ipairs(categories) do
    -- Меню
if #category.contents > 0 then
    if #categories > 0 then
for j, content in ipairs(category.contents) do
        result = result .. '<div class="menu-container">\n'
result = result .. '<div class="category' .. i .. '-paragraph' .. j .. '-content">\n' .. content .. '</div>\n'
        for i, category in ipairs(categories) do
end
            if #category.paragraphs > 0 then
end
                result = result .. '<div class="menu category' .. i .. '-menu">\n'
end
                for j, paragraph in ipairs(category.paragraphs) do
result = result .. '</div>\n'
                    result = result .. '<div class="category' .. i .. '-paragraph' .. j .. '">' .. paragraph .. '</div>\n'
end
                end
                result = result .. '</div>\n'
            end
        end
        result = result .. '</div>\n' -- Закрытие menu-container
    end


result = result .. '</div>\n' -- Закрытие main-container
    -- Контент
    if #categories > 0 then
        result = result .. '<div class="content">\n'
        for i, category in ipairs(categories) do
            if #category.contents > 0 then
                for j, content in ipairs(category.contents) do
                    result = result .. '<div class="category' .. i .. '-paragraph' .. j .. '-content">\n' .. content .. '</div>\n'
                end
            end
        end
        result = result .. '</div>\n'
    end


result = result .. '</div>\n' -- Закрытие category-menu
    result = result .. '</div>\n' -- Закрытие menu-and-content
-- Дополнительный CSS для scrollbar
result = result .. '<div class="customCSS" style="display:none">.content::-webkit-scrollbar, .menu-container::-webkit-scrollbar { width: 10px; } .content::-webkit-scrollbar-track, .menu-container::-webkit-scrollbar-track { background: #2c2c33; } .content::-webkit-scrollbar-thumb, .menu-container::-webkit-scrollbar-thumb { background: #5b5b67; border: 2px solid #2c2c33; }</div>'


return result
    result = result .. '</div>\n' -- Закрытие category-menu
   
    -- Дополнительный CSS для scrollbar
    result = result .. '<div class="customCSS" style="display:none">.content::-webkit-scrollbar, .menu-container::-webkit-scrollbar { width: 10px; } .content::-webkit-scrollbar-track, .menu-container::-webkit-scrollbar-track { background: #2c2c33; } .content::-webkit-scrollbar-thumb, .menu-container::-webkit-scrollbar-thumb { background: #5b5b67; border: 2px solid #2c2c33; }</div>'
 
    return result
end
end


return p
return p

Версия от 23:37, 29 сентября 2024

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

local p = {}

function p.main(frame)
    -- Подключение CSS файла
    local cssLink = frame:extensionTag('templatestyles', '', { src = 'Шаблон:CategoryMenu/styles.css' })

    -- Функция для получения аргумента или значения по умолчанию
    local function getArg(name)
        return frame.args[name] or nil
    end

    -- Обработка неограниченного количества категорий
    local categories = {}
    local i = 1

    while true do
        local categoryName = getArg("category" .. i)

        -- Если категория не задана, выходим из цикла
        if not categoryName then
            break
        end

        local category = {
            name = categoryName,
            paragraphs = {},
            contents = {}
        }

        -- Обработка неограниченного количества пунктов для каждой категории
        local j = 1
        while true do
            local paragraph = getArg("category" .. i .. "-paragraph" .. j)
            local content = getArg("category" .. i .. "-paragraph" .. j .. "-content")

            -- Если пункт или контент не заданы, выходим из цикла
            if not paragraph or not content then
                break
            end

            table.insert(category.paragraphs, paragraph)
            table.insert(category.contents, content)

            j = j + 1
        end

        table.insert(categories, category)
        i = i + 1
    end

    -- Формирование HTML
    local result = cssLink -- Подключение CSS в результат
    
    -- Внешний контейнер  
    result = result .. '<div class="category-menu">\n'
    
    -- Кнопка для открытия/закрытия меню
    result = result .. '<div class="menu-toggle">☰</div>\n'

    -- Внутренний контейнер
    result = result .. '<div class="main-container">\n'

    -- Контейнер для категорий
    result = result .. '<div class="categories-container">\n'
    -- Стрелки для переключения категорий
    result = result .. '<div class="category-switcher">\n'
    result = result .. '<div id="prev-category" class="arrow">❮</div>\n'
    result = result .. '<div class="categories">\n'

    -- Категории
    if #categories > 0 then
        for i, category in ipairs(categories) do
            result = result .. '<div class="category' .. i .. '">' .. category.name .. '</div>\n'
        end
    end
    result = result .. '</div>\n'
    result = result .. '<div id="next-category" class="arrow">❯</div>\n'
    result = result .. '</div>\n' -- Закрытие category-switcher
    result = result .. '</div>\n' -- Закрытие categories-container

    -- Контейнер для меню и контента
    result = result .. '<div class="menu-and-content">\n'
    
    -- Меню
    if #categories > 0 then
        result = result .. '<div class="menu-container">\n'
        for i, category in ipairs(categories) do
            if #category.paragraphs > 0 then
                result = result .. '<div class="menu category' .. i .. '-menu">\n'
                for j, paragraph in ipairs(category.paragraphs) do
                    result = result .. '<div class="category' .. i .. '-paragraph' .. j .. '">' .. paragraph .. '</div>\n'
                end
                result = result .. '</div>\n'
            end
        end
        result = result .. '</div>\n' -- Закрытие menu-container
    end

    -- Контент
    if #categories > 0 then
        result = result .. '<div class="content">\n'
        for i, category in ipairs(categories) do
            if #category.contents > 0 then
                for j, content in ipairs(category.contents) do
                    result = result .. '<div class="category' .. i .. '-paragraph' .. j .. '-content">\n' .. content .. '</div>\n'
                end
            end
        end
        result = result .. '</div>\n'
    end

    result = result .. '</div>\n' -- Закрытие menu-and-content

    result = result .. '</div>\n' -- Закрытие category-menu
    
    -- Дополнительный CSS для scrollbar
    result = result .. '<div class="customCSS" style="display:none">.content::-webkit-scrollbar, .menu-container::-webkit-scrollbar { width: 10px; } .content::-webkit-scrollbar-track, .menu-container::-webkit-scrollbar-track { background: #2c2c33; } .content::-webkit-scrollbar-thumb, .menu-container::-webkit-scrollbar-thumb { background: #5b5b67; border: 2px solid #2c2c33; }</div>'

    return result
end

return p