5441
редагування
Admin (обговорення | внесок) Немає опису редагування |
Admin (обговорення | внесок) Немає опису редагування |
||
| Рядок 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 season_num = mw.ustring.match(header_name, "([А-Яа-яЁёІіЇїЄєҐґ']+) сезон %(фінал%)") | |||
local | if not season_num then | ||
season_num = mw.ustring.match(header_name, "([А-Яа-яЁёІіЇїЄєҐґ']+) сезон %(рейтинг%)") | |||
end | |||
-- | if season_num then | ||
-- Конвертуємо назву сезону в число | |||
local season_map = { | |||
["Перший"] = 1, ["Другий"] = 2, ["Третій"] = 3, | |||
["Четвертий"] = 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) | ||
if medal | 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 | ||