Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

Jump to content

Module:Infobox cabinet members/sandbox

From Wikipedia, the free encyclopedia
require('strict')
local getArgs = require('Module:Arguments').getArgs

local p = {}
function p.infobox(frame, args)
	if not args then
		args = getArgs(frame)
	end

	local root = mw.html.create()
	local columns = args.party_column and 4 or 3
	mw.log(columns)
	
	if args.caption then
		args.caption = '<br />' .. tostring(
			mw.html.create('span')
				:cssText(args.captionstyle)
				:wikitext(args.caption)
			)
	end
	if args.topcaption then
		args.topcaption = '<br />' .. tostring(
			mw.html.create('span')
				:cssText(args.topcaptionstyle)
				:wikitext(args.topcaption)
			)
	end
	
	local floatcss = {
		left = 'margin-left:0; margin-right:1em; float:left; clear:left;',
		center = 'margin-left:auto; margin-right:auto; float:none; clear:none;',
		none = 'margin-left:0; margin-right:0; float:none; clear:none;',
		right = 'margin-left:1em; margin-right:0; float:right; clear:right;'
	}
	
	root = root
		:tag('table')
		:addClass('infobox')
		:css('width', 'auto')
		:css('text-align', 'left')
		:css('line-height', '1.2em')
		:cssText(args.float and floatcss[(args.float):lower()] or floatcss['right'])

	if args.topimage then
		root
			:tag('tr'):tag('td')
				:attr('colspan', columns)
				:css('text-align', 'center')
				:wikitext(require('Module:InfoboxImage').InfoboxImage{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)
				:css('line-height','1.5em')
				:css('font-size','110%')
				:css('background','#DCDCDC')
				:css('color','inherit')
				:css('text-align', 'center')
				:wikitext(args.above)
	end
	if args.image then
		root
			:tag('tr'):tag('td')
				:attr('colspan', columns)
				:css('text-align', 'center')
				:wikitext(require('Module:InfoboxImage').InfoboxImage{args = {
							image = args.image,
							size = args.imagesize,
							sizedefault = 'frameless',
							upright = 1,
							alt = args.imagealt
						}} .. (args.caption or '')
					)
	end
	local header = root:tag('tr')
	header:tag('th')
		:wikitext(args.office_label or 'Office')
	header:tag('th')
		:wikitext(args.name_label or 'Name')
	if args.party_column then 
		header:tag('th')
			:wikitext(args.party_label or 'Party')
	end
	header:tag('th')
		:wikitext(args.term_label or 'Term')
	root:tag('tr')
			:tag('td')
				:attr('colspan', columns)
				:css('background', '#000')
				:css('color','inherit')

	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 i, num in ipairs(keys) do 
		if i > 1 then
			root:tag('tr')
				:tag('td')
					:attr('colspan',columns)
					:css('background','#D1D1D1')
					:css('color','inherit')
		end
		local r = {}
		for j,l in pairs(subRows[num]) do
			table.insert(r,l)
		end
		table.sort(r)
		local row = root:tag('tr')
		local ocell = row:tag('td'):wikitext(args['office' .. num])
		local subrow = 0
		for j, l in pairs(r) do
			subrow = subrow + 1
			if subrow > 1 then
				row:tag('tr')
			end
			row:tag('td')
				:css('font-weight', 'bold')
				:wikitext(args['name'..num..l])
			if args.party_column then
				row:tag('td')
					:wikitext(args['party'..num..l])
			end
			row:tag('td')
				:wikitext(args['term'..num..l])
		end
		ocell:attr('rowspan', (subrow > 1) and subrow or nil)
	end
	
	if args.below then
		root:tag('tr')
			:tag('td')
				:attr('colspan', columns)
				:css('border-top', '#D1D1D1 2px solid')
				:wikitext(args.below)
	end

	return tostring(root)
end
return p