Module: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] = ' ' .. 			''	end output[4] = '\n' .. '\n' .. ' \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 ( '<td style="text-align:' .. _align(2,'right') .. '" class="bb-04em">' .. args.note1 .. ' \n') or '') output[4] = '<td class="bb-lr">\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[(2*i) + 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[(2*i) + 1] or ) ~=  ) and args[(2*i) + 1] or 'gray' output[i+4] = '<div' .. title .. ' style="background:' .. background .. ';width:' .. width .. 'px" class="bb-fl">' .. '&#8203;' ..						' \n' end end output[#output+1] = ' \n' output[#output+1] = '<td ' .. (args.note2 and '' or 'colspan="2" ') .. 'style="text-align:' .. _align(3,'left') .. '" class="bb-04em">' .. mw.text.trim(args[2] or '') .. ' \n' output[#output+1] = ( is(args.note2) and ( '<td style="text-align:' .. _align(4,'right') .. '" class="bb-04em">' .. 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] = '<tr' .. rowStyle .. '>\n' output[2] = '<td colspan="5" style="height:'.. height .. '">' .. (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