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

мНет описания правки
мНет описания правки
 
(не показано 29 промежуточных версий этого же участника)
Строка 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'


    -- Категории
-- Внешний контейнер 
    if #categories > 0 then
result = result .. '<div class="navigation">\n'
        result = result .. '<div class="categories">\n'
        for i, category in ipairs(categories) do
            result = result .. '<div class="category' .. i .. '">' .. category.name .. '</div>\n'
        end
        result = result .. '</div>\n'
    end


    -- Основной контейнер с меню и контентом
-- Кнопка для открытия/закрытия меню
    result = result .. '<div class="main-container">\n'
result = result .. '<div class="navigation__menu-toggle">☰</div>\n'


    -- Меню
-- Стрелки для переключения категорий
    if #categories > 0 then
result = result .. '<div class="navigation__switcher">\n'
        result = result .. '<div class="menu-container">\n'
result = result .. '<div id="prev-category" class="navigation__arrow"></div>\n'
        for i, category in ipairs(categories) do
result = result .. '<div class="navigation__categories">\n'
            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
if #categories > 0 then
        result = result .. '<div class="content">\n'
for i, category in ipairs(categories) do
        for i, category in ipairs(categories) do
result = result .. '<div class="category' .. i .. '">' .. category.name .. '</div>\n'
            if #category.contents > 0 then
end
                for j, content in ipairs(category.contents) do
end
                    result = result .. '<div class="category' .. i .. '-paragraph' .. j .. '-content">' .. content .. '</div>\n'
result = result .. '</div>\n'
                end
result = result .. '<div id="next-category" class="navigation__arrow">❯</div>\n'
            end
result = result .. '</div>\n' -- Закрытие switcher
        end
        result = result .. '</div>\n'
    end


    result = result .. '</div>\n' -- Закрытие main-container
-- Меню
if #categories > 0 then
result = result .. '<div class="navigation__menu-container short-scrollbar">\n'
for i, category in ipairs(categories) do
if #category.paragraphs > 0 then
result = result .. '<div class="navigation__menu-item 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


    result = result .. '</div>\n' -- Закрытие category-menu
-- Контент
   
if #categories > 0 then
    -- Дополнительный CSS для scrollbar
result = result .. '<div class="navigation__content short-scrollbar">\n'
    result = result .. '<div class="customCSS" style="display:none">.menu-container::-webkit-scrollbar { width: 10px; }.category-menu::-webkit-scrollbar-track { background: #303037; }.category-menu::-webkit-scrollbar-thumb { background: #5c5c69;border: 2px solid #303037; }<div>'
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


    return result
result = result .. '</div>\n' -- Закрытие navigation
 
return result
end
end


return p
return p