Naar inhoud springen

Module:SportsRankings

Uit Wikipedia, de vrije encyclopedie
Moduledocumentatie​[bekijk] [bewerk] [ververs] [geschiedenis]

Module om sport rankings van (landen)ploegen in verschillende sporten weer te geven. De data die gebruikt wordt voor de verschillende rankings staat in aparte module subpagina's waardoor deze per ranking geactualiseerd kan worden.

De module genereert ranking informatie in twee hoofdvormen, te weten "item" of "lijst" (tabel) achtige informatie.

Huidige data subpagina's[brontekst bewerken]

Sjablonen die gebruik maken van de module[brontekst bewerken]

Sjablonen die gebruik maken van de "item" functionaliteit[brontekst bewerken]

Sjablonen die gebruik maken van de "lijst" (tabel) functionaliteit[brontekst bewerken]

  • Nog geen

Algeme toelichting bij de parameters[brontekst bewerken]

Verder op deze pagina wordt gesproken over 2 soorten parameters, te weten:

  • positieparameter → Dit is een parameter waarbij het van belang is als hoeveelste parameter deze wordt meegegeven en alleen van de vorm "waarde" is. Wanneer hieronder een parameter als positieparameter wordt aangemerkt, staat bij deze parameter een integer (positie) vermeldt. E.g. de positieparameter met daarbij als getal 3, moet als 3e parameter (de waarde na het 3e "|" teken) meegegeven worden.
  • naamparameter → Bij deze parameters is het niet van belang als hoeveelste ze worden meegegeven, met die beperking dat ze niet op een positie mogen staan waar een positieparameter wordt verwacht. Ze zijn van de vorm "naam=waarde".

Bij de aanroep van de module worden als eerste de positieparameters meegegeven in een voorgeschreven volgorde, gevolgd door de naamparameters in willekeurige volgorde. De positieparameters zijn dan in beginsel verplicht en de naamparameters optioneel.

Gebruik[brontekst bewerken]

"Item" gericht[brontekst bewerken]

Formaat[brontekst bewerken]

{{#invoke:SportsRankings|<item functie>|<ranking>|<land>|[mdy]}}

Parameters[brontekst bewerken]

Parameter Soort Omschrijving Type Status Opmerking
item functie 1 positioneel Er zijn 3 "item" gerichte functionaliteiten, te weten:
  • cur → geeft de actuele (current) positie van een ploeg in een ranking.
  • max → geeft de historisch maximale (beste) positie van een ploeg en de periode(n) wanneer de ploeg op die positie stond.
  • min → geeft de historisch minimale (slechste) positie van een ploeg en de periode(n) wanneer de ploeg op die positie stond.
string verplicht Beperkt zich tot één van de drie gedefinieerde "item" functionaliteiten. Niet alle functionaliteiten hoeven te zijn geïmplementeerd. Dit is afhankelijk van de beschikbare informatie bij de bron. Welke van deze 3 functiomaliteiten is geimplementeerd is te zien in het databestand van de ranking. Indien daar een lijst "data.<functionaliteit>rankings" aanwezig is, dan is de desbetreffende functionaliteit geïmplementeerd.
ranking 2 positioneel De naam van de te gebruiken ranking zoals aangegeven bij "Huidige data subpagina's" string verplicht Beperkt zich tot één van de aanwezige datasets
team 3 positioneel De naam van de ploeg waarvoor we ranking informatie willen weten of de voor de ploeg gehanteerde afkorting in de desbetreffende ranking, e.g. de FIFA-code string verplicht
mdy |mdy= naam Standaard wordt in de ranking informatie het datum format "dmy" gebruikt. Met deze parameter kan voor het datum formaat "mdy" worden gekozen. string optioneel Elke waarde (dus niet leeg) voldoet, echter omwille van duidelijkheid wordt aangeraden on "ja" of "yes" te gebruiken.

"Lijst" gericht[brontekst bewerken]

"list"[brontekst bewerken]

Formaat[brontekst bewerken]

{{#invoke:SportsRankings|<lijst functie>|<ranking>|[startpositie]|[eindpositie]|[mdy]|[select]|[caption]|[header1]|[header2]|[header3]|[header4]|[header5]|[footer1]|[footer2]|[footer3]|[footer4]|[footer5]|[style]|[selection_header]|[rank_header]|[change_header]|[team_header]|[points_header]}}

of

{{#invoke:SportsRankings|<lijst functie>|<ranking>|[startpositie]|[eindpositie]|[mdy]|[selecteer]|[uitleg]|[koptekst1]|[koptekst2]|[koptekst3]|[koptekst4]|[koptekst5]|[voettekst1]|[voettekst2]|[voettekst3]|[voettekst4]|[voettekst5]|[style]|[selectie_kop]|[rang_kop]|[poswijz_kop]|[team_kop]|[punten_kop]}}

Parameters[brontekst bewerken]
Parameter Soort Omschrijving Type Status Opmerking
Lijst functie 1 positioneel list → genereert een lijst (tabel) van ploegen uit de ranking van beginpositie (standaard 1) t/m eindpositie (standaard 10). string verplicht Hier altijd de functionaliteit "list".
Ranking 2 positioneel De naam van de te gebruiken ranking zoals aangegeven bij "Huidige data subpagina's" string verplicht Beperkt zich tot één van de aanwezige datasets
beginpositie 3 positioneel De startpositie in de ranking van de landen die in de lijst moet worden opgenomen. integer verplicht/(optioneel) Een "lege" waarde betekent ongedefinieerd. Indien niet gedefinieerd, wordt standaard de waarde 1 gehanteerd. Als de parameter leeg is, en ook bij de parameter "eindpositie" een lege waarde wordt gekozen, en verder ook geen enkele naamparemeter wordt gebruikt (de aanroep van de module eindigt dus op "||}}"), dan krijgt deze parameter het karakter van een optionele parameter en kan in zijn geheel worden weggelaten.
eindpositie 4 positioneel De eindpositie in de ranking van de landen die in de lijst moet worden opgenomen. integer optioneel Een "lege" waarde betekent ongedefinieerd. Indien niet gedefinieerd, wordt standaard de waarde 10 gehanteerd. Als de parameter leeg is, en ook geen enkele naamparemeter wordt gebruikt (de aanroep van de module eindigt dus op "|}}"), dan krijgt deze parameter het karakter van een optionele parameter en kan in zijn geheel worden weggelaten.

"list2"[brontekst bewerken]

Formaat[brontekst bewerken]

{{#invoke:SportsRankings|<lijst functie>|<ranking>|<ploeg>|[positiebreedte]|[mdy]|[select]|[caption]|[header1]|[header2]|[header3]|[header4]|[header5]|[footer1]|[footer2]|[footer3]|[footer4]|[footer5]|[style]|[selection_header]|[rank_header]|[change_header]|[team_header]|[points_header]}}

of

{{#invoke:SportsRankings|<lijst functie>|<ranking>|<ploeg>|[positiebreedte]|[mdy]|[selecteer]|[uitleg]|[koptekst1]|[koptekst2]|[koptekst3]|[koptekst4]|[koptekst5]|[voettekst1]|[voettekst2]|[voettekst3]|[voettekst4]|[voettekst5]|[style]|[selectie_kop]|[rang_kop]|[poswijz_kop]|[team_kop]|[punten_kop]}}

Parameters[brontekst bewerken]
Parameter Soort Omschrijving Type Status Opmerking
Lijst functie 1 positioneel list2 → genereert een lijst (tabel) van ploegen uit de ranking vanaf de positie van de aangegeven ploeg - positiebreedte (standaard 2) t/m de positie van de aangegeven ploeg + positiebreedte (standaard 2). string verplicht Hier altijd de functionaliteit "list2".
Ranking 2 positioneel De naam van de te gebruiken ranking zoals aangegeven bij "Huidige data subpagina's" string verplicht Beperkt zich tot één van de aanwezige datasets
ploeg 3 positioneel De naam van de ploeg waarvoor we ranking informatie willen weten of de voor de ploeg gehanteerde afkorting in de desbetreffende ranking, e.g. de FIFA-code opgenomen. string verplicht
positiebreedte 4 positioneel Waarde die aangeeft hoeveel posities voor en na de positie van de aangegeven ploeg in de lijst (tabel) moeten worden opgenomen. Het aantal getoonde ploegen is dus 2×<waarde>+1. integer verplicht/(optioneel) Een "lege" waarde betekent ongedefinieerd. Indien niet gedefinieerd, wordt standaard de waarde 2 gehanteerd. Als de parameter leeg is, en ook geen enkele naamparemeter wordt gebruikt (de aanroep van de module eindigt dus op "|}}"), dan krijgt deze parameter het karakter van een optionele parameter en kan in zijn geheel worden weggelaten.

Gemeenschappelijke optionele naamparameters "list" en "list2"[brontekst bewerken]

Voor nagenoeg al deze naamparameters bestaat zowel een Nederlandse en een Engelse variant.

Parameter Soort Omschrijving Type Status Opmerking
mdy |mdy= naam Standaard wordt in de ranking informatie het datum format "dmy" gebruikt. Met deze parameter kan voor het datum formaat "mdy" worden gekozen. string optioneel Elke waarde voldoet, echter omwille van duidelijkheid wordt aangeraden on "ja" of "yes" te gebruiken.
select

of

selecteer
|select=

of

|selecteer=
naam Hiermee is het mogelijk om de lijst tot een bepaalde groep te beperken. Dit kan een vorgedefinieerde groep zijn of een zelfgedefinieerde groep. De voorgedefinieerde groepen zijn te zien in het databestand dat bij de gekozen ranking hoort. de ranking. Deze zijn te vinden in de lijst "data.groups". Zelfgedefineerde groepen zijn van de vorm "<groepsnaam>:<landenlijst", waarbij "groepsnaam een vrij te kiezen naam is, en "landenlijst" een aantal landsnamen of landscodes gescheiden door ","'s (komma's). string optioneel Voor FIFA-rankings zijn dit de voorgedefinieerde groepen de namen van de 6 confederaties, te weten "AFC", "CAF", "CONCACAF", "CONMEBO", "OFC" of "UEFA", waarbij elke confederatoiegroep bestaat uit een lijst van landen aangesloten bij doe confederatie. Een voorbeeld van een zelfgedefinieerde groep zou kunnen zijn "EK20GC:NED, UKR, AUT, MKD". "EK20GC" staat hier voor de ploegen (NED, UKR, AUT, MKD) die bij het EK van 2020 (wordt/werd gespeeld in 2021) in Groep C zijn ingedeeld. Wanneer deze parameter wordt gebruikt, wordt er een extra kolom (als eerste) aan de gegenereerde lijst (tabel) toegevoegd. Deze kolom geeft de relatieve rang van de ploegen binnen de gedefinieerde groep. De kolomkop wordt standaard de naam van de voor- of zelfgedefinieerde groep.
caption

of

uitleg
|caption=

of

|uitleg=
naam Boven de lijst (tabel) komt een standaard regel van het formaat "<ranking> sinds <datum>" te staan. Met deze parameter kan de regel zelf gedefinieerd of onderdrukt worden. string
of
leeg
optioneel
header1

header5

of

koptekst1

koptekst5
|header1=

|header5=

of

|koptekst1=

|koptekst5=
naam Met deze parameters kunnen tot 5 kopteksten naar keuze boven de lijst (tabel) gedefinieerd worden. string optioneel
footer1

footer5

of

voettekst1

voettekst5
|footer1=

|footer5=

of

|voettekst1=

|voettekst5=
naam Met deze parameters kunnen tot 5 voetteksten naar keuze onder de lijst (tabel) gedefinieerd worden. string optioneel
style |style= naam Voor het toekennen van extra CSS style attributen aan de lijst (tabel). Deze zijn van de vorm "<attribuut>: <waarde>;" of bij meerdere "<attribuut1>: <waarde1>; <attribuut2>: <waarde2>;" string optioneel Bij gebruik van het CSS "float" attribuut, e.g. "float: right;" is het raadzaam om direct na de module aanroep, het sjabloon {{clearboth}} te gebruiken.
selection_header

of

selectie_kop
|selection_header=

of

|selectie_kop=
naam Voor het wijzigen van de standaard kolomnaam van de extra kolom die wordt toegevoegd wanneer de parameter |select= wordt gebruikt. string optioneel Standaard krijgt de kolomnaan dezelfde waarde als de met de parameter |select= geselecteerde groep. Wanneer de parameter |select= niet is gebruikt wordt de waarde van deze parameter genegeerd.
rank_header

of

rang_kop
|rank_header=

of

|rang_kop=
naam Voor het wijzigen van de kolomnaam van de kolom die de rang van een ploeg aangeeft. string optioneel Standaard is de kolomnaam "Rang"
change_header

of

poswijz_kop
|change_header=

of

|poswijz_kop=
naam Voor het wijzigen van de kolomnaam van de kolom die de positieverandering van een ploeg aangeeft. string optioneel Standaard is de kolomnaam "PW"
team_header

of

team_kop
|team_header=

of

|team_kop=
naam Voor het wijzigen van de kolomnaam van de kolom die de naam van een ploeg aangeeft. string optioneel Standaard is de kolomnaam "Team"
points_header

of

punten_kop
|points_header=

of

|punten_kop=
naam Voor het wijzigen van de kolomnaam van de kolom die het aantal punten van een ploeg aangeeft. string optioneel Standaard is de kolomnaam "Punten"

Substitutie strings[brontekst bewerken]

Wanneer de parameters |caption=, |header1= |header5= of |footer1= |footer5= gebruikt worden, kunnen hierin een drietal "vaste" strings gebruikt worden.

String Betekenis Opmerking
INSERT_UPDATE_DATE Wordt vervangen door de datum waarop de laatste ranking is gepubliceerd. Bij de datum wordt er rekening gehouden of de parameter |mdy= is gedefinieerd.
INSERT_LAST_DATE Wordt vervangen door de datum waarop de op een na laatste ranking is gepubliceerd. Bij de datum wordt er rekening gehouden of de parameter |mdy= is gedefinieerd.
INSERT_REFERENCE Wordt vervangen door een referentie naar de laatste gepubliceerde ranking.

require('Module:No globals');

local p = {}

local error_msg = '<span style=\"font-size:100%\" class=\"error\"><code style=\"color:inherit; border:inherit; padding:inherit;\">&#124;_template=</code> missing or empty</span>';
local data = {}
local templateArgs = {}

local function getArgs(frame)
	local parents = mw.getCurrentFrame():getParent()

	for k,v in pairs(parents.args) do
		if v and v ~= "" then
			templateArgs[k]=v
		end
	end

	for k,v in pairs(frame.args) do
		if v and v ~= "" then
			templateArgs[k]=v
		end
	end

	if parents.args['caption'] then
		templateArgs['caption'] = parents.args['caption']
	elseif parents.args['uitleg'] then
		templateArgs['caption'] = parents.args['uitleg']
	end

	if frame.args['caption'] then
		templateArgs['caption'] = frame.args['caption']
	elseif frame.args['uitleg'] then
		templateArgs['caption'] = frame.args['uitleg']
	end
end

local function loadData(frame)
	local source = frame.args[1]
    
	data = require('Module:SportsRankings/data/'.. source);
end

local function convDate(Dat,short)
	local tmpDat = {}

	if Dat == "" then
		Dat = "heden"
	else
		tmpDat.year, tmpDat.month, tmpDat.day = string.match(Dat, "(%d+)-(%d+)-(%d+)")
		Dat = os.time(tmpDat)

		if short then
			if templateArgs['mdy'] and templateArgs['mdy'] ~= "" then
		    	Dat = mw.getContentLanguage():formatDate( 'M j, Y', '@' .. Dat, true )
			else
				Dat = mw.getContentLanguage():formatDate( 'j M Y', '@' .. Dat, true )
			end
		else
			if templateArgs['mdy'] and templateArgs['mdy'] ~= "" then
				Dat = mw.getContentLanguage():formatDate( 'F j, Y', '@' .. Dat, true )
			else
				Dat = mw.getContentLanguage():formatDate( 'j F Y', '@' .. Dat, true )
			end
		end
	end

	return Dat
end

local function getDate(short,option)
	local Dat = data.updated

	if option == "LAST" then
		local lastDat = data.previous

		if lastDat then
			Dat = lastDat
		else
			return "Datum enerlaatste lijst niet gedefinieerd (data.update)"
		end
	end

	return convDate(Dat,short)
end

local function addCiteWeb(frame)
	local short = true

	return frame:expandTemplate{ title = 'citeer web' , args = {
				url = data.source['url'],
				titel = data.source['title'],
				website = data.source['website'],
				taal = data.source['lang'],
				['datum'] = getDate(short),
				['bezochtdatum'] = getDate(short) }}
end

local function addReference(frame)
	local text = ""

	if data.source['text'] then
		text = data.source['text']
	end

	return frame:expandTemplate{ title = 'refn' , args = {
				name=frame.args[1],
				text .. addCiteWeb(frame) }}
end

local function replaceKeywords(keyword)
	local short = false
	local insDat = getDate(short)
	local lastDat = getDate(short, "LAST")

	keyword =  string.gsub(keyword, "INSERT_UPDATE_DATE", insDat)
	keyword =  string.gsub(keyword, "INSERT_LAST_DATE", lastDat)

	if string.find(keyword, "INSERT_REFERENCE") then
		keyword =  string.gsub(keyword, "INSERT_REFERENCE", addReference(mw.getCurrentFrame()))
	end

	return keyword
end

local function table(frame, ranking, first,last)
	local styleString = ""

	if templateArgs['style'] and templateArgs['style'] ~= "" then
		styleString = templateArgs['style']
	end

	local lastRank = 0
	local selectCount = 0
	local select = nil
	local selectData = nil
	local selectList = nil
	local short = false

	select = templateArgs['select'] or templateArgs['selecteer']
	if select and select ~= "" then
		if string.match(select, ":") then
			selectList, selectData  = string.match(select, "(.*)%s*:%s*(.*)")
			selectData = mw.text.split(selectData, '%s*[;,]%s*')
			selectCount = 1
		else
			if data.groups[select] then
				selectList = select
				selectData = data.groups[selectList]
				selectCount = 1
			end
		end
	end

	local rankHeader = templateArgs['rank_header'] or templateArgs['rang_kop'] or 'Rang'
	local selectionHeader = templateArgs['selection_header'] or templateArgs['selectie_kop'] or selectList
	local teamHeader = templateArgs['team_header'] or templateArgs['team_kop'] or 'Team'
	local pointsHeader = templateArgs['points_header'] or templateArgs['punten_kop'] or 'Punten'
	local changeHeader = templateArgs['change_header'] or templateArgs['poswijz_kop'] or '<abbr title="Positiewijziging">PW</abbr>'

	local outputString = '{| class="wikitable" style="text-align: center;' .. styleString .. '"'
	local caption = ranking .. ' sinds ' .. getDate(short) .. '.'

	if templateArgs['caption'] and templateArgs['caption']  ~= "" then
		caption = templateArgs['caption']
		caption = replaceKeywords(caption)
	end

	if not (templateArgs['caption'] and templateArgs['caption']  == "") then 
		outputString = outputString ..	'\n|+' .. caption .. addReference(frame)
	end

	local count = 0
	local header = {}
	local tableWidth = 4

	if selectList then
		tableWidth = 5
	end

	while count < 5 do
		count = count + 1

		if templateArgs['header'..count] or templateArgs['koptekst'..count] then
			header[count] = templateArgs['header'..count] or templateArgs['koptekst'..count]
			header[count] = replaceKeywords(header[count])
			outputString = outputString ..  '\n|-\n| colspan="'.. tableWidth .. '" |' .. header[count]
		end
	end

	local optionalColumn = ""

	if selectList then
		optionalColumn = '\n!' .. selectionHeader
	end

	outputString = outputString .. '\n|-' .. optionalColumn
								.. '\n!' .. rankHeader .. '\n!' .. changeHeader
								.. '\n!' .. teamHeader .. '\n!' .. pointsHeader

	local change,code = '', ''

	for k,v in pairs(data.currankings) do
		if v[2] >= first and v[2] <= last then
			for _,u in pairs(data.alias) do
				if u[2]==v[1] then
					code = u[1]
					break
				end
			end

			local continue = true

			if selectList then
				continue = false

				for _,u in pairs(selectData) do
					if u == v[1] or u == code then
						continue = true
						break
					end
				end
			end

			if continue ==true  then
				local rowString = '\n|-'

				if selectList then
					local selectRank = selectCount

					if v[2]==lastRank then
						selectRank = selectCount -1
					end

					rowString = rowString ..  '\n|' .. selectRank
					selectCount = selectCount + 1
				end

				rowString = rowString .. '\n|' .. v[2]
				lastRank = v[2]
				local move = v[3]

				if move == '-' then
					change = frame:expandTemplate{ title = 'nieuw' }
				elseif move < 0 and math.abs( move ) == math.abs( v[2] ) then
					change = frame:expandTemplate{ title = 'nieuw' }
				elseif move == 0 then
					change = frame:expandTemplate{ title = 'stabiel' }
				elseif move < 0 then
					change = frame:expandTemplate{ title = 'verlies' } .. ' ' .. math.abs(move)
				elseif move > 0 then
					change = frame:expandTemplate{ title = 'winst' } .. ' ' .. move
				end

				rowString = rowString .. '||' .. change

				local countryTemplate = data.templates['flagged_team_link']
				local countryIconString = frame:expandTemplate{ title = code .. countryTemplate}

				rowString = rowString .. '\n|style="text-align: left"|' .. countryIconString

				local points = ""

				if v[4] then
					points = v[4]
				end

				rowString = rowString ..  '||' .. string.gsub(points,"%.",",")
				outputString = outputString .. rowString
			end
		end
	end

	count = 0
	local footer = {}

	while count < 5 do
		count = count + 1

		if templateArgs['footer'..count] or templateArgs['voettekst'..count] then
			footer[count] = templateArgs['footer'..count] or templateArgs['voettekst'..count]
			footer[count] = replaceKeywords(footer[count])
			outputString = outputString ..  '\n|-\n| colspan="'.. tableWidth .. '" |' .. footer[count]
		end
	end

	outputString = outputString .. "\n|}"

	return outputString
end

function p.cur(frame)
	getArgs(frame)
	loadData(frame)

	local outputString = ""
	local validCode = false
	local country = templateArgs[2]
	local rank, move
	local short = true

	if string.len(country) ==  3 then
		for _,u in pairs(data.alias) do
			if u[1] == country then
				country = u[2]
				validCode = true
				break
			end
		end

--		if not validCode then
--			outputString="[[Category:Pages using SportsRankings with unknown parameters]]" .. outputString
--		end
	end

	for _,v in pairs(data.currankings) do
		if v[1]==country then
			rank = v[2]
			move = v[3]
			break
		end
	end

	if not rank then
		rank = 'NR'
--		outputString="[[Category:Pages using SportsRankings with unknown parameters]]" .. outputString
--		outputString="[[Category:Pages using SportsRankings with no ranking]]" .. outputString
	end

	if rank ~= 'NR' then
		outputString = outputString .. ' ' .. rank .. ' '

		if move == '-' then
			outputString = outputString .. frame:expandTemplate{ title = 'nieuw' }
		elseif move < 0 and math.abs( move ) == math.abs( rank ) then
			outputString = outputString .. frame:expandTemplate{ title = 'nieuw' }
		elseif move == 0 then
			outputString = outputString .. frame:expandTemplate{ title = 'stabiel' }
		elseif move < 0 then
			outputString = outputString .. frame:expandTemplate{ title = 'verlies' } .. ' ' .. math.abs(move)
		elseif move > 0 then
			outputString = outputString .. frame:expandTemplate{ title = 'winst' } .. ' ' .. move
		end
	else
		local code = ""

		for _,u in pairs(data.alias) do
			if u[2] == country then
				code = u[1]
				break
			end
		end

		local continue = true

		for Count = 1, #data.hist do
			if code == data.hist[Count] then
				continue = false

				outputString = outputString .. frame:expandTemplate{ title = 'afkorting', args = { "NMG", "Niet meer gerankt, het land als zodanig bestaat niet meer"}  }
				break
			end
		end

		if continue then
			for _,w in pairs(data.maxrankings) do
				if w[1] == country then
					continue = false

					outputString = outputString .. frame:expandTemplate{ title = 'afkorting', args = { "NMG", "Niet meer gerankt, het land is wegens inactiviteit in de laatste 4 jaar uit de ranking verwijderd"}  }
					break
				end
			end
		end	

		if continue then
			outputString = outputString .. frame:expandTemplate{ title = 'afkorting', args = { "NGG", "Nooit gerankt geweest, het land heeft niet tenminste 5 wedstrijden tegen gerankte landen gespeeld"}  }
		end
	end

	outputString = outputString .. ' <small>(' .. getDate(short) .. ')</small>'
	outputString = outputString .. addReference(frame)

	return outputString
end

function p.max(frame)
	getArgs(frame)
	loadData(frame)

	local outputString = ""
	local validCode = false
	local country = templateArgs[2]
	local periods = {}
	local period = {}
	local rank
	local startDat
	local endDat
	local short = true

	if string.len( country) ==  3 then
		for _,u in pairs(data.alias) do
			if u[1]==country then
				country = u[2]
				validCode = true
				break
			end
		end

--		if not validCode then
--		outputString="[[Category:Pages using SportsRankings with unknown parameters]]" .. outputString
--		end
	end

	for _,v in pairs(data.maxrankings) do
		if v[1]==country then
			rank = v[2]
			periods = v[3]
			break
		end
	end

	if not rank then
		rank = 'NR'
--		outString="[[Category:Pages using SportsRankings with unknown parameters]]" .. outputString
--		outputString="[[Category:Pages using SportsRankings with no ranking]]" .. outputString
	end

	if rank ~= 'NR' then
		outputString = outputString .. ' ' .. rank .. ':'

		for Count = 1, #periods do
			period = periods[Count]

			startDat = period[1]
			endDat = period[2]

			outputString = outputString .. '<br />' .. convDate(startDat,short) .. ' – ' .. convDate(endDat,short)
		end
	else
		outputString = outputString .. frame:expandTemplate{ title = 'afkorting', args = { "NGG", "Nooit gerankt geweest"}  }
	end

	return outputString
end

function p.min(frame)
	getArgs(frame)
	loadData(frame)

	local outputString = ""
	local validCode = false
	local country = templateArgs[2]
	local periods = {}
	local period = {}
	local rank
	local startDat
	local endDat
	local short = true

	if string.len( country) ==  3 then
		for _,u in pairs(data.alias) do
			if u[1]==country then
				country = u[2]
				validCode = true
				break
			end
		end

--		if not validCode then
--			outputString="[[Category:Pages using SportsRankings with unknown parameters]]" .. outputString
--		end
	end

	for _,v in pairs(data.minrankings) do
		if v[1]==country then
			rank = v[2]
			periods = v[3]
			break
		end
	end

	if not rank then
		rank = 'NR'
--		outputString="[[Category:Pages using SportsRankings with unknown parameters]]" .. outputString
--		outputString="[[Category:Pages using SportsRankings with no ranking]]" .. outputString
	end

	if rank ~= 'NR' then
		outputString = outputString .. ' ' .. rank .. ':'

		for Count = 1, #periods do
			period = periods[Count]

			startDat = period[1]
			endDat = period[2]

			outputString = outputString .. '<br />' .. convDate(startDat,short) .. ' – ' .. convDate(endDat,short)
		end
	else
		outputString = outputString .. frame:expandTemplate{ title = 'afkorting', args = { "NGG", "Nooit gerankt geweest"}  }
	end

	return outputString
end

function p.list(frame)
	getArgs(frame)
	loadData(frame)

	local ranking = frame.args[1]
	local first = tonumber(frame.args['2']) or 1
	local last = tonumber(frame.args['3']) or 10

	return table(frame, ranking, first, last)
end

function p.list2(frame)
	getArgs(frame)
	loadData(frame)

	local ranking = frame.args[1]
	local first, last = 1,10
	local country = frame.args[2]
	local span = frame.args[3] or 2

	if string.len(country) == 3 then
		for _,u in pairs(data.alias) do
			if u[1]==country then
				country = u[2]
				break
			end
		end
	end

	for k,v in pairs(data.currankings) do
		if v[1] == country then
			first = v[2]-span
			last = v[2]+span
		end
	end

	return table(frame, ranking, first, last)
end

return p