FANDOM


local p = {}
 
function trim(s)
    return mw.ustring.match( s, "^%s*(.-)%s*$" )
end
 
function error(s)
    local span = mw.html.create('span')
 
    span
        :addClass('error')
        :css('float', 'left')
        :css('white-space', 'nowrap')
        :wikitext('Помилка: ' .. s)
 
    return tostring(span)
end
 
function getTitle( pageName )
    pageName = trim( pageName );
    local page_title, talk_page_title;
 
    if mw.ustring.sub(pageName, 1, 1) == ':' then
        page_title = mw.title.new( mw.ustring.sub(pageName, 2) );
    else
        page_title = mw.title.new( pageName, 'Шаблон' );
    end    
 
    if page_title then 
        talk_page_title = page_title.talkPageTitle;
    else
        talk_page_title = nil;
    end
 
    return page_title, talk_page_title;    
end
 
function _navbar( args )
    if not args[1] then
        return error('Не задано назву')
    end
 
    local good, title, talk_title;
    good, title, talk_title = pcall( getTitle, args[1] );
    if not good then
        return error('Перевищено ліміт дорогих парсерних функцій');
    end    
 
    if not title then
        return error('Сторінка не існує')
    end
 
    local mainpage = title.fullText;
    local talkpage = talk_title and talk_title.fullText or ''
    local editurl = title:fullUrl( 'action=edit' ); 
 
    local viewLink, talkLink, editLink = 'переглянути', 'обговорити', 'редагувати'
    if args.mini then
        viewLink, talkLink, editLink = 'п', 'о', 'р'
    end
 
    local div = mw.html.create('div')
    div
        :addClass( 'noprint' )
        :addClass( 'plainlinks' )
        :addClass( 'hlist' )
        :addClass( 'navbar')
        :cssText( args.style )
 
    if args.mini then div.addClass('mini') end
 
    if not (args.mini or args.plain) then
        div
            :tag( 'span' )
                :css( 'word-spacing', 0 )
                :cssText( args.fontstyle )
                :wikitext( args.text or 'Цей шаблон:' )
                :wikitext( ' ' )
    end
 
    if args.brackets then
        div
            :tag('span')
                :css('margin-right', '-0.125em')
                :cssText( args.fontstyle )
                :wikitext( '[' )
                :newline();
    end
 
    local ul = div:tag('ul');
 
    ul
        :tag( 'li' )
            :addClass( 'nv-view' )
            :wikitext( '[[' .. mainpage .. '|' )
            :tag( 'span' )
                :attr( 'title', 'Переглянути цей шаблон' )
                :cssText( args.fontstyle or '' )
                :wikitext( viewLink )
                :done()
            :wikitext( ']]' )
            :done()
        :tag( 'li' )
            :addClass( 'nv-talk' )
            :wikitext( '[[' .. talkpage .. '|' )
            :tag( 'span' )
                :attr( 'title', 'Обговорити цей шаблон' )
                :cssText( args.fontstyle or '' )
                :wikitext( talkLink )
                :done()
            :wikitext( ']]' );
 
    if not args.noedit then 
        ul
            :tag( 'li' )
                :addClass( 'nv-edit' )
                :wikitext( '[' .. editurl .. ' ' )
                :tag( 'span' )
                    :attr( 'title', 'Редагувати цей шаблон' )
                    :cssText( args.fontstyle or '' )
                    :wikitext( editLink )
                    :done()
                :wikitext( ']' );
    end
 
    if args.brackets then
        div
            :tag('span')
                :css('margin-left', '-0.125em')
                :cssText( args.fontstyle or '' )
                :wikitext( ']' )
                :newline();
    end
 
    return tostring(div)
end
 
function p.navbar(frame)
    local origArgs
    -- Якщо викликаний через #invoke, використовувати аргументи, передані через шаблон, що викликає.
    -- Інакше, у цілях тестування, припустити, що аргументи передані напряму.
    if frame == mw.getCurrentFrame() then
        origArgs = frame:getParent().args
    else
        origArgs = frame
    end
 
    -- ParserFunctions розглядають порожній рядок як false, тож, щоб дотриматися попередньої
    -- поведінки {{navbar}}, міняємо всі порожні аргументи на nil, тож Lua розгляне
    -- їх також як false.
    args = {}
    for k, v in pairs(origArgs) do
        if v ~= '' then
            args[k] = v
        end
    end
 
    return _navbar(args)
end
 
return p

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Відвідайте інші вікіпроекти на Вікія!

Випадкова вікі