Module:Infobox cabinet members/sandbox

require('strict') local p = {} local infobox_image = require('Module:InfoboxImage').InfoboxImage

function p._main(args)

local root = mw.html.create root = root :tag('table') :addClass('infobox') :addClass('cabinet-members') :addClass(args.float and ('cabinet-members-' .. args.float:lower) or 'cabinet-members-right')

local columns = args.party_column and 4 or 3 mw.log(columns) if args.topcaption then args.topcaption = tostring(			mw.html.create('div')				:cssText(args.topcaptionstyle)				:wikitext(args.topcaption)		) end if args.topimage then root :tag('tr'):tag('td') :attr('colspan', columns) :addClass('cabinet-members-image') :wikitext(infobox_image{					args = {						image = args.topimage,						size = args.topimagesize,						sizedefault = 'frameless',						upright = 1,						alt = args.topimagealt					}				} .. (args.topcaption or '')) end if args.above then root :tag('tr'):tag('th') :attr('colspan', columns) :addClass('cabinet-members-above') :wikitext(args.above) end if args.caption then args.caption = tostring(			mw.html.create('div')				:cssText(args.captionstyle)				:wikitext(args.caption)		) end if args.image then root :tag('tr'):tag('td') :attr('colspan', columns) :addClass('cabinet-members-image') :wikitext(infobox_image{					args = {							image = args.image,							size = args.imagesize,							sizedefault = 'frameless',							upright = 1,							alt = args.imagealt					}				} .. (args.caption or '')) end -- Actual table local cabinet = mw.html.create('table') local header = cabinet:tag('tr') header:tag('th') :addClass('cabinet-members-header') :wikitext(args.office_label or 'Office') :attr('scope', 'col') header:tag('th') :wikitext(args.name_label or 'Name') :attr('scope', 'col') if args.party_column then header:tag('th') :wikitext(args.party_label or 'Party') :attr('scope', 'col') end header:tag('th') :wikitext(args.term_label or 'Term') :attr('scope', 'col')

local subRows = {} local keys = {} for k, v in pairs(args) do		k = tostring(k) local num = k:match('^office(%d+)$') if num and args['name' .. num .. 'a'] then num = tonumber(num) if subRows[num] == nil then subRows[num] = {} table.insert(keys, num) end end

local num, l = k:match('^name(%d+)([a-z])$') if num then num = tonumber(num) if subRows[num] == nil then subRows[num] = {} table.insert(keys,num) end subRows[num][l] = l		end end table.sort(keys)

for _, num in ipairs(keys) do		local row_table = {} for _, letter in pairs(subRows[num]) do			table.insert(row_table, letter) end table.sort(row_table) for j, letter in pairs(row_table) do			local row = mw.html.create('tr') if j == 1 then row:addClass('cabinet-members-office') local office = row:tag('td'):wikitext(args['office' .. num]) office:attr('rowspan', (row_table:size > 1) and row_table:size or nil) end row:tag('th') :wikitext(args['name'..num..letter]) :attr('scope', 'row') if args.party_column then row:tag('td') :wikitext(args['party'..num..letter]) end row:tag('td') :wikitext(args['term'..num..letter]) cabinet:node(row) end end if args.below then root:tag('tr') :tag('td') :attr('colspan', columns) :wikitext(args.below) end local frame = mw.getCurrentFrame local base_templatestyles = frame:extensionTag{ 'templatestyles', args = { src = 'Module:Infobox cabinet members/styles.css' } }	local templatestyles = '' if args.templatestyles and mw.text.trim(args.templatestyles) ~= '' then templatestyles = frame:extensionTag{ 'templatestyles', args = { src = 'Module:Infobox cabinet members/styles.css' } }	end

return base_templatestyles .. templatestyles .. tostring(root) end

function main(frame) local args = require('Module:Arguments').getArgs(frame) return p._main(args) end

return p