Modul:Vorlage:Fußballtabelle
Die Dokumentation für dieses Modul kann unter Modul:Vorlage:Fußballtabelle/Doku erstellt werden
local p = {}
local function hex2dez(str)
a = tonumber(str,16);
if a then
return a
else
return 0
end
end
local function CreateHeader(Args)
local ewig = (Args['ewig'] or '') ~= ''; -- true, wenn nicht leer
local sortit = (Args['nosort'] or '') == ''; -- true, wenn nosort leer
local HasCaption = (Args['caption'] or '') ~= ''; -- true, wenn nicht leer
local land = (Args['land'] or '') ~= ''; -- true, wenn "Land" nicht leer
local HasQuote = (Args['quote'] or '') ~= ''; -- true, wenn "Quote" nicht leer
local withcup = (Args['nocup'] or '') == ''; -- true, wenn "Nocup" leer
local HasBonus = (Args['bonus'] or '') ~= ''; -- true, wenn "Bonus" nicht leer
local liga = Args['liga'] or '';
local extra1 = Args['extra1'] or '';
local extra2 = Args['extra2'] or '';
local liga = Args['liga'] or '';
local TN = Args['teilnahmen'] or '';
local VH = (Args['VH'] ~= '0'); -- true, wenn Verhaeltnis nicht 0
local text = '<table class="wikitable';
local team = Args['team'] or '';
if team == '' then
team = 'Verein';
end
if HasCaption then
text = tostring(Args['caption'] or '') ..'\n' .. text;
end
if sortit then
text = text .. ' sortable';
end
if ewig then
text = text .. ' zebra';
end
if (Args['float'] or '') == 'left' then
text = text .. ' float-left';
elseif (Args['float'] or '') == 'right' then
text = text .. ' float-right';
end
text = text .. '" style="text-align:center; white-space:nowrap;';
if ewig then
text = text .. ' font-size:90%; background-color:#F0F0F0"';
end
text = text .. '>\n';
-- Table-Tag fertig
local kopfzeile = '<tr class="hintergrundfarbe5"><th style="width:4ex"><span class="explain" title="Platzierung">Pl.</span></th>';
kopfzeile = kopfzeile .. '<th style="width:25ex">' .. team .. '</th>';
if land then
kopfzeile = kopfzeile .. '<th style="width:4ex"><span class="explain" title="Aktueller Landesverband">Land</span></th>';
end
if ewig then
if TN == '' then
kopfzeile = kopfzeile .. '<th style="width:4ex" data-sort-type="number"><span class="explain" title="Anzahl Spielzeiten">Jahre</span></th>';
else
kopfzeile = kopfzeile .. '<th>'.. TN ..'</th>';
end
end
kopfzeile = kopfzeile .. '<th style="width:4ex"><span class="explain" title="Spiele">Sp.</span></th>';
kopfzeile = kopfzeile .. '<th style="width:3ex"><span class="explain" title="Siege">S</span></th>';
kopfzeile = kopfzeile .. '<th style="width:3ex"><span class="explain" title="Unentschieden">U</span></th>';
kopfzeile = kopfzeile .. '<th style="width:3ex"><span class="explain" title="Niederlagen">N</span></th>';
if ewig then
kopfzeile = kopfzeile .. '<th style="width:5ex"><span class="explain" title="geschossene Tore">T+</span></th><th style="width:5ex"><span class="explain" title="kassierte Tore">T-</span></th>';
else
kopfzeile = kopfzeile .. '<th style="width:5ex"><span class="explain" title="Torverhältnis">Tore</span></th>';
end
if VH then
kopfzeile = kopfzeile .. '<th style="width:5ex">';
if HasQuote then
kopfzeile = kopfzeile .. '<span class="explain" title="Torquote">Quote</span>';
else
kopfzeile = kopfzeile .. '<span class="explain" title="Tordifferenz">Diff.</span>';
end
end
kopfzeile = kopfzeile .. '<th style="width:5ex">Punkte</th>';
if ewig then
kopfzeile = kopfzeile .. '<th style="width:4ex"><span class="explain" title="Durchschnittliche Punktzahl pro Spiel">Ø-Pkt.</span></th>';
if withcup then
kopfzeile = kopfzeile .. '<th style="width:4ex"><span class="explain" title="Anzahl Meisterschaften">Titel</span></th>';
end
end
if HasBonus then
kopfzeile = kopfzeile .. '<th style="width:6ex"><span class="explain" title="Bonuspunkte aus der Vorrunde">Bonus</span></th>';
kopfzeile = kopfzeile .. '<th style="width:6ex"><span class="explain" title="Gesamtpunkte aus beiden Runden">Gesamt</span></th>';
end
if liga ~='' then
kopfzeile = kopfzeile .. '<th>Liga</th>';
end
if extra1 ~='' then
kopfzeile = kopfzeile .. '<th>' .. extra1 .. '</th>';
end
if extra2 ~='' then
kopfzeile = kopfzeile .. '<th>' .. extra2 .. '</th>';
end
kopfzeile = kopfzeile .. '</tr>\n';
text = text .. kopfzeile;
return text;
end
local function CreateLine(Args)
local Rang = tonumber(Args['R'] or "") or 0;
local Name = Args['V'] or "";
if Name == "" then
Name='<span class="error">Vereinsname fehlt!</span>'
end
local Farbe = Args['F'] or ''; -- Hintergrundfarbe (optional)
local Land = Args['L'] or '';
local Jahre = tonumber(Args['J'] or '');
local IstEwig = Jahre ~=''; -- true, wenn "Jahre" vorhanden ( = ewige Tabelle)
local Siege = tonumber(Args['S'] or '0') or 0;
local Unentschieden = tonumber(Args['U'] or '0') or 0;
local Niederlagen = tonumber(Args['N'] or '0') or 0;
local Bonusmalus = (tonumber(Args['B'] or '0') or 0 ) - (tonumber(Args['A'] or '0') or 0 ); -- Bonus - Abzug
local ToreE = tonumber(Args['E'] or '0') or -1; -- -1 wenn keine Zahl
local ToreG = tonumber(Args['G'] or '0') or -1; -- -1 wenn keine Zahl
local ShowDiff = tonumber(Args['VH'] or '') ~= 0;
local Quote = (Args['Q'] or '') ~='' ; -- true, wenn nicht leer
local Q = 0;
local valuetext = '';
local SP = tonumber(Args['P'] or '3') or 3; -- Punkte fuer Sieg
local Pluspunkte = '';
local Minuspunkte = 0;
local Level = tonumber(Args['LL'] or '0'); -- Ebene der Liga
local Liga = Args['L'] or 'Liga fehlt!'; -- Liga
local Extra1 = Args['X1'] or ''; -- Extra 1
local Extra2 = Args['X2'] or ''; -- Extra 2
local Titel = tonumber(Args['T'] or '-1') or -1; -- -1 = keine Spalte
local Spiele = Siege + Unentschieden + Niederlagen;
local attribut = '';
if Farbe ~= '' then
if (hex2dez('1' .. Farbe) == 0) then
attribut = ' style="background-color:{{{Farbe}}};"';
else
attribut = ' style="background-color:#{{{Farbe}}};"';
end
else
attribut = ' style="background-color:#FFFFFF;"';
end
local text = '<tr' .. attribut .. '>';
if Rang == 0 then
text = text .. '<td style="text-align:center;">  </td>';
elseif Rang < 10 then
text = text .. '<td style="text-align:center;"> ' .. tostring(Rang) .. '</td>';
else
text = text .. '<td style="text-align:center;">' .. tostring(Rang) .. '.</td>';
end
text = text .. '<td style="text-align:left;">' .. Name .. '</td>';
if Land ~= '' then
text = text .. '<td style="text-align:center;">' .. Land .. '</td>';
end
if IstEwig then
text = text .. '<td style="text-align:center;">' .. ( tostring(Jahre) or '' ) .. '</td>';
end
text = text .. '<td style="text-align:right; padding-right:1em;">' .. tostring(Spiele) or '?' .. '</td>';
text = text .. '<td style="text-align:right; padding-right:1em;">' .. tostring(Siege) or '?' .. '</td>';
text = text .. '<td style="text-align:right; padding-right:1em;">' .. tostring(Unentschieden) or '?' .. '</td>';
text = text .. '<td style="text-align:right; padding-right:1em;">' .. tostring(Niederlagen) or '?' .. '</td>';
local ET = '';
local GT = '';
if ToreE >= 0 then
ET = tostring(ToreE);
else
ET = '?';
end
if ToreG >= 0 then
GT = tostring(ToreG);
else
GT = '?';
end
if IstEwig then
text = text .. '<td style="text-align:right; padding-right:1em;">' .. ET .. '</td>';
text = text .. '<td style="text-align:right; padding-right:1em;">' .. GT .. '</td>';
else
if mw.ustring.len(ET) == 1 then ET = '   ' .. ET ; end
if mw.ustring.len(ET) == 2 then ET = '  ' .. ET ; end
if mw.ustring.len(ET) == 3 then ET = ' ' .. ET ; end
if mw.ustring.len(GT) == 1 then GT = GT .. '   '; end
if mw.ustring.len(GT) == 2 then GT = GT .. '  ' ; end
if mw.ustring.len(GT) == 3 then GT = GT .. ' '; end
text = text .. '<td style="text-align:center;">' .. ET .. ':' .. GT .. '</td>';
end
if ShowDiff then
if Quote then
if (ToreE > 4 and ToreG > 4) then -- Quote nur bei mind. je 5 Spielen sinnvoll.
Q = math.floor ((ToreE / ToreG ) * 100 + 0.5) / 100 ;
valuetext = tostring(Q);
valuetext = valuetext or '---';
else
valuetext = '???';
end
text = text .. '<td style="text-align:center;">' .. valuetext ..'</td>';
else
if ToreE-ToreG < 0 then
valuetext = '−' .. tostring(ToreG-ToreE);
text = text .. '<td style="text-align:center;">' .. valuetext ..'</td>';
elseif ToreE-ToreG > 0 then
valuetext = '+' .. tostring(ToreE-ToreG);
text = text .. '<td style="text-align:center;">' .. valuetext ..'</td>';
else
valuetext = ' ±0';
text = text .. '<td style="text-align:center;" data-sort-value="0">' .. valuetext ..'</td>';
end
end
end
-- Jetzt die Punkte
Pluspunkte = tostring(SP * Siege + Unentschieden + Bonusmalus) or '';
if mw.ustring.len(Pluspunkte) == 1 then Pluspunkte = '   ' .. Pluspunkte ; end
if mw.ustring.len(Pluspunkte) == 2 then Pluspunkte = '  ' .. Pluspunkte ; end
if mw.ustring.len(Pluspunkte) == 3 then Pluspunkte = ' ' .. Pluspunkte ; end
if IstEwig then
valuetext = Pluspunkte;
else
Minuspunkte = tostring(SP * Niederlagen + Unentschieden) or '';
if mw.ustring.len(Minuspunkte) == 1 then Minuspunkte = Minuspunkte .. '   '; end
if mw.ustring.len(Minuspunkte) == 2 then Minuspunkte = Minuspunkte .. '  ' ; end
if mw.ustring.len(Minuspunkte) == 3 then Minuspunkte = Minuspunkte .. ' '; end
valuetext = Pluspunkte .. ':' .. Minuspunkte;
end
text = text .. '<td style="text-align:center;" data-sort-value="0">' .. valuetext ..'</td>';
-- Jetzt eine etwaige Ligaangabe
if Level > 0 then
text = text .. '<td style="text-align:center;" data-sort-value="' .. tostring(Level) ..'">' .. Liga .. '</td>';
end
if Extra1 ~='' then
text = text .. '<td style="text-align:center;">' .. Extra1 ..'</td>';
end
if Extra2 ~='' then
text = text .. '<td style="text-align:center;">' .. Extra2 ..'</td>';
end
-- Fertig, nur noch das tr
text = text .. '</tr>\n';
return text;
end
--[=[ Spaeterer Aufruf fuer Zeile:
{{#invoke:Vorlage:Fußballtabelle|Zeile |A={{{Abzug|}}} |B={{{Bonus|}}} |E={{{ET|}}} |F={{{Farbe|}}} |G={{{GT|}}} |J={{{J|}}} |L={{{Liga|}}}
|LL={{{Ligalevel|}}} |N={{{N|}}} |P={{{Siegpunkte|}}} |Q={{Quote|}}} |R={{#if:{{{Rang2|}}}|0|{{{Rang|}}}}} |S={{{S|}}} |T={{{Titel|}}}
|U={{{U|}}} |V={{Verein|}}} |VH={{{Verhältnis|}}} |X1={{{Extra1|}}} |X2={{{Extra2|}}} }}
]=]
-- {{#invoke:Vorlage:Fußballtabelle|Zeile|R={{{Rang|}}}|V={{Verein|}}}|E={{{ET|}}}|G={{{GT|}}}|A={{{Abzug|}}}|B={{{Bonus|}}}
-- |S={{{S|}}}||U={{{U|}}}||N={{{N|}}}|J={{{J|}}}|F={{{Farbe|}}}|P={{{Siegpunkte|}}}|T={{{Titel|}}}|L={{{Land|}}} }}
function p.Zeile(frame)
local FR = frame:getParent()
return CreateLine(FR.args)
end
-- Spaeterer Aufruf fuer Kopf:
-- {{#invoke:Vorlage:Fußballtabelle|Kopf|nosort={{{nosort|}}}|ewig={{{ewig|}}}|float={{{float|}}}|caption={{{Überschrift|}}}|team={{{Team|Verein}}}
-- |teilnahmen={{{Teilnahmen|}}}|VH={{{Verhältnis}}}|nocup={{{Nocup|}}} |bonus={{{Bonus|}}} }}
function p.Kopf(frame)
local FR = frame:getParent()
return CreateHeader(FR.args)
end
return p