Модуль:Мэтанавігацыя

Зьвесткі зь Вікіпэдыі — вольнай энцыкляпэдыі
 
Дакумэнтацыя модулю Дакумэнтацыя модулю[прагляд] [рэдагаваць] [гісторыя] [абнавіць]
local navMap = {
    {
        ["title"] = "Дапамога",
        ["location"] = "Дапамога:Зьмест",
        ["children"] = {
            {
                ["title"] = "Пачаткоўцам",
                ["location"] = "Дапамога:Зьмест/Пачаткоўцам"
            },
            {
                ["title"] = "Частыя пытаньні",
                ["location"] = "Вікіпэдыя:Частыя пытаньні"
            },
            {
                ["title"] = "Правілы і рэкамэндацыі",
                ["location"] = "Вікіпэдыя:Правілы і рэкамэндацыі"
            },
            {
                ["title"] = "Пошук",
                ["location"] = "Вікіпэдыя:Пошук"
            },
            {
                ["title"] = "Пясочніца",
                ["location"] = "Вікіпэдыя:Пясочніца"
            }
        }
    },
    {
        ["title"] = "Суполка",
        ["location"] = "Вікіпэдыя:Суполка",
        ["children"] = {
            {
                ["title"] = "Форум",
                ["location"] = "Вікіпэдыя:Форум"
            },
            {
                ["title"] = "Адміністрацыя",
                ["location"] = "Вікіпэдыя:Адміністрацыя"
            },
            {
                ["title"] = "Апытаньні",
                ["location"] = "Вікіпэдыя:Апытаньні"
            },
            {
                ["title"] = "Галасаваньні",
                ["location"] = "Вікіпэдыя:Галасаваньні"
            },
            {
                ["title"] = "Абмеркаваньне правілаў",
                ["location"] = "Вікіпэдыя:Абмеркаваньне правілаў"
            },
            {
                ["title"] = "Паведамленьні пра памылкі",
                ["location"] = "Вікіпэдыя:Паведамленьні пра памылкі"
            }
        }
    },
    {
        ["title"] = "Ацэньваньне",
        ["location"] = "Вікіпэдыя:Ацэньваньне",
        ["children"] = {
            {
                ["title"] = "Для рэцэнзаваньня",
                ["location"] = "Вікіпэдыя:Артыкулы для рэцэнзаваньня"
            },
            {
                ["title"] = "У добрыя",
                ["location"] = "Вікіпэдыя:Кандыдаты ў добрыя артыкулы"
            },
            {
                ["title"] = "У абраныя",
                ["location"] = "Вікіпэдыя:Кандыдаты ў абраныя артыкулы"
            }
        }
    },
    {
        ["title"] = "Узнагароды",
        ["location"] = "Вікіпэдыя:Узнагароды артыкулаў",
        ["children"] = {
            {
                ["title"] = "Абраныя артыкулы",
                ["location"] = "Вікіпэдыя:Абраныя артыкулы"
            },
            {
                ["title"] = "Добрыя артыкулы",
                ["location"] = "Вікіпэдыя:Добрыя артыкулы"
            }
        }
    },
    {
        ["title"] = "Праекты",
        ["location"] = "Вікіпэдыя:Праекты",
        ["children"] = {
            {
                ["title"] = "Злучнасьць",
                ["location"] = "Вікіпэдыя:Праект:Злучнасьць"
            },
            {
                ["title"] = "Правілы",
                ["location"] = "Вікіпэдыя:Праект:Правілы"
            },
            {
                ["title"] = "Рабатызацыя",
                ["location"] = "Вікіпэдыя:Рабатызацыя"
            },
            {
                ["title"] = "Ці ведаеце вы",
                ["location"] = "Вікіпэдыя:Праект:Ці ведаеце вы"
            },
            {
                ["title"] = "Тэматычны тыдзень",
                ["location"] = "Вікіпэдыя:Праект:Тэматычны тыдзень"
            }
        }
    },
    {
        ["title"] = "Парталы",
        ["location"] = "Партал:Агляд",
        ["children"] = {
    		{
				["title"] = "Геаграфія",
				["location"] = "Партал:Геаграфія"
			},
			{
				["title"] = "Гісторыя",
				["location"] = "Партал:Гісторыя"
			},
			{
				["title"] = "Грамадзтва",
				["location"] = "Партал:Грамадзтва"
			},
			{
				["title"] = "Асобы",
				["location"] = "Партал:Асобы"
			},
			{
				["title"] = "Рэлігія",
				["location"] = "Партал:Рэлігія"
			},
			{
				["title"] = "Спорт",
				["location"] = "Партал:Спорт"
			},
			{
				["title"] = "Тэхніка",
				["location"] = "Партал:Тэхніка"
			},
			{
				["title"] = "Навука",
				["location"] = "Партал:Навука"
			},
			{
				["title"] = "Мастацтва",
				["location"] = "Партал:Мастацтва"
			},
			{
				["title"] = "Філязофія",
				["location"] = "Партал:Філязофія"
			}
        }
    },
    {
        ["title"] = "Запыты",
        ["location"] = "Вікіпэдыя:Запыты",
        ["children"] = {
    		{
                ["title"] = "Да адміністратараў",
                ["location"] = "Вікіпэдыя:Запыты да адміністратараў"
            },
    		{
                ["title"] = "Да адміністратараў інтэрфэйсу",
                ["location"] = "Вікіпэдыя:Запыты да адміністратараў інтэрфэйсу"
            },
			{
                ["title"] = "На стварэньне",
                ["location"] = "Вікіпэдыя:На стварэньне"
            },
			{
                ["title"] = "Накіды",
                ["location"] = "Катэгорыя:Вікіпэдыя:Накіды"
            },
			{
                ["title"] = "На перанос",
                ["location"] = "Вікіпэдыя:Запыты на перанос"
            },
			{
                ["title"] = "На аб’яднаньне",
                ["location"] = "Катэгорыя:Вікіпэдыя:Кандыдатуры на аб’яднаньне"
            },
			{
                ["title"] = "На выдаленьне",
                ["location"] = "Вікіпэдыя:Кандыдатуры на выдаленьне"
            },
			{
                ["title"] = "На пераклад",
                ["location"] = "Вікіпэдыя:Запыты на пераклад"
            }
        }
    }
}

local p = {}
local builder = require( "Модуль:HtmlBuilder" )
local currentPosition = {}

local function detectPosition()
    if next( currentPosition ) ~= nil then
        return currentPosition
    else
        currentPosition = { ["section"] = "", ["contents"] = "", ["isection"] = 0, ["icontents"] = 0 }
        local currentTitle = mw.title.getCurrentTitle().prefixedText
        for k, section in ipairs( navMap ) do
            for l, child in ipairs( section.children ) do
                if child.location == currentTitle then
                    currentPosition.icontents = l
                    currentPosition.contents = child.location
                    currentPosition.isection = k
                    currentPosition.section = section.location
                    break
                end
            end
            if section.location == currentTitle then
                currentPosition.isection = k
                currentPosition.section = section.location
            end
        end
    end
    return currentPosition
end

local function renderSections()
    local currentSection = detectPosition().section

    local root = builder.create()
    for _, section in ipairs( navMap ) do
        local item = root.tag( 'div' ).wikitext( "[[:" .. section.location .. "|" .. section.title .. "]]" )
        if section.location == currentSection then item.addClass( 'active' ) end
    end
    return tostring( root )
end

local function renderContents()
    local currentPos = detectPosition()
    
    if navMap[currentPos.isection] == nil then return "" end
    
    local root = builder.create()
    for _, child in ipairs( navMap[currentPos.isection].children ) do
        local item = root.tag( 'li' ).wikitext( "[[:" .. child.location .. "|" .. child.title .. "]]" )
    end
    return tostring( root )
end
    

function p.metaNavigation( frame )
    local root = builder.create()

    for n, m in pairs( navMap ) do
        mw.log( m.location )
    end

    local rootNode = root.tag( 'div' )
            .addClass( 'metanavigation' )
            .tag( 'div' )
                .addClass( 'metanavigation-sections' )
                .wikitext( renderSections() )
                .done()
    
    local contentsText = renderContents()
    if contentsText ~= "" then
        rootNode.tag( 'div' )
                    .addClass( 'metanavigation-contents' )
                    .tag( 'ul' )
                        .addClass( 'hlist' )
                        .wikitext( renderContents() )
                        .done()
    end

    return tostring( root )
end

return p