Difference between revisions of "Module:Sidebar"
Jump to navigation
Jump to search
move these items to config, discovered during work at meta
m (1 revision imported) |
en>Izno (move these items to config, discovered during work at meta) |
||
Line 1: | Line 1: | ||
require('strict') | |||
require(' | |||
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', cfg.i18n.plainlist_templatestyles) | |||
local hlist_styles = add_list_templatestyles('hlist', cfg.i18n.hlist_templatestyles) | |||
-- 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.hlist_templatestyles} | |||
} | |||
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 235: | Line 309: | ||
end | end | ||
if not child | 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 | ||
Line 278: | Line 348: | ||
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 | ||