Module:Tnavbar
Jump to navigation
Jump to search
Documentation for this module may be created at Module:Tnavbar/doc
-- <nowiki>
--
-- Implements {{tnavbar}} and variants
--
-- @todo move the hardcoded css to [[MediaWiki:Common.css]] given how many pages it's found on
--
require('strict')
local p = {}
local yesno = require( 'Module:Yesno' )
function p._navbar( args )
local navbarstyle = args.style or ''
local fontstyle = args.fontstyle or ''
local view, talk, edit = (args.view or true), (args.talk or true), (args.edit or true)
local desc = {
view = 'view',
talk = 'talk',
edit = 'edit'
}
local tag = mw.html.create( 'div' )
:addClass( 'navbar' )
:addClass( 'plainlinks' )
:addClass( 'noprint' )
:css( {
['white-space'] = 'nowrap',
['font-weight'] = 'normal',
['font-size'] = 'x-small'
} )
:cssText( navbarstyle )
if yesno( args.mini ) then
desc = {
view = 'v',
talk = 't',
edit = 'e'
}
tag:addClass( 'navbar-mini' )
end
local viewSpan = mw.html.create( 'span' )
:attr( 'title', 'View this template' )
:cssText( fontstyle )
:wikitext( desc.view )
local talkSpan = mw.html.create( 'span' )
:attr( 'title', 'Discussion about this template' )
:cssText( fontstyle )
:wikitext( desc.talk )
local editSpan = mw.html.create( 'span' )
:attr( 'title', 'Edit this template' )
:cssText( fontstyle )
:wikitext( desc.edit )
local title = args[1] and mw.text.trim( args[1] ) or error('No page title given')
local ns, titleTbl, pagelink, talklink
if mw.ustring.sub( title, 1, 1 ) == ':' then
-- mainspace
title = mw.ustring.sub( title, 2 )
pagelink = title
talklink = 'Talk:' .. title
elseif mw.ustring.match( title, ':' ) then
-- split title to see if it has a valid namespace
titleTbl = mw.text.split( title, ':' )
ns = mw.site.namespaces[titleTbl[1]]
if ns ~= nil then
pagelink = ns.name .. ':' .. table.concat( titleTbl, '', 2 )
if ns.isTalk then
talklink = page
else
talklink = ns.talk.name .. ':' .. table.concat( titleTbl, '', 2 )
end
end
end
-- this happens if there's no semi-colons in title
-- or if there is semi-colons but it didn't have valid ns name
if not pagelink then
pagelink = 'Template:' .. title
talklink = 'Template talk:' .. title
end
tag:wikitext( '[[' .. pagelink .. '|' .. tostring( viewSpan ) .. ']]' )
:wikitext( ' ' )
:tag( 'span' )
:css( 'font-size', '80%' )
:wikitext( '•' )
:done()
:wikitext( ' ' )
if talk == 'autoconfirmed' then
tag
:tag( 'span' )
:addClass( 'autoconfirmed-show' )
:css( 'display', 'none' )
:wikitext( '[' .. tostring( mw.uri.fullUrl( talklink ) ) .. ' ' .. tostring( talkSpan ) .. ']' )
:wikitext( ' ' )
:tag( 'span' )
:css( 'font-size', '80%' )
:wikitext( '•' )
:done()
:wikitext( ' ' )
:done()
elseif yesno(talk) then
tag:wikitext( '[' .. tostring( mw.uri.fullUrl( talklink ) ) .. ' ' .. tostring( talkSpan ) .. ']' )
:wikitext( ' ' )
:tag( 'span' )
:css( 'font-size', '80%' )
:wikitext( '•' )
:done()
:wikitext( ' ' )
:done()
end
tag:wikitext( '[' .. tostring( mw.uri.fullUrl( pagelink, 'action=edit' ) ) .. ' ' .. tostring( editSpan ) .. ']' )
return tostring( tag )
end
function p.navbar( frame )
return p._navbar( frame:getParent().args )
end
return p