local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local p = {}
function p._box(args)
local width = args.width or 'auto'
local class = 'barbox'
if args.float == 'left' or args.float == 'right' or args.float == 'none' then
class = 'barbox t' .. args.float
elseif args.float == 'center' then
class = 'barbox tnone'
end
local output = {}
local css = ((args.css or '') ~= '') and args.css or 'Template:Bar box/styles.css'
output[1] = mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = {src=args.css} }
if (args.float == 'left') or (args.float == 'right') then
output[2] = ''
output[12] = ''
else
output[2] = '<table style="margin:' .. ( (args.float == 'center') and '0 auto' or 'auto' ) .. '; border:none;"><tr><td style="border:none; padding:0;">'
output[12] = '</td></tr></table>[[Category:Pages using bar box without float left or float right|' .. ( (width == 'auto') and 'Ω' or '' ) .. mw.title.getCurrentTitle().text .. ']]'
end
output[3] =
'<div class="' .. class .. '" style="overflow-x: auto;' .. (args.style or '') .. '">\n' ..
'<div style="border:' .. (args.border_width or '1') .. 'px solid silver; font-size:88%; padding:0.4em; width:' .. width .. '; background: ' .. (args['background-color'] or 'white') .. ';">\n' ..
'<table style="text-align:left; border-collapse:collapse; width:100%;">\n'
if args.title then
output[4] =
'<tr style="background:' .. (args.titlebar or 'none') .. '">' ..
'<th style="text-align:center;" colspan="5">' .. args.title .. '</th>' ..
'</tr>\n'
else
output[4] = ''
end
output[5] =
'<tr style="font-size:88%; height:4px;">\n' ..
'<td ' .. (args.left2 and '' or 'colspan="2"') .. ' style="padding:0 4px; text-align:left;">' ..
(args.left1 or '') ..
'</td>\n'
if args.left2 then
output[6] = '<td style="padding:0 4px; text-align:right;">' .. args.left2 .. '</td>\n'
else
output[6] = ''
end
output[7] = '<td style="width:' .. (args.barwidth or '100px') .. '; text-align:left;"></td>\n' ..
'<td ' .. (args.right2 and '' or 'colspan="2"') .. ' style="padding:0 4px; width:1em; text-align:right;">' ..
(args.right1 or '') ..
'</td>\n'
if args.right2 then
output[8] = '<td style="padding:0 4px; text-align:right;">' .. args.right2 .. '</td>\n'
else
output[8] = ''
end
output[9] = '</tr>\n' .. (args.bars or '')
if args.caption then
output[10] = '<tr><td colspan="5" style="padding:5px; text-align:left;">' .. args.caption .. '</td></tr>\n'
else
output[10] = ''
end
output[11] = '</table>\n</div>\n</div>\n'
-- output[12] defined above
return table.concat(output)
end
function p._stacked(args)
local function _align(n, default)
if (args.align or '') ~= '' then
local a = mw.ustring.sub(args.align,n,n)
if a == 'l' then
return 'left'
elseif a == 'c' then
return 'center'
elseif a == 'r' then
return 'right'
elseif a == 'd' then
return default
end
end
return default
end
local output = {}
if (args.id or '') ~= '' then
output[1] = '<tr class="mw-collapsible' .. ( yesno(args.collapsed) and ' mw-collapsed' or '') ..
'" id="mw-customcollapsible-' .. args.id .. '"}}>\n'
else
output[1] = '<tr>\n'
end
output[2] =
'<td ' .. (args.note1 and '' or 'colspan="2" ') ..
'style="text-align:' .. _align(1,'left') .. '" class="bb-04em">' ..
mw.text.trim(args[1] or '') ..
'</td>\n'
if (args.note1 or '') ~= '' then
output[3] =
'<td style="text-align:' .. _align(2,'right') .. '" class="bb-04em">' ..
args.note1 ..
'</td>\n'
else
output[3] = ''
end
output[4] = '<td class="bb-lr">\n'
for i=1,5,1 do
if ( (tonumber(args['title' .. i]) or 0) == 0) or ( (tonumber(args[(2*i) + 2]) or 0) == 0) then
output[i+4] = ''
else
output[i+4] =
'<div title=' .. args['title' .. i] ..
' style="background:' .. (args[(2*i) + 1] or 'gray') ..
';width:' .. mw.text.trim(args[(2*i) + 2]) .. 'px" class="bb-fl">' ..
'​' ..
'</div>\n'
end
end
output[10] = '</td>\n'
output[11] =
'<td ' .. (args.note2 and '' or 'colspan="2" ') ..
'style="text-align:' .. _align(3,'left') .. '" class="bb-04em">' ..
mw.text.trim(args[2] or '') ..
'</td>\n'
if (args.note2 or '') ~= '' then
output[12] =
'<td style="text-align:' .. _align(4,'right') .. '" class="bb-04em">' ..
args.note2 ..
'</td>\n'
else
output[12] = ''
end
output[13] = '</tr>\n'
return table.concat(output)
end
function p.barBox(frame)
local args = getArgs(frame, {
valueFunc = function (key, value)
if value then
value = mw.text.trim(value)
if (key == 'width') or (key == 'float') then
value = mw.ustring.lower(value)
end
if value ~= '' then
return value
end
end
return nil
end
})
return p._barBox(args)
end
function p.barStacked(frame)
local args = getArgs(frame, {
valueFunc = function (key, value)
if value then
value = mw.text.trim(value)
if (key == 'collapsed') or (key == 'align') then
value = mw.ustring.lower(value)
end
if value ~= '' then
return value
end
end
return nil
end
})
return p._barBox(args)
end
return p