-- this module implements 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 cols = tonumber(args['columns'] or '2') or 2 local datewidth = args['datewidth'] or '-1' local datealign = args['datealign'] or 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) .. '%' 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, i) else i = tonumber(tostring(k):match('^%s*event([%d]+)%s*$') or '-1') if i ~= -1 then table.insert(eventnums, i) 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]
-- 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', cols):wikitext(title) -- Create the row to hold the columns local outerrow = root:tag('tr'):css('vertical-align', 'top') local percol = math.ceil((#eventnums) / cols) k = 0 for i = 1,cols do local outercell = outerrow:tag('td'):css('width', (math.floor(10/cols)/10) .. '%') local innertable = outercell:tag('table') :css('width', '100%') :css('border', 'none') :css('cellspacing', '-1px') :css('cellpadding', '0px') :css('margin', '-1px') :css('font-size', '88%') :css('line-height', '100%') local tr = innertable:tag('tr'):css('vertical-align', 'top') tr:tag('th') :attr('scope', 'col') :css('width', datewidth) :css('text-align', (datealign ~= ) and datealign or 'left') :css('border-bottom', '1px #aaa solid') :wikitext('Date') tr:tag('th') :attr('scope', 'col') :css('text-align', 'left') :css('border-bottom', '1px #aaa solid') :wikitext('Event description') for j=1,percol do k = k + 1 if k <= #eventnums then local n = tonumber(eventnums[k]) local d = (args['date' .. n] or ) .. (args[2*(n-1)+1] or ) local e = (args['event' .. n] or ) .. (args[2*(n-1)+2] or ) if d ~= or e ~= then tr = innertable:tag('tr'):css('vertical-align', 'top') tr:tag('td'):css('text-align',(datealign ~= ) and datealign or nil):wikitext(d) tr:tag('td'):wikitext(e) end end end end
return tostring(root)end
return p