Module:Team appearances list

This is an old revision of this page, as edited by Primefac (talk | contribs) at 20:13, 19 November 2016 (y will always be greater than the begin year, which means even if we've overrun the end year it will still add the number. Thus, switch the if statements). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

-- This module implements [[Template:Team appearances list]].
-- [SublimeLinter luacheck-globals:mw]

local p = {}
local compressSparseArray = require('Module:TableTools').compressSparseArray
local hlist = require('Module:List').horizontal
local valueUnion = require('Module:Set').valueUnion

local COMPETITIONS = {
	["All-Africa Games"] = {
		1965, 1973, 1978, 1987, 1991, 1995, 1999, 2003, 2007, 2011, 2015},
	
	-----Asian Games----
	["Asian Games"] = {
		1951, 1954, 1958, 1962, 1966, 1970, 1974, 1978, 1985, 1986, 1990, 1994, 
		1998, 2002, 2006, 2010, 2014, 2018, 2022, 2026},
	["Asian Beach Games"] = {
		2008, 2010, 2012, 2014, 2016},
	["Asian Para Games"] = {
		2010, 2014, 2018},
	["Asian Youth Games"] = {
		2009, 2013, 2021},
	["Asian Winter Games"] = {
		1986, 1990, 1996, 1999, 2003, 2007, 2011, 2017},
	["East Asian Games"] = {
		1993, 1997, 2001, 2005, 2009, 2013},
	["South Asian Games"] = {
		1984, 1985, 1987, 1989, 1991, 1993, 1995, 1999, 2004, 2006, 2010, 2016,
		2018},
	["Southeast Asian Games"] = {
		1977, 1979, 1981, 1983, 1985, 1987, 1989, 1991, 1993, 1995, 1997, 1999,
		2001, 2003, 2005, 2007, 2009, 2011, 2013, 2015, 2017, 2019, 2021, 2023,
		2025},
	["Southeast Asian Peninsular Games"] = {
		1959, 1961, 1963, 1965, 1967, 1969, 1971, 1973, 1975},
	["West Asian Games"] = {
		1997, 2002, 2005, 2016},
	
	-----Commonwealth Games-----
	["Commonwealth Games"] = {
		1930, 1934, 1938, 1950, 1954, 1958, 1962, 1966, 1970, 1974, 1978, 1982,
		1986, 1990, 1994, 1998, 2002, 2006, 2010, 2014, 2018, 2022, 2026},
	["Commonwealth Youth Games"] = {
		2000, 2004, 2008, 2011, 2015, 2017, 2021},
	
	-----European Games-----
	["European Athletics Championships"] = {
		1934, 1938, 1946, 1950, 1954, 1958, 1962, 1966, 1969, 1971, 1974, 1978,
		1982, 1986, 1990, 1994, 1998, 2002, 2006, 2010, 2012, 2014, 2016},
	["European Games"] = {
		2015, 2019},
	["Mediterranean Games"] = {
		1951, 1955, 1959, 1963, 1967, 1971, 1975, 1979, 1983, 1987, 1991, 1993,
		1997, 2001, 2005, 2009, 2013, 2017},
	
	----- Olympics -----
	["Summer Olympics"] = {
		1896, 1900, 1904, 1908, 1912, 1920, 1924, 1928, 1932, 1936, 1948, 1952,
		1956, 1960, 1964, 1968, 1972, 1976, 1980, 1984, 1988, 1992, 1996, 2000,
		2004, 2008, 2012, 2016, 2020, 2024, 2028},
	["Summer Paralympics"] = {
		1960, 1964, 1968, 1972, 1976, 1980, 1984, 1988, 1992, 1996, 2000, 2004,
		2008, 2012, 2016, 2020, 2024, 2028},
	["Summer Youth Olympics"] = {
		2010, 2014, 2018},
	["Winter Olympics"] = {
		1924, 1928, 1932, 1936, 1948, 1952, 1956, 1960, 1964, 1968, 1972, 1976,
		1980, 1984, 1988, 1992, 1994, 1998, 2002, 2006, 2010, 2014, 2018, 2022,
		2026},
	["Winter Paralympics"] = {
		1976, 1980, 1984, 1988, 1992, 1994, 1998, 2002, 2006, 2010, 2014, 2018,
		2022},
	["Winter Youth Olympics"] = {
		2012, 2016, 2020},
	
	----- Misc / World -----
	["FEI World Equestrian Games"] = {
		1990, 1994, 1998, 2002, 2006, 2010, 2014, 2018},
	["Pan American Games"] = {
		1951, 1955, 1959, 1963, 1967, 1971, 1975, 1979, 1983, 1987, 1991, 1995,
		1999, 2003, 2007, 2011, 2015, 2019},
	["Summer Universiade"] = {
		1959, 1961, 1963, 1965, 1967, 1970, 1973, 1975, 1977, 1979, 1981, 1983,
		1985, 1987, 1989, 1991, 1993, 1995, 1997, 1999, 2001, 2003, 2005, 2007,
		2009, 2011, 2013, 2015, 2017},
	["Winter Universiade"] = {
		1960, 1962, 1964, 1966, 1968, 1972, 1978, 1981, 1983, 1985, 1987, 1989,
		1991, 1993, 1995, 1997, 1999, 2001, 2003, 2005, 2007, 2009, 2011, 2013,
		2015, 2017},
	["World Aquatics Championships"] = {
		1973, 1975, 1978, 1982, 1986, 1991, 1994, 1998, 2001, 2003, 2005, 2007,
		2009, 2011, 2013, 2015},
	["World Championships in Athletics"] = {
		1983, 1987, 1991, 1993, 1995, 1997, 1999, 2001, 2003, 2005, 2007, 2009,
		2011, 2013, 2015, 2017},}

function p._main(args)
	local begin_year = args.begin_year and tonumber(args.begin_year)
	local end_year = args.end_year and tonumber(args.end_year)

	local appearances = {}
	local absences = {}
	for _, v in pairs(compressSparseArray(args)) do
		absences[string.sub(v, 1, 4)] = mw.getCurrentFrame():expandTemplate{
			title='Gray', args={v}}
	end

	local function processYear(y)
		y = tostring(y)
		if absences[y] then
			table.insert(appearances, absences[y])
			absences[y] = nil
		else
			table.insert(appearances, string.format(
				'[[%s at the %s %s|%s]]', args.team, y, args.competition, y))
		end
	end

	if COMPETITIONS[args.competition] then
		for _, y in pairs(COMPETITIONS[args.competition]) do
			if end_year and y >= end_year then
				break
			elseif not begin_year or y >= begin_year then
				processYear(y)
			end
		end
	elseif not tonumber(args.interval) then
		error('Interval is not a number: ' .. tostring(args.interval))
	else
		for y = begin_year, (end_year or os.date('%Y')+args.interval),
				args.interval do
			processYear(y)
		end
	end
	return hlist(valueUnion(absences, appearances))
end

function p.main(frame)
	local args = require('Module:Arguments').getArgs(frame, {parentOnly=true})
	return p._main(args)
end

return p