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

мНет описания правки
Метка: ручная отмена
Нет описания правки
Строка 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