Module:Sidebar: Difference between revisions
Appearance
...again, lack of testcases are letting problems slip through to articles. I'll fix that shortly |
use mw.html |
||
Line 7: | Line 7: | ||
local getArgs = require('Module:Arguments').getArgs | local getArgs = require('Module:Arguments').getArgs | ||
local navbar = require('Module:Navbar')._navbar | local navbar = require('Module:Navbar')._navbar | ||
Line 27: | Line 26: | ||
args = getArgs(frame) | args = getArgs(frame) | ||
end | end | ||
local root = | local root = mw.html.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 | ||
:tag('table') | |||
:addClass('vertical-navbox') | |||
:addClass(args.wraplinks ~= 'true' and 'nowraplinks' or nil) | |||
:addClass(args.bodyclass or args.class) | |||
:css('float', args.float or 'right') | |||
:css('clear', (args.float == 'none' and 'both') or args.float or 'right') | |||
:css('width', args.width or '22.0em') | |||
:css('margin', args.float == 'left' and '0 1.0em 1.0em 0' or '0 0 1.0em 1.0em') | |||
:css('background', '#f9f9f9') | |||
:css('border', '1px solid #aaa') | |||
:css('padding', '0.2em') | |||
:css('border-spacing', '0.4em 0') | |||
:css('text-align', 'center') | |||
:css('line-height', '1.4em') | |||
:css('font-size', '88%') | |||
:cssText(args.bodystyle or args.style) | |||
if args.outertitle then | if args.outertitle then | ||
root | root | ||
:tag('caption') | |||
:addClass(args.outertitleclass) | |||
:css('padding-bottom', '0.2em') | |||
:css('font-size', '125%') | |||
:css('line-height', '1.2em') | |||
:css('font-weight', 'bold') | |||
:cssText(args.outertitlestyle) | |||
:wikitext(args.outertitle) | |||
end | end | ||
if args.topimage then | if args.topimage then | ||
local imageCell = root | local imageCell = root:tag('tr'):tag('td') | ||
imageCell | imageCell | ||
:addClass(args.topimageclass) | |||
:css('padding', '0.4em 0') | |||
:cssText(args.topimagestyle) | |||
:wikitext(args.topimage) | |||
if args.topcaption then | if args.topcaption then | ||
imageCell | imageCell | ||
:tag('div') | |||
:css('padding-top', '0.2em') | |||
:css('line-height', '1.2em') | |||
:cssText(args.topcaptionstyle) | |||
:wikitext(args.topcaption) | |||
end | end | ||
end | end | ||
Line 82: | Line 81: | ||
if args.pretitle then | if args.pretitle then | ||
root | root | ||
:tag('tr') | |||
:tag('td') | |||
:addClass(args.pretitleclass) | |||
:cssText(args.basestyle) | |||
:css('padding-top', args.topimage and '0.2em' or '0.4em') | |||
:css('line-height', '1.2em') | |||
:cssText(args.pretitlestyle) | |||
:wikitext(args.pretitle) | |||
end | end | ||
Line 97: | Line 96: | ||
if child then | if child then | ||
root | root | ||
:wikitext(args.title) | |||
:wikitext('</th></tr>') -- @todo replace this with unclosed again once mw.html gets it | |||
else | else | ||
root | root | ||
:tag('tr') | |||
:tag('th') | |||
:addClass(args.titleclass) | |||
:cssText(args.basestyle) | |||
:css('padding', '0.2em 0.4em 0.2em') | |||
:css('padding-top', args.pretitle and 0) | |||
:css('font-size', '145%') | |||
:css('line-height', '1.2em') | |||
:cssText(args.titlestyle) | |||
:wikitext(args.title) | |||
end | end | ||
end | end | ||
if args.image then | if args.image then | ||
local imageCell = root | local imageCell = root:tag('tr'):tag('td') | ||
imageCell | imageCell | ||
:addClass(args.imageclass) | |||
:css('padding', '0.2em 0 0.4em') | |||
:cssText(args.imagestyle) | |||
:wikitext(args.image) | |||
if args.caption then | if args.caption then | ||
imageCell | imageCell | ||
:tag('div') | |||
:css('padding-top', '0.2em') | |||
:css('line-height', '1.2em') | |||
:cssText(args.captionstyle) | |||
:wikitext(args.caption) | |||
end | end | ||
end | end | ||
Line 136: | Line 134: | ||
if args.above then | if args.above then | ||
root | root | ||
:tag('tr') | |||
:tag('td') | |||
:addClass(args.aboveclass) | |||
:css('padding', '0.3em 0.4em 0.3em') | |||
:css('font-weight', 'bold') | |||
:cssText(args.abovestyle) | |||
:newline() -- newline required for bullet-points to work | |||
:wikitext(args.above) | |||
end | end | ||
Line 164: | Line 162: | ||
if heading then | if heading then | ||
root | root | ||
:tag('tr') | |||
:tag('th') | |||
:addClass(args.headingclass) | |||
:css('padding', '0.1em') | |||
:cssText(args.basestyle) | |||
:cssText(args.headingstyle) | |||
:cssText(args['heading' .. num .. 'style']) | |||
:newline() | |||
:wikitext(heading) | |||
end | end | ||
Line 178: | Line 176: | ||
if content then | if content then | ||
root | root | ||
:tag('tr') | |||
:tag('td') | |||
:addClass(args.contentclass) | |||
:css('padding', '0 0.1em 0.4em') | |||
:cssText(args.contentstyle) | |||
:cssText(args['content' .. num .. 'style']) | |||
:newline() | |||
:wikitext(content) | |||
:done() | |||
:newline() -- Without a linebreak after the </td>, a nested list like "* {{hlist| ...}}" doesn't parse correctly. | |||
end | end | ||
end | end | ||
Line 193: | Line 191: | ||
if args.below then | if args.below then | ||
root | root | ||
:tag('tr') | |||
:tag('td') | |||
:addClass(args.belowclass) | |||
:css('padding', '0.3em 0.4em 0.3em') | |||
:css('font-weight', 'bold') | |||
:cssText(args.belowstyle) | |||
:newline() | |||
:wikitext(args.below) | |||
end | end | ||
Line 207: | Line 205: | ||
if navbarArg ~= 'none' and navbarArg ~= 'off' and (args.name or frame:getParent():getTitle():gsub('/sandbox$', '') ~= 'Template:Sidebar') then | if navbarArg ~= 'none' and navbarArg ~= 'off' and (args.name or frame:getParent():getTitle():gsub('/sandbox$', '') ~= 'Template:Sidebar') then | ||
root | root | ||
:tag('tr') | |||
:tag('td') | |||
:css('text-align', 'right') | |||
:css('font-size', '115%') | |||
:cssText(args.navbarstyle or args.tnavbarstyle) | |||
:wikitext(navbar{ | |||
args.name, | args.name, | ||
mini = 1, | mini = 1, | ||
Line 237: | Line 235: | ||
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 = | local row = mw.html.create('div') | ||
row | row | ||
:addClass('NavFrame') | |||
:addClass((not expand) and 'collapsed' or nil) | |||
:css('border', 'none') | |||
:css('padding', 0) | |||
:cssText(args.listframestyle) | |||
:cssText(args['list' .. num .. 'framestyle']) | |||
:tag('div') | |||
:addClass('NavHead') | |||
:addClass(args.listtitleclass) | |||
:css('font-size', '105%') | |||
:css('background', 'transparent') | |||
:css('text-align', 'left') | |||
:cssText(args.basestyle) | |||
:cssText(args.listtitlestyle) | |||
:cssText(args['list' .. num .. 'titlestyle']) | |||
:wikitext(trimAndAddAutomaticNewline(args['list' .. num .. 'title'] or 'List')) | |||
:done() | |||
:tag('div') | |||
:addClass('NavContent') | |||
:addClass(args.listclass) | |||
:addClass(args['list' .. num .. 'class']) | |||
:css('font-size', '105%') | |||
:css('padding', '0.2em 0 0.4em') | |||
:css('text-align', 'center') | |||
:cssText(args.liststyle) | |||
:cssText(args['list' .. num .. 'style']) | |||
:wikitext(trimAndAddAutomaticNewline(args['list' .. num])) | |||
contentArgs['content' .. num] = tostring(row) | contentArgs['content' .. num] = tostring(row) |