Modul:TennisGrandSlamResultate
Zur Navigation springen
Zur Suche springen
Die Dokumentation für dieses Modul kann unter Modul:TennisGrandSlamResultate/Doku erstellt werden
-- Modul:TennisGrandSlamResultate
local p = {}
-- die Funktion getCell erzeugt eine Tabellenzelle
-- Parameter:
-- link: Artikelname
-- result: Resultat der Athletin/des Athleten (zB S oder HF)
-- Rückgabe:
-- ein String mit dem HTML Code der Tabellenzelle
local function getCell(link, result)
local cell
if not result or result == '' then
cell = mw.html.create('td'):wikitext(' ')
else
if result == '-' then
result = '–'
end
if result == 'S' then
cell = mw.html.create('td'):wikitext('[[' .. link .. '|S]]'):css('background-color', '#FFF68F'):css('font-weight', 'bold')
elseif result == 'F' then
cell = mw.html.create('td'):wikitext('[[' .. link .. '|F]]'):css('background-color', '#BFEFFF')
elseif result == 'HF' then
cell = mw.html.create('td'):wikitext('[[' .. link .. '|' .. result .. ']]'):css('background-color', '#FFE7BA')
elseif result == ' ' or not result then
if langstrichLink == 'yes' then
cell = mw.html.create('td'):wikitext(' ')
elseif langstrichLink == 'no' and not result then
cell = mw.html.create('td'):wikitext(' ')
else
cell = mw.html.create('td'):wikitext('—')
end
elseif result == 'Q1' or result == 'Q2' or result == 'Q3' then
if junior == 'no' then
cell = mw.html.create('td'):wikitext('[[' .. link .. '/Qualifikation' .. '|' .. result .. ']]')
else
cell = mw.html.create('td'):wikitext(result)
end
else
cell = mw.html.create('td'):wikitext('[[' .. link .. '|' .. result .. ']]')
end
end
return cell
end
-- die Funktion wasHeld überprüft ob ein Wettkampf im angegebenen Jahr ausgerichtet wurde
-- Parameter:
-- prefix: das Prefix des Wettkampfs, das in den Vorlagenparametern verwendet wird (zB AUO, FRO)
-- competition: 'Herreneinzel', 'Dameneinzel', 'Herrendoppel', 'Damendoppel', oder 'Mixed'
-- year: Jahr der Ausrichtung
-- Rückgabe:
-- boolean false wenn der Wettkampf nicht stattgefunden hat
-- boolean true wenn er stattgefunden hat
local function wasHeld(prefix, competition, year)
local held = false
if prefix == 'AUO' then
if competition == 'Mixed' then
if year > 1987 then
held = true
end
elseif string.find(competition, 'doppel-Rollstuhl') then
if year > 2003 then
held = true
end
elseif string.find(competition, 'einzel-Rollstuhl') then
if year > 2001 then
held = true
end
elseif string.find(competition, 'Quad') then
if year > 2007 then
held = true
end
elseif string.find(competition, 'Junior') then
if year ~= 1986 and year ~= 2021 then
held = true
end
elseif year ~= 1986 then
held = true
end
elseif prefix == 'FRO' then
if competition == 'Mixed' then
if year ~= 2020 then
held = true
end
elseif string.find(competition, 'Rollstuhl') then
if year > 2006 then
held = true
end
elseif string.find(competition, 'Quad') then
if year > 2018 then
held = true
end
elseif string.find(competition, 'Junior') then
if year ~= 1986 then
held = true
end
else
held = true
end
elseif prefix == 'WIM' then
if competition == 'Herrendoppel-Rollstuhl' then
if year > 2005 and year ~= 2020 then
held = true
end
elseif competition == 'Damendoppel-Rollstuhl' then
if year > 2008 and year ~= 2020 then
held = true
end
elseif string.find(competition, 'Rollstuhl') then
if year > 2015 and year ~= 2020 then
held = true
end
elseif string.find(competition, 'Quaddoppel') then
if year > 2018 and year ~= 2020 then
held = true
end
elseif string.find(competition, 'Quadeinzel') then
if year > 2017 and year ~= 2020 then
held = true
end
elseif year ~= 2020 then
held = true
end
elseif prefix == 'USO' then
if string.find(competition, 'Rollstuhl') then
if year > 2004 and year ~= 2008 and year ~= 2012 and year ~= 2016 and year ~= 2024 then
held = true
end
elseif string.find(competition, 'Quad') then
if year > 2006 and year ~= 2008 and year ~= 2012 and year ~= 2016 and year ~= 2024 then
held = true
end
elseif year ~= 2020 then
held = true
elseif competition == 'Herreneinzel' or competition == 'Herrendoppel' or competition == 'Dameneinzel' or competition == 'Damendoppel' then
held = true
end
end
return held
end
-- die Funktion getRow erzeugt eine Wettkampfzeile der Tabelle
-- Parameter:
-- frame: der aufrufende frame
-- overviewArticle: der Überblicksartikel für den Wettkampf (zB Australian Open)
-- competition: 'Herreneinzel', 'Dameneinzel', 'Herrendoppel', 'Damendoppel', oder 'Mixed'
-- prefix: Prefix des Wettkampfs (zB AUS für Australien Open oder WIM für Wimbledon Championships)
-- firstYear: erstes Jahr in der Tabelle
-- lastYear: letztes Jahr in der Tabelle
-- Rückgabe:
-- ein String mit dem HTML Code der Zeile
local function getRow(frame, overviewArticle, competition, prefix, firstYear, lastYear)
local row
local karriere
local year
local lYear
local year2
local result
local colspan
row = mw.html.create('tr')
row:node(mw.html.create('td'):wikitext('[[' .. overviewArticle .. ']]'):css('text-align', 'left'))
karriere = '—'
lYear = tonumber(lastYear)
year = tonumber(firstYear)
while (year <= lYear) do
colspan = 1
if wasHeld(prefix, competition, year) then
result = frame:getParent().args[prefix .. year] or ' '
if prefix == 'AUO' then
cell = getCell('Australian Open ' .. year .. '/' .. competition, result)
elseif prefix == 'FRO' then
cell = getCell('French Open ' .. year .. '/' .. competition, result)
elseif prefix == 'WIM' then
cell = getCell('Wimbledon Championships ' .. year .. '/' .. competition, result)
elseif prefix == 'USO' then
cell = getCell('US Open ' .. year .. '/' .. competition, result)
end
if (result == 'S') then
karriere = 'S'
elseif result == 'F' and karriere ~= 'S' then
karriere = 'F'
elseif result == 'HF' and karriere ~= 'S' and karriere ~= 'F' then
karriere = 'HF'
elseif result == 'VF' and karriere ~= 'S' and karriere ~= 'F' and karriere ~= 'HF' then
karriere = 'VF'
elseif result == 'AF' and karriere ~= 'S' and karriere ~= 'F' and karriere ~= 'HF' and karriere ~= 'VF' then
karriere = 'AF'
elseif result == '3' and karriere ~= 'S' and karriere ~= 'F' and karriere ~= 'HF' and karriere ~= 'VF' and karriere ~= 'AF' then
karriere = '3'
elseif result == '2' and karriere ~= 'S' and karriere ~= 'F' and karriere ~= 'HF' and karriere ~= 'VF' and karriere ~= 'AF' and karriere ~= '3' then
karriere = '2'
elseif result == '1' and karriere ~= 'S' and karriere ~= 'F' and karriere ~= 'HF' and karriere ~= 'VF' and karriere ~= 'AF' and karriere ~= '3' and karriere ~= '2' then
karriere = '1'
end
else
for year2 = year + 1, lYear do
if not wasHeld(prefix, competition, year2) then
colspan = colspan + 1
else
break
end
end
cell = mw.html.create('td'):wikitext(' ')
cell:css('background-color', '#e8e9ea')
if colspan > 1 then
cell:attr('colspan', colspan)
end
end
row:node(cell)
year = year + colspan
end
if karriere == 'S' then
row:node(mw.html.create('td'):wikitext('S'):css('background-color', '#FFF68F'):css('font-weight', 'bold'))
elseif karriere == 'F' then
row:node(mw.html.create('td'):wikitext('F'):css('background-color', '#BFEFFF'):css('font-weight', 'bold'))
elseif karriere == 'HF' then
row:node(mw.html.create('td'):wikitext('HF'):css('background-color', '#FFE7BA'):css('font-weight', 'bold'))
elseif karriere == ' ' or not karriere then
row:node(mw.html.create('td'):wikitext('—'):addClass('hintergrundfarbe5'):css('font-weight', 'bold'))
else
row:node(mw.html.create('td'):wikitext(karriere):addClass('hintergrundfarbe5'):css('font-weight', 'bold'))
end
return row
end
-- die Vorlage TennisGrandSlamResultate erzeugt eine Tabelle mit den Turnierergebnissen der
-- Garnd Slam Turniere.
-- Parameter:
-- frame: der aufrufende frame
-- competition: 'Herreneinzel', 'Dameneinzel', 'Herrendoppel', 'Damendoppel', oder 'Mixed'
-- die Vorlage muss die folgenden Parameter haben:
-- firstYear: das erste Jahr für das Tabelleneinträge erzeugt werden sollen (vierstellig)
-- lastYear: das letzte Jahr für das Tabelleneinträge erzeugt werden sollen (vierstellig)
-- optional kommen folgende Parameter dazu
-- AUS gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die Australian Open (zB AUS2016=1)
-- FRO gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die French Open (zB FRO2016=2)
-- WIM gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die Wimbledon Championships (zB WIM2016=AF)
-- USO gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die US Open (zB USO2016=VF)
local function TennisGrandSlamResultate(frame, competition)
local firstYear = frame:getParent().args['ErstesJahr']
local lastYear = frame:getParent().args['LetztesJahr']
local result
local table
local head
local caption
local row
local year
local klappbar
klappbar = 0
if frame:getParent().args['klappbar'] == '+' then
klappbar = 1
if frame:getParent().args['eingeklappt'] == '+' then
klappbar = 2
end
end
langstrichLink = 'yes'
if frame:getParent().args['Langstrichlink'] == 'no' then
langstrichLink = 'no'
end
junior = 'no'
if competition == 'Junioreneinzel' or competition == 'Juniorendoppel' or competition == 'Juniorinneneinzel' or competition == 'Juniorinnendoppel' then
junior = 'yes'
end
if not firstYear then
for year=1877, tonumber(os.date('%Y'))
do
if frame:getParent().args['AUO'..year] or frame:getParent().args['FRO'..year] or frame:getParent().args['WIM'..year] or frame:getParent().args['USO'..year] then
firstYear = year
break
end
end
if not firstYear then
return '\n\nKein gültiger Parameter gefunden!\n\n'
end
end
if not lastYear then
lastYear = firstYear
for year=firstYear, tonumber(os.date('%Y'))
do
if frame:getParent().args['AUO'..year] or frame:getParent().args['FRO'..year] or frame:getParent().args['WIM'..year] or frame:getParent().args['USO'..year] then
lastYear = year
end
end
end
-- wikitable anlegen
if klappbar > 0 then
if klappbar == 1 then
table = mw.html.create('table'):addClass('wikitable mw-collapsible'):css('text-align', 'center')
else
table = mw.html.create('table'):addClass('wikitable mw-collapsible mw-collapsed'):css('text-align', 'center')
end
caption = mw.html.create('caption'):wikitext(competition .. ' ')
table:node(caption):newline()
else
table = mw.html.create('table'):addClass('wikitable'):css('text-align', 'center')
end
-- Tabellenheader mit Links auf die zugehörigen 'WTA Tour' bzw 'ATP Tour' Artikel anlegen
head = mw.html.create('tr')
head:node(mw.html.create('th'):wikitext('Turnier'))
if string.find(competition, 'Rollstuhl') or string.find(competition, 'Quad') then
for year = firstYear, lastYear
do
head:node(mw.html.create('th'):wikitext('' .. year))
end
elseif string.find(competition, 'Herren') or string.find(competition, 'Junioren') then
for year = firstYear, lastYear
do
if (year > 1989 and year < 2009) or year > 2018 then
if competition == 'Herreneinzel' or competition == 'Herrendoppel' then
head:node(mw.html.create('th'):wikitext('[[ATP Tour ' .. year .. '|' .. year .. ']]'))
elseif competition == 'Junioreneinzel' or competition == 'Juniorendoppel' then
head:node(mw.html.create('th'):wikitext( year ))
end
elseif year > 2008 and year < 2019 then
if competition == 'Herreneinzel' or competition == 'Herrendoppel' then
head:node(mw.html.create('th'):wikitext('[[ATP World Tour ' .. year .. '|' .. year .. ']]'))
elseif competition == 'Junioreneinzel' or competition == 'Juniorendoppel' then
head:node(mw.html.create('th'):wikitext( year ))
end
else
head:node(mw.html.create('th'):wikitext('' .. year))
end
end
elseif string.find(competition, 'Damen') or string.find(competition, 'Juniorinnen') then
for year = firstYear, lastYear
do
if competition == 'Dameneinzel' or competition == 'Damendoppel' then
head:node(mw.html.create('th'):wikitext('[[WTA Tour ' .. year .. '|' .. year .. ']]'))
elseif competition == 'Juniorinneneinzel' or competition == 'Juniorinnendoppel' then
head:node(mw.html.create('th'):wikitext( year ))
end
end
else
for year = firstYear, lastYear
do
head:node(mw.html.create('th'):wikitext('' .. year))
end
end
head:node(mw.html.create('th'):wikitext('Karriere'))
-- Header in die Tabelle einfügen
table:node(head):newline()
-- Zeile Australian Open
table:node(getRow(frame, 'Australian Open', competition, 'AUO', firstYear, lastYear)):newline()
-- Zeile French Open
table:node(getRow(frame, 'French Open', competition, 'FRO', firstYear, lastYear)):newline()
-- Zeile Wimbledon Championships
table:node(getRow(frame, 'Wimbledon Championships|Wimbledon', competition, 'WIM', firstYear, lastYear)):newline()
-- Zeile US Open
table:node(getRow(frame, 'US Open', competition, 'USO', firstYear, lastYear)):newline()
-- komplette Tabelle als String zurückgeben
return tostring(table)
end
function p.TennisGrandSlamResultateDamenEinzel(frame)
return TennisGrandSlamResultate(frame, 'Dameneinzel')
end
function p.TennisGrandSlamResultateDamenDoppel(frame)
return TennisGrandSlamResultate(frame, 'Damendoppel')
end
function p.TennisGrandSlamResultateHerrenEinzel(frame)
return TennisGrandSlamResultate(frame, 'Herreneinzel')
end
function p.TennisGrandSlamResultateHerrenDoppel(frame)
return TennisGrandSlamResultate(frame, 'Herrendoppel')
end
function p.TennisGrandSlamResultateMixed(frame)
return TennisGrandSlamResultate(frame, 'Mixed')
end
function p.TennisGrandSlamResultateJuniorenEinzel(frame)
return TennisGrandSlamResultate(frame, 'Junioreneinzel')
end
function p.TennisGrandSlamResultateJuniorinnenEinzel(frame)
return TennisGrandSlamResultate(frame, 'Juniorinneneinzel')
end
function p.TennisGrandSlamResultateJuniorenDoppel(frame)
return TennisGrandSlamResultate(frame, 'Juniorendoppel')
end
function p.TennisGrandSlamResultateJuniorinnenDoppel(frame)
return TennisGrandSlamResultate(frame, 'Juniorinnendoppel')
end
function p.TennisGrandSlamResultateDamenEinzelRollstuhl(frame)
return TennisGrandSlamResultate(frame, 'Dameneinzel-Rollstuhl')
end
function p.TennisGrandSlamResultateDamenDoppelRollstuhl(frame)
return TennisGrandSlamResultate(frame, 'Damendoppel-Rollstuhl')
end
function p.TennisGrandSlamResultateHerrenEinzelRollstuhl(frame)
return TennisGrandSlamResultate(frame, 'Herreneinzel-Rollstuhl')
end
function p.TennisGrandSlamResultateHerrenDoppelRollstuhl(frame)
return TennisGrandSlamResultate(frame, 'Herrendoppel-Rollstuhl')
end
function p.TennisGrandSlamResultateQuadEinzel(frame)
return TennisGrandSlamResultate(frame, 'Quadeinzel')
end
function p.TennisGrandSlamResultateQuadDoppel(frame)
return TennisGrandSlamResultate(frame, 'Quaddoppel')
end
return p