User:BZPN/Module:Wybory

From Test Wiki
Revision as of 13:13, 25 February 2025 by BZPN (talk | contribs) (Created page with "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.re...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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([[

Template:Wykres słupkowy

   ]], data, slupki, zrodlo)
   return output

end

return p