Jump to content

Module:Medals table/sandbox

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Zackmann08 (talk | contribs) at 18:06, 18 September 2018 (Create sandbox version of Module:Medals table). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
(diff) ← Previous revision | Latest revision (diff) | Newer revision → (diff)
require('Module:No globals')
local getArgs = require('Module:Arguments').getArgs

local p = {}
function p.createTable(frame, args)
	if not args then
		args = getArgs(frame)
	end
	local root = mw.html.create()
	local host = args['host']
	local hostColor = '#ccccff'
	local defaultRowColor = '#f8f9fa'
	local flagTemplate = args['flag_template']
	local event = args['event']
	local totalGold = 0
	local totalSilver = 0
	local totalBronze = 0

	root = root
		:tag('table')
		:addClass('wikitable')
		:addClass('sortable')
		:addClass('plainrowheaders')
		:addClass('jquery-tablesorter')
		:css('text-align', 'center')
	
	root:tag('caption')
		:wikitext(args['caption'])
	-- add the header row
	root:tag('tr')
			:tag('th')
				:wikitext('Rank')
			:tag('th')
				:wikitext('Nation')
			:tag('th')
				:addClass('headerSort')
				:css('width', '6em')
				:css('background-color', 'gold')
				:wikitext('Gold')
			:tag('th')
				:addClass('headerSort')
				:css('width', '6em')
				:css('background-color', 'silver')
				:wikitext('Silver')
			:tag('th')
				:addClass('headerSort')
				:css('width', '6em')
				:css('background-color', '#c96')
				:wikitext('Bronze')
			:tag('th')
				:css('width', '6em')
				:wikitext('Total')
	
	-- enumerate the rows
	local rowNums = {}
	
	for k,v in pairs(args) do
		k = ''..k
		local num = k:match('^nation(%d+)$') 
		if num then
			local total = tonumber(args['total' .. num]) or (
				(tonumber(args['gold' .. num]) or 0) + 
				(tonumber(args['silver' .. num]) or 0) +
				(tonumber(args['bronze' .. num]) or 0))
			table.insert(rowNums, {total, num}) 
		end
	end
	
	table.sort(rowNums, function (a, b) return a[1] > b[1] end)
	
	local lasttotal, lastspan, lastrankcell = -1, 1, nil
	for i, anum in ipairs(rowNums) do
		local num = anum[2]
		local nation = args['nation' .. num]
		local gold   = args['gold' .. num]
		local silver = args['silver' .. num]
		local bronze = args['bronze' .. num]
		local isHost = args['host' .. num]
		-- this is mainly for the parameter names example so you can override it.
		local total  = args['total' .. num] or gold + silver + bronze
		local color
		if isHost then color = hostColor else color = defaultRowColor end

		if args['grand_total'] then else
				totalGold = totalGold + gold
				totalSilver = totalSilver + silver
				totalBronze = totalBronze + bronze
		end

		local row = root:tag('tr'):css('background-color', color)
		if (flagTemplate and event) then
			nation = mw.getCurrentFrame():expandTemplate({title = flagTemplate, args = { nation, event } })
		end
		if total == lasttotal then
			lastspan = lastspan + 1
			lastrankcell:attr('rowspan',lastspan)
		else
			lastspan = 1
			lastrankcell = row:tag('td'):wikitext(i)
			lasttotal = total
		end
		row:tag('td')
				:css('text-align','left')
				:wikitext(nation)
			:tag('td')
				:wikitext(gold)
			:tag('td')
				:wikitext(silver)
			:tag('td')
				:wikitext(bronze)
			:tag('td')
				:wikitext(total)
	end

	root:tag('tr')
		:addClass('sortbottom')
		:tag('th')
			:wikitext('Totals')
			:attr('colspan',2)
		:tag('th')
			:wikitext(args['total_gold'] or totalGold)
		:tag('th')
			:wikitext(args['total_silver'] or totalSilver)
		:tag('th')
			:wikitext(args['total_bronze'] or totalBronze)
		:tag('th')
			:wikitext(args['grand_total'] or totalGold+totalSilver+totalBronze)

	if host then
		root
			:tag('p')
				:wikitext(host)
				:tag('span')
					:css('background-color', hostColor)
					:css('text-align', 'center')
					:css('padding', '2px')
					:css('margin', '2px')
					:css('border', '1px solid darkgray')
					:css('float', 'left')
					:css('height', '1em')
					:wikitext('   ')
	end

	return tostring(root)
end
return p