Module:Collapsible box
Jump to navigation
Jump to search
Implements {{Collapsible box}}.
--[=[
Implements [[Template:Collapsible box]]
]=]
local p = {} --p stands for package
local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local make_attribute_string = require('Module:Optional CSS attribute').make_attribute_string
function p._collapsible_box(args)
local title = args.title
-- outer div
-- classes
local collapsed_class = ""
if yesno(args.collapsed) or false then
collapsed_class = "mw-collapsed"
end
local outer_div_class = make_attribute_string("class", {['class'] = "mw-collapsible " .. collapsed_class .. " " .. (args.class_outer or '')})
-- style
local outer_div_padding = "0.5em"
if title then
outer_div_padding = "0"
end
local outer_div_style = make_attribute_string("style", {
margin = "0.5em auto",
padding = outer_div_padding .. " 0.5em 0.5em 0.5em",
style = args.style_outer
})
-- div
local outer_div = '<div ' .. outer_div_class .. ' ' .. outer_div_style .. '>'
-- title
-- force a <p> so we can zero out the top margin
local title_content = ""
if title then
title_content = "<span " .. make_attribute_string("class", args.class_title) .. " " .. make_attribute_string("style", args.style_title) .. ">" .. title .. "</span>"
end
local title_p = '<p style="margin:0;">' .. title_content .. '</p>'
-- content
local content_div_class = make_attribute_string("class", {class = "mw-collapsible-content " .. (args.class_content or '')})
local content_div_style = make_attribute_string("style", {style = args.style_content})
local content_div = '<div ' .. content_div_class .. content_div_style .. '>'
-- combined
local closing_divs = ''
if yesno(args.closing_div) or true then
closing_divs = '</div></div>'
end
local box = outer_div .. title_p .. content_div .. (args.content or '') .. closing_divs
end
function p.collapsible_box(frame)
return p._collapsible_box(getArgs(frame))
end
return p