Changes
Jump to navigation
Jump to search
-- For compatibility with the original {{sidebar with collapsible lists}} -- implementation, which passed some parameters through {{#if}} to trim -- their whitespace. This also triggered the automatic newline behavior. -- ([[meta:Help:Newlines and spaces#Automatic newline]]) s = mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1") if mw.ustring.find(s, '^[#*:;]') or mw.ustring.find(s, '^{|') then return '\n' .. s else return s end
local root = HtmlBuilder.create() local child = args.child and mw.text.trim(args.child) == 'tableyes') if not child then root = root .tag('table') .addClass('vertical-navbox') .addClass(args.wraplinks ~= 'true' and 'nowraplinks') .addClass(args.bodyclass or args.class) .attr('cellspacing', args.cellspacing or 5) .attr('cellpadding', args.cellpadding or 0) .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 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 if args.topimage then local imageCell = root.tag('tr').tag('td') imageCell .addClass(args.topimageclass) .css('padding', '0.4em 0') .cssText(args.topimagestyle) .wikitext(args.topimage) if args.topcaption then imageCell .tag('div') .css('padding-top', '0.2em') .css('line-height', '1.2em') .cssText(args.topcaptionstyle) .wikitext(args.topcaption) end end if args.pretitle then 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
if args.outertitle then 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
if args.topimage title then local imageCell = if child then root.tag('tr').tag('td') imageCell .addClass(args.topimageclass) .css('padding', '0.4em 0') .cssText(args.topimagestyle) .wikitext(args.topimagetitle) if args.topcaption then imageCell .tag('div') .css('padding-top/th', '0.2em'{unclosed = true}) .csstag('line-height/tr', '1.2em') .cssText(args.topcaptionstyle{unclosed = true}) .wikitext(args.topcaption) end end else if args.pretitle then root .tag('tr') .tag('tdth') .addClass(args.pretitleclasstitleclass) .cssText(args.basestyle) .css('padding', '0.2em 0.4em 0.2em') .css('padding-top', args.topimage pretitle and '0) .2emcss('font-size' or , '0.4em145%') .css('line-height', '1.2em') .cssText(args.pretitlestyletitlestyle) .wikitext(args.pretitletitle) end end
if args.title image then local imageCell = root .tag('tr') .tag('thtd') imageCell .addClass(args.titleclassimageclass) .css('padding', '0.2em 0 0.4em') .cssText(args.basestyleimagestyle) .wikitext(args.image) if args.caption then imageCell .tag('div') .css('padding-top', '0.2em 0') .4em 0css('line-height', '1.2em') .cssText(args.captionstyle) .wikitext(args.caption) end end if args.above then root .tag('tr') .csstag('padding-toptd', ) .addClass(args.pretitle and 0aboveclass) .css('font-sizepadding', '145%0.3em 0.4em 0.3em') .css('linefont-heightweight', '1.2embold') .cssText(args.titlestyleabovestyle) .newline() -- newline required for bullet-points to work .wikitext(args.titleabove) end
if args.image then local imageCell rowNums = root.tag('tr').tag('td'){} imageCell .addClass for k, v in pairs(args.imageclass)do .css('padding k = ', '0.2em 0 0.4em')k .cssText local num = k:match(args.imagestyle) .wikitext'^heading(args.image%d+) if args.caption then imageCell .tag('div$') .cssor k:match('padding-top', '0.2em^content(%d+)$') if num then table.cssinsert('line-height'rowNums, '1.2em') .cssTexttonumber(args.captionstylenum) .wikitext(args.caption) end end if args.above then root table.tagsort('tr'rowNums) .tag -- remove duplicates from the list ('td') e.addClass(argsg.aboveclass3 will be duplicated if both heading3 and content3 are specified) .css('padding' for i = #rowNums, 1, '0.3em 0.4em 0.3em')-1 do .css('font if rowNums[i] == rowNums[i -weight', 'bold')1] then table.cssTextremove(args.abovestylerowNums, i) .newline() -- newline required for bullet-points to work .wikitext(args.above) end end
local rowNums = {} for ki, v num in pairsipairs(argsrowNums) do k local heading = args['heading' .. knum] if heading then root local num = k:match .tag('^heading(%d+)$tr') or k:match .tag('^contentth') .addClass(%d+args.headingclass)$ .css('padding', '0.1em') if num then table .cssText(args.basestyle) .insertcssText(rowNums, tonumberargs.headingstyle) .cssText(args['heading' .. num.. 'style']) .newline() .wikitext(heading) end end local content = args['content' .. num] if content then root table .sorttag(rowNums'tr') -- remove duplicates from the list .tag(e'td') .gaddClass(args. 3 will be duplicated if both heading3 and content3 are specifiedcontentclass) for i = #rowNums .css('padding', 1, -1 do'0 0.1em 0.4em') .cssText(args.contentstyle) if rowNums .cssText(args[i'content' .. num .. 'style'] == rowNums[i - 1] then) .newline() .wikitext(content) .done() table .removenewline(rowNums) -- Without a linebreak after the </td>, i)a nested list like "* {{hlist| ...}}" doesn't parse correctly. end end
for i, num in ipairs(rowNums) do local heading = if args['heading' .. num] if heading below then root .tag('tr') .tag('thtd') .addClass(args.headingclassbelowclass) .css('padding', '0.1em') 3em 0.cssText(args.basestyle) .cssText(args.headingstyle) .cssText(args['heading' .. num .. 'style']) .wikitext(heading) end local content = args['content' .. num] if content then root .tag('tr') 4em 0.tag('td3em') .addClass(args.contentclass) .css('paddingfont-weight', '0 0.1em 0.4embold') .cssText(args.contentstylebelowstyle) .cssText(args['content' .. num .. 'style']) .newline() .wikitext(content) .done() args.newline(below) -- Without a linebreak after the </td>, a nested list like "* {{hlist| ...}}" doesn't parse correctly. end end
if not child then local navbarArg = args.below navbar or args.tnavbar if navbarArg ~= 'none' and navbarArg ~= 'off' then root .tag('tr') .tag('td') .addClass(args.belowclass) .css('paddingtext-align', '0.3em 0.4em 0.3emright') .css('font-weightsize', 'bold115%') .cssText(args.belowstylenavbarstyle or args.tnavbarstyle) .wikitext(navbar{ args.newlinename or mw.title.getCurrentTitle().fullText, mini = 1, fontstyle = args.wikitext(navbarfontstyle or args.belowtnavbarfontstyle }) end end
local navbarArg = args.navbar or args.tnavbar if navbarArg ~= 'none' and navbarArg ~= 'off' then root .tag('tr') .tag('td') .css('text-align', 'right') .css('font-size', '115%') .cssText(args.navbarstyle or args.tnavbarstyle) .wikitext(Navbar.navbar({ args.name or mw.title.getCurrentTitle().fullText, mini = 1, fontstyle = args.navbarfontstyle or args.tnavbarfontstyle })) end return tostring(root)
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.navbarstyle = 'padding-top: 0.6em;' .. (args.navbarstyle or args.tnavbarstyle or '') local contentArgs = {} for k, v in pairs(args) do local num = ('' .. k):match('^list(%d+)$') if num then local expand = args.expanded and (args.expanded == 'all' or args.expanded == args['list' .. num .. 'name']) local row = HtmlBuilder.create('div') row .addClass('NavFrame') .addClass((not expand) and 'collapsed') .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) end end
for k, v in pairs(contentArgs) do args[k] = v end return _sidebar(args)
return function(frame) local origArgs if frame == mw.getCurrentFrame() then -- We're being called via #invoke. If the invoking template passed any args, use -- them. Otherwise, use the args that were passed into the template. origArgs = frame:getParent().args for k, v in pairs(frame.args) do origArgs = frame.args break end else -- We're being called from another module or from the debug console, so assume -- the args are passed in directly. origArgs = frame end -- ParserFunctions considers the empty string to be false, so to preserve the previous -- behavior of the template, change any empty arguments to nil, so Lua will consider -- them false too. local args = {} for k, v in pairs(origArgs) do if v ~= '' then args[k] = v end end return func(args) end
sidebar = makeWrapper(_sidebar), collapsible = makeWrapper(_collapsibleSidebar)
all test cases look good - merge from sandbox
local HtmlBuilder = require('Module:HtmlBuilder')
local Navbar navbar = require('Module:Navbar')._navbar
local function trimAndAddAutomaticNewline(s)
end
local function _sidebar(args)
end
function _collapsibleSidebar(args)
end
function makeWrapper(func)
end
return {
}