Difference between revisions of "Module:Navbox"
Jump to navigation
Jump to search
(Import from Wikipedia) |
(Wikipedia's navbox isn't working. Probably some weird dependecy -_-) |
||
Line 1: | Line 1: | ||
+ | -- <nowiki> | ||
-- | -- | ||
− | -- | + | -- Implements {{navbox}} |
-- | -- | ||
local p = {} | local p = {} | ||
+ | local tnavbar = require( 'Module:Tnavbar' ) | ||
+ | local yesno = require( 'Module:Yesno' ) | ||
+ | local page_title = mw.title.getCurrentTitle().fullText | ||
+ | -- | ||
+ | -- Helper for inserting a new row into the navbox | ||
+ | -- | ||
+ | -- @param tbl {mw.html table} | ||
+ | -- @return tbl {mw.html table} | ||
+ | -- | ||
+ | local function insertRow( tbl ) | ||
+ | return tbl:tag( 'tr' ) | ||
+ | end | ||
− | + | -- | |
− | + | -- Creates the navbox table | |
+ | -- | ||
+ | -- @param args {table} | ||
+ | -- @return tbl {mw.html table} | ||
+ | -- | ||
+ | local function createTbl( args ) | ||
− | local | + | local tbl = mw.html.create( 'table' ) |
− | |||
− | |||
− | |||
− | + | tbl | |
− | + | :addClass( yesno( args.subgroup ) and 'navbox-subgroup' or 'navbox' ) | |
− | end | + | :addClass( 'nowraplinks' ) |
+ | |||
+ | if not yesno( args.subgroup ) and | ||
+ | ( args.state == 'collapsed' or | ||
+ | args.state == 'uncollapsed' or | ||
+ | args.state == 'autocollapse' or | ||
+ | -- defaults to autocollapse | ||
+ | args.state == nil ) | ||
+ | then | ||
+ | tbl:addClass( 'mw-collapsible' ) | ||
+ | |||
+ | if args.state == 'collapsed' then | ||
+ | tbl:addClass( 'mw-collapsed' ) | ||
+ | elseif args.state == 'uncollapsed' then | ||
+ | tbl:addClass('navbox-uncollapsed') | ||
+ | end | ||
+ | end | ||
− | + | if yesno( args.collapsible ) then | |
− | + | tbl:addClass( 'navbox-collapsible' ) | |
− | + | end | |
− | |||
− | |||
− | |||
− | end | ||
− | + | if args.style then | |
− | + | tbl:cssText( args.style ) | |
− | + | end | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | -- manually set collapse/expand messages | |
+ | -- bug causing the default database messages to be used | ||
+ | tbl | ||
+ | :attr( { | ||
+ | ['data-expandtext'] = 'show', | ||
+ | ['data-collapsetext'] = 'hide' | ||
+ | } ) | ||
− | + | return tbl | |
end | end | ||
− | + | -- | |
− | + | -- Wrapper for [[Module:Tnavbar]] | |
− | + | -- | |
− | + | -- @param args {table} | |
+ | -- @return {string} | ||
+ | -- | ||
+ | local function navbar( args ) | ||
+ | return tnavbar._collapsible( { [1] = args.title, [2] = args.name } ) | ||
+ | end | ||
− | + | -- | |
− | + | -- Creates the header (what you see when the navbox is collapsed) | |
− | + | -- | |
− | + | -- @param tbl {mw.html table} | |
− | + | -- @param args {table} | |
− | + | -- @return {mw.html table} | |
− | + | -- | |
− | + | local function header( tbl, args ) | |
− | + | local div = insertRow( tbl ) | |
− | + | :tag( 'th' ) | |
− | + | :attr( 'colspan', '2' ) | |
+ | :addClass( 'navbox-title' ) | ||
+ | :attr( 'id' , 'navbox-title' ) | ||
+ | :tag( 'div' ) | ||
− | + | -- @todo move this to site css so we can simplify this (hook off a class) | |
− | + | -- to something like div:wikitext( args.name and navbar( args ) or args.title ) | |
− | + | -- which can be appended to the above and returned straight away | |
− | + | if args.name then | |
− | + | div | |
− | + | :css( 'padding-right', args.state == 'plain' and '6em' or '0' ) | |
+ | :wikitext( navbar( args ) ) | ||
+ | else | ||
+ | div | ||
+ | :css( 'padding-left', args.state == 'plain' and '0' or '6em' ) | ||
+ | :wikitext( args.title ) | ||
+ | end | ||
− | + | return div:allDone() | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
-- | -- | ||
− | -- | + | -- Inserts a row into the navbox |
+ | -- | ||
+ | -- @param tbl {mw.html table} | ||
+ | -- @param gtitle {string} | ||
+ | -- @param group {string} | ||
+ | -- @param gtype {string} | ||
+ | -- @param style {string} | ||
+ | -- @return {mw.html table} | ||
-- | -- | ||
− | local function | + | local function row( tbl, gtitle, group, gtype, style, _name ) |
− | + | local tr = insertRow( tbl ) | |
+ | local td | ||
+ | |||
+ | if gtitle then | ||
+ | td = tr | ||
+ | :tag( 'td' ) | ||
+ | :addClass( 'navbox-group' ) | ||
+ | :wikitext( gtitle ) | ||
+ | :done() | ||
+ | :tag( 'td' ) | ||
+ | else | ||
+ | td = tr | ||
+ | :tag( 'td' ) | ||
+ | :attr( 'colspan', '2' ) | ||
+ | end | ||
− | + | --[[ | |
+ | List styling | ||
+ | This is unlikely to be implemented in the near future due to it requiring extra css to work | ||
+ | and mobile currently not supporting that css. | ||
+ | As an example, it lets you do the following instead if using {{*}} all the time | ||
+ | | group3 = | ||
+ | * {{plink|foo}} | ||
+ | * {{plink|bar}} | ||
+ | * {{plink|baz}} | ||
+ | ]] | ||
+ | if mw.ustring.match( group, '^%s*%*' ) then | ||
+ | td:newline() | ||
− | + | -- trim whitespace on bullets | |
− | + | local spl = mw.text.split( group, '\n' ) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | for i = 1, #spl do | |
+ | spl[i] = mw.text.trim( spl[i] ) | ||
+ | end | ||
− | + | group = table.concat( spl, '\n' ) | |
− | + | end | |
− | |||
− | |||
− | |||
− | + | --local group2 = group | |
− | + | --local group3 = group2 | |
− | + | -- analytics | |
− | |||
− | + | --if _name then | |
− | + | -- local name = mw.ustring.gsub(_name,' ','_') | |
− | + | -- for v in mw.ustring.gmatch(group,'%[%[[^%]]+%]%]') do | |
− | + | -- if mw.ustring.match(v,'%[%[File:.+|link=') then | |
− | + | -- local link = mw.ustring.match(v,'|link=([^%]|]+)') | |
+ | -- if link then | ||
+ | -- local linkrep = mw.ustring.gsub(link,'([%%%]%[%-^$*()+?])','%%%1') | ||
+ | -- local _link = mw.ustring.gsub(link,' ','_') | ||
+ | -- local newfile = mw.ustring.gsub(v,'|link='..linkrep,string.format('|link=https://runescape.wiki/w/%s?f=%s',_link,name)) | ||
+ | -- local w = mw.ustring.gsub(v,'([%%%]%[%-^$*()+?])','%%%1') | ||
+ | -- group2 = mw.ustring.gsub(group2,w,newfile) | ||
+ | -- end | ||
+ | -- elseif mw.ustring.match(v,'%[%[Category:') then | ||
+ | -- nothing | ||
+ | -- else | ||
+ | -- local link = mw.ustring.match(v,'%[%[([^%]|]+)') | ||
+ | -- local txt = mw.ustring.match(v,'%|([^%]|]+)') or link | ||
− | + | -- local newlink = '' | |
− | + | -- black links if current page | |
− | + | -- if link == page_title then | |
− | + | -- newlink = string.format('<b>%s</b>',txt) | |
− | + | -- else | |
− | + | -- local _link = mw.ustring.gsub(link or '',' ','_') | |
− | end | + | -- newlink = string.format('[https://runescape.wiki.com/w/%s?n=%s %s]',_link,name,txt) |
+ | -- end | ||
+ | -- local w = mw.ustring.gsub(v,'([%%%]%[%-^$*()+?])','%%%1') | ||
+ | -- group2 = mw.ustring.gsub(group2,w,newlink) | ||
+ | -- end | ||
+ | -- end | ||
+ | |||
+ | --[==[ | ||
+ | fix [[these kind]]s of [[link]]s post analytics parse | ||
+ | ]==] | ||
+ | -- group3 = group2 | ||
− | -- | + | -- for v in mw.ustring.gmatch(group2,'%[https://runescape.wiki.com/w[^%]]-%]%a') do |
− | -- | + | -- local rep = mw.ustring.gsub(v,'%]','') |
− | -- | + | -- rep = rep..']' |
+ | -- local w = mw.ustring.gsub(v,'([%%%]%[%-^$*()+?])','%%%1') | ||
− | + | -- group3 = mw.ustring.gsub(group2,w,rep) | |
− | + | -- end | |
− | + | --end | |
− | |||
− | |||
− | end | ||
− | + | td | |
− | + | :addClass( 'navbox-list' ) | |
+ | :wikitext( group ) --group3 | ||
− | + | if gtype and mw.ustring.lower( gtype ) == 'subgroup' then | |
− | + | td | |
− | + | :css( { | |
− | + | padding = '0', | |
− | + | ['border-bottom'] = '0' | |
− | + | } ) | |
− | + | end | |
− | |||
− | |||
− | end | ||
− | + | if style then | |
− | + | td:cssText( style ) | |
+ | end | ||
− | + | return td:allDone() | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
-- | -- | ||
− | -- | + | -- Inserts a footer into the navbox |
+ | -- | ||
+ | -- @param tbl {mw.html table} | ||
+ | -- @param args {table} | ||
+ | -- @return {mw.html table} | ||
-- | -- | ||
− | local function | + | local function footer( tbl, args ) |
− | + | local th = insertRow( tbl ) | |
− | + | :tag( 'th' ) | |
− | + | :attr( 'colspan', '2' ) | |
− | + | :addClass( 'navbox-footer' ) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | if args.fstyle then | |
− | + | th:cssText( args.fstyle ) | |
+ | end | ||
− | + | if mw.ustring.match( args.footer, '^%s*%*' ) then | |
− | + | th:newline() | |
− | |||
− | |||
− | |||
− | + | -- trim whitespace on bullets | |
− | + | local spl = mw.text.split( args.footer, '\n' ) | |
− | |||
− | + | for i = 1, #spl do | |
− | + | spl[i] = mw.text.trim( spl[i] ) | |
− | + | end | |
− | |||
− | |||
− | + | args.footer = table.concat( spl, '\n' ) | |
− | + | th:addClass( 'navbox-list' ) | |
− | + | end | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | th:wikitext( args.footer ) | |
− | |||
− | |||
− | + | return th:allDone() | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | |||
-- | -- | ||
− | -- | + | -- Adds [[Category:Navigational templates]] to navbox template pages |
+ | -- | ||
+ | -- @return {string} | ||
-- | -- | ||
+ | local function categories() | ||
+ | local title = mw.title.getCurrentTitle() | ||
+ | local page = title.text | ||
+ | local ns = title.nsText | ||
− | + | if ns == 'Template' then | |
− | + | -- sort in category by pagename | |
+ | return '[[Category:Navigational templates|' .. page .. ']]' | ||
+ | else | ||
+ | return '' | ||
+ | end | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | local function | + | -- |
− | + | -- Adds [[Template:Navbox/doc]] to navbox template pages | |
− | + | -- | |
+ | -- @param args {table} | ||
+ | -- @return {string} | ||
+ | -- | ||
+ | local function docs( args ) | ||
+ | local frame = mw.getCurrentFrame() | ||
+ | local title = mw.title.getCurrentTitle() | ||
+ | local base = title.baseText | ||
+ | local ns = title.nsText | ||
− | + | -- not if a subpage of [[Template:Navbox]] | |
− | + | if base ~= 'Navbox' and | |
− | + | -- in template ns | |
− | + | ns == 'Template' and | |
− | + | -- not a navbox group within a navbox | |
− | end | + | not yesno( args.subgroup ) and |
+ | -- not a collapsible navbox within a navbox | ||
+ | not yesno( args.collapsible ) and | ||
+ | -- not if the doc argument is set to "no" | ||
+ | ( args.doc == nil or yesno( args.doc ) ) | ||
+ | then | ||
+ | return frame:expandTemplate{ title = 'Navbox/doc' } | ||
+ | else | ||
+ | return '' | ||
+ | end | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
-- | -- | ||
− | -- | + | -- Navbox method to allow it to be called by other modules |
+ | -- | ||
+ | -- @param _args {table} | ||
+ | -- @return {string} | ||
-- | -- | ||
− | + | function p._navbox( _args ) | |
− | + | local args = {} | |
− | + | local wkCss = '' | |
− | + | local wkDiv = '' | |
− | + | local j | |
− | + | ||
− | + | -- preserves parser function behaviour where an empty string is considered undefined | |
− | + | -- or nil in lua's case | |
− | + | for k, v in pairs( _args ) do | |
− | + | if v ~= '' then | |
− | + | args[k] = v | |
− | + | end | |
− | + | end | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | local tbl = createTbl( args ) | |
− | |||
− | + | if not yesno( args.subgroup ) then | |
− | + | tbl = header( tbl, args ) | |
+ | end | ||
− | + | -- insert up to 20 rows | |
− | + | -- | |
− | + | -- 20 is a limit inherited from wikipedia when we copied this over | |
− | + | -- and we've never had a reason to extend it | |
− | + | for i = 1, 20 do | |
+ | j = tostring( i ) | ||
− | + | if args['group' .. j] then | |
+ | tbl = row( tbl, args['gtitle' .. j], args['group' .. j], args['gtype' .. j], args['style' .. j], args.name ) | ||
+ | else | ||
+ | break | ||
+ | end | ||
+ | end | ||
− | + | if args.footer then | |
− | + | tbl = footer( tbl, args ) | |
+ | end | ||
− | + | tbl = tostring( tbl ) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | local cats = '' | |
+ | if not yesno(args.subgroup) and not yesno(args.hidecat) then | ||
+ | cats = categories() | ||
+ | end | ||
+ | local docs = docs( args ) | ||
− | + | return tbl .. cats .. docs | |
end | end | ||
− | + | -- | |
− | + | -- Main navbox method accessed through #invoke | |
− | + | -- | |
− | + | -- @param frame {table} | |
− | + | -- @return {string} | |
− | + | -- | |
− | + | function p.navbox( frame ) | |
− | + | local args = frame:getParent().args | |
− | + | return p._navbox( args ) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
return p | return p | ||
+ | -- </nowiki> |
Revision as of 03:49, 31 December 2018
Example navbox:
{{Navbox |name = adsf |title = adsf |gtitle1 = asdf |group1 =adsf |gtitle2 = adsf |group2 = * adsf |gtitle3 = adsf |group3 = * adsf |gtitle4 = adsf |group4 = * adsf |gtitle5 = adsf |group5 = * adsf |gtitle6 = adsf |group6 = * adsf |gtitle7 = adsf |group7 = * adsf |gtitle8 = adsf |group8 = * adsf |gtitle9 = adsf |group9 = * adsf * asdf }}
Produces:
adsf | |
---|---|
asdf | adsf |
adsf |
|
adsf |
|
adsf |
|
adsf |
|
adsf |
|
adsf |
|
adsf |
|
adsf |
|
Note: to use a navbox on multiple pages, make a template (like Template:UnivNav) and use it like this: {{UnivNav}}
.
-- <nowiki>
--
-- Implements {{navbox}}
--
local p = {}
local tnavbar = require( 'Module:Tnavbar' )
local yesno = require( 'Module:Yesno' )
local page_title = mw.title.getCurrentTitle().fullText
--
-- Helper for inserting a new row into the navbox
--
-- @param tbl {mw.html table}
-- @return tbl {mw.html table}
--
local function insertRow( tbl )
return tbl:tag( 'tr' )
end
--
-- Creates the navbox table
--
-- @param args {table}
-- @return tbl {mw.html table}
--
local function createTbl( args )
local tbl = mw.html.create( 'table' )
tbl
:addClass( yesno( args.subgroup ) and 'navbox-subgroup' or 'navbox' )
:addClass( 'nowraplinks' )
if not yesno( args.subgroup ) and
( args.state == 'collapsed' or
args.state == 'uncollapsed' or
args.state == 'autocollapse' or
-- defaults to autocollapse
args.state == nil )
then
tbl:addClass( 'mw-collapsible' )
if args.state == 'collapsed' then
tbl:addClass( 'mw-collapsed' )
elseif args.state == 'uncollapsed' then
tbl:addClass('navbox-uncollapsed')
end
end
if yesno( args.collapsible ) then
tbl:addClass( 'navbox-collapsible' )
end
if args.style then
tbl:cssText( args.style )
end
-- manually set collapse/expand messages
-- bug causing the default database messages to be used
tbl
:attr( {
['data-expandtext'] = 'show',
['data-collapsetext'] = 'hide'
} )
return tbl
end
--
-- Wrapper for [[Module:Tnavbar]]
--
-- @param args {table}
-- @return {string}
--
local function navbar( args )
return tnavbar._collapsible( { [1] = args.title, [2] = args.name } )
end
--
-- Creates the header (what you see when the navbox is collapsed)
--
-- @param tbl {mw.html table}
-- @param args {table}
-- @return {mw.html table}
--
local function header( tbl, args )
local div = insertRow( tbl )
:tag( 'th' )
:attr( 'colspan', '2' )
:addClass( 'navbox-title' )
:attr( 'id' , 'navbox-title' )
:tag( 'div' )
-- @todo move this to site css so we can simplify this (hook off a class)
-- to something like div:wikitext( args.name and navbar( args ) or args.title )
-- which can be appended to the above and returned straight away
if args.name then
div
:css( 'padding-right', args.state == 'plain' and '6em' or '0' )
:wikitext( navbar( args ) )
else
div
:css( 'padding-left', args.state == 'plain' and '0' or '6em' )
:wikitext( args.title )
end
return div:allDone()
end
--
-- Inserts a row into the navbox
--
-- @param tbl {mw.html table}
-- @param gtitle {string}
-- @param group {string}
-- @param gtype {string}
-- @param style {string}
-- @return {mw.html table}
--
local function row( tbl, gtitle, group, gtype, style, _name )
local tr = insertRow( tbl )
local td
if gtitle then
td = tr
:tag( 'td' )
:addClass( 'navbox-group' )
:wikitext( gtitle )
:done()
:tag( 'td' )
else
td = tr
:tag( 'td' )
:attr( 'colspan', '2' )
end
--[[
List styling
This is unlikely to be implemented in the near future due to it requiring extra css to work
and mobile currently not supporting that css.
As an example, it lets you do the following instead if using {{*}} all the time
| group3 =
* {{plink|foo}}
* {{plink|bar}}
* {{plink|baz}}
]]
if mw.ustring.match( group, '^%s*%*' ) then
td:newline()
-- trim whitespace on bullets
local spl = mw.text.split( group, '\n' )
for i = 1, #spl do
spl[i] = mw.text.trim( spl[i] )
end
group = table.concat( spl, '\n' )
end
--local group2 = group
--local group3 = group2
-- analytics
--if _name then
-- local name = mw.ustring.gsub(_name,' ','_')
-- for v in mw.ustring.gmatch(group,'%[%[[^%]]+%]%]') do
-- if mw.ustring.match(v,'%[%[File:.+|link=') then
-- local link = mw.ustring.match(v,'|link=([^%]|]+)')
-- if link then
-- local linkrep = mw.ustring.gsub(link,'([%%%]%[%-^$*()+?])','%%%1')
-- local _link = mw.ustring.gsub(link,' ','_')
-- local newfile = mw.ustring.gsub(v,'|link='..linkrep,string.format('|link=https://runescape.wiki/w/%s?f=%s',_link,name))
-- local w = mw.ustring.gsub(v,'([%%%]%[%-^$*()+?])','%%%1')
-- group2 = mw.ustring.gsub(group2,w,newfile)
-- end
-- elseif mw.ustring.match(v,'%[%[Category:') then
-- nothing
-- else
-- local link = mw.ustring.match(v,'%[%[([^%]|]+)')
-- local txt = mw.ustring.match(v,'%|([^%]|]+)') or link
-- local newlink = ''
-- black links if current page
-- if link == page_title then
-- newlink = string.format('<b>%s</b>',txt)
-- else
-- local _link = mw.ustring.gsub(link or '',' ','_')
-- newlink = string.format('[https://runescape.wiki.com/w/%s?n=%s %s]',_link,name,txt)
-- end
-- local w = mw.ustring.gsub(v,'([%%%]%[%-^$*()+?])','%%%1')
-- group2 = mw.ustring.gsub(group2,w,newlink)
-- end
-- end
--[==[
fix [[these kind]]s of [[link]]s post analytics parse
]==]
-- group3 = group2
-- for v in mw.ustring.gmatch(group2,'%[https://runescape.wiki.com/w[^%]]-%]%a') do
-- local rep = mw.ustring.gsub(v,'%]','')
-- rep = rep..']'
-- local w = mw.ustring.gsub(v,'([%%%]%[%-^$*()+?])','%%%1')
-- group3 = mw.ustring.gsub(group2,w,rep)
-- end
--end
td
:addClass( 'navbox-list' )
:wikitext( group ) --group3
if gtype and mw.ustring.lower( gtype ) == 'subgroup' then
td
:css( {
padding = '0',
['border-bottom'] = '0'
} )
end
if style then
td:cssText( style )
end
return td:allDone()
end
--
-- Inserts a footer into the navbox
--
-- @param tbl {mw.html table}
-- @param args {table}
-- @return {mw.html table}
--
local function footer( tbl, args )
local th = insertRow( tbl )
:tag( 'th' )
:attr( 'colspan', '2' )
:addClass( 'navbox-footer' )
if args.fstyle then
th:cssText( args.fstyle )
end
if mw.ustring.match( args.footer, '^%s*%*' ) then
th:newline()
-- trim whitespace on bullets
local spl = mw.text.split( args.footer, '\n' )
for i = 1, #spl do
spl[i] = mw.text.trim( spl[i] )
end
args.footer = table.concat( spl, '\n' )
th:addClass( 'navbox-list' )
end
th:wikitext( args.footer )
return th:allDone()
end
--
-- Adds [[Category:Navigational templates]] to navbox template pages
--
-- @return {string}
--
local function categories()
local title = mw.title.getCurrentTitle()
local page = title.text
local ns = title.nsText
if ns == 'Template' then
-- sort in category by pagename
return '[[Category:Navigational templates|' .. page .. ']]'
else
return ''
end
end
--
-- Adds [[Template:Navbox/doc]] to navbox template pages
--
-- @param args {table}
-- @return {string}
--
local function docs( args )
local frame = mw.getCurrentFrame()
local title = mw.title.getCurrentTitle()
local base = title.baseText
local ns = title.nsText
-- not if a subpage of [[Template:Navbox]]
if base ~= 'Navbox' and
-- in template ns
ns == 'Template' and
-- not a navbox group within a navbox
not yesno( args.subgroup ) and
-- not a collapsible navbox within a navbox
not yesno( args.collapsible ) and
-- not if the doc argument is set to "no"
( args.doc == nil or yesno( args.doc ) )
then
return frame:expandTemplate{ title = 'Navbox/doc' }
else
return ''
end
end
--
-- Navbox method to allow it to be called by other modules
--
-- @param _args {table}
-- @return {string}
--
function p._navbox( _args )
local args = {}
local wkCss = ''
local wkDiv = ''
local j
-- preserves parser function behaviour where an empty string is considered undefined
-- or nil in lua's case
for k, v in pairs( _args ) do
if v ~= '' then
args[k] = v
end
end
local tbl = createTbl( args )
if not yesno( args.subgroup ) then
tbl = header( tbl, args )
end
-- insert up to 20 rows
--
-- 20 is a limit inherited from wikipedia when we copied this over
-- and we've never had a reason to extend it
for i = 1, 20 do
j = tostring( i )
if args['group' .. j] then
tbl = row( tbl, args['gtitle' .. j], args['group' .. j], args['gtype' .. j], args['style' .. j], args.name )
else
break
end
end
if args.footer then
tbl = footer( tbl, args )
end
tbl = tostring( tbl )
local cats = ''
if not yesno(args.subgroup) and not yesno(args.hidecat) then
cats = categories()
end
local docs = docs( args )
return tbl .. cats .. docs
end
--
-- Main navbox method accessed through #invoke
--
-- @param frame {table}
-- @return {string}
--
function p.navbox( frame )
local args = frame:getParent().args
return p._navbox( args )
end
return p
-- </nowiki>