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

Материал из Space Station 14 Вики
Нет описания правки
мНет описания правки
 
(не показано 9 промежуточных версий этого же участника)
Строка 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="menu-toggle">☰</div>\n'


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


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


    result = result .. '</div>\n' -- Закрытие menu-and-content
-- Контент
if #categories > 0 then
result = result .. '<div class="navigation__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' -- Закрытие navigation
   
    -- Дополнительный 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
-- Дополнительный CSS для scrollbar
result = result .. '<div class="customCSS" style="display:none">' ..
'.navigation__menu-container::-webkit-scrollbar, .navigation__content::-webkit-scrollbar { width: 10px; }' ..
'.navigation__menu-container::-webkit-scrollbar-track, .navigation__content::-webkit-scrollbar-track  { background: #2c2c33; }' ..
'.navigation__menu-container::-webkit-scrollbar-thumb, .navigation__content::-webkit-scrollbar-thumb { background: #575767; border: 2px solid #2c2c33; }' ..
'@media (max-width: 800px) {' ..
'.navigation__menu-container::-webkit-scrollbar { display: none; }' ..
'}' ..
'</div>'
 
return result
end
end


return p
return p

Текущая версия от 22:03, 4 октября 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="navigation">\n'

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

	-- Стрелки для переключения категорий
	result = result .. '<div class="navigation__switcher">\n'
	result = result .. '<div id="prev-category" class="navigation__arrow">❮</div>\n'
	result = result .. '<div class="navigation__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="navigation__arrow">❯</div>\n'
	result = result .. '</div>\n' -- Закрытие switcher

	-- Меню
	if #categories > 0 then
		result = result .. '<div class="navigation__menu-container">\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

	-- Контент
	if #categories > 0 then
		result = result .. '<div class="navigation__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' -- Закрытие navigation

	-- Дополнительный CSS для scrollbar
	result = result .. '<div class="customCSS" style="display:none">' ..
		'.navigation__menu-container::-webkit-scrollbar, .navigation__content::-webkit-scrollbar { width: 10px; }' ..
		'.navigation__menu-container::-webkit-scrollbar-track, .navigation__content::-webkit-scrollbar-track  { background: #2c2c33; }' ..
		'.navigation__menu-container::-webkit-scrollbar-thumb, .navigation__content::-webkit-scrollbar-thumb { background: #575767; border: 2px solid #2c2c33; }' ..
		'@media (max-width: 800px) {' ..
		'.navigation__menu-container::-webkit-scrollbar { display: none; }' ..
		'}' ..
		'</div>'

	return result
end

return p