Mô đun:Bar box

local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')

local function is(v)
return (v or ) ~=
end

local function widths(w,d)
local width = is(w) and w or d
if tonumber(width) then width = width .. 'px' end
return width
end

local p = {}

function p._box(args)
local width = widths(args.width,'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 = {}

output[1] = mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = {src='Module:Bar box/styles.css'} }

output[2] = is(args.css) and (mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = {src=args.css} }) or

if (args.float 'left') or (args.float 'right') then
output[3], output[15] = ,
else
output[3] =
..
..

output[15] = ..
..
..

end

output[4] =
'\n' ..
'\n' ..
'\n'
output[5] = ( is(args.title) and (
..
.. args.title .. ..
'\n') or )
output[6] =
'\n'
output[7] =
..
(args.left1 or ) ..
'\n'
output[8] = ( is(args.left2) and (
.. args.left2 .. '\n') or )
output[9] =
'\n' ..
..
(args.right1 or ) ..
'\n'
output[10] = ( is(args.right2) and (
.. args.right2 .. '\n') or )
output[11] =
'\n'
output[12] =
args.bars or
output[13] = ( is(args.caption) and (
..
args.caption ..
'\n') or )
output[14] =
'\n\n\n'
-- output[15] defined above

return table.concat(output)
end

function p._percent(args)
local output = {}
local background = is(args.bg) and ('background:' .. args.bg .. ';') or
local percentage = ( is(args[3]) and args[3] or '0' ) .. '%'
local rowStyle = is(args.rowstyle) and (' style="' .. args.rowstyle .. '"') or

output[1] = '\n'
output[2] = .. (args[1] or ) .. '\n'
output[3] =
output[4] = '&thinsp;'
output[5] = '\n'
output[6] = .. ( is(args[4]) and args[4] or percentage ) .. '\n'
output[7] = ( is(args.note) and ( .. args.note .. '\n') or )
output[8] =

return table.concat(output)
end

function p._pixel(args)
local output = {}
local background = ( is(args[2]) and args[2] or 'gray' )
local width = ( is(args[3]) and args[3] or '0' )
local note = ( is(args.note) and '1' or '2' )
local rowStyle = is(args.rowstyle) and (' style="' .. args.rowstyle .. '"') or

output[1] =
'\n'
output[2] =
.. (args[1] or ) .. '\n'
output[3] =
..
..
'&emsp;' ..
..
'\n'
output[4] =
..
( is(args[5]) and args[5] or (width .. (args[4] or )) ) ..
'\n'
output[5] = ( is(args.note) and (
..
args.note ..
'\n') or )
output[6] =


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 = {}

local rowStyle = is(args.rowstyle) and (' style="' .. args.rowstyle .. '"') or
output[1] = ( is(args.id) and (
'\n') or ('\n') )
output[2] =
..
mw.text.trim(args[1] or ) ..
'\n'
output[3] = ( is(args.note1) and (
..
args.note1 ..
'\n') or )
output[4] =
'\n'

local maxn = 4
for k in pairs(args) do
local kn = tonumber(k) or 0
if kn > maxn then maxn = kn end
end

for i=1,(( maxn - 2 )/2),1 do
local width = ( mw.text.trim(args[(2i) + 2] or 0) )
width = (is(width) and width or 0)
width = tonumber( mw.ustring.format("%.2f", width) )
if width == 0 then
output[i+4] =
else
local title = ( (args['title' .. i] or ) ~= ) and ( ' title=' .. args['title' .. i] ) or
local background = ( (args[(2i) + 1] or ) ~= ) and args[(2i) + 1] or 'gray'

output[i+4] =
..
'&8203;' ..
'\n'
end
end

output[output+1] =
'\n'
output[output+1] =
..
mw.text.trim(args[2] or ) ..
'\n'
output[output+1] = ( is(args.note2) and (
..
args.note2 ..
'\n') or )
output[output+1] =
'\n'

return table.concat(output)
end

function p._gap(args)
local output = {}
local rowStyle = is(args.rowstyle) and (' style="' .. args.rowstyle .. '"') or
local height = '10px'
if (args.height or ) ~= then
height = (tonumber(args.height) and (args.height .. 'px') or args.height)
end

output[1] =
'\n'
output[2] =
.. (args[1] or ) .. '\n'
output[3] =
'\n'

return table.concat(output)
end

function p.box(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._box(args)
end

function p.percent(frame)
local args = getArgs(frame, {
valueFunc = function (key, value)
if value then
value = mw.text.trim(value)
if value ~= then
return value
end
end
return nil
end
})
return p._percent(args)
end

function p.pixel(frame)
local args = getArgs(frame, {
valueFunc = function (key, value)
if value then
value = mw.text.trim(value)
if value ~= then
return value
end
end
return nil
end
})
return p._pixel(args)
end

function p.gap(frame)
local args = getArgs(frame, {
valueFunc = function (key, value)
if value then
value = mw.text.trim(value)
if value ~= then
return value
end
end
return nil
end
})
return p._gap(args)
end

function p.stacked(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._stacked(args)
end

return p