Difference between revisions of "Module:Navbar"

From MINR.ORG WIKI
(return an html string instead of an htmlbuilder)
(If the documentation is accurate, this will use the namespace part of pageName first and fallback to Template if one isn't present, which is what we want.)
Line 25: Line 25:
 
         title = mw.title.new( mw.ustring.sub(pageName, 2) );
 
         title = mw.title.new( mw.ustring.sub(pageName, 2) );
 
     else
 
     else
         title = mw.title.new( pageName );
+
         title = mw.title.new( pageName, 'Template' );
        if title.namespace == 0 then
 
            title = mw.title.makeTitle( 'Template', pageName );
 
        end   
 
 
     end       
 
     end       
 
   
 
   

Revision as of 04:08, 16 March 2013

This is a Lua implementation of {{Navbar}}. It is used in Module:Navbox.


local p = {}

local HtmlBuilder = require('Module:HtmlBuilder')

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

function _navbar( args )
    if not args[1] then
        local span = HtmlBuilder.create('span')
 
        span
            .addClass('error')
            .css('float', 'left')
            .css('white-space', 'nowrap')
            .wikitext('Error: No name provided')
 
        return span
    end
 
    local title;
    local pageName = trim(args[1])
    if mw.ustring.sub(pageName, 1, 1) == ':' then
        title = mw.title.new( mw.ustring.sub(pageName, 2) );
    else
        title = mw.title.new( pageName, 'Template' );
    end       
 
    local mainpage = title.fullText;
    local talkpage = title.talkPageTitle and title.talkPageTitle.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( '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 '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.
    args = {}
    for k, v in pairs(origArgs) do
        if v ~= '' then
            args[k] = v
        end
    end
 
    return _navbar(args)
end
 
return p