Module:Tabel Nationale records (langebaanschaatsen)

Uit Wikipedia, de vrije encyclopedie
Naar navigatie springen Naar zoeken springen
{{#invoke:Tabel_Nationale records_(langebaanschaatsen)|main
|show_links=1
|show_tabel=1
|show_afstanden=1
|show_rest=1
|show_punten=1

|V_100_Naam=[[Jenny Wolf]] |V_100_Land={{GER}} |V_100_Tijd=10,21 |V_100_Datum=06-03-2009
|V_500_Naam=[[Sang-Hwa Lee]] |V_500_Land={{KOR}} |V_500_Tijd=36,36 |V_500_Datum=16-11-2013
|V_1000_Naam=[[Brittany Bowe]] |V_1000_Land={{USA}} |V_1000_Tijd=1.12,18 |V_1000_Datum=22-11-2015
|V_1500_Naam=[[Heather Richardson-Bergsma]] |V_1500_Land={{USA}} |V_1500_Tijd=1.50,85 |V_1500_Datum=21-11-2015
|V_Achtervolging_Naam=[[Linda de Vries]]<br/>[[Antoinette de Jong]]<br/>[[Ireen Wüst]] |V_Achtervolging_Land={{NED}} |V_Achtervolging_Tijd=2.56,02 |V_Achtervolging_Datum=17-11-2013
|V_3000_Naam=[[Martina Sáblíková]] |V_3000_Land={{CZE}} |V_3000_Tijd=3.56,30 |V_3000_Datum=11-12-2009
|V_5000_Naam=[[Martina Sáblíková]] |V_5000_Land={{CZE}} |V_5000_Tijd=6.42,66 |V_5000_Datum=18-02-2011
|V_10000_Naam=[[Eva Rodansky]] |V_10000_Land={{USA}} |V_10000_Tijd=15.45,88 |V_10000_Datum=06-03-2005
|V_Sprint_Naam=[[Heather Richardson]] |V_Sprint_Land={{USA}} |V_Sprint_Tijd=148,015 |V_Sprint_Datum=26-01-2013
|V_Mini_Naam=[[Eva Rodansky]] |V_Mini_Land={{USA}} |V_Mini_Tijd=163,243 |V_Mini_Datum=28-02-2004
|V_Kleine_Naam=[[Cindy Klassen]] |V_Kleine_Land={{CAN}} |V_Kleine_Tijd=159,605 |V_Kleine_Datum=08-01-2005
|V_2X500_Naam=[[Heather Richardson]] |V_2X500_Land={{USA}} |V_2X500_Tijd=74,190 |V_2X500_Datum=27-12-2013

|M_100_Naam=[[Yuya Oikawa]] |M_100_Land={{JPN}} |M_100_Tijd=09,40 |M_100_Datum=06-03-2009
|M_500_Naam=[[Pavel Koelizjnikov]] |M_500_Land={{RUS}} |M_500_Tijd=33,98 |M_500_Datum=20-11-2015
|M_1000_Naam=[[Shani Davis]] |M_1000_Land={{USA}} |M_1000_Tijd=1.06,42 |M_1000_Datum=07-03-2009
|M_1500_Naam=[[Shani Davis]] |M_1500_Land={{USA}} |M_1500_Tijd=1.41,04 |M_1500_Datum=11-12-2009
|M_3000_Naam=[[Håvard Bøkko]] |M_3000_Land={{NOR}} |M_3000_Tijd=3.39,29 |M_3000_Datum=28-02-2009
|M_Achtervolging_Naam=[[Jan Blokhuijsen]]<br/>[[Sven Kramer]]<br/>[[Koen Verweij]] |M_Achtervolging_Land={{NED}} |M_Achtervolging_Tijd=3.35,60 |M_Achtervolging_Datum=16-11-2013
|M_5000_Naam=[[Sven Kramer]] |M_5000_Land={{NED}} |M_5000_Tijd=6.04,59 |M_5000_Datum=17-11-2013
|M_10000_Naam=[[Ted-Jan Bloemen]] |M_10000_Land={{CAN}} |M_10000_Tijd=12.36,30 |M_10000_Datum=21-11-2015
|M_Sprint_Naam=[[Michel Mulder]] |M_Sprint_Land={{NED}} |M_Sprint_Tijd=136,790 |M_Sprint_Datum=26-01-2013
|M_Mini_Naam=[[Ronald Macky]] |M_Mini_Land={{USA}} |M_Mini_Tijd=150,809 |M_Mini_Datum=05-03-2005
|M_Kleine_Naam=[[Paul Dyrud]] |M_Kleine_Land={{USA}} |M_Kleine_Tijd=153,348 |M_Kleine_Datum=29-01-2005
|M_Grote_Naam=[[Shani Davis]] |M_Grote_Land={{USA}} |M_Grote_Tijd=147,755 |M_Grote_Datum=27-12-2007
|M_2X500_Naam=[[Kang-Seok Lee]] |M_2X500_Land={{KOR}} |M_2X500_Tijd=68,690 |M_2X500_Datum=08-03-2007
}}

De weergave van de tabellen kunnen als volgt ingesteld worden

Parameter Doel
show_links Geeft de links weer van de desbetreffende afstanden (1=aan,0=uit)
show_tabel 1=Zet de tabellen van de vrouwen en mannen naast elkaar, 0=Zet de desbetreffende tabellen onder elkaar
show_afstanden Geeft de klassieke afstanden weer (500m,1000m,1500m,3000m,5000m,10.000m) (1=aan,0=uit)
show_rest Geeft overige afstanden weer (1=aan,0=uit)
show_punten Geeft de totaalpunten weer van de records op klassieke afstanden (excl. 3000m mannen en 10.000 vrouwen) (1=aan,0=uit)

De parameters om gegevens in te voegen is als volgt opgebouwd. geslacht_rij_kolom

Parameter Doel
Geslacht
V Vrouwen
M Mannen
Rij
100 100 meter
500 500 meter
1000 1000 meter
1500 1500 meter
3000 3000 meter
5000 5000 meter
10000 10.000 meter
Achtervolging Ploegenachtervolging
Teamsprint Teamsprint
2X500 2 x 500 meter
Sprint Sprint vierkamp (2 x 500m en 2 x 1000m)
Mini Mini vierkamp (500m,1000m,1500m,3000m)
Kleine Kleine vierkamp (500m,1500m,3000m,5000m)
Grote Grote vierkamp (500m,1500m,5000m,10.000m)
overige Je kan zelf een rij creëren met een elk gewenste naam
Kolom
Afstand indien een overige rij is aangemaakt geef je hier de tekst die in kolom afstand moet worden weergegeven
In ander gevallen wordt er een extra regel toegevoegd in de desbetreffende kolom
Naam Naam van de schaatser/schaatsster
Land Land waarvoor de schaatser/schaatsster uitkomt
Tijd Tijd de schaatser/schaatsster
Datum Datum waarop het record is gereden

}}


local p = {}
bit = require( 'bit32' )
function nul(nr)
	if nr == nil then
		return 0
	else
		return nr
	end
end

function parse(time)
	if(time == nil or string.len(time) == 0) then return 0 end
	s, h = string.match(time, "(%d+),(%d+)")
	m = string.match(time, "(%d+)%.")
	m = nul(m) 
	s = nul(s)
	h = nul(h)
	return ((m*60)+s) .. "." .. h
	
end
db = {
	pos = {
		["100"] = 0,
		["500"] = 1,
		["1000"] = 2,
		["1500"] = 3,
		["3000"] = 4,
		["5000"] = 5,
		["10000"] = 6,
		["Achtervolging"] = 10,
		["Teamsprint"] = 15,
		["2X500"] = 20,
		["Sprint"] = 30,
		["Mini"] = 40,
		["Kleine"] = 50,
		["Grote"] = 60
	},
	links = {
		["100"] = "100_meter_(schaatsen)",
		["500"] = "500_meter_(schaatsen)",
		["1000"] = "1000_meter_(schaatsen)",
		["1500"] = "1500_meter_(schaatsen)",
		["3000"] = "3000_meter_(schaatsen)",
		["5000"] = "5000_meter_(schaatsen)",
		["10000"] = "10.000_meter_(schaatsen)",
		["Achtervolging"] = "Ploegenachtervolging_(schaatsen)",
		["Teamsprint"] = "Teamsprint_(schaatsen)",
		["2X500"] = nil,
		["Sprint"] = nil,
		["Mini"] = nil,
		["Kleine"] = "Kleine_vierkamp",
		["Grote"] = "Grote_vierkamp"
	},
	name = {
		["100"] = "100 m",
		["500"] = "500 m",
		["1000"] = "1000 m",
		["1500"] = "1500 m",
		["3000"] = "3000 m",
		["5000"] = "5000 m",
		["10000"] = "10.000 m",
		["Achtervolging"] = "Ploegen-<br>achtervolging",
		["Teamsprint"] = "Teamsprint",
		["2X500"] = "2×500 m",
		["Sprint"] = "Sprintvierkamp",
		["Mini"] = "Minivierkamp",
		["Kleine"] = "Kleine vierkamp",
		["Grote"] = "Grote vierkamp"
	},
	cat = {
		["100"] = 12,
		["500"] = 3,
		["1000"] = 3,
		["1500"] = 3,
		["3000"] = 3,
		["5000"] = 3,
		["10000"] = 6,
		["Achtervolging"] = 12,
		["Teamsprint"] = 12,
		["2X500"] = 12,
		["Sprint"] = 12,
		["Mini"] = 12,
		["Kleine"] = 12,
		["Grote"] = 12
	},
    bit = {
    	["V"] = 5,
    	["M"] = 10
    }
}
punt = {}
punt.V = 0
punt.M = 0
function creattable(t,a,g,frame)
	table.insert(t,"{| class=\"wikitable\"")
	if g == "V" then table.insert(t,"|+ Vrouwen")
	elseif g == "M" then table.insert(t,"|+ Mannen")
	end
	local l = ""
	if g == "V" then l = "Schaatsster"
	elseif g == "M" then l = "Schaatser"
	end
	table.insert(t,"!Afstand || "..l.." || Tijd || Datum || Baan")
	local d = {}
	local c = {}
	for key,value in pairs(a)  do 
		if db.pos[key] then table.insert(d, key)
		else table.insert(c, key) end
	end
	table.sort(d,function(a,b)
		return tonumber(db.pos[b]) > tonumber(db.pos[a])
	end)
	table.sort(c)
	for i,n in ipairs(c) do table.insert(d,n) end
	local p = true
	for i,n in ipairs(d) do 
		if Show.punten and p and db.pos[n] > 9 then
			p = false
			table.insert(t,"|-\n|colspan=\"2\"| '''Puntentotaal\n|colspan=\"3\"| '''"..string.format("%.3f",punt[g]))
		end
		if db.cat[n] == nil then db.cat[n] = 252 end
		if a[n].Tijd and bit.band(db.bit[g],db.cat[n],3) ~= 0 then 
			punt[g] = punt[g]+(math.floor(parse(a[n].Tijd)*1000/(n/500))/1000)
		end
		if (bit.band(db.bit[g],db.cat[n],12) ~= 0 and Show.rest) or (bit.band(db.bit[g],db.cat[n],3) ~= 0 and Show.afstanden)  then
			if Show.punten and bit.band(db.bit[g],db.cat[n],3) == 0 and db.pos[n] < 10 then 
				table.insert(t,"|- bgcolor=FFFFDD")
			else 
				table.insert(t,"|-")
			end
			local l = "|"
			if Show.links and db.links[n] then l = l.."[["..db.links[n].."|"..db.name[n].."]]"
			elseif db.name[n] then l = l..db.name[n]
			elseif a[n].Afstanden == nil then l = l..n
			end
			if a[n].Afstanden then 
				if string.len(l) > 1 then l = l.."<br/>" end
				l = l..a[n].Afstanden
			end
			l = l.." || "
			if a[n].Naam then l = l..a[n].Naam end
			l = l.." || "
			if a[n].Tijd then l = l..a[n].Tijd end
			l = l.." || "
			if a[n].Datum then l = l..a[n].Datum end
			l = l.." || "
			if a[n].Baan then l = l..a[n].Baan end
			table.insert(t,l)
		end
	end
	if Show.punten and p then
		table.insert(t,"|-\n|colspan=\"2\"| '''Puntentotaal\n|colspan=\"3\"| '''"..string.format("%.3f",punt[g]))
	end
	table.insert(t,"|}")
	return t
end
Args = {}
Show = {
	rest = true,
	afstanden = true,
	punten = false,
	mannen = true,
	vrouwen = true,
	tabel = true
}
function p.main(frame)
	Args = frame.args
	t = {}
	local r = {}
	r.V = {}
	r.M = {}
	for key,value in pairs(Args) do 
		s = string.match(key, "show_(.*)")
		if s and value == "1"  then 
			Show[s] = true
		end
		if s and value == "0"  then 
			Show[s] = false
		end
		g,a,p = string.match(key, "([^_]*)_(.*)_([^_]*)")
		if g and a and p then
			if r[g][a] == nil then 
				r[g][a] = {} 
			end
			r[g][a][p] = value
		end
	end
	local vr = (table.getn(r.V) and Show.vrouwen)
	local ma = (table.getn(r.M) and Show.mannen)
	local ta = (Show.tabel)
	if ta then table.insert(t,"{|\n| valign=\"top\" |") end
	if vr then t = creattable(t,r.V,"V",frame) end
	if vr and ma and ta then table.insert(t,"| width=\"10px\" |\n| valign=\"top\" |") end
	if ma then t = creattable(t,r.M,"M",frame) end
	if vr and ma and ta and Show.punten then 
		table.insert(t,"|-\n|colspan=\"2\"| '''Gezamenlijk puntentotaal || '''"..string.format("%.3f",punt.V+punt.M))
	end
	if ta then table.insert(t,"|}") end
	return table.concat(t,"\n")
end
return p