Module:Navbar
Appearance
| This Lua module is used in system messages, and on approximately 5,120,000 pages, or roughly 8% of all pages. Changes to it can cause immediate changes to the Wikipedia user interface. To avoid major disruption and server load, any changes should be tested in the module's /sandbox or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Please discuss changes on the talk page before implementing them. |
| This module is rated as ready for general use. It has reached a mature state, is considered relatively stable and bug-free, and may be used wherever appropriate. It can be mentioned on help pages and other Wikipedia resources as an option for new users. To minimise server load and avoid disruptive output, improvements should be developed through sandbox testing rather than repeated trial-and-error editing. |
| This module is currently protected from editing. See the protection policy and protection log for more details. Please discuss any changes on the talk page; you may submit an edit request to ask an administrator to make an edit if it is uncontroversial or supported by consensus. You may also request that this page be unprotected. |
| This module depends on the following other modules: |
| This module uses TemplateStyles: |
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.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 _navbar( args )
if not args[1] then
return error('No name provided')
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
if not title then
return error('Page does not exist')
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