Changes

m
1 revision imported
Line 1: Line 1: −
--
+
require('strict')
-- This module implements {{Sidebar}}
  −
--
  −
require('Module:No globals')
   
local cfg = mw.loadData('Module:Sidebar/configuration')
 
local cfg = mw.loadData('Module:Sidebar/configuration')
   Line 48: Line 45:  
Finds whether a sidebar has a subgroup sidebar.
 
Finds whether a sidebar has a subgroup sidebar.
 
]]
 
]]
local function hasSubgroup(s)
+
local function detectChild(s)
 
if mw.ustring.find(s, cfg.i18n.pattern.subgroup) then
 
if mw.ustring.find(s, cfg.i18n.pattern.subgroup) then
 
return true
 
return true
Line 54: Line 51:  
return false
 
return false
 
end
 
end
 +
end
 +
 +
local function has_navbar(navbar_mode, sidebar_name)
 +
return navbar_mode ~= cfg.i18n.navbar_none and
 +
navbar_mode ~= cfg.i18n.navbar_off and
 +
(
 +
sidebar_name or
 +
mw.getCurrentFrame():getParent():getTitle():gsub(cfg.i18n.pattern.sandbox, '') ~=
 +
cfg.i18n.title_not_to_add_navbar
 +
)
 +
end
 +
 +
local function has_list_class(args, htmlclass)
 +
local patterns = {
 +
'^' .. htmlclass .. '$',
 +
'%s' .. htmlclass .. '$',
 +
'^' .. htmlclass .. '%s',
 +
'%s' .. htmlclass .. '%s'
 +
}
 +
 +
for arg, value in pairs(args) do
 +
if type(arg) == 'string' and mw.ustring.find(arg, 'class') then
 +
for _, pattern in ipairs(patterns) do
 +
if mw.ustring.find(args[arg] or '', pattern) then
 +
return true
 +
end
 +
end
 +
end
 +
end
 +
return false
 +
end
 +
 +
-- there are a lot of list classes in the wild, so we add their TemplateStyles
 +
local function add_list_styles(args)
 +
local frame = mw.getCurrentFrame()
 +
local function add_list_templatestyles(htmlclass, templatestyles)
 +
if has_list_class(args, htmlclass) then
 +
return frame:extensionTag{
 +
name = 'templatestyles', args = { src = templatestyles }
 +
}
 +
else
 +
return ''
 +
end
 +
end
 +
 +
local plainlist_styles = add_list_templatestyles('plainlist', cfg.i18n.templatestyles.plainlist)
 +
local hlist_styles = add_list_templatestyles('hlist', cfg.i18n.templatestyles.hlist)
 +
 +
-- a second workaround for [[phab:T303378]]
 +
-- when that issue is fixed, we can actually use has_navbar not to emit the
 +
-- tag here if we want
 +
if has_navbar(args.navbar, args.name) and hlist_styles == '' then
 +
hlist_styles = frame:extensionTag{
 +
name = 'templatestyles', args = { src = cfg.i18n.templatestyles.hlist}
 +
}
 +
end
 +
 +
-- hlist -> plainlist is best-effort to preserve old Common.css ordering. [hlist_note]
 +
return hlist_styles .. plainlist_styles
 +
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 gmatch = string.gmatch
 +
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 gmatch(arg, strip_marker_pattern) do
 +
table.insert(templatestyles_markers, marker)
 +
end
 +
args[k] = gsub(arg, strip_marker_pattern, '')
 +
end
 +
return templatestyles_markers
 
end
 
end
   Line 65: Line 138:  
args = getArgs(frame)
 
args = getArgs(frame)
 
end
 
end
 +
local hiding_templatestyles = table.concat(move_hiding_templatestyles(args))
 
local root = mw.html.create()
 
local root = mw.html.create()
 
local child = args.child and mw.text.trim(args.child) == cfg.i18n.child_yes
 
local child = args.child and mw.text.trim(args.child) == cfg.i18n.child_yes
Line 70: Line 144:  
root = root:tag('table')
 
root = root:tag('table')
 
if not child then
 
if not child then
root  
+
root
 
:addClass(cfg.i18n.class.sidebar)
 
:addClass(cfg.i18n.class.sidebar)
-- force collapsibleclass to be sidebar-collapse otherwise output nothing
+
-- force collapsibleClass to be sidebar-collapse otherwise output nothing
 
:addClass(collapsibleClass == cfg.i18n.class.collapse and cfg.i18n.class.collapse or nil)
 
:addClass(collapsibleClass == cfg.i18n.class.collapse and cfg.i18n.class.collapse or nil)
 
:addClass('nomobile')
 
:addClass('nomobile')
 
:addClass(args.float == cfg.i18n.float_none and cfg.i18n.class.float_none or nil)
 
:addClass(args.float == cfg.i18n.float_none and cfg.i18n.class.float_none or nil)
 
:addClass(args.float == cfg.i18n.float_left and cfg.i18n.class.float_left or nil)
 
:addClass(args.float == cfg.i18n.float_left and cfg.i18n.class.float_left or nil)
:addClass(args.wraplinks == cfg.i18n.wrap_true and cfg.i18n.class.wraplinks or nil)
+
:addClass(args.wraplinks ~= cfg.i18n.wrap_true and cfg.i18n.class.wraplinks or nil)
 
:addClass(args.bodyclass or args.class)
 
:addClass(args.bodyclass or args.class)
 +
:attr('role', 'navigation')
 
:css('width', args.width or nil)
 
:css('width', args.width or nil)
 
:cssText(args.bodystyle or args.style)
 
:cssText(args.bodystyle or args.style)
Line 188: Line 263:  
end
 
end
    +
local hasChild = false
 
for i, num in ipairs(rowNums) do
 
for i, num in ipairs(rowNums) do
 
local heading = args['heading' .. num]
 
local heading = args['heading' .. num]
Line 206: Line 282:  
local content = args['content' .. num]
 
local content = args['content' .. num]
 
if content then
 
if content then
 +
local baseContentClass = cfg.i18n.class.content
 +
if detectChild(content) then
 +
baseContentClass = cfg.i18n.class.content_with_subgroup
 +
hasChild = true
 +
end
 
root
 
root
 
:tag('tr')
 
:tag('tr')
 
:tag('td')
 
:tag('td')
:addClass(hasSubgroup(content) and cfg.i18n.class.content_with_subgroup
+
:addClass(baseContentClass)
or cfg.i18n.class.content)
   
:addClass(args.contentclass)
 
:addClass(args.contentclass)
 
:addClass(args['content' .. num .. 'class'])
 
:addClass(args['content' .. num .. 'class'])
Line 235: Line 315:  
end
 
end
    +
if not child and has_navbar(args.navbar, args.name) then
 +
root
 +
:tag('tr')
 +
:tag('td')
 +
:addClass(cfg.i18n.class.navbar)
 +
:cssText(args.navbarstyle)
 +
:wikitext(require('Module:Navbar')._navbar{
 +
args.name,
 +
mini = 1,
 +
fontstyle = args.navbarfontstyle
 +
})
 +
end
 +
 +
local base_templatestyles = ''
 
if not child then
 
if not child then
if args.navbar ~= cfg.i18n.navbar_none and args.navbar ~= cfg.i18n.navbar_off and
+
base_templatestyles = frame:extensionTag{
(args.name or frame:getParent():getTitle():gsub(cfg.i18n.pattern.sandbox, '') ~=
+
name = 'templatestyles', args = { src = cfg.i18n.templatestyles.sidebar }
cfg.i18n.title_not_to_add_navbar) then
+
}
root
  −
:tag('tr')
  −
:tag('td')
  −
:addClass(cfg.i18n.class.navbar)
  −
:cssText(args.navbarstyle)
  −
:wikitext(require('Module:Navbar')._navbar{
  −
args.name,
  −
mini = 1,
  −
fontstyle = args.navbarfontstyle
  −
})
  −
end
   
end
 
end
  −
local base_templatestyles = frame:extensionTag{
  −
name = 'templatestyles', args = { src = cfg.i18n.templatestyles }
  −
}
   
 
 
local templatestyles = ''
 
local templatestyles = ''
Line 278: Line 357:     
return table.concat({
 
return table.concat({
 +
add_list_styles(args), -- see [hlist_note] above about ordering
 
base_templatestyles,
 
base_templatestyles,
 
templatestyles,
 
templatestyles,
 
child_templatestyles,
 
child_templatestyles,
 
grandchild_templatestyles,
 
grandchild_templatestyles,
 +
hiding_templatestyles,
 
tostring(root),
 
tostring(root),
(child and cfg.i18n.category.child or ''),
+
(hasChild and cfg.i18n.category.child or ''),
 
categorizeTemplatesWithInlineStyles(args)
 
categorizeTemplatesWithInlineStyles(args)
 
})
 
})
Line 311: Line 392:  
:cssText(args.basestyle)
 
:cssText(args.basestyle)
 
:cssText(args.listtitlestyle)
 
:cssText(args.listtitlestyle)
 +
:cssText('color: var(--color-base)')
 
:cssText(args['list' .. num .. 'titlestyle'])
 
:cssText(args['list' .. num .. 'titlestyle'])
 
:node(title)
 
:node(title)
Line 333: Line 415:  
local contentArgs = {}
 
local contentArgs = {}
 
 
local is_centered_list_titles
+
local is_centered_list_titles = false
 
if args['centered list titles'] and args['centered list titles'] ~= '' then
 
if args['centered list titles'] and args['centered list titles'] ~= '' then
 
is_centered_list_titles = true
 
is_centered_list_titles = true
else
  −
is_centered_list_titles = false
   
end
 
end
  
confirmed, superuser, Administrators
930

edits