Module:Sidebar: Difference between revisions

Removing obsolete HTML attributes
fix incorrect navbars, and other minor fixes from sandbox
Line 2: Line 2:
-- This module implements {{Sidebar}}
-- This module implements {{Sidebar}}
--
--
require('Module:No globals')
 
local p = {}
local p = {}
 
local getArgs
local getArgs = require('Module:Arguments').getArgs
local HtmlBuilder = require('Module:HtmlBuilder')
local HtmlBuilder = require('Module:HtmlBuilder')
local navbar = require('Module:Navbar')._navbar
local navbar = require('Module:Navbar')._navbar
 
local function trimAndAddAutomaticNewline(s)
local function trimAndAddAutomaticNewline(s)
-- For compatibility with the original {{sidebar with collapsible lists}}  
-- For compatibility with the original {{sidebar with collapsible lists}}
-- implementation, which passed some parameters through {{#if}} to trim
-- implementation, which passed some parameters through {{#if}} to trim
-- their whitespace. This also triggered the automatic newline behavior.
-- their whitespace. This also triggered the automatic newline behavior.
Line 22: Line 23:
end
end


local function _sidebar(args)
function p.sidebar(frame, args)
if not args then
args = getArgs(frame)
end
local root = HtmlBuilder.create()
local root = HtmlBuilder.create()
local child = args.child and mw.text.trim(args.child) == 'yes'
local child = args.child and mw.text.trim(args.child) == 'yes'
 
if not child then
if not child then
root = root
root = root
Line 44: Line 48:
.css('font-size', '88%')
.css('font-size', '88%')
.cssText(args.bodystyle or args.style)
.cssText(args.bodystyle or args.style)
 
if args.outertitle then
if args.outertitle then
root
root
Line 56: Line 60:
.wikitext(args.outertitle)
.wikitext(args.outertitle)
end
end
 
if args.topimage then
if args.topimage then
local imageCell = root.tag('tr').tag('td')
local imageCell = root.tag('tr').tag('td')
 
imageCell
imageCell
.addClass(args.topimageclass)
.addClass(args.topimageclass)
Line 65: Line 69:
.cssText(args.topimagestyle)
.cssText(args.topimagestyle)
.wikitext(args.topimage)
.wikitext(args.topimage)
 
if args.topcaption then
if args.topcaption then
imageCell
imageCell
Line 75: Line 79:
end
end
end
end
 
if args.pretitle then
if args.pretitle then
root
root
Line 113: Line 117:
if args.image then
if args.image then
local imageCell = root.tag('tr').tag('td')
local imageCell = root.tag('tr').tag('td')
 
imageCell
imageCell
.addClass(args.imageclass)
.addClass(args.imageclass)
Line 119: Line 123:
.cssText(args.imagestyle)
.cssText(args.imagestyle)
.wikitext(args.image)
.wikitext(args.image)
 
if args.caption then
if args.caption then
imageCell
imageCell
Line 129: Line 133:
end
end
end
end
 
if args.above then
if args.above then
root
root
Line 138: Line 142:
.css('font-weight', 'bold')
.css('font-weight', 'bold')
.cssText(args.abovestyle)
.cssText(args.abovestyle)
.newline()   -- newline required for bullet-points to work
.newline() -- newline required for bullet-points to work
.wikitext(args.above)
.wikitext(args.above)
end
end
Line 170: Line 174:
.wikitext(heading)
.wikitext(heading)
end
end
 
local content = args['content' .. num]
local content = args['content' .. num]
if content then
if content then
Line 183: Line 187:
.wikitext(content)
.wikitext(content)
.done()
.done()
.newline() -- Without a linebreak after the </td>, a nested list like "* {{hlist| ...}}" doesn't parse correctly.
.newline() -- Without a linebreak after the </td>, a nested list like "* {{hlist| ...}}" doesn't parse correctly.
end
end
end
end
Line 201: Line 205:
if not child then
if not child then
local navbarArg = args.navbar or args.tnavbar
local navbarArg = args.navbar or args.tnavbar
if navbarArg ~= 'none' and navbarArg ~= 'off' then
if navbarArg ~= 'none' and navbarArg ~= 'off' and (args.name or frame:getParent():getTitle():gsub('/sandbox$', '') ~= 'Template:Sidebar') then
root
root
.tag('tr')
.tag('tr')
Line 219: Line 223:
end
end


function _collapsibleSidebar(args)
function p.collapsibleSidebar(frame)
local args = getArgs(frame)
 
args.abovestyle = 'border-top: 1px solid #aaa; border-bottom: 1px solid #aaa;' .. (args.abovestyle or '')
args.abovestyle = 'border-top: 1px solid #aaa; border-bottom: 1px solid #aaa;' .. (args.abovestyle or '')
args.belowstyle = 'border-top: 1px solid #aaa; border-bottom: 1px solid #aaa;' .. (args.belowstyle or '')
args.belowstyle = 'border-top: 1px solid #aaa; border-bottom: 1px solid #aaa;' .. (args.belowstyle or '')
args.navbarstyle = 'padding-top: 0.6em;' .. (args.navbarstyle or args.tnavbarstyle or '')
args.navbarstyle = 'padding-top: 0.6em;' .. (args.navbarstyle or args.tnavbarstyle or '')
 
local contentArgs = {}
local contentArgs = {}
 
for k, v in pairs(args) do
for k, v in pairs(args) do
local num = ('' .. k):match('^list(%d+)$')
local num = string.match(k, '^list(%d+)$')
if num then  
if num then
local expand = args.expanded and (args.expanded == 'all' or args.expanded == args['list' .. num .. 'name'])
local expand = args.expanded and (args.expanded == 'all' or args.expanded == args['list' .. num .. 'name'])
 
local row = HtmlBuilder.create('div')
local row = HtmlBuilder.create('div')
row
row
Line 260: Line 266:
.cssText(args['list' .. num .. 'style'])
.cssText(args['list' .. num .. 'style'])
.wikitext(trimAndAddAutomaticNewline(args['list' .. num]))
.wikitext(trimAndAddAutomaticNewline(args['list' .. num]))
 
contentArgs['content' .. num] = tostring(row)
contentArgs['content' .. num] = tostring(row)
end
end
Line 268: Line 274:
args[k] = v
args[k] = v
end
end
 
return _sidebar(args)
return p.sidebar(args)
end
 
function makeWrapper(func)
return function(frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return func(getArgs(frame))
end
end
end


return {
return p
sidebar = makeWrapper(_sidebar),
collapsible = makeWrapper(_collapsibleSidebar)
}