User:BZPN/Module:Wybory
Jump to navigation
Jump to search
local p = {}
-- Definicja kolorów przypisanych do poszczególnych kandydatów local colors = {
["Rafał Trzaskowski"] = "blue", ["Karol Nawrocki"] = "red", ["Sławomir Mentzen"] = "darkblue", ["Szymon Hołownia"] = "yellow", ["Magdalena Biejat"] = "purple", ["Adrian Zandberg"] = "darkred", ["Marek Jakubiak"] = "gray", ["Krzysztof Stanowski"] = "lightgray", ["Grzegorz Braun"] = "black", ["Niezdecydowani"] = "gray"
}
function p.render(frame)
local args = frame:getParent().args
-- Pobranie parametrów daty i źródła; data domyślnie to aktualna data
local data = args["data"] or os.date("%d %B %Y")
local zrodlo = args["źródło"] or args["zrodlo"] or ""
-- Lista kandydatów – kolejność tutaj nie ma znaczenia, bo posortujemy ich później
local candidateNames = {
"Rafał Trzaskowski",
"Karol Nawrocki",
"Sławomir Mentzen",
"Szymon Hołownia",
"Magdalena Biejat",
"Adrian Zandberg",
"Marek Jakubiak",
"Krzysztof Stanowski",
"Grzegorz Braun"
}
-- Przygotowanie tabeli z danymi kandydatów (nazwa i liczba poparcia)
local candidates = {}
for _, name in ipairs(candidateNames) do
local raw = args[name]
if raw and raw ~= "" then
local value = tonumber(raw:gsub(",", "."))
if value then
table.insert(candidates, {name = name, value = value})
end
end
end
-- Sortowanie kandydatów malejąco według wartości poparcia table.sort(candidates, function(a, b) return a.value > b.value end)
-- Budowanie ciągu ze słupkami wykresu – każdy słupek jest wstawiany za pomocą szablonu "Wykres słupkowy/słupek"
local slupki = ""
for _, candidate in ipairs(candidates) do
local color = colors[candidate.name] or "gray"
local int_part = math.floor(candidate.value)
local dec_part = math.floor((candidate.value - int_part) * 10 + 0.5)
slupki = slupki .. string.format("Template:Wykres słupkowy/słupek\n", candidate.name, color, int_part, dec_part)
end
-- Obsługa parametru "niezdecydowani" – jeśli ustawiono |niezdecydowani=tak, dodajemy słupek na końcu
if args["niezdecydowani"] and args["niezdecydowani"]:lower() == "tak" then
local raw = args["niezdecydowani_liczba"]
if raw and raw ~= "" then
local nvalue = tonumber(raw:gsub(",", "."))
if nvalue then
local int_part = math.floor(nvalue)
local dec_part = math.floor((nvalue - int_part) * 10 + 0.5)
slupki = slupki .. string.format("Template:Wykres słupkowy/słupek\n", colors["Niezdecydowani"], int_part, dec_part)
end
end
end
-- Składanie końcowego wykresu local output = string.format([[
]], data, slupki, zrodlo)
return output
end
return p