Modul:TennisGrandSlamResultate

aus Wikipedia, der freien Enzyklopädie
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 '&nbsp;'
        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('&nbsp;')
        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 == '&nbsp;' 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 .. '&nbsp;')
      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&nbsp;Open', competition, 'AUO', firstYear, lastYear)):newline()

    -- Zeile French Open
    table:node(getRow(frame, 'French&nbsp;Open', competition, 'FRO', firstYear, lastYear)):newline()

    -- Zeile Wimbledon Championships
    table:node(getRow(frame, 'Wimbledon&nbsp;Championships|Wimbledon', competition, 'WIM', firstYear, lastYear)):newline()

    -- Zeile US Open
    table:node(getRow(frame, 'US&nbsp;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