Editing Module:Sidebar

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.

Latest revision Your text
Line 2: Line 2:
 
-- This module implements {{Sidebar}}
 
-- This module implements {{Sidebar}}
 
--
 
--
require('Module:No globals')
+
 
 
 
local p = {}
 
local p = {}
 
+
local getArgs = require('Module:Arguments').getArgs
+
local getArgs
 +
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 22:
 
end
 
end
  
function p.sidebar(frame, args)
+
local function _sidebar(args)
if not args then
+
local root = HtmlBuilder.create()
args = getArgs(frame)
 
end
 
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')
+
.tag('table')
:addClass('vertical-navbox')
+
.addClass('vertical-navbox')
:addClass(args.wraplinks ~= 'true' and 'nowraplinks' or nil)
+
.addClass(args.wraplinks ~= 'true' and 'nowraplinks')
:addClass(args.bodyclass or args.class)
+
.addClass(args.bodyclass or args.class)
:css('float', args.float or 'right')
+
.attr('cellspacing', args.cellspacing or 5)
:css('clear', (args.float == 'none' and 'both') or args.float or 'right')
+
.attr('cellpadding', args.cellpadding or 0)
:css('width', args.width or '22.0em')
+
.css('float', args.float or 'right')
:css('margin', args.float == 'left' and '0 1.0em 1.0em 0' or '0 0 1.0em 1.0em')
+
.css('clear', (args.float == 'none' and 'both') or args.float or 'right')
:css('background', '#f9f9f9')
+
.css('width', args.width or '22.0em')
:css('border', '1px solid #aaa')
+
.css('margin', args.float == 'left' and '0 1.0em 1.0em 0' or '0 0 1.0em 1.0em')
:css('padding', '0.2em')
+
.css('background', '#f9f9f9')
:css('border-spacing', '0.4em 0')
+
.css('border', '1px solid #aaa')
:css('text-align', 'center')
+
.css('padding', '0.2em')
:css('line-height', '1.4em')
+
.css('border-spacing', '0.4em 0')
:css('font-size', '88%')
+
.css('text-align', 'center')
:cssText(args.bodystyle or args.style)
+
.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')
+
.tag('caption')
:addClass(args.outertitleclass)
+
.addClass(args.outertitleclass)
:css('padding-bottom', '0.2em')
+
.css('padding-bottom', '0.2em')
:css('font-size', '125%')
+
.css('font-size', '125%')
:css('line-height', '1.2em')
+
.css('line-height', '1.2em')
:css('font-weight', 'bold')
+
.css('font-weight', 'bold')
:cssText(args.outertitlestyle)
+
.cssText(args.outertitlestyle)
: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)
:css('padding', '0.4em 0')
+
.css('padding', '0.4em 0')
:cssText(args.topimagestyle)
+
.cssText(args.topimagestyle)
:wikitext(args.topimage)
+
.wikitext(args.topimage)
 
+
 
if args.topcaption then
 
if args.topcaption then
 
imageCell
 
imageCell
:tag('div')
+
.tag('div')
:css('padding-top', '0.2em')
+
.css('padding-top', '0.2em')
:css('line-height', '1.2em')
+
.css('line-height', '1.2em')
:cssText(args.topcaptionstyle)
+
.cssText(args.topcaptionstyle)
:wikitext(args.topcaption)
+
.wikitext(args.topcaption)
 
end
 
end
 
end
 
end
 
+
 
if args.pretitle then
 
if args.pretitle then
 
root
 
root
:tag('tr')
+
.tag('tr')
:tag('td')
+
.tag('td')
:addClass(args.pretitleclass)
+
.addClass(args.pretitleclass)
:cssText(args.basestyle)
+
.cssText(args.basestyle)
:css('padding-top', args.topimage and '0.2em' or '0.4em')
+
.css('padding-top', args.topimage and '0.2em' or '0.4em')
:css('line-height', '1.2em')
+
.css('line-height', '1.2em')
:cssText(args.pretitlestyle)
+
.cssText(args.pretitlestyle)
:wikitext(args.pretitle)
+
.wikitext(args.pretitle)
 
end
 
end
  
Line 96: Line 95:
 
if child then
 
if child then
 
root
 
root
:wikitext(args.title)
+
.wikitext(args.title)
:wikitext('</th></tr>') -- @todo replace this with unclosed again once mw.html gets it
+
.tag('/th', {unclosed = true})
 +
.tag('/tr', {unclosed = true})
 
else
 
else
 
root
 
root
:tag('tr')
+
.tag('tr')
:tag('th')
+
.tag('th')
:addClass(args.titleclass)
+
.addClass(args.titleclass)
:cssText(args.basestyle)
+
.cssText(args.basestyle)
:css('padding', '0.2em 0.4em 0.2em')
+
.css('padding', '0.2em 0.4em 0.2em')
:css('padding-top', args.pretitle and 0)
+
.css('padding-top', args.pretitle and 0)
:css('font-size', '145%')
+
.css('font-size', '145%')
:css('line-height', '1.2em')
+
.css('line-height', '1.2em')
:cssText(args.titlestyle)
+
.cssText(args.titlestyle)
:wikitext(args.title)
+
.wikitext(args.title)
 
end
 
end
 
end
 
end
  
 
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)
:css('padding', '0.2em 0 0.4em')
+
.css('padding', '0.2em 0 0.4em')
:cssText(args.imagestyle)
+
.cssText(args.imagestyle)
:wikitext(args.image)
+
.wikitext(args.image)
 
+
 
if args.caption then
 
if args.caption then
 
imageCell
 
imageCell
:tag('div')
+
.tag('div')
:css('padding-top', '0.2em')
+
.css('padding-top', '0.2em')
:css('line-height', '1.2em')
+
.css('line-height', '1.2em')
:cssText(args.captionstyle)
+
.cssText(args.captionstyle)
:wikitext(args.caption)
+
.wikitext(args.caption)
 
end
 
end
 
end
 
end
 
+
 
if args.above then
 
if args.above then
 
root
 
root
:tag('tr')
+
.tag('tr')
:tag('td')
+
.tag('td')
:addClass(args.aboveclass)
+
.addClass(args.aboveclass)
:css('padding', '0.3em 0.4em 0.3em')
+
.css('padding', '0.3em 0.4em 0.3em')
: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 162: Line 162:
 
if heading then
 
if heading then
 
root
 
root
:tag('tr')
+
.tag('tr')
:tag('th')
+
.tag('th')
:addClass(args.headingclass)
+
.addClass(args.headingclass)
:css('padding', '0.1em')
+
.css('padding', '0.1em')
:cssText(args.basestyle)
+
.cssText(args.basestyle)
:cssText(args.headingstyle)
+
.cssText(args.headingstyle)
:cssText(args['heading' .. num .. 'style'])
+
.cssText(args['heading' .. num .. 'style'])
:newline()
+
.newline()
:wikitext(heading)
+
.wikitext(heading)
 
end
 
end
 
+
 
local content = args['content' .. num]
 
local content = args['content' .. num]
 
if content then
 
if content then
 
root
 
root
:tag('tr')
+
.tag('tr')
:tag('td')
+
.tag('td')
:addClass(args.contentclass)
+
.addClass(args.contentclass)
:css('padding', '0 0.1em 0.4em')
+
.css('padding', '0 0.1em 0.4em')
:cssText(args.contentstyle)
+
.cssText(args.contentstyle)
:cssText(args['content' .. num .. 'style'])
+
.cssText(args['content' .. num .. 'style'])
:newline()
+
.newline()
: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 191: Line 191:
 
if args.below then
 
if args.below then
 
root
 
root
:tag('tr')
+
.tag('tr')
:tag('td')
+
.tag('td')
:addClass(args.belowclass)
+
.addClass(args.belowclass)
:css('padding', '0.3em 0.4em 0.3em')
+
.css('padding', '0.3em 0.4em 0.3em')
:css('font-weight', 'bold')
+
.css('font-weight', 'bold')
:cssText(args.belowstyle)
+
.cssText(args.belowstyle)
:newline()
+
.newline()
:wikitext(args.below)
+
.wikitext(args.below)
 
end
 
end
  
 
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' and (args.name or frame:getParent():getTitle():gsub('/sandbox$', '') ~= 'Template:Sidebar') then
+
if navbarArg ~= 'none' and navbarArg ~= 'off' then
 
root
 
root
:tag('tr')
+
.tag('tr')
:tag('td')
+
.tag('td')
:css('text-align', 'right')
+
.css('text-align', 'right')
:css('font-size', '115%')
+
.css('font-size', '115%')
:cssText(args.navbarstyle or args.tnavbarstyle)
+
.cssText(args.navbarstyle or args.tnavbarstyle)
:wikitext(navbar{
+
.wikitext(navbar{
 
args.name,
 
args.name,
 
mini = 1,
 
mini = 1,
Line 221: Line 221:
 
end
 
end
  
function p.collapsible(frame)
+
function _collapsibleSidebar(args)
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 '')
if not args.name and frame:getParent():getTitle():gsub('/sandbox$', '') == 'Template:Sidebar with collapsible lists' then
+
args.navbar = 'none'
 
end
 
 
 
 
local contentArgs = {}
 
local contentArgs = {}
 
+
 
for k, v in pairs(args) do
 
for k, v in pairs(args) do
local num = string.match(k, '^list(%d+)$')
+
local num = ('' .. k):match('^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 = mw.html.create('div')
+
local row = HtmlBuilder.create('div')
 
row
 
row
:addClass('NavFrame')
+
.addClass('NavFrame')
:addClass((not expand) and 'collapsed' or nil)
+
.addClass((not expand) and 'collapsed')
:css('border', 'none')
+
.css('border', 'none')
:css('padding', 0)
+
.css('padding', 0)
:cssText(args.listframestyle)
+
.cssText(args.listframestyle)
:cssText(args['list' .. num .. 'framestyle'])
+
.cssText(args['list' .. num .. 'framestyle'])
:tag('div')
+
.tag('div')
:addClass('NavHead')
+
.addClass('NavHead')
:addClass(args.listtitleclass)
+
.addClass(args.listtitleclass)
:css('font-size', '105%')
+
.css('font-size', '105%')
:css('background', 'transparent')
+
.css('background', 'transparent')
:css('text-align', 'left')
+
.css('text-align', 'left')
:cssText(args.basestyle)
+
.cssText(args.basestyle)
:cssText(args.listtitlestyle)
+
.cssText(args.listtitlestyle)
:cssText(args['list' .. num .. 'titlestyle'])
+
.cssText(args['list' .. num .. 'titlestyle'])
:wikitext(trimAndAddAutomaticNewline(args['list' .. num .. 'title'] or 'List'))
+
.wikitext(trimAndAddAutomaticNewline(args['list' .. num .. 'title'] or 'List'))
:done()
+
.done()
:tag('div')
+
.tag('div')
:addClass('NavContent')
+
.addClass('NavContent')
:addClass(args.listclass)
+
.addClass(args.listclass)
:addClass(args['list' .. num .. 'class'])
+
.addClass(args['list' .. num .. 'class'])
:css('font-size', '105%')
+
.css('font-size', '105%')
:css('padding', '0.2em 0 0.4em')
+
.css('padding', '0.2em 0 0.4em')
:css('text-align', 'center')
+
.css('text-align', 'center')
:cssText(args.liststyle)
+
.cssText(args.liststyle)
: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 275: Line 270:
 
args[k] = v
 
args[k] = v
 
end
 
end
 
+
return p.sidebar(frame, args)
+
return _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 p
+
return {
 +
sidebar = makeWrapper(_sidebar),
 +
collapsible = makeWrapper(_collapsibleSidebar)
 +
}

Please note that all contributions to Guild of Archivists may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see GoArch:Copyrights for details). Do not submit copyrighted work without permission!

Cancel Editing help (opens in new window)

Template used on this page: