require('strict')
local p = {}
local templatestyles = 'Module:Canadian federal election results/styles.css'
local tracking, preview
local rows = {}
local rowcount = 0
local function checkarg(k,v)
if not k or type(k) ~= 'string' then return end
if k:find('^party[1-9]%d*[a-e]$') then
-- valid and not tracked
if k:find('^party[1-9]%d*a$') then
local n = mw.ustring.gsub(k, '^party([1-9]%d*)[a-e]', '%1')
table.insert(rows, tonumber(n))
rowcount = rowcount + 1
end
elseif k == 'title' or k:find('^year[1-9]%d*$') or k:find('^seats[1-9]%d*[a-e]') then
-- valid and not tracked
else
-- invalid
local vlen = mw.ustring.len(k)
k = mw.ustring.sub(k, 1, (vlen < 25) and vlen or 25)
k = mw.ustring.gsub(k, '[^%w\-_ ]', '?')
table.insert(tracking, '[[Category:Pages using canadian federal election results with unknown parameters|' .. k .. ']]')
table.insert(preview, '"' .. k .. '"')
end
end
local function makecell(frame, p, s)
local res = ''
for i = 1,#p do
if p[i] ~= '' then
local c = frame:expandTemplate{
title = 'Canadian party colour',
args = {'CA', p[i]}
}
res = res .. frame:expandTemplate{
title = 'composition histogram',
args = {c, s[i], title = p[i]}
}
end
end
return res
end
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame)
tracking, preview = {}, {}
for k, v in pairs(args) do
if v ~= '' then
checkarg(k,v)
end
end
table.sort(rows)
local root = mw.html.create('table')
:addClass('ca-fed-elect-results wikitable floatright')
root:tag('caption'):wikitext(args['title'] or 'Electoral history')
local row = root:tag('tr')
row:tag('th'):attr('scope','col'):wikitext('Year')
row:tag('th'):attr('scope','col'):wikitext('Results')
for j = 1, rowcount do
local k = rows[j]
if args['party' .. k .. 'a'] then
row = root:tag('tr')
row:tag('th'):attr('scope', 'row'):wikitext(args['year' .. k] or '?')
row:tag('td'):wikitext(makecell(frame,
{args['party' .. k .. 'a'] or '',
args['party' .. k .. 'b'] or '',
args['party' .. k .. 'c'] or '',
args['party' .. k .. 'd'] or '',
args['party' .. k .. 'e'] or ''},
{args['seats' .. k .. 'a'] or '0',
args['seats' .. k .. 'b'] or '0',
args['seats' .. k .. 'c'] or '0',
args['seats' .. k .. 'd'] or '0',
args['seats' .. k .. 'e'] or '0'}))
end
end
local trackstr = (#tracking > 0) and table.concat(tracking, '') or ''
if #preview > 0 then
trackstr = require('Module:If preview')._warning({
'Unknown parameters: ' .. table.concat(preview, '; ')
})
end
return frame:extensionTag{
name = 'templatestyles', args = { src = templatestyles}
} .. tostring(root) .. trackstr
end
return p