Module:Military navigation: Difference between revisions
Appearance
m 1 revision imported |
give frame priority over parent to avoid script errors |
||
| Line 7: | Line 7: | ||
return (not s) or s == '' | return (not s) or s == '' | ||
end | end | ||
local function | local function ifnotblank(s,p,t) | ||
return s and s ~= '' | return (s and s ~= '') and (p..s) or t | ||
end | end | ||
| Line 14: | Line 14: | ||
local args = { } | local args = { } | ||
local pargs = frame:getParent().args | local pargs = frame:getParent().args | ||
local fargs = frame.args | |||
local sargs = {} | local sargs = {} | ||
local tcats = '' | local tcats = '' | ||
-- process bodystyle and titlestyle | -- process bodystyle and titlestyle | ||
local style = fargs['style'] or pargs['style'] or '' | |||
if style == 'wide' then | |||
args['titlestyle'] = Styles['nav_box_wide_header'] | args['titlestyle'] = Styles['nav_box_wide_header'] | ||
args['bodystyle'] = Styles['nav_box_wide'] | args['bodystyle'] = Styles['nav_box_wide'] | ||
else | else | ||
args['titlestyle'] = Styles['nav_box_header'] | 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'] | args['bodystyle'] = Styles['nav_box_child'] | ||
tcats = tcats .. '[[Category:Pages using military navigation subgroups without wide style]]' | tcats = tcats .. '[[Category:Pages using military navigation subgroups without wide style]]' | ||
| Line 35: | Line 37: | ||
-- process groupstyle, abovestyle, belowstyle | -- process groupstyle, abovestyle, belowstyle | ||
args['groupstyle'] = Styles['nav_box_label'] .. (pargs['groupstyle'] or '') | args['groupstyle'] = Styles['nav_box_label'] .. (fargs['groupstyle'] or pargs['groupstyle'] or '') | ||
sargs['groupstyle'] = 1 | sargs['groupstyle'] = 1 | ||
args['abovestyle'] = Styles['nav_box_label'] .. (pargs['abovestyle'] or '') | args['abovestyle'] = Styles['nav_box_label'] .. (fargs['abovestyle'] or pargs['abovestyle'] or '') | ||
sargs['abovestyle'] = 1 | sargs['abovestyle'] = 1 | ||
args['belowstyle'] = Styles['nav_box_label'] .. (pargs['belowstyle'] or '') | args['belowstyle'] = Styles['nav_box_label'] .. (fargs['belowstyle'] or pargs['belowstyle'] or '') | ||
sargs['belowstyle'] = 1 | sargs['belowstyle'] = 1 | ||
-- process oddstyle, evenstyle | -- process oddstyle, evenstyle | ||
args['oddstyle'] = | 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['oddstyle'] = 1 | ||
sargs['evenstyle'] = 1 | sargs['evenstyle'] = 1 | ||
-- process name and rawname | -- process name and rawname | ||
args['name'] = ( | args['name'] = ifnotblank((fargs['name'] or pargs['name']),'',(fargs['rawname'] or pargs['rawname'])) | ||
if isblank(args['name']) then args['navbar'] = 'plain' end | if isblank(args['name']) then args['navbar'] = 'plain' end | ||
sargs['name'] = 1 | sargs['name'] = 1 | ||
sargs['rawname'] = 1 | sargs['rawname'] = 1 | ||
-- copy the remaining args | -- copy the remaining args, with frame args overriding parent args | ||
for k, v in pairs(pargs) do | 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 | if v and v ~= '' and sargs[k] == nil then | ||
args[k] = v | args[k] = v | ||
| Line 61: | Line 66: | ||
end | end | ||
-- add allow wrap | -- add allow wrap | ||
if args['title'] and | if args['title'] and style ~= 'wide' then | ||
if not mw.ustring.match(args['title'], '<span class="wrap">') then | if not mw.ustring.match(args['title'], '<span class="wrap">') then | ||
-- probably a more efficient way to match 15 or more characters | -- probably a more efficient way to match 15 or more characters | ||
| Line 76: | Line 81: | ||
-- add navbox-vertical for non-wide format | -- add navbox-vertical for non-wide format | ||
if | if style ~= 'wide' then | ||
args['bodyclass'] = 'navbox-vertical' .. (args['bodyclass'] and (' ' .. args['bodyclass']) or '') | args['bodyclass'] = 'navbox-vertical' .. (args['bodyclass'] and (' ' .. args['bodyclass']) or '') | ||
end | end | ||
Revision as of 15:02, 27 December 2023
Documentation for this module may be created at Module:Military navigation/doc
Script error: Lua error: Internal error: The interpreter exited with status 127.
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