Jump to content

Module:Bar

Permanently protected module
From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Ahecht (talk | contribs) at 14:51, 14 April 2020 (Copy from Module:Medical cases chart/sandbox2). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
(diff) ← Previous revision | Latest revision (diff) | Newer revision → (diff)

function p._barBox(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.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