diff --git a/assets/transfers-list.csv b/assets/transfers-list.csv index c1a8704..cb48ca5 100644 --- a/assets/transfers-list.csv +++ b/assets/transfers-list.csv @@ -1,34 +1,34 @@ Player, Club, Sum, Photo, Logo Морган Роджерс,Челси,138 млн,tmp-player.png,chelsea.png -Эллиот Андерсон,Манчестер Сити,135 млн,tmp-player.png,manchester-city.png -Сандро Тонали,Тоттенхэм,108 млн,tmp-player.png,tottenham.png -Матеус Фернандес,Тоттенхэм,99 млн,tmp-player.png,tottenham.png -Энтони Гордон,Барселона,80 млн,tmp-player.png,barcelona.png -Гонсало Рамуш,Милан,74 млн,tmp-player.png,ajax.png -Самервилл,Аль-Хилаль,"64,5 млн",tmp-player.png,ajax.png -Жереми Жаке,Ливерпуль,"63,6 млн",tmp-player.png,liverpool.png -Ван Хекке,Тоттенхэм,60 млн,tmp-player.png,tottenham.png -Йохан Манзамби,Астон Вилла,60 млн,tmp-player.png,ajax.png -Лука Вушкович,Брайтон,54 млн,tmp-player.png,chelsea.png -Марко Палестра,Челси,57 млн,tmp-player.png,chelsea.png -Андре Сантос,Манчестер Юнайтед,"56,3 млн",tmp-player.png,chelsea.png -Марк Кукурелья,Реал,50 млн,tmp-player.png,chelsea.png -Натаниэль Браун,Бавария,50 млн,tmp-player.png,chelsea.png -Исмаэль Сайбари,Бавария,50 млн,tmp-player.png,chelsea.png -Ибрагим Конате,Реал,Свободный агент,tmp-player.png,chelsea.png -Опенда,Ювентус,"42,75 млн",tmp-player.png,chelsea.png -Тилеманс,Манчестер Юнайтед,41 млн,tmp-player.png,chelsea.png -Христос Цолис,Арсенал,40 млн,tmp-player.png,chelsea.png -Кан Ли,Атлетико,40 млн,tmp-player.png,chelsea.png -Карим Адейеми,Барселона,22 млн,tmp-player.png,chelsea.png -Гарначо,Астон Вилла,Аренда,tmp-player.png,chelsea.png -Александар Станкович,Интер,23 млн,tmp-player.png,chelsea.png -Думфрис,Реал,20 млн,tmp-player.png,chelsea.png -Гримальдо,Атлетико,22 млн,tmp-player.png,chelsea.png -Бернардо Силва,Реал,Свободный агент,tmp-player.png,chelsea.png -Оскар Мингеса,Кристал Пэлас,Свободный агент,tmp-player.png,chelsea.png -Аканжи,Интер,15 млн,tmp-player.png,chelsea.png -Альваро Мората,Комо,12 млн,tmp-player.png,chelsea.png +Эллиот Андерсон,Манчестер Сити,135 млн,elliot-anderson.png,manchester-city.png +Сандро Тонали,Тоттенхэм,108 млн,sandro-tonali.png,tottenham.png +Матеус Фернандес,Тоттенхэм,99 млн,mateus-fernandes.png,tottenham.png +Энтони Гордон,Барселона,80 млн,antony-gordon.png,barcelona.png +Гонсало Рамуш,Милан,74 млн,gonsalo-ramush.png,milan.png +Самервилл,Аль-Хилаль,"64,5 млн",samervil.png,alhilal.png +Жереми Жаке,Ливерпуль,"63,6 млн",jeremis-jaque.png,liverpool.png +Ван Хекке,Тоттенхэм,60 млн,van-hekke.png,tottenham.png +Йохан Манзамби,Астон Вилла,60 млн,johan-monzambi.png,aston-villa.png +Лука Вушкович,Брайтон,54 млн,luka-vuskovic.png,brighton.png +Марко Палестра,Челси,57 млн,marko-palestra.png,chelsea.png +Андре Сантос,Манчестер Юнайтед,"56,3 млн",andrey-santos.png,manchester-united.png +Марк Кукурелья,Реал,50 млн,kukurelya.png,real-ma.png +Натаниэль Браун,Бавария,50 млн,nataniel-braun.png,bayern-munchen.png +Исмаэль Сайбари,Бавария,50 млн,ismael-saibari.png,bayern-munchen.png +Ибрагим Конате,Реал,Свободный агент,konate.png,real-ma.png +Опенда,Ювентус,"42,75 млн", openda.png, juventus.png +Тилеманс,Манчестер Юнайтед,41 млн,tilemans.png,manchester-united.png +Христос Цолис,Арсенал,40 млн,tsolis.png,arsenal.png +Кан Ли,Атлетико,40 млн,kan-li.png,athletico-madrid.png +Карим Адейеми,Барселона,22 млн,karim-adeemi.png,barcelona.png +Гарначо,Астон Вилла,Аренда,garnacho.png,aston-villa.png +Александар Станкович,Интер,23 млн,stankovic.png,inter.png +Думфрис,Реал,20 млн,dumfris.png,real-ma.png +Гримальдо,Атлетико,22 млн,grimaldo.png,athletico-madrid.png +Бернардо Силва,Реал,Свободный агент,bernardo-silva.png,real-ma.png +Оскар Мингеса,Кристал Пэлас,Свободный агент,oscar-mingesa.png,crystal-palace.png +Аканжи,Интер,15 млн,akanzhi.png,inter.png +Альваро Мората,Комо,12 млн,morata.png,como.png diff --git a/clubs-logo/alhilal.png b/clubs-logo/alhilal.png new file mode 100644 index 0000000..c81d0e4 Binary files /dev/null and b/clubs-logo/alhilal.png differ diff --git a/clubs-logo/aston-villa.png b/clubs-logo/aston-villa.png new file mode 100644 index 0000000..a2392f2 Binary files /dev/null and b/clubs-logo/aston-villa.png differ diff --git a/clubs-logo/atheltico-madrid.png b/clubs-logo/athletico-madrid.png similarity index 100% rename from clubs-logo/atheltico-madrid.png rename to clubs-logo/athletico-madrid.png diff --git a/clubs-logo/brighton.png b/clubs-logo/brighton.png new file mode 100644 index 0000000..e303e82 Binary files /dev/null and b/clubs-logo/brighton.png differ diff --git a/clubs-logo/como.png b/clubs-logo/como.png new file mode 100644 index 0000000..ec9a8de Binary files /dev/null and b/clubs-logo/como.png differ diff --git a/clubs-logo/crystal-palace.png b/clubs-logo/crystal-palace.png new file mode 100644 index 0000000..40e3916 Binary files /dev/null and b/clubs-logo/crystal-palace.png differ diff --git a/clubs-logo/manchester-united.png b/clubs-logo/manchester-united.png new file mode 100644 index 0000000..2e2aea1 Binary files /dev/null and b/clubs-logo/manchester-united.png differ diff --git a/clubs-logo/milan.png b/clubs-logo/milan.png new file mode 100644 index 0000000..19d3352 Binary files /dev/null and b/clubs-logo/milan.png differ diff --git a/css/style.css b/css/style.css index 5d5afc7..e9add91 100644 --- a/css/style.css +++ b/css/style.css @@ -246,7 +246,7 @@ html, body { -.compact .price-value { font-size: 38px; } +.compact .price-value { font-size: 38px; white-space: normal; } /* ======================================================================== Reveal animation (staggered entrance) diff --git a/data/transfers.json b/data/transfers.json index 62e3cb0..d6f6d84 100644 --- a/data/transfers.json +++ b/data/transfers.json @@ -3,7 +3,7 @@ { "id": 1, "playerName": "Морган Роджерс", - "photo": "tmp-player.png", + "photo": "players/tmp-player.png", "team": { "name": "Челси", "logo": "clubs-logo/chelsea.png", @@ -16,7 +16,7 @@ { "id": 2, "playerName": "Эллиот Андерсон", - "photo": "tmp-player.png", + "photo": "players/elliot-anderson.png", "team": { "name": "Манчестер Сити", "logo": "clubs-logo/manchester-city.png", @@ -29,7 +29,7 @@ { "id": 3, "playerName": "Сандро Тонали", - "photo": "tmp-player.png", + "photo": "players/sandro-tonali.png", "team": { "name": "Тоттенхэм", "logo": "clubs-logo/tottenham.png", @@ -42,7 +42,7 @@ { "id": 4, "playerName": "Матеус Фернандес", - "photo": "tmp-player.png", + "photo": "players/mateus-fernandes.png", "team": { "name": "Тоттенхэм", "logo": "clubs-logo/tottenham.png", @@ -55,7 +55,7 @@ { "id": 5, "playerName": "Энтони Гордон", - "photo": "tmp-player.png", + "photo": "players/antony-gordon.png", "team": { "name": "Барселона", "logo": "clubs-logo/barcelona.png", @@ -68,10 +68,10 @@ { "id": 6, "playerName": "Гонсало Рамуш", - "photo": "tmp-player.png", + "photo": "players/gonsalo-ramush.png", "team": { "name": "Милан", - "logo": "clubs-logo/ajax.png", + "logo": "clubs-logo/milan.png", "color": "#FB090B", "accent": "#000000" }, @@ -81,10 +81,10 @@ { "id": 7, "playerName": "Самервилл", - "photo": "tmp-player.png", + "photo": "players/samervil.png", "team": { "name": "Аль-Хилаль", - "logo": "clubs-logo/ajax.png", + "logo": "clubs-logo/alhilal.png", "color": "#1B458F", "accent": "#FFFFFF" }, @@ -94,7 +94,7 @@ { "id": 8, "playerName": "Жереми Жаке", - "photo": "tmp-player.png", + "photo": "players/jeremis-jaque.png", "team": { "name": "Ливерпуль", "logo": "clubs-logo/liverpool.png", @@ -107,7 +107,7 @@ { "id": 9, "playerName": "Ван Хекке", - "photo": "tmp-player.png", + "photo": "players/van-hekke.png", "team": { "name": "Тоттенхэм", "logo": "clubs-logo/tottenham.png", @@ -120,10 +120,10 @@ { "id": 10, "playerName": "Йохан Манзамби", - "photo": "tmp-player.png", + "photo": "players/johan-monzambi.png", "team": { "name": "Астон Вилла", - "logo": "clubs-logo/ajax.png", + "logo": "clubs-logo/aston-villa.png", "color": "#95BFE5", "accent": "#670E36" }, @@ -133,10 +133,10 @@ { "id": 11, "playerName": "Лука Вушкович", - "photo": "tmp-player.png", + "photo": "players/luka-vuskovic.png", "team": { "name": "Брайтон", - "logo": "clubs-logo/chelsea.png", + "logo": "clubs-logo/brighton.png", "color": "#0057B8", "accent": "#FFCD00" }, @@ -146,7 +146,7 @@ { "id": 12, "playerName": "Марко Палестра", - "photo": "tmp-player.png", + "photo": "players/marko-palestra.png", "team": { "name": "Челси", "logo": "clubs-logo/chelsea.png", @@ -159,10 +159,10 @@ { "id": 13, "playerName": "Андре Сантос", - "photo": "tmp-player.png", + "photo": "players/andrey-santos.png", "team": { "name": "Манчестер Юнайтед", - "logo": "clubs-logo/chelsea.png", + "logo": "clubs-logo/manchester-united.png", "color": "#DA291C", "accent": "#FFE500" }, @@ -172,10 +172,10 @@ { "id": 14, "playerName": "Марк Кукурелья", - "photo": "tmp-player.png", + "photo": "players/kukurelya.png", "team": { "name": "Реал", - "logo": "clubs-logo/chelsea.png", + "logo": "clubs-logo/real-ma.png", "color": "#FEBE10", "accent": "#00529F" }, @@ -185,10 +185,10 @@ { "id": 15, "playerName": "Натаниэль Браун", - "photo": "tmp-player.png", + "photo": "players/nataniel-braun.png", "team": { "name": "Бавария", - "logo": "clubs-logo/chelsea.png", + "logo": "clubs-logo/bayern-munchen.png", "color": "#DC052D", "accent": "#0066B2" }, @@ -198,10 +198,10 @@ { "id": 16, "playerName": "Исмаэль Сайбари", - "photo": "tmp-player.png", + "photo": "players/ismael-saibari.png", "team": { "name": "Бавария", - "logo": "clubs-logo/chelsea.png", + "logo": "clubs-logo/bayern-munchen.png", "color": "#DC052D", "accent": "#0066B2" }, @@ -211,10 +211,10 @@ { "id": 17, "playerName": "Ибрагим Конате", - "photo": "tmp-player.png", + "photo": "players/konate.png", "team": { "name": "Реал", - "logo": "clubs-logo/chelsea.png", + "logo": "clubs-logo/real-ma.png", "color": "#FEBE10", "accent": "#00529F" }, @@ -224,10 +224,10 @@ { "id": 18, "playerName": "Опенда", - "photo": "tmp-player.png", + "photo": "players/openda.png", "team": { "name": "Ювентус", - "logo": "clubs-logo/chelsea.png", + "logo": "clubs-logo/juventus.png", "color": "#000000", "accent": "#FFFFFF" }, @@ -237,10 +237,10 @@ { "id": 19, "playerName": "Тилеманс", - "photo": "tmp-player.png", + "photo": "players/tilemans.png", "team": { "name": "Манчестер Юнайтед", - "logo": "clubs-logo/chelsea.png", + "logo": "clubs-logo/manchester-united.png", "color": "#DA291C", "accent": "#FFE500" }, @@ -250,10 +250,10 @@ { "id": 20, "playerName": "Христос Цолис", - "photo": "tmp-player.png", + "photo": "players/tsolis.png", "team": { "name": "Арсенал", - "logo": "clubs-logo/chelsea.png", + "logo": "clubs-logo/arsenal.png", "color": "#EF0107", "accent": "#FFFFFF" }, @@ -263,10 +263,10 @@ { "id": 21, "playerName": "Кан Ли", - "photo": "tmp-player.png", + "photo": "players/kan-li.png", "team": { "name": "Атлетико", - "logo": "clubs-logo/chelsea.png", + "logo": "clubs-logo/athletico-madrid.png", "color": "#CB3524", "accent": "#261E60" }, @@ -276,10 +276,10 @@ { "id": 22, "playerName": "Карим Адейеми", - "photo": "tmp-player.png", + "photo": "players/karim-adeemi.png", "team": { "name": "Барселона", - "logo": "clubs-logo/chelsea.png", + "logo": "clubs-logo/barcelona.png", "color": "#A50044", "accent": "#004D98" }, @@ -289,10 +289,10 @@ { "id": 23, "playerName": "Гарначо", - "photo": "tmp-player.png", + "photo": "players/garnacho.png", "team": { "name": "Астон Вилла", - "logo": "clubs-logo/chelsea.png", + "logo": "clubs-logo/aston-villa.png", "color": "#95BFE5", "accent": "#670E36" }, @@ -302,10 +302,10 @@ { "id": 24, "playerName": "Александар Станкович", - "photo": "tmp-player.png", + "photo": "players/stankovic.png", "team": { "name": "Интер", - "logo": "clubs-logo/chelsea.png", + "logo": "clubs-logo/inter.png", "color": "#0068A8", "accent": "#000000" }, @@ -315,10 +315,10 @@ { "id": 25, "playerName": "Думфрис", - "photo": "tmp-player.png", + "photo": "players/dumfris.png", "team": { "name": "Реал", - "logo": "clubs-logo/chelsea.png", + "logo": "clubs-logo/real-ma.png", "color": "#FEBE10", "accent": "#00529F" }, @@ -328,10 +328,10 @@ { "id": 26, "playerName": "Гримальдо", - "photo": "tmp-player.png", + "photo": "players/grimaldo.png", "team": { "name": "Атлетико", - "logo": "clubs-logo/chelsea.png", + "logo": "clubs-logo/athletico-madrid.png", "color": "#CB3524", "accent": "#261E60" }, @@ -341,10 +341,10 @@ { "id": 27, "playerName": "Бернардо Силва", - "photo": "tmp-player.png", + "photo": "players/bernardo-silva.png", "team": { "name": "Реал", - "logo": "clubs-logo/chelsea.png", + "logo": "clubs-logo/real-ma.png", "color": "#FEBE10", "accent": "#00529F" }, @@ -354,10 +354,10 @@ { "id": 28, "playerName": "Оскар Мингеса", - "photo": "tmp-player.png", + "photo": "players/oscar-mingesa.png", "team": { "name": "Кристал Пэлас", - "logo": "clubs-logo/chelsea.png", + "logo": "clubs-logo/crystal-palace.png", "color": "#1B458F", "accent": "#C4122E" }, @@ -367,10 +367,10 @@ { "id": 29, "playerName": "Аканжи", - "photo": "tmp-player.png", + "photo": "players/akanzhi.png", "team": { "name": "Интер", - "logo": "clubs-logo/chelsea.png", + "logo": "clubs-logo/inter.png", "color": "#0068A8", "accent": "#000000" }, @@ -380,10 +380,10 @@ { "id": 30, "playerName": "Альваро Мората", - "photo": "tmp-player.png", + "photo": "players/morata.png", "team": { "name": "Комо", - "logo": "clubs-logo/chelsea.png", + "logo": "clubs-logo/como.png", "color": "#0033A0", "accent": "#FFFFFF" }, diff --git a/generate_placeholders.py b/generate_placeholders.py index 37b357e..a2c9204 100644 --- a/generate_placeholders.py +++ b/generate_placeholders.py @@ -21,6 +21,7 @@ BASE_DIR = os.path.dirname(os.path.abspath(__file__)) DATA_DIR = os.path.join(BASE_DIR, "data") CSV_PATH = os.path.join(BASE_DIR, "assets", "transfers-list.csv") CLUBS_DIR = os.path.join(BASE_DIR, "clubs-logo") +PLAYER_DIR = os.path.join(BASE_DIR, "players") os.makedirs(DATA_DIR, exist_ok=True) @@ -142,7 +143,7 @@ def main(): warnings.append(f"Row {i+1}: unknown club '{club_name}' -> auto colours {color}") photo = r["photo"] if r["photo"] else "tmp-player.png" - photo_path = os.path.join(BASE_DIR, photo) + photo_path = os.path.join(PLAYER_DIR, photo) if not os.path.exists(photo_path): warnings.append(f"Row {i+1}: photo '{photo}' not found at project root") @@ -165,7 +166,7 @@ def main(): transfers_json.append({ "id": i + 1, "playerName": r["player"], - "photo": photo, + "photo": f"players/{photo}", "team": { "name": club_name, "logo": f"clubs-logo/{logo}" if logo else "", @@ -177,7 +178,7 @@ def main(): }) json_path = os.path.join(DATA_DIR, "transfers.json") - with open(json_path, "w") as f: + with open(json_path, "w", encoding="utf-8") as f: json.dump({"transfers": transfers_json}, f, indent=2, ensure_ascii=False) f.write("\n") print(f" Data -> {os.path.relpath(json_path, BASE_DIR)}") diff --git a/players/akanzhi.png b/players/akanzhi.png new file mode 100644 index 0000000..575cadb Binary files /dev/null and b/players/akanzhi.png differ diff --git a/players/andrey-santos.png b/players/andrey-santos.png new file mode 100644 index 0000000..eb19bc3 Binary files /dev/null and b/players/andrey-santos.png differ diff --git a/players/antony-gordon.png b/players/antony-gordon.png new file mode 100644 index 0000000..230c59f Binary files /dev/null and b/players/antony-gordon.png differ diff --git a/players/bernardo-silva.png b/players/bernardo-silva.png new file mode 100644 index 0000000..26d3306 Binary files /dev/null and b/players/bernardo-silva.png differ diff --git a/players/dumfris.png b/players/dumfris.png new file mode 100644 index 0000000..fd88eef Binary files /dev/null and b/players/dumfris.png differ diff --git a/players/elliot-anderson.png b/players/elliot-anderson.png new file mode 100644 index 0000000..2513fe3 Binary files /dev/null and b/players/elliot-anderson.png differ diff --git a/players/garnacho.png b/players/garnacho.png new file mode 100644 index 0000000..95c0dfe Binary files /dev/null and b/players/garnacho.png differ diff --git a/players/gonsalo-ramush.png b/players/gonsalo-ramush.png new file mode 100644 index 0000000..8dffbc9 Binary files /dev/null and b/players/gonsalo-ramush.png differ diff --git a/players/grimaldo.png b/players/grimaldo.png new file mode 100644 index 0000000..2a2dd9b Binary files /dev/null and b/players/grimaldo.png differ diff --git a/players/ismael-saibari.png b/players/ismael-saibari.png new file mode 100644 index 0000000..9d772a6 Binary files /dev/null and b/players/ismael-saibari.png differ diff --git a/players/jeremis-jaque.png b/players/jeremis-jaque.png new file mode 100644 index 0000000..4a2c580 Binary files /dev/null and b/players/jeremis-jaque.png differ diff --git a/players/johan-monzambi.png b/players/johan-monzambi.png new file mode 100644 index 0000000..4362f08 Binary files /dev/null and b/players/johan-monzambi.png differ diff --git a/players/kan-li.png b/players/kan-li.png new file mode 100644 index 0000000..d7679de Binary files /dev/null and b/players/kan-li.png differ diff --git a/players/karim-adeemi.png b/players/karim-adeemi.png new file mode 100644 index 0000000..ea37d46 Binary files /dev/null and b/players/karim-adeemi.png differ diff --git a/players/konate.png b/players/konate.png new file mode 100644 index 0000000..4fba1a7 Binary files /dev/null and b/players/konate.png differ diff --git a/players/kukurelya.png b/players/kukurelya.png new file mode 100644 index 0000000..2529041 Binary files /dev/null and b/players/kukurelya.png differ diff --git a/players/luka-vuskovic.png b/players/luka-vuskovic.png new file mode 100644 index 0000000..225629c Binary files /dev/null and b/players/luka-vuskovic.png differ diff --git a/players/marko-palestra.png b/players/marko-palestra.png new file mode 100644 index 0000000..a02b81a Binary files /dev/null and b/players/marko-palestra.png differ diff --git a/players/mateus-fernandes.png b/players/mateus-fernandes.png new file mode 100644 index 0000000..6f06230 Binary files /dev/null and b/players/mateus-fernandes.png differ diff --git a/players/mingesa.png b/players/mingesa.png new file mode 100644 index 0000000..575cadb Binary files /dev/null and b/players/mingesa.png differ diff --git a/players/morata.png b/players/morata.png new file mode 100644 index 0000000..62e67e9 Binary files /dev/null and b/players/morata.png differ diff --git a/players/nataniel-braun.png b/players/nataniel-braun.png new file mode 100644 index 0000000..cc1ebc7 Binary files /dev/null and b/players/nataniel-braun.png differ diff --git a/players/openda.png b/players/openda.png new file mode 100644 index 0000000..dfff239 Binary files /dev/null and b/players/openda.png differ diff --git a/players/oscar-mingesa.png b/players/oscar-mingesa.png new file mode 100644 index 0000000..b45a05c Binary files /dev/null and b/players/oscar-mingesa.png differ diff --git a/players/samervil.png b/players/samervil.png new file mode 100644 index 0000000..3f02c89 Binary files /dev/null and b/players/samervil.png differ diff --git a/players/sandro-tonali.png b/players/sandro-tonali.png new file mode 100644 index 0000000..518644b Binary files /dev/null and b/players/sandro-tonali.png differ diff --git a/players/stankovic.png b/players/stankovic.png new file mode 100644 index 0000000..f94d9b5 Binary files /dev/null and b/players/stankovic.png differ diff --git a/players/tilemans.png b/players/tilemans.png new file mode 100644 index 0000000..7d314d9 Binary files /dev/null and b/players/tilemans.png differ diff --git a/tmp-player.png b/players/tmp-player.png similarity index 100% rename from tmp-player.png rename to players/tmp-player.png diff --git a/players/tsolis.png b/players/tsolis.png new file mode 100644 index 0000000..b37c98a Binary files /dev/null and b/players/tsolis.png differ diff --git a/players/van-hekke.png b/players/van-hekke.png new file mode 100644 index 0000000..c8d869e Binary files /dev/null and b/players/van-hekke.png differ