Changes
Jump to navigation
Jump to search
add templatestyles for hlist
Line 1:
Line 1:
−--+-- This module implements {{Sidebar}}
−--
−
+
+
+
+ if args.navbar ~= cfg.i18n.navbar_none and args.navbar ~= cfg.i18n.navbar_off and+ (args.name or frame:getParent():getTitle():gsub(cfg.i18n.pattern.sandbox, '') ~=+ 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
Line 278:
Line 348:
− else
− is_centered_list_titles = false
require('strict')
−require('Module:No globals')
local cfg = mw.loadData('Module:Sidebar/configuration')
local cfg = mw.loadData('Module:Sidebar/configuration')
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', 'Plainlist/styles.css')
+ local hlist_styles = add_list_templatestyles('hlist', 'Hlist/styles.css')
+ -- 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 = 'Hlist/styles.css' }
+ }
+ 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 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
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 77:
Line 151:
: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)
:css('width', args.width or nil)
:css('width', args.width or nil)
Line 235:
Line 309:
end
end
− if not child then
+ 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
end
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 ''),
(child and cfg.i18n.category.child or ''),
Line 333:
Line 405:
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
− end
end