As the Ohio History Connection continues to allocate and prioritize its resources, we no longer have the capacity to update and moderate content on Ohio History Central. These pages will be taken down effective Dec. 31, 2023.

Module:Navbar

From Ohio History Central
Revision as of 02:53, 27 April 2013 by Admin (talk | contribs) (1 revision)

local p = {}

local HtmlBuilder = require('Module:HtmlBuilder')

function trim(s)

   return mw.ustring.match( s, "^%s*(.-)%s*$" )

end

function error(s)

   local span = HtmlBuilder.create('span')
   span
       .addClass('error')
       .css('float', 'left')
       .css('white-space', 'nowrap')
       .wikitext('Error: ' .. 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, '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

function _navbar( args )

   if not args[1] then
       return error('No name provided')
   end

   local good, title, talk_title;
   good, title, talk_title = pcall( getTitle, args[1] );
   if not good then
       return error('Expensive parser function limit exceeded');
   end    
   if not title then
       return error('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( '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( '' )
            .tag( 'span ' )
                .attr( 'title', 'View this template' )
                .cssText( args.fontstyle or  )
                .wikitext( viewLink )
                .done()
            .wikitext( '' )
           .done()
       .tag( 'li' )
           .addClass( 'nv-talk' )
           .wikitext( '' )
            .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

, 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