Module:Airport destination list

From MOASSpedia
Jump to navigation Jump to search

Implements {{Airport destination list}}.

Usage

{{#invoke:Airport destination list|table}}



local p = {}

local function isnotempty(s)
	return s and s:match( '^%s*(.-)%s*$' ) ~= ''
end
 
function p.table(frame)
	local args = (frame.args[1] ~= nil) and frame.args or frame:getParent().args
	local cols
	if isnotempty(args['4thcoltitle']) and isnotempty(args['3rdcoltitle']) then
		cols = 4
	elseif isnotempty(args['3rdcoltitle']) then cols = 3
	else cols = 2
	end

	-- compute the maximum cell index
	local cellcount = 0
	for k, v in pairs( args ) do
		if type( k ) == 'number' and isnotempty(v) then
			cellcount = math.max(cellcount, k)
		end
	end
	-- compute the number of rows
	local rows = math.ceil(cellcount / cols)

	-- create the root table
	local root = mw.html.create('table')
	root
		:addClass('wikitable')
		:addClass('sortable')
		:css('font-size', '95%')

	-- add the header row
	local row = root:tag('tr')
	local cell= row:tag('th')
	cell:wikitext('Airlines')
	cell= row:tag('th')
	cell:addClass('unsortable')
	cell:wikitext('Destinations')
	if (isnotempty(args['3rdcoltitle'])) then
		cell= row:tag('th')
		cell:css('width','10%')
		if (isnotempty(args['3rdcolunsortable'])) then
			cell:addClass('unsortable')
		end
		cell:wikitext(args['3rdcoltitle'])
	end
	if (isnotempty(args['4thcoltitle'])) then
		cell= row:tag('th')
		if (isnotempty(args['4thcolunsortable'])) then
			cell:addClass('unsortable')
		end
		cell:wikitext(args['4thcoltitle'])
	end
	-- loop over rows
	for j=1,rows do
		row = root:tag('tr')
		for i=1,cols do
			cell= row:tag('td')
			if (i > 2) then cell:css('text-align','center') end
			cell:wikitext(args[cols*(j - 1) + i] or '')
		end
	end
	-- return the root table
	return tostring(root)
end

return p