Module:Bar
Appearance
| This module is rated as beta. It is considered ready for widespread use, but as it is still relatively new, it should be applied with some caution to ensure results are as expected. |
| This module is currently protected from editing. See the protection policy and protection log for more details. Please discuss any changes on the talk page; you may submit an edit request to ask an administrator to make an edit if it is uncontroversial or supported by consensus. You may also request that this page be unprotected. |
| This module uses TemplateStyles: |
| This module depends on the following other modules: |
| This Lua module is used on many pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages, or in your own module sandbox. Consider discussing changes on the talk page before implementing them. |
{{Bar box}}, is used for construction of horizontal bar charts.
Usage
{{Bar box
|width = ''width of the graph'' (optional)
|barwidth= ''width of the bar area'' (optional, defaults to 100px)
|float = (left|right|none) (optional, defaults to none)
|title = ''title of the chart'' (optional)
|titlebar= ''title bar colour'' (optional, defaults to none)
|left1 = ''first left column header'' (optional)
|left2 = ''second left column header'' (optional)
|right1 = ''first right column header'' (optional)
|right2 = ''second right column header'' (optional)
|bars = ''chart contents'' (see below)
|caption = ''caption under the chart'' (optional)
}}
Alternatives to avoid Wikipedia's Post-expand include size limit
Pages with many boxes and charts may come close to or exceed Wikipedia's Post-expand include size limit. In these cases consider using Module:Bar as follows:
- {{Bar box}} → {{#invoke:Bar|box}}
- {{Bar percent}} → {{#invoke:Bar|percent}}
- {{Bar pixel}} → {{#invoke:Bar|pixel}}
- {{Bar log}} → {{#invoke:Bar|log}}
- {{Bar stacked}} → {{#invoke:Bar|stacked}}
- {{Bar gap}} → {{#invoke:Bar|gap}}
- {{Bar table}} → {{#invoke:Bar|table}}
Tracking category
See also
- {{Vertical bar chart}}
- {{Bar chart}}
- {{Data bars}}
- WP:Graphs
local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local p = {}
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._barStacked(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