This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
This Lua module is used on approximately 65,000 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages, or in your own module sandbox. Consider discussing changes on the talk page before implementing them. |
This module depends on the following other modules: |
The various navigation templates maintained by the Military history WikiProject are all intended to be implemented through a single base template, which combines the project's common template style with the standard navigation box format. This is needed primarily to allow multiple such templates to be stacked together—with each other, or with infobox templates—to present the appearance of a continuous block; it is also beneficial for providing a consistent appearance to the entire set of articles within our scope.
Any military-related navigational template should be created using the ((military navigation)) base template, as shown below:
((Military navigation | name = | raw_name = | state = | style = | title = | image = | imageleft = | odd_color = | even_color = | above = | listclass = | group1 = | list1 = | group2 = | list2 = | group3 = | list3 = ... | group30 = | list30 = | below = ))
hlist
, to format content as horizontal lists. In the case of hlists in above or below fields, set bodyclass=hlist, instead.style=wide
is shown below:[[File:Example.jpg|100px]]
. This parameter should be used sparingly, and typically only in conjunction with the full-width template style.[[File:Example.jpg|100px]]
. This parameter should be used sparingly, and typically only in conjunction with the full-width template style.There are several known issues with the current navigation template design that editors should be aware of:
<br />
tag between the words where the wrapping is to occur. This should be done to separate link-text to the right of the 'pipe' (|
), as follows: [[Article title|Article <br /> title]]
. An alternative method is to use ((wrap)) for the link-text as follows: [[A very long article title|((wrap|A very long article title))]]
, which allows the browser to break as-needed.
local p = { }
local Navbox = require('Module:Navbox')
local Styles = require('Module:WPMILHIST Infobox style')
local function isblank(s)
return (not s) or s == ''
end
local function ifnotblank(s,p,t)
return (s and s ~= '') and (p..s) or t
end
function p.main(frame)
local args = { }
local pargs = frame:getParent().args
local fargs = frame.args
local sargs = {}
local tcats = ''
-- process bodystyle and titlestyle
local style = fargs['style'] or pargs['style'] or ''
if style == 'wide' then
args['titlestyle'] = Styles['nav_box_wide_header']
args['bodystyle'] = Styles['nav_box_wide']
else
args['titlestyle'] = Styles['nav_box_header']
local border = fargs['border'] or pargs['border'] or ''
if border == 'child' or border == 'subgroup' then
args['bodystyle'] = Styles['nav_box_child']
tcats = tcats .. '[[Category:Pages using military navigation subgroups without wide style]]'
else
args['bodystyle'] = Styles['nav_box']
end
end
sargs['titlestyle'] = 1
sargs['bodystyle'] = 1
-- process groupstyle, abovestyle, belowstyle
args['groupstyle'] = Styles['nav_box_label'] .. (fargs['groupstyle'] or pargs['groupstyle'] or '')
sargs['groupstyle'] = 1
args['abovestyle'] = Styles['nav_box_label'] .. (fargs['abovestyle'] or pargs['abovestyle'] or '')
sargs['abovestyle'] = 1
args['belowstyle'] = Styles['nav_box_label'] .. (fargs['belowstyle'] or pargs['belowstyle'] or '')
sargs['belowstyle'] = 1
-- process oddstyle, evenstyle
args['oddstyle'] = ifnotblank((fargs['odd_color'] or pargs['odd_color']),'background:',nil)
args['evenstyle'] = ifnotblank((fargs['even_color'] or pargs['even_color']),'background:',nil)
sargs['oddstyle'] = 1
sargs['evenstyle'] = 1
-- process name and rawname
args['name'] = ifnotblank((fargs['name'] or pargs['name']),'',(fargs['rawname'] or pargs['rawname']))
if isblank(args['name']) then args['navbar'] = 'plain' end
sargs['name'] = 1
sargs['rawname'] = 1
-- copy the remaining args, with frame args overriding parent args
for k, v in pairs(pargs) do
if v and v ~= '' and sargs[k] == nil then
args[k] = v
end
end
for k, v in pairs(fargs) do
if v and v ~= '' and sargs[k] == nil then
args[k] = v
end
end
-- add allow wrap
if args['title'] and style ~= 'wide' then
if not mw.ustring.match(args['title'], '<span class="wrap">') then
-- probably a more efficient way to match 15 or more characters
local m = '[^%[%]<>|][^%[%]<>|][^%[%]<>|][^%[%]<>|][^%[%]<>|]'
m = m .. m .. m
args['title'] = mw.ustring.gsub(args['title'],
'%[%[(' .. m .. '[^%[%]<>|]*)%]%]',
'[[%1|<span class="wrap">%1</span>]]')
args['title'] = mw.ustring.gsub(args['title'],
'%[%[([^%[%]<>|]*)|(' .. m .. '[^%[%]<>|]*)%]%]',
'[[%1|<span class="wrap">%2</span>]]')
end
end
-- add navbox-vertical for non-wide format
if style ~= 'wide' then
args['bodyclass'] = 'navbox-vertical' .. (args['bodyclass'] and (' ' .. args['bodyclass']) or '')
end
return tcats .. Navbox._navbox(args)
end
return p