Модуль:Navbar: відмінності між версіями

Матеріал з RPZ
Перейти до навігації Перейти до пошуку
(Створена сторінка: local p = {} local getArgs function p._navbar(args) local titleArg = 1 if args.collapsible then titleArg = 2 if not args.plain then args.mini = 1 end if args.fontcolor then args.fontstyle = 'color:' .. args.fontcolor .. ';' end args.style = 'float:left; text-align:left' end local titleText = args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle()) local title = mw.title.new(mw.text.trim(titleText), 'Шаблон');...)
 
Немає опису редагування
 
Рядок 1: Рядок 1:
local p = {}
local p = {}


local getArgs
function trim(s)
    return mw.ustring.match( s, "^%s*(.-)%s*$" )
end


function p._navbar(args)
function error(s)
local titleArg = 1
    local span = mw.html.create('span')


if args.collapsible then
    span
titleArg = 2
        :addClass('error')
if not args.plain then
        :css('float', 'left')
args.mini = 1
        :css('white-space', 'nowrap')
end
        :wikitext('Помилка: ' .. s)
if args.fontcolor then
args.fontstyle = 'color:' .. args.fontcolor .. ';'
end
args.style = 'float:left; text-align:left'
end


local titleText = args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle())
    return tostring(span)
local title = mw.title.new(mw.text.trim(titleText), 'Шаблон');
end


if not title then
function getTitle( pageName )
error('Неприпустима назва ' .. titleText)
    pageName = trim( pageName );
end
    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


local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or '';
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   


local div = mw.html.create():tag('div')
    if not title then
div
        return error('Сторінка не існує')
:addClass('plainlinks')
    end
:addClass('hlist')
:addClass('navbar')
    local mainpage = title.fullText;
:cssText(args.style)
    local talkpage = talk_title and talk_title.fullText or ''
 
    local editurl = title:fullUrl( 'action=edit' );
if args.mini then div:addClass('mini') end
 
    local viewLink, talkLink, editLink = 'переглянути', 'обговорити', 'редагувати'
if not (args.mini or args.plain) then
    if args.mini then
div
        viewLink, talkLink, editLink = 'п', 'о', 'р'
:tag('span')
    end
:css('word-spacing', 0)
:cssText(args.fontstyle)
    local div = mw.html.create('div')
:wikitext(args.text or 'Цей шаблон:')
    div
:wikitext(' ')
        :addClass( 'noprint' )
end
        :addClass( 'plainlinks' )
 
        :addClass( 'hlist' )
if args.brackets then
        :addClass( 'navbar')
div
        :cssText( args.style )
:tag('span')
:css('margin-right', '-0.125em')
    if args.mini then div.addClass('mini') end
:cssText(args.fontstyle)
:wikitext('[ ')
    if not (args.mini or args.plain) then
end
        div
 
            :tag( 'span' )
local ul = div:tag('ul');
                :css( 'word-spacing', 0 )
 
                :cssText( args.fontstyle )
ul
                :wikitext( args.text or 'Цей шаблон:' )
:tag('li')
                :wikitext( ' ' )
:addClass('nv-view')
    end
:wikitext('[[' .. title.fullText .. '|')
:tag(args.mini and 'abbr' or 'span')
    if args.brackets then
:attr('title', 'Переглянути цей шаблон')
        div
:cssText(args.fontstyle)
            :tag('span')
:wikitext(args.mini and 'п' or 'переглянути')
                :css('margin-right', '-0.125em')
:done()
                :cssText( args.fontstyle )
:wikitext(']]')
                :wikitext( '[' )
:done()
                :newline();
:tag('li')
    end
:addClass('nv-talk')
:wikitext('[[' .. talkpage .. '|')
    local ul = div:tag('ul');
:tag(args.mini and 'abbr' or 'span')
:attr('title', 'Обговорити цей шаблон')
    ul
:cssText(args.fontstyle)
        :tag( 'li' )
:wikitext(args.mini and ' о' or 'обговорити')
            :addClass( 'nv-view' )
:done()
            :wikitext( '[[' .. mainpage .. '|' )
:wikitext(']]');
            :tag( 'span' )
 
                :attr( 'title', 'Переглянути цей шаблон' )
if not args.noedit then
                :cssText( args.fontstyle or '' )
ul
                :wikitext( viewLink )
:tag('li')
                :done()
:addClass('nv-edit')
            :wikitext( ']]' )
:wikitext('[' .. title:fullUrl('action=edit') .. ' ')
            :done()
:tag(args.mini and 'abbr' or 'span')
        :tag( 'li' )
:attr('title', 'Редагувати цей шаблон')
            :addClass( 'nv-talk' )
:cssText(args.fontstyle)
            :wikitext( '[[' .. talkpage .. '|' )
:wikitext(args.mini and ' р' or 'редагувати')
            :tag( 'span' )
:done()
                :attr( 'title', 'Обговорити цей шаблон' )
:wikitext(']');
                :cssText( args.fontstyle or '' )
end
                :wikitext( talkLink )
 
                :done()
if args.brackets then
            :wikitext( ']]' );
div
:tag('span')
    if not args.noedit then  
:css('margin-left', '-0.125em')
        ul
:cssText(args.fontstyle)
            :tag( 'li' )
:wikitext(' ]')
                :addClass( 'nv-edit' )
end
                :wikitext( '[' .. editurl .. ' ' )
 
                :tag( 'span' )
if args.collapsible then
                    :attr( 'title', 'Редагувати цей шаблон' )
div
                    :cssText( args.fontstyle or '' )
:done()
                    :wikitext( editLink )
:tag('div')
                    :done()
:css('font-size', '114%')
                :wikitext( ']' );
:css('margin', args.mini and '0 4em' or '0 7em')
    end
:cssText(args.fontstyle)
:wikitext(args[1])
    if args.brackets then
end
        div
 
            :tag('span')
return tostring(div:done())
                :css('margin-left', '-0.125em')
                :cssText( args.fontstyle or '' )
                :wikitext( ']' )
                :newline();
    end
    return tostring(div)
end
end


function p.navbar(frame)
function p.navbar(frame)
if not getArgs then
    local origArgs
getArgs = require('Модуль:Arguments').getArgs
    -- Якщо викликаний через #invoke, використовувати аргументи, передані через шаблон, що викликає.
end
    -- Інакше, у цілях тестування, припустити, що аргументи передані напряму.
return p._navbar(getArgs(frame))
    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
end
 
return p
return p

Поточна версія на 17:56, 7 квітня 2024

Документацію для цього модуля можна створити у Модуль:Navbar/документація

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