Changes
Jump to navigation
Jump to search
Line 1:
Line 1:
− --+
− -- This module implements {{Sidebar}}
− --
−
Line 54:
Line 51:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Line 65:
Line 138:
+
Line 77:
Line 151:
− +
Line 235:
Line 309:
− +
− 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:
+
+
Line 333:
Line 405:
− +
− else
− is_centered_list_titles = false
add templatestyles for hlist
require('strict')
require('Module:No globals')
local cfg = mw.loadData('Module:Sidebar/configuration')
local cfg = mw.loadData('Module:Sidebar/configuration')
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
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
: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)
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 ''),
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