Module:Fb overview

-- This implements {{fb overview}}
local p = {}

-- Internationalisation
local trackingcat = 'Category:Pages using sports overview with unknown parameters'
local labels = {
	competition = 'Competition',
	firstmatch = 'First match',
	lastmatch = 'Last match',
	startinground = 'Starting round',
	finalposition = 'Final position',
	record = 'Record',
	total = 'Total',
	source = 'Source: ',
	lastupdated = 'Last updated: ',
	sourcedefault = '[[#Competitions|Competitions]]',
	unknownparameter = 'Unknown parameter: ',
	pld = '<abbr title="Games played">Pld</abbr>',
	w = '<abbr title="Games won">W</abbr>',
	d = '<abbr title="Games drawn">D</abbr>',
	l = '<abbr title="Games lost">L</abbr>',
	pf = '<abbr title="Points for">PF</abbr>',
	pa = '<abbr title="Points against">PA</abbr>',
	pd = '<abbr title="Point difference">PD</abbr>',
	gf = '<abbr title="Goals for">GF</abbr>',
	ga = '<abbr title="Goals against">GA</abbr>',
	gd = '<abbr title="Goal difference">GD</abbr>',
	wp = '<abbr title="Winning percentage">Win %</abbr>',
	winner = 'Winner',
	runnerup = 'Runner-up',
	runnersup = 'Runners-up'
}

-- Main function
function p.main(frame)
	local getArgs = require('Module:Arguments').getArgs
	local args = getArgs(frame)

	-- Get the row numbers and check for invalid input
	local rownumbers = {}
	local unknown = {}
	local showdates, showrounds, showpos = false, false, false
	local maxrow = -1
	local rowlimit = 99

	local function addrownumber(num, flag)
		if num <= rowlimit then
			table.insert(rownumbers, num)
			maxrow = (num > maxrow) and num or maxrow
			return true
		end
		return flag
	end

	for k, v in pairs(args) do
		k = tostring(k)
		local n = tonumber(k:match('^[a-z]+(%d+)$') or '-1')
		if k == 'u' or k == 'c' or k == 's' or k == 'pts' then
			-- These are valid
		elseif k:match('^[cwdlfa]%d+$') then
			local added = addrownumber(n, false)
		elseif k:match('[dfl]m%d+$') then
			showdates = addrownumber(n, showdates)
		elseif k:match('sr%d+$') then
			showrounds = addrownumber(n, showrounds)
		elseif k:match('fp%d+$') then
			showpos = addrownumber(n, showpos)
		else
			table.insert(unknown, k)
		end
	end
	-- Sort the row numbers
	table.sort(rownumbers)

	-- Remove duplicates
	for i=#rownumbers,2,-1 do
		if rownumbers[i-1] == rownumbers[i] then
			table.remove(rownumbers,i)
		end
	end

	local root = {}
	if maxrow > -1 then
		local WDL = require('Module:WDL').main
		-- Make the table
		table.insert(root,'{| class="wikitable" style="text-align:center"')
		-- Add the headers
		table.insert(root,'|-')
		table.insert(root,'! rowspan=2 | ' .. labels['competition'])
		local totspan = 1
		if showdates then
			table.insert(root,'! rowspan=2 | ' .. labels['firstmatch'])
			table.insert(root,'! rowspan=2 | ' .. labels['lastmatch'])
			totspan = totspan + 2
		end
		if showrounds then
			table.insert(root,'! rowspan=2 | ' .. labels['startinground'])
			totspan = totspan + 1
		end
		if showpos then
			table.insert(root,'! rowspan=2 | ' .. labels['finalposition'])
			totspan = totspan + 1
		end
		table.insert(root,'! colspan=8 | ' .. labels['record'])
		table.insert(root,'|-')
		table.insert(root,'! ' .. labels['pld'])
		table.insert(root,'! ' .. labels['w'])
		table.insert(root,'! ' .. labels['d'])
		table.insert(root,'! ' .. labels['l'])
		local pg = args.pts and args.pts == 'y' and 'p' or 'g'
		table.insert(root,'! ' .. labels[pg .. 'f'])
		table.insert(root,'! ' .. labels[pg .. 'a'])
		table.insert(root,'! ' .. labels[pg .. 'd'])
		table.insert(root,'! ' .. labels['wp'])
		local evenodd = 'odd'

		-- Now add the rows
		local wtot, dtot, ltot, ftot, atot = 0, 0, 0, 0, 0
		for i=1,#rownumbers do
			local r = rownumbers[i]
			if evenodd == 'even' then
				table.insert(root,'|- style="background-color:#EEE;color:var(--color-base-fixed,#202122);"')
				evenodd = 'odd'
			else
				table.insert(root,'|-')
				evenodd = 'even'
			end
			table.insert(root,'| ' .. (args['c' .. r] or ''))
			if showdates then
				if args['dm' .. r] then
					table.insert(root,'| colspan=2 | ' .. args['dm' .. r])
				else
					table.insert(root,'| ' .. (args['fm' .. r] or ''))
					table.insert(root,'| ' .. (args['lm' .. r] or ''))
				end
			end
			if showrounds then
			table.insert(root,'| ' .. (args['sr' .. r] or ''))
			end
			if showpos then
				local fp = args['fp' .. r] or ''
				local bg =
					(fp:match('^' .. labels['winner']) and 'gold') or
					(fp:match('^' .. labels['runnersup']) and 'silver') or
					(fp:match('^' .. labels['runnerup']) and 'silver') or nil
				if bg then
					table.insert(root,'| style="color:var(--color-base-fixed,#202122);background-color:' .. bg .. '" | ' .. fp)
				else
					table.insert(root,'| ' .. fp)
				end
			end
			wtot = wtot + (tonumber(args['w' .. r]) or 0)
			dtot = dtot + (tonumber(args['d' .. r]) or 0)
			ltot = ltot + (tonumber(args['l' .. r]) or 0)
			ftot = ftot + (tonumber(args['f' .. r]) or 0)
			atot = atot + (tonumber(args['a' .. r]) or 0)
			table.insert(root, WDL(frame,
				{nil, args['w' .. r],  args['d' .. r],  args['l' .. r],
				['for'] = args['f' .. r], ['against'] = args['a' .. r], ['diff'] = 'yes'})
			)
		end
		table.insert(root,'|-')
		if totspan > 1 then
			table.insert(root,'! colspan=' .. totspan .. ' | ' .. labels['total'])
		else
			table.insert(root,'! ' .. labels['total'])
		end
		table.insert(root, WDL(frame,
				{wtot+dtot+ltot, wtot, dtot, ltot, ['total'] = 'y',
				['for'] = ftot, ['against'] = atot, ['diff'] = 'yes'})
			)
		table.insert(root, '|} \n<div style="font-size: 90%; margin-bottom: 0.5em;">\n')
		if args.u then
			table.insert(root, labels['lastupdated'] .. args.u .. '<br>')
		end
		table.insert(root, labels['source'] .. (args.s or labels['sourcedefault']) .. '\n</div>')
	end

	if #unknown > 0 then
		
		local unknown_params = require('Module:If preview')._warning({
			labels['unknownparameter'] ..
			'<code>' ..
			table.concat(unknown, '</code>, <code>') ..
			'</code>.'
		}) .. '[[' .. trackingcat .. '|' .. unknown[1] .. ' ]]'
		
		table.insert(root, unknown_params)
	end

	return table.concat(root, '\n')
end

return p

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.