Module:Chart display/sandbox
Appearance
| This is the module sandbox page for Module:Chart display. |
local p = {}
local notblank = function(v) return (v or '') ~= '' end
local ifblank = function (v, alt) if notblank(v) then return v else return alt end end
local getArgs = require('Module:Arguments').getArgs
function p._chart(args)
local values = {}
local chartArgs = {}
local templateArgs = {
right = 1, left = 1, center = 1, none = 1,
thumb = 1, thumbnail = 1, border = 1
}
local alignClasses = {center = 'none', none = 'none', left = 'left', right = 'right'}
for k, v in pairs(args) do --ipairs fails with blank positional arguments
if tonumber(k) then
local lv = mw.ustring.lower(v)
if v:sub(1,4) == 'arg:' then
chartArgs.insert(v)
elseif mw.ustring.match(lv, "%d+%s*px%s*$") then
values.width = lv
elseif templateArgs[lv] then
values[lv] = lv
elseif v ~= '' then
values.caption = v
end
end
end
local opts = {
align = ifblank(args.align, values.right or values.left or values.center or values.none),
thumb = notblank(args.thumb) or values.thumb or values.thumbnail,
width = ifblank(args.width, values.width),
border = notblank(args.border) or values.border,
chart = ifblank(args.chart, args.definition)
}
assert(notblank(opts.chart), 'Must specify chart= or definition=')
local caption = ifblank(args.caption, ifblank(
values.caption, notblank(args.title) and (args.title .. ".") or ""
))
if not notblank(args.hideSource) then
caption = caption .. ' See or edit [[c:Data:'
if notblank(ifblank(args.source, args.data)) then
caption = caption .. ifblank(args.source, args.data) .. '|source data]].'
else
caption = caption .. opts.chart .. '|chart definition]].'
end
end
local html = mw.html.create('div'):addClass((opts.align == 'center') and 'center' or nil)
if opts.thumb then
html = html:tag('div'):addClass('thumb'):addClass('t' .. (alignClasses[opts.align] or 'right'))
:css('width', (not opts.width) and '100%' or nil)
:tag('div'):addClass('thumbinner')
:css('width', opts.width and 'fit-content' or nil)
end
html = html:tag('div'):addClass('enwiki-chart')
:addClass(opts.thumb and 'thumbimage' or ('float' .. (alignClasses[opts.align] or 'none')))
:css('width', opts.width)
:css('border-style', opts.border and '1' or nil)
:cssText(ifblank(args.style))
:tag('div'):addClass('enwiki-chart-content')
:wikitext(mw.getCurrentFrame():preprocess(
"{{#chart:" ..
opts.chart ..
(notblank(args.data) and ("|data=" .. args.data) or "") ..
((#chartArgs > 0) and ("|" .. table.concat(chartArgs, '|')) or "") ..
"}}"
))
:done()
if opts.thumb then
html = html:done():tag('div'):addClass('thumbcaption')
else
html = html:tag('div'):addClass('center')
:tag('small')
end
return tostring(html:wikitext(caption):allDone()) ..
(opts.thumb and '' or '<div style="clear:both;"></div>')
end
function p.chart(frame)
return p._chart(getArgs(frame))
end
return p