Implements {{Event list}}
-- this module implements [[Template:Event list]]
local p = {}
local mArguments = require('Module:Arguments')
function p.main(frame)
local args = mArguments.getArgs(frame)
local title = args['title'] or 'Chronology of events for ' .. mw.title.getCurrentTitle().text
local columns = tonumber(args['columns'] or '2') or 2
local datewidth = args['datewidth'] or '-1'
local collapse = args['collapse'] or 'collapsed'
-- append the suffix to the date width or set to auto
if (tonumber(datewidth) or -1) >= 0 then
datewidth = tonumber(datewidth) .. 'px'
else
datewidth = 'auto'
end
-- build a list of event parameter numbers
eventnums = {}
for k,v in pairs(args) do
local i = tonumber(tostring(k):match( '^%s*date([%d]+)%s*$' ) or '-1')
if i ~= -1 then
table.insert(eventnums, k)
else
i = tonumber(tostring(k):match( '^%s*event([%d]+)%s*$' ) or '-1')
if i ~= -1 then
table.insert(eventnums, k)
else
i = tonumber(k) or -1
if i ~= -1 then
table.insert(eventnums, math.floor((i+1)/2) )
end
end
end
end
-- sort to process in order
table.sort( eventnums )
-- remove duplicates
for k = 2,#eventnums do
if eventnums[k] == eventnums[k-1] then
table.remove(eventnums, k)
end
end
-- create the root table
local root = mw.html.create('table')
root:addClass('wikitable')
:addClass('collapsible')
:addClass(collapse)
:css('width', '100%')
-- Add the title
root:tag('tr'):tag('th'):attr('colspan', columns):wikitext(title)
-- Create the row to hold the columns
local outerrow = root:tag('tr')
local percol = math.ceil((#eventnums) / columns)
k = 0
for i = 1,columns do
local outercell = outerrow:tag('td'):css('width', (math.floor(10/cols)/10) .. '%')
local innertable = outercell:tag('table'):css('width', '100%')
local tr = innertable:tag('tr')
tr:tag('th'):attr('scope', 'col'):css('width', datewidth):wikitext('Date')
tr:tag('th'):attr('scope', 'col'):wikitext('Event description')
for j=1,percol do
k = k + 1
local n = eventnums[k]
local d = (args['date' .. n] or '') .. (args[2*(k-1)+1] or '')
local e = (args['event' .. n] or '') .. (args[2*(k-1)+2] or '')
if d ~= '' or e ~= '' then
tr = innertable:tag('tr')
tr:tag('td'):wikitext(d)
tr:tag('td'):wikitext(e)
end
end
end
return tostring(root)
end
return p