X

Track changes made to this page

If you find this page useful and would like to be notified of changes made to this page, start by inputting your email below.



Privacy policy
Close this window

powered by ChangeDetection

Difference between revisions of "Navbar"

m (1 revision)
(Per edit request)
Line 3: Line 3:
 
local HtmlBuilder = require('Module:HtmlBuilder')
 
local HtmlBuilder = require('Module:HtmlBuilder')
  
function trim(s)
+
local function trim(s)
 
     return mw.ustring.match( s, "^%s*(.-)%s*$" )
 
     return mw.ustring.match( s, "^%s*(.-)%s*$" )
 
end
 
end
  
function error(s)
+
local function htmlError(s)
 
     local span = HtmlBuilder.create('span')
 
     local span = HtmlBuilder.create('span')
  
Line 19: Line 19:
 
end
 
end
  
function getTitle( pageName )
+
local function getTitle( pageName )
 
     pageName = trim( pageName );
 
     pageName = trim( pageName );
 
     local page_title, talk_page_title;
 
     local page_title, talk_page_title;
Line 38: Line 38:
 
end
 
end
  
function _navbar( args )
+
local function _navbar( args )
 
     if not args[1] then
 
     if not args[1] then
         return error('No name provided')
+
         return htmlError('No name provided')
 
     end
 
     end
 
   
 
   
Line 46: Line 46:
 
     good, title, talk_title = pcall( getTitle, args[1] );
 
     good, title, talk_title = pcall( getTitle, args[1] );
 
     if not good then
 
     if not good then
         return error(title);
+
         return htmlError(title);
 
     end     
 
     end     
  
 
     if not title then
 
     if not title then
         return error('Page does not exist')
+
         return htmlError('Page does not exist')
 
     end
 
     end
 
   
 
   
Line 150: Line 150:
 
     -- behavior of {{navbar}}, change any empty arguments to nil, so Lua will consider
 
     -- behavior of {{navbar}}, change any empty arguments to nil, so Lua will consider
 
     -- them false too.
 
     -- them false too.
     args = {}
+
     local args = {}
 
     for k, v in pairs(origArgs) do
 
     for k, v in pairs(origArgs) do
 
         if v ~= '' then
 
         if v ~= '' then

Revision as of 20:39, 6 May 2014

Documentation for this module may be created at Module:Navbar/doc

local p = {}

local HtmlBuilder = require('Module:HtmlBuilder')

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

local function htmlError(s)
    local span = HtmlBuilder.create('span')

    span
        .addClass('error')
        .css('float', 'left')
        .css('white-space', 'nowrap')
        .wikitext('Error: ' .. s)

    return tostring(span)
end

local 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, 'Template' );
    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 function _navbar( args )
    if not args[1] then
        return htmlError('No name provided')
    end
 
    local good, title, talk_title;
    good, title, talk_title = pcall( getTitle, args[1] );
    if not good then
        return htmlError(title);
    end    

    if not title then
        return htmlError('Page does not exist')
    end
 
    local mainpage = title.fullText;
    local talkpage = talk_title and talk_title.fullText or ''
    local editurl = title:fullUrl( 'action=edit' ); 
 
    local viewLink, talkLink, editLink = 'view', 'talk', 'edit'
    if args.mini then
        viewLink, talkLink, editLink = 'v', 't', 'e'
    end
 
    local div = HtmlBuilder.create( 'div' )
    div
        .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 'This box:' )
                .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', 'View this template' )
                .cssText( args.fontstyle or '' )
                .wikitext( viewLink )
                .done()
            .wikitext( ']]' )
            .done()
        .tag( 'li' )
            .addClass( 'nv-talk' )
            .wikitext( '[[' .. talkpage .. '|' )
            .tag( 'span ' )
                .attr( 'title', 'Discuss this template' )
                .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', 'Edit this template' )
                    .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
    -- If called via #invoke, use the args passed into the invoking template.
    -- Otherwise, for testing purposes, assume args are being passed directly in.
    if frame == mw.getCurrentFrame() then
        origArgs = frame:getParent().args
    else
        origArgs = frame
    end
 
    -- ParserFunctions considers the empty string to be false, so to preserve the previous 
    -- behavior of {{navbar}}, change any empty arguments to nil, so Lua will consider
    -- them false too.
    local args = {}
    for k, v in pairs(origArgs) do
        if v ~= '' then
            args[k] = v
        end
    end
 
    return _navbar(args)
end
 
return p