Модуль:FetchData3: відмінності між версіями

нема опису редагування
Немає опису редагування
Немає опису редагування
Рядок 85: Рядок 85:
--- Генерує іконку медалі
--- Генерує іконку медалі
local function get_medal_icon(value)
local function get_medal_icon(value)
     if value == "1" then
    -- Перевіряємо, чи значення не порожнє
     if not value or value == "" or value == " " then
        return nil
    end
   
    -- Видаляємо пробіли
    value = mw.text.trim(value)
   
    if value == "" then
        return nil
    elseif value == "1" then
         return "[[Файл:Gold.png|1-е Місце]]"
         return "[[Файл:Gold.png|1-е Місце]]"
     elseif value == "2" then
     elseif value == "2" then
Рядок 96: Рядок 106:
         return "[[Файл:Star.png|Найкращий]]"
         return "[[Файл:Star.png|Найкращий]]"
     else
     else
         return ""
         return nil
     end
     end
end
--- Конвертує число в римські цифри
local function to_roman(num)
    local romans = {
        {1000, "M"}, {900, "CM"}, {500, "D"}, {400, "CD"},
        {100, "C"}, {90, "XC"}, {50, "L"}, {40, "XL"},
        {10, "X"}, {9, "IX"}, {5, "V"}, {4, "IV"}, {1, "I"}
    }
    local result = ""
    for _, pair in ipairs(romans) do
        local value, letter = pair[1], pair[2]
        while num >= value do
            result = result .. letter
            num = num - value
        end
    end
    return result
end
end


--- Генерує посилання на турнір
--- Генерує посилання на турнір
local function get_tournament_link(header_name)
local function get_tournament_link(header_name)
     -- Видаляємо (Ф) та (Р) для відображення, але залишаємо для посилання
     -- Визначаємо, чи це сезон
    local display_name = header_name
     local season_num = mw.ustring.match(header_name, "([А-Яа-яЁёІіЇїЄєҐґ']+) сезон %(фінал%)")
     local link_name = mw.ustring.gsub(header_name, "%s*%(Ф%)%s*", "")
     if not season_num then
     link_name = mw.ustring.gsub(link_name, "%s*%(Р%)%s*", "")
        season_num = mw.ustring.match(header_name, "([А-Яа-яЁёІіЇїЄєҐґ']+) сезон %(рейтинг%)")
     link_name = mw.text.trim(link_name)
     end
      
      
     -- Якщо назви однакові, просто посилання
     if season_num then
    if link_name == display_name then
        -- Конвертуємо назву сезону в число
        return string.format("[[%s]]", link_name)
        local season_map = {
    else
            ["Перший"] = 1, ["Другий"] = 2, ["Третій"] = 3,
        return string.format("[[%s|%s]]", link_name, display_name)
            ["Четвертий"] = 4, ["П'ятий"] = 5, ["Шостий"] = 6,
            ["Сьомий"] = 7, ["Восьмий"] = 8, ["Дев'ятий"] = 9
        }
       
        local season_number = season_map[season_num]
        if season_number then
            local roman = to_roman(season_number)
           
            -- Визначаємо тип (Фінал або Рейтинг)
            local type_text = ""
            if mw.ustring.find(header_name, "фінал") then
                type_text = "Фінал."
            elseif mw.ustring.find(header_name, "рейтинг") then
                type_text = "Рейтинг."
            end
           
            -- Видаляємо (фінал) та (рейтинг) з посилання
            local clean_name = mw.ustring.gsub(header_name, "%s*%(фінал%)%s*", "")
            clean_name = mw.ustring.gsub(clean_name, "%s*%(рейтинг%)%s*", "")
            clean_name = mw.text.trim(clean_name)
           
            return string.format("[[%s|%s сезон. %s]]", clean_name, roman, type_text)
        end
     end
     end
   
    -- Для інших турнірів просто повертаємо назву
    return string.format("[[%s]]", header_name)
end
end


Рядок 137: Рядок 190:
     for i = 2, #data.cells do
     for i = 2, #data.cells do
         local cell_value = data.cells[i]
         local cell_value = data.cells[i]
        local header = data.headers[i]
          
          
         if cell_value and cell_value ~= "" then
         if cell_value and cell_value ~= "" and header then
             local medal = get_medal_icon(cell_value)
             local medal = get_medal_icon(cell_value)
            local tournament = get_tournament_link(data.headers[i])
              
              
             if medal ~= "" then
             if medal then
                local tournament = get_tournament_link(header)
                 table.insert(titles, string.format("* %s '''%s'''", medal, tournament))
                 table.insert(titles, string.format("* %s '''%s'''", medal, tournament))
             end
             end