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