Module:Datastaven
Uiterlijk
![]() | Deze module maakt gebruik van TemplateStyles: |
Deze module kan gebruikt worden voor het in een staafdiagram weergeven van klasseringen / aantallen / rangen / posities / standen / eindstanden of iets in die trant. Of iets anders.
Deze module wordt toegepast in Sjabloon:Datastaven. Zie voor een overzicht van parameters de documentatie aldaar.
Gebruik
Standaard:
{{#invoke:Datastaven|main}}
Speciaal voor eindstanden kan ook gebruik worden gemaakt van:
{{#invoke:Datastaven|main|type=eindstanden}}
Kleuren
De kleuren van de staven kunnen zowel ingesteld worden op de groepen als op individuele staven. Als er geen kleur is opgegeven wordt er een uit het standaardkleurenpalet gehaald:
(Bewerk)
(Bewerk)
Zie ook
- Module:Datastaven/Groepen - Een verzameling met voorgedefinieerde groepen die gebruikt kunnen worden met deze module.
require('Module:No globals')
local p = {}
local getArgs = require('Module:Arguments').getArgs
local unpackItem = require('Module:Item').unpack
local templatestyles = 'Module:Eindstanden/styles.css'
-- Options
local chartHeight = 150
local barWidth = 18
local colors = {
'#002a62', '#2c699a', '#db0c23', '#e36271',
'#e99fa8', '#618b25', '#6bd425', '#eee8aa',
'#eca72c', '#fff943', '#ffe4e1', '#dda0dd',
'#0b6b61', '#3ec9a6', '#edf669', '#aabc1e',
'#95291d', '#ee2b08', '#999999', '#ffffff'
}
local function isItem(arg)
return mw.ustring.find(arg, '|', 1, true) == 1
end
local function extractData(args)
local data = {
bars = {},
groups = {},
maxY = args.maxY or 10
}
for _, arg in ipairs(args) do
if isItem(arg) then
local bar = unpackItem(arg)
table.insert(data.bars, bar)
if bar['group'] then
data.groups[bar['group']] = true
end
data.maxY = math.max(data.maxY, bar['y'] or data.maxY)
end
end
return data
end
local function drawTooltip(bar)
local groupText = nil
if bar['group'] then
groupText = mw.html.create():tag('br'):done():wikitext(bar['group'])
if bar['div'] then groupText:wikitext(' ' .. bar['div']) end
end
return mw.html.create('div')
:addClass('es-tip')
:tag('b'):wikitext(bar['x']):done()
:node(groupText)
:tag('br'):done():wikitext(bar['y']):done()
end
local function drawBars(data)
local bars = mw.html.create()
for i, bar in ipairs(data.bars) do
local x = mw.ustring.sub(bar['x'], -2) -- Show only the last two digits of the year
local y = bar['y'] or data.maxY
local h = chartHeight * (1 - (y / (data.maxY + 1))) .. 'px'
local c = colors[math.min(i, #colors)]
bars
:tag('li')
:addClass('es-bar')
:attr('data-x', x)
:attr('data-y', y)
:css('--bar-h', h)
:css('--bar-c', c)
:node(drawTooltip(bar))
end
return bars
end
local function drawLegend(data)
local i = 1
local legend = mw.html.create('div')
:addClass('es-legend')
:tag('ul')
for group, _ in pairs(data.groups) do
legend
:tag('li')
:tag('span')
:css('color', colors[math.min(i, #colors)])
:wikitext('◼'):done()
:wikitext(' ' .. group)
i = i + 1
end
return legend:done()
end
local function drawChart(args)
local data = extractData(args)
-- return mw.dumpObject(data)
local chart = mw.html.create()
:tag('ul')
:addClass('es-chart')
:css('width', barWidth * #data.bars .. 'px')
:css('height', chartHeight .. 'px')
:css('--bar-w', barWidth .. 'px')
:node(drawBars(data))
:done()
:node(drawLegend(data))
return tostring(chart)
end
function p.main(frame)
return frame:extensionTag{ name = 'templatestyles', args = { src = templatestyles } } .. drawChart(getArgs(frame))
end
return p