Moduł:Rekordy sezon
Wygląd
Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:Rekordy sezon/opis
local p = {}
-- =========================================================
-- Moduł:Rekordy_sezon
--
-- Jeden moduł dla różnych dyscyplin.
--
-- Wywołanie:
--
-- {{#invoke:Rekordy_sezon|main
-- |sezon=2026/2027
-- |druzyna=Lech Poznań
-- |dyscyplina=piłka nożna
-- }}
--
-- lub:
--
-- {{#invoke:Rekordy_sezon|main
-- |sezon=2026/2027
-- |druzyna=Enea Basket Poznań
-- |dyscyplina=koszykówka
-- }}
-- =========================================================
-- =========================================================
-- FUNKCJE WSPÓLNE
-- =========================================================
local function liczba(value)
if value == nil or value == "" then
return 0
end
value = tostring(value)
value = mw.ustring.gsub(
value,
"%s+",
""
)
return tonumber(value) or 0
end
-- =========================================================
-- MINUTY
--
-- Obsługuje:
-- 32
-- 32.0
-- 32:15
-- 32:15.5
--
-- Do porównywania rekordów używamy sekund.
-- =========================================================
local function minutyNaSekundy(value)
if value == nil or value == "" then
return 0
end
value = tostring(value)
value = mw.ustring.gsub(
value,
"%s+",
""
)
local minuty, sekundy =
mw.ustring.match(
value,
"^(%d+):(%d+)$"
)
if minuty and sekundy then
return
tonumber(minuty) * 60 +
tonumber(sekundy)
end
local liczbaMinut =
tonumber(value)
if liczbaMinut then
return liczbaMinut * 60
end
return 0
end
-- =========================================================
-- FORMAT MINUT
-- =========================================================
local function formatMinut(sekundy)
sekundy = tonumber(sekundy) or 0
local minuty =
math.floor(
sekundy / 60
)
local sek =
sekundy % 60
if sek == 0 then
return tostring(minuty) .. " min"
end
return
tostring(minuty) ..
":" ..
string.format(
"%02d",
sek
) ..
" min"
end
local function escapeSQL(value)
value = tostring(value or "")
return mw.ustring.gsub(
value,
"'",
"''"
)
end
-- =========================================================
-- ROZPOZNANIE MIEJSCA MECZU
-- =========================================================
local function miejsceMeczu(row, druzyna)
local d1 =
tostring(row.druzyna1 or "")
local d2 =
tostring(row.druzyna2 or "")
if d1 == druzyna then
return "dom"
end
if d2 == druzyna then
return "wyjazd"
end
return nil
end
-- =========================================================
-- WYNIK MECZU
-- =========================================================
local function wynikMeczu(row)
local g1 =
tonumber(row.gole1 or "")
local g2 =
tonumber(row.gole2 or "")
if g1 ~= nil and g2 ~= nil then
return g1, g2
end
local wynik =
tostring(row.wynik or "")
local a, b =
mw.ustring.match(
wynik,
"(%d+)%s*:%s*(%d+)"
)
if a and b then
return
tonumber(a),
tonumber(b)
end
return nil, nil
end
-- =========================================================
-- WYNIK Z PERSPEKTYWY DRUŻYNY
-- =========================================================
local function wynikZPerspektywy(row, druzyna)
local g1, g2 =
wynikMeczu(row)
if g1 == nil or g2 == nil then
return nil, nil
end
local miejsce =
miejsceMeczu(
row,
druzyna
)
if miejsce == "dom" then
return g1, g2
elseif miejsce == "wyjazd" then
return g2, g1
end
return nil, nil
end
-- =========================================================
-- NAZWA MECZU
-- =========================================================
local function nazwaMeczu(row)
local d1 =
tostring(row.druzyna1 or "")
local d2 =
tostring(row.druzyna2 or "")
local strona =
tostring(row.strona_meczu or "")
local tekst =
d1 ..
" – " ..
d2
if strona ~= "" then
return
"[[" ..
strona ..
"|" ..
tekst ..
"]]"
end
return tekst
end
-- =========================================================
-- DODAWANIE REKORDU
--
-- KLUCZOWA POPRAWKA:
--
-- zapisujemy wartość rekordu bezpośrednio w item.wartosc.
--
-- Dzięki temu nie ma już:
-- attempt to compare nil with number
-- =========================================================
local function dodajRekord(
tabela,
miejsce,
wartosc,
item
)
if wartosc == nil then
return
end
wartosc =
tonumber(wartosc)
if wartosc == nil then
return
end
item.wartosc =
wartosc
local lista =
tabela[miejsce]
if #lista == 0 then
table.insert(
lista,
item
)
return
end
local obecna =
tonumber(
lista[1].wartosc
) or 0
if wartosc > obecna then
tabela[miejsce] = {
item
}
elseif wartosc == obecna then
table.insert(
lista,
item
)
end
end
-- =========================================================
-- FORMAT REKORDÓW MECZOWYCH
-- =========================================================
local function tekstMeczow(lista)
if not lista or #lista == 0 then
return "—"
end
local wynik = {}
for _, item in ipairs(lista) do
local roznica =
tonumber(
item.roznica or 0
) or 0
local roznicaTekst
if roznica >= 0 then
roznicaTekst =
"+" ..
tostring(roznica)
else
roznicaTekst =
tostring(roznica)
end
table.insert(
wynik,
item.tekst ..
" (" ..
item.wynik ..
", " ..
roznicaTekst ..
")"
)
end
return table.concat(
wynik,
"<br>"
)
end
-- =========================================================
-- FORMAT REKORDÓW ZAWODNIKÓW
-- =========================================================
local function tekstZawodnikow(
lista,
typ
)
if not lista or #lista == 0 then
return "—"
end
local wynik = {}
for _, item in ipairs(lista) do
local zawodnik =
tostring(
item.zawodnik or ""
)
local zawodnikLink =
"[[" ..
zawodnik ..
"]]"
local wartosc = ""
if typ == "punkty" then
wartosc =
tostring(
item.punkty or 0
) ..
" pkt"
elseif typ == "minuty" then
if item.minuty_format
and item.minuty_format ~= "" then
wartosc =
tostring(
item.minuty_format
)
else
wartosc =
formatMinut(
item.minuty_sekundy or 0
)
end
wartosc =
wartosc ..
" min"
elseif typ == "asysty" then
wartosc =
tostring(
item.asysty or 0
) ..
" as."
elseif typ == "zbiorki" then
wartosc =
tostring(
item.zbiorki or 0
) ..
" zb."
elseif typ == "eval" then
wartosc =
tostring(
item.eval or 0
) ..
" EVAL"
elseif typ == "plusminus" then
local pm =
tonumber(
item.plusminus or 0
) or 0
if pm >= 0 then
wartosc =
"+" ..
tostring(pm)
else
wartosc =
tostring(pm)
end
wartosc =
wartosc ..
" +/-"
end
table.insert(
wynik,
zawodnikLink ..
" — " ..
wartosc ..
"<br>" ..
tostring(
item.tekst or ""
) ..
" ("