Zum Inhalt springen

Modul:WTA Top10

aus Wikipedia, der freien Enzyklopädie

Die Dokumentation für dieses Modul kann unter Modul:WTA Top10/Doku erstellt werden

local p = {}

local function flagge(land)
	if (land == 'RUS' or land == 'BLR') then
		return '[[Datei:Flag placeholder.svg|20px|border|class=noviewer|link=Niemandsland]]'
	elseif (land == 'KAZ') then
		return '[[Datei:Flag of Kazakhstan.svg|20px|border|class=noviewer|link=Kasachstan]]'
	elseif (land == 'USA') then
		return '[[Datei:Flag of the United States.svg|20px|border|class=noviewer|link=Vereinigte Staaten]]'
	elseif (land == 'CZE') then
		return '[[Datei:Flag of the Czech Republic.svg|20px|border|class=noviewer|link=Tschechien]]'
	elseif (land == 'UKR') then
		return '[[Datei:Flag of Ukraine.svg|20px|border|class=noviewer|link=Ukraine]]'
	elseif (land == 'POL') then
		return '[[Datei:Flag of Poland.svg|20px|border|class=noviewer|link=Polen]]'
	elseif (land == 'CHE') then
		return '[[Datei:Flag of Switzerland within 2to3.svg|20px|border|class=noviewer|link=Schweiz]]'
	elseif (land == 'CAN') then
		return '[[Datei:Flag of Canada (Pantone).svg|20px|border|class=noviewer|link=Kanada]]'
	elseif (land == 'ROU') then
		return '[[Datei:Flag of Romania.svg|20px|border|class=noviewer|link=Rumänien]]'
	elseif (land == 'JPN') then
		return '[[Datei:Flag of Japan.svg|20px|border|class=noviewer|link=Japan]]'
	elseif (land == 'PHL') then
		return '[[Datei:Flag of the Philippines.svg|20px|border|class=noviewer|link=Philippinen]]'
	elseif (land == 'BEL') then
		return '[[Datei:Flag of Belgium.svg|20px|border|class=noviewer|link=Belgien]]'
	elseif (land == 'ITA') then
		return '[[Datei:Flag of Italy.svg|20px|border|class=noviewer|link=Italien]]'
	elseif (land == 'BRA') then
		return '[[Datei:Flag of Brazil.svg|20px|border|class=noviewer|link=Brasilien]]'
	elseif (land == 'SRB') then
		return '[[Datei:Flag of Serbia.svg|20px|border|class=noviewer|link=Serbien]]'
	elseif (land == 'CHN') then
		return "[[Datei:Flag of the People's Republic of China.svg|20px|border|class=noviewer|link=Volksrepublik China]]"
	elseif (land == 'TWN') then
		return '[[Datei:Flag of the Republic of China.svg|20px|border|class=noviewer|link=Republik China (Taiwan)]]'
	elseif (land == 'FRA') then
		return '[[Datei:Flag of France.svg|20px|border|class=noviewer|link=Frankreich]]'
	elseif (land == 'LAT') then
		return '[[Datei:Flag of Latvia.svg|20px|border|class=noviewer|link=Lettland]]'
	elseif (land == 'ESP') then
		return '[[Datei:Flag of Spain.svg|20px|border|class=noviewer|link=Spanien]]'
	elseif (land == 'AUS') then
		return '[[Datei:Flag of Australia (converted).svg|20px|border|class=noviewer|link=Australien]]'
	elseif (land == 'DEU') then
		return '[[Datei:Flag of Germany.svg|20px|border|class=noviewer|link=Deutschland]]'
	end

	return ''
end

-- Die Funktion nameAnpassen wandelt Namen, die eine Klammer enthalten um
-- in einen Link wie [[Zahg Shuai (Tennisspielerin|Zhang Shuai)]]
-- dreiteilige Namen wie Mirra Alexandrowna Andrejewa werden ebenfalls
-- in einen solchen Link umgewandelt
local function nameAnpassen(name, land)
	local s = {}
	local i = 0

	if name == nil then
		return ''
	end


	-- Namensteile in Array s speichern und Anzahl in i
	for teil in string.gmatch(name, "%S+") do
		i = i + 1
		s[i] = teil
	end

	-- der Klammerzusatz kann mehrteilig sein (zB Tennisspielerin, 2000)
	-- ab dem erste Teil mit einer öffnenden Klammer wird der Name daher
	-- abgebrochen
	-- für Russland und Usbekistan werden auch noch Patronyme entfernt
	name = '[[' .. name .. '|'
	for j=1,i,1 do
		if (s[j]:find('(', 1, true) ~= nil or j == i) then
			if s[j]:find('(', 1, true) == nil then
				-- kein Klammerausdruck
				name = name .. s[j]
			elseif land == 'RUS' or land == 'UZB' then
				-- Klammerausdruck für russische und
				-- usbekische Spielerinnen den letzten
				-- Namensteil anhängen
				name = name .. s[j-1]
			end
			break
		end
		if (land ~= 'RUS' and land ~= 'UZB') or j == 1 then
			name = name .. s[j] .. ' '
		end
	end
	name = name .. ']]'

	return name
end

-- ed ist entweder 'einzel' oder 'Doppel' und entscheidet welche der beiden
-- Listen angezeigt wird
local function TopTen(frame, ed)
	local retVal
	local name = tostring(mw.title.getCurrentTitle())

	if not name then
    	retVal = ''
	else
		-- die Top10 werden aus dem Modul WTA_Top10_Daten geladen
		-- da sie ReadOnly sind werden die anzuzeigenden Daten auf die Variable
		-- ZehnBeste kopiert
		local Top10
    	local ZehnBeste = {}
		-- heute berechnet die Tage des aktuellen Datums an Hand der
		-- Jahreszahl * 365 + Monat * 30 + Tag
		-- also zb 2026-08-15 --> 2026 * 365 + 8 * 30 + 15
    	local heute = tonumber(frame.args.Datum:sub(1, 4)) * 365 + tonumber(frame.args.Datum:sub(6, 7)) * 30 + tonumber(frame.args.Datum:sub(9, 10))

    	-- aus dem Modul WTA_Top10_Daten die Daten laden
	    if ed == 'Einzel' then
			Top10 = mw.loadData('Modul:WTA_Top10_Daten').WTA.Einzel
    	else
			Top10 = mw.loadData('Modul:WTA_Top10_Daten').WTA.Doppel
    	end
    
    	if tonumber(Top10.Stand:sub(1,4)) * 365 + tonumber(Top10.Stand:sub(6, 7)) * 30 + tonumber(Top10.Stand:sub(9, 10)) < heute - 100 then
	  		-- der Stand der Daten wird ebenso wie das aktuelle Datum (siehe heute weiter oben)
	  		-- in eine Zahl an Tagen umgerechnet
	  		-- ist der Stand mehr als 100 Tage sind die Daten veraltet
    		retVal = ''
    	else
			-- jetzt ist noch fest zu stellen, ob sich die Spielerin in der Liste der
			-- Top 10 befindet
    		if name == Top10.Name1 or
				name == Top10.Name2 or
				name == Top10.Name3 or
				name == Top10.Name4 or
				name == Top10.Name5 or
				name == Top10.Name6 or
				name == Top10.Name7 or
				name == Top10.Name8 or
				name == Top10.Name9 or
				name == Top10.Name10 then

				-- befindet sie sich in der Liste muss der Name noch angepasst werden
				-- um Patronyme und Klammerzusätze zu entfernen
				ZehnBeste.Name1 = nameAnpassen(Top10.Name1, Top10.Land1)
				ZehnBeste.Position1 = Top10.Position1
				ZehnBeste.Aenderung1 = Top10.Aenderung1
				ZehnBeste.Land1 = Top10.Land1
				ZehnBeste.Flagge1 = flagge(Top10.Land1)
				ZehnBeste.Name2 = nameAnpassen(Top10.Name2, Top10.Land2)
				ZehnBeste.Position2 = Top10.Position2
				ZehnBeste.Aenderung2 = Top10.Aenderung2
				ZehnBeste.Land2 = Top10.Land2
				ZehnBeste.Flagge2 = flagge(Top10.Land2)
				ZehnBeste.Name3 = nameAnpassen(Top10.Name3, Top10.Land3)
				ZehnBeste.Position3 = Top10.Position3
				ZehnBeste.Aenderung3 = Top10.Aenderung3
				ZehnBeste.Land3 = Top10.Land3
				ZehnBeste.Flagge3 = flagge(Top10.Land3)
				ZehnBeste.Name4 = nameAnpassen(Top10.Name4, Top10.Land4)
				ZehnBeste.Position4 = Top10.Position4
				ZehnBeste.Aenderung4 = Top10.Aenderung4
				ZehnBeste.Land4 = Top10.Land4
				ZehnBeste.Flagge4 = flagge(Top10.Land4)
				ZehnBeste.Name5 = nameAnpassen(Top10.Name5, Top10.Land5)
				ZehnBeste.Position5 = Top10.Position5
				ZehnBeste.Aenderung5 = Top10.Aenderung5
				ZehnBeste.Land5 = Top10.Land5
				ZehnBeste.Flagge5 = flagge(Top10.Land5)
				ZehnBeste.Name6 = nameAnpassen(Top10.Name6, Top10.Land6)
				ZehnBeste.Position6 = Top10.Position6
				ZehnBeste.Aenderung6 = Top10.Aenderung6
				ZehnBeste.Land6 = Top10.Land6
				ZehnBeste.Flagge6 = flagge(Top10.Land6)
				ZehnBeste.Name7 = nameAnpassen(Top10.Name7, Top10.Land7)
				ZehnBeste.Position7 = Top10.Position7
				ZehnBeste.Aenderung7 = Top10.Aenderung7
				ZehnBeste.Land7 = Top10.Land7
				ZehnBeste.Flagge7 = flagge(Top10.Land7)
				ZehnBeste.Name8 = nameAnpassen(Top10.Name8, Top10.Land8)
				ZehnBeste.Position8 = Top10.Position8
				ZehnBeste.Aenderung8 = Top10.Aenderung8
				ZehnBeste.Land8 = Top10.Land8
				ZehnBeste.Flagge8 = flagge(Top10.Land8)
				ZehnBeste.Name9 = nameAnpassen(Top10.Name9, Top10.Land9)
				ZehnBeste.Position9 = Top10.Position9
				ZehnBeste.Aenderung9 = Top10.Aenderung9
				ZehnBeste.Land9 = Top10.Land9
				ZehnBeste.Flagge9 = flagge(Top10.Land9)
				ZehnBeste.Name10 = nameAnpassen(Top10.Name10, Top10.Land10)
				ZehnBeste.Position10 = Top10.Position10
				ZehnBeste.Aenderung10 = Top10.Aenderung10
				ZehnBeste.Land10 = Top10.Land10
				ZehnBeste.Flagge10 = flagge(Top10.Land10)

				ZehnBeste.Titel = '[[Women’s Tennis Association|WTA]]-Weltrangliste: Die zehn bestplatzierten Tennisspielerinnen der Welt im ' .. ed
				
				retVal = frame:expandTemplate{title = 'RanglisteTop10', args = ZehnBeste}
      		else
				-- die Spielerin befindet sich nicht unter den Top 10
				-- die Liste wird also nicht angezeigt
        		retVal = ''
      		end
    	end
	end

	return retVal
end

function p.Einzel(frame)
    return TopTen(frame, 'Einzel')
end

function p.Doppel(frame)
    return TopTen(frame, 'Doppel')
end

return p