Module:Navbox: Difference between revisions

From Test Wiki
1,259 bytes added ,  20 December 2022
find vanishing TemplateStyles in args, find plainlist in class args
(remove titlegroup per templatestyles section on talk page)
(find vanishing TemplateStyles in args, find plainlist in class args)
Line 285: Line 285:
end
end
return false
return false
end
-- there are a lot of list classes in the wild, so we add their TemplateStyles
local function add_list_styles()
local function add_list_templatestyles(htmlclass, templatestyles)
local frame = mw.getCurrentFrame()
if has_list_class(htmlclass) then
return frame:extensionTag{
name = 'templatestyles', args = { src = templatestyles }
}
else
return ''
end
end
-- TODO: get hlist to the point where we can do this for hlist
-- see [[MediaWiki talk:Common.css/to do#Hlist]]
local plainlist_styles = add_list_templatestyles('plainlist', 'Plainlist/styles.css')
return plainlist_styles
end
end


Line 387: Line 407:
end
end


local function add_navbox_styles()
local function add_navbox_styles(hiding_templatestyles)
local frame = mw.getCurrentFrame()
local frame = mw.getCurrentFrame()
-- This is a lambda so that it doesn't need the frame as a parameter
-- This is a lambda so that it doesn't need the frame as a parameter
Line 405: Line 425:
local child_templatestyles = add_user_styles(args[cfg.arg.child_templatestyles])
local child_templatestyles = add_user_styles(args[cfg.arg.child_templatestyles])


-- The 'navbox-styles' div exists for two reasons:
-- The 'navbox-styles' div exists to wrap the styles to work around T200206
--  1. To wrap the styles to work around T200206 more elegantly. Instead
-- more elegantly. Instead of combinatorial rules, this ends up being linear
--    of combinatorial rules, this ends up being linear number of CSS rules.
-- number of CSS rules.
--  2. To allow MobileFrontend to rip the styles out with 'nomobile' such that
--    they are not dumped into the mobile view.
return mw.html.create('div')
return mw.html.create('div')
:addClass(cfg.class.navbox_styles)
:addClass(cfg.class.navbox_styles)
:addClass(cfg.class.nomobile)
:wikitext(
:wikitext(base_templatestyles .. templatestyles .. child_templatestyles)
base_templatestyles ..
templatestyles ..
child_templatestyles ..
add_list_styles() ..
table.concat(hiding_templatestyles)
)
:done()
:done()
end
-- work around [[phab:T303378]]
-- for each arg: find all the templatestyles strip markers, insert them into a
-- table. then remove all templatestyles markers from the arg
local function move_hiding_templatestyles(args)
local gfind = string.gfind
local gsub = string.gsub
local templatestyles_markers = {}
local strip_marker_pattern = '(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)'
for k, arg in pairs(args) do
for marker in gfind(arg, strip_marker_pattern) do
table.insert(templatestyles_markers, marker)
end
args[k] = gsub(arg, strip_marker_pattern, '')
end
return templatestyles_markers
end
end


function p._navbox(navboxArgs)
function p._navbox(navboxArgs)
args = navboxArgs
args = navboxArgs
local hiding_templatestyles = move_hiding_templatestyles(args)
local listnums = {}
local listnums = {}


Line 441: Line 482:


if border == cfg.keyword.border_none then
if border == cfg.keyword.border_none then
res:node(add_navbox_styles())
res:node(add_navbox_styles(hiding_templatestyles))
local nav = res:tag('div')
local nav = res:tag('div')
:attr('role', 'navigation')
:attr('role', 'navigation')
Line 467: Line 508:
:wikitext('<div>')
:wikitext('<div>')
else
else
res:node(add_navbox_styles())
res:node(add_navbox_styles(hiding_templatestyles))
local nav = res:tag('div')
local nav = res:tag('div')
:attr('role', 'navigation')
:attr('role', 'navigation')
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.