From 30d480f05393f97143d48140b080a2882689eebe Mon Sep 17 00:00:00 2001 From: bl3kunja Date: Sat, 11 Apr 2026 17:09:00 +0200 Subject: [PATCH] Newest Main page regreshing. Updated calculator. Removed unused stuff. --- data/camera_settings.json | 3 +- .../league_20251115_093906.json | 134 -- .../league_20260208_195711.json | 460 ---- data/players.json | 42 +- .../tournament_20260208_151820.json | 2035 ----------------- templates/draft.html | 501 ++-- templates/index.html | 33 +- templates/league_combine.html | 2 +- templates/league_scoreboard_display.html | 56 +- templates/modern_archive_index.html | 2 +- templates/modern_player_analysis.html | 2 +- templates/modern_player_stats.html | 2 +- templates/results_calculator.html | 633 +++-- templates/results_display.html | 100 +- templates/tournament.html | 1201 +++++----- tv_app.py | 77 +- 16 files changed, 1578 insertions(+), 3705 deletions(-) delete mode 100644 data/league_archives/league_20251115_093906.json delete mode 100644 data/league_archives/league_20260208_195711.json delete mode 100644 data/tournament_archives/tournament_20260208_151820.json diff --git a/data/camera_settings.json b/data/camera_settings.json index 81fd99c..7231a8a 100644 --- a/data/camera_settings.json +++ b/data/camera_settings.json @@ -11,5 +11,6 @@ "show_titles": true, "title_size": 1.4, "target_number_size": 1.7 - } + }, + "tv_view": "cameras" } \ No newline at end of file diff --git a/data/league_archives/league_20251115_093906.json b/data/league_archives/league_20251115_093906.json deleted file mode 100644 index abdd081..0000000 --- a/data/league_archives/league_20251115_093906.json +++ /dev/null @@ -1,134 +0,0 @@ -{ - "league": { - "league_id": "league_20251115_093831", - "created_at": "2025-11-15T09:38:31.193555", - "tournament_type": "20_targets", - "total_tournaments": 5, - "current_tournament": 0, - "participants": { - "1": { - "name": "Domen Pleterski", - "joker_used": false, - "tournament_results": [], - "total_score": 0, - "final_score": 0, - "tournaments_participated": 0 - }, - "5": { - "name": "Jože Verhnjak", - "joker_used": false, - "tournament_results": [], - "total_score": 0, - "final_score": 0, - "tournaments_participated": 0 - }, - "7": { - "name": "Branko Pokeržnik", - "joker_used": false, - "tournament_results": [], - "total_score": 0, - "final_score": 0, - "tournaments_participated": 0 - }, - "9": { - "name": "Janez Božič", - "joker_used": false, - "tournament_results": [], - "total_score": 0, - "final_score": 0, - "tournaments_participated": 0 - }, - "10": { - "name": "Mitja Čeh", - "joker_used": false, - "tournament_results": [], - "total_score": 0, - "final_score": 0, - "tournaments_participated": 0 - }, - "11": { - "name": "Rado Kefer", - "joker_used": false, - "tournament_results": [], - "total_score": 0, - "final_score": 0, - "tournaments_participated": 0 - }, - "14": { - "name": "Karli Proje", - "joker_used": false, - "tournament_results": [], - "total_score": 0, - "final_score": 0, - "tournaments_participated": 0 - }, - "15": { - "name": "Jan Pleterski", - "joker_used": false, - "tournament_results": [], - "total_score": 0, - "final_score": 0, - "tournaments_participated": 0 - }, - "16": { - "name": "Silvo Poročnik", - "joker_used": false, - "tournament_results": [], - "total_score": 0, - "final_score": 0, - "tournaments_participated": 0 - }, - "17": { - "name": "Dušan Onuk", - "joker_used": false, - "tournament_results": [], - "total_score": 0, - "final_score": 0, - "tournaments_participated": 0 - }, - "18": { - "name": "Matjaž Pleterski", - "joker_used": false, - "tournament_results": [], - "total_score": 0, - "final_score": 0, - "tournaments_participated": 0 - }, - "22": { - "name": "Doris Fesel", - "joker_used": false, - "tournament_results": [], - "total_score": 0, - "final_score": 0, - "tournaments_participated": 0 - }, - "24": { - "name": "Jože Verdinek", - "joker_used": false, - "tournament_results": [], - "total_score": 0, - "final_score": 0, - "tournaments_participated": 0 - }, - "50": { - "name": "Vid Ravnjak", - "joker_used": false, - "tournament_results": [], - "total_score": 0, - "final_score": 0, - "tournaments_participated": 0 - }, - "51": { - "name": "Robi Ovčar", - "joker_used": false, - "tournament_results": [], - "total_score": 0, - "final_score": 0, - "tournaments_participated": 0 - } - }, - "completed_tournaments": [], - "league_finished": false - }, - "archived_at": "2025-11-15T09:39:06.974580" -} \ No newline at end of file diff --git a/data/league_archives/league_20260208_195711.json b/data/league_archives/league_20260208_195711.json deleted file mode 100644 index 40d06b4..0000000 --- a/data/league_archives/league_20260208_195711.json +++ /dev/null @@ -1,460 +0,0 @@ -{ - "league": { - "league_id": "league_20251115_094741", - "created_at": "2025-11-15T09:47:41.711914", - "tournament_type": "20_targets", - "total_tournaments": 5, - "current_tournament": 3, - "participants": { - "1": { - "name": "Domen Pleterski", - "joker_used": true, - "tournament_results": [ - { - "tournament": 1, - "score": 320, - "tens_count": 3, - "participated": true - }, - { - "tournament": 2, - "score": 0, - "tens_count": 0, - "participated": false, - "joker": true - }, - { - "tournament": 3, - "score": 320, - "tens_count": 2, - "participated": true - } - ], - "total_score": 640, - "final_score": 0, - "tournaments_participated": 0 - }, - "5": { - "name": "Jože Verhnjak", - "joker_used": false, - "tournament_results": [ - { - "tournament": 1, - "score": 295, - "tens_count": 2, - "participated": true - }, - { - "tournament": 2, - "score": 293, - "tens_count": 3, - "participated": true - }, - { - "tournament": 3, - "score": 293, - "tens_count": 2, - "participated": true - } - ], - "total_score": 881, - "final_score": 0, - "tournaments_participated": 0 - }, - "7": { - "name": "Branko Pokeržnik", - "joker_used": false, - "tournament_results": [ - { - "tournament": 1, - "score": 316, - "tens_count": 1, - "participated": true - }, - { - "tournament": 2, - "score": 332, - "tens_count": 3, - "participated": true - }, - { - "tournament": 3, - "score": 318, - "tens_count": 1, - "participated": true - } - ], - "total_score": 966, - "final_score": 0, - "tournaments_participated": 0 - }, - "9": { - "name": "Janez Božič", - "joker_used": false, - "tournament_results": [ - { - "tournament": 1, - "score": 264, - "tens_count": 2, - "participated": true - }, - { - "tournament": 2, - "score": 276, - "tens_count": 0, - "participated": true - }, - { - "tournament": 3, - "score": 261, - "tens_count": 1, - "participated": true - } - ], - "total_score": 801, - "final_score": 0, - "tournaments_participated": 0 - }, - "10": { - "name": "Mitja Čeh", - "joker_used": false, - "tournament_results": [ - { - "tournament": 1, - "score": 329, - "tens_count": 1, - "participated": true - }, - { - "tournament": 2, - "score": 312, - "tens_count": 4, - "participated": true - }, - { - "tournament": 3, - "score": 307, - "tens_count": 2, - "participated": true - } - ], - "total_score": 948, - "final_score": 0, - "tournaments_participated": 0 - }, - "11": { - "name": "Rado Kefer", - "joker_used": true, - "tournament_results": [ - { - "tournament": 1, - "score": 275, - "tens_count": 0, - "participated": true - }, - { - "tournament": 2, - "score": 0, - "tens_count": 0, - "participated": false, - "joker": true - }, - { - "tournament": 3, - "score": 314, - "tens_count": 3, - "participated": true - } - ], - "total_score": 589, - "final_score": 0, - "tournaments_participated": 0 - }, - "14": { - "name": "Karli Proje", - "joker_used": true, - "tournament_results": [ - { - "tournament": 1, - "score": 0, - "tens_count": 0, - "participated": false, - "joker": true - }, - { - "tournament": 2, - "score": 0, - "tens_count": 0, - "participated": true - }, - { - "tournament": 3, - "score": 0, - "tens_count": 0, - "participated": true - } - ], - "total_score": 0, - "final_score": 0, - "tournaments_participated": 0 - }, - "15": { - "name": "Jan Pleterski", - "joker_used": true, - "tournament_results": [ - { - "tournament": 1, - "score": 269, - "tens_count": 1, - "participated": true - }, - { - "tournament": 2, - "score": 0, - "tens_count": 0, - "participated": false, - "joker": true - }, - { - "tournament": 3, - "score": 267, - "tens_count": 1, - "participated": true - } - ], - "total_score": 536, - "final_score": 0, - "tournaments_participated": 0 - }, - "16": { - "name": "Silvo Poročnik", - "joker_used": false, - "tournament_results": [ - { - "tournament": 1, - "score": 293, - "tens_count": 3, - "participated": true - }, - { - "tournament": 2, - "score": 278, - "tens_count": 3, - "participated": true - }, - { - "tournament": 3, - "score": 282, - "tens_count": 3, - "participated": true - } - ], - "total_score": 853, - "final_score": 0, - "tournaments_participated": 0 - }, - "17": { - "name": "Dušan Onuk", - "joker_used": false, - "tournament_results": [ - { - "tournament": 1, - "score": 313, - "tens_count": 4, - "participated": true - }, - { - "tournament": 2, - "score": 325, - "tens_count": 2, - "participated": true - }, - { - "tournament": 3, - "score": 192, - "tens_count": 3, - "participated": true - } - ], - "total_score": 830, - "final_score": 0, - "tournaments_participated": 0 - }, - "18": { - "name": "Matjaž Pleterski", - "joker_used": false, - "tournament_results": [ - { - "tournament": 1, - "score": 280, - "tens_count": 2, - "participated": true - }, - { - "tournament": 2, - "score": 276, - "tens_count": 4, - "participated": true - }, - { - "tournament": 3, - "score": 307, - "tens_count": 0, - "participated": true - } - ], - "total_score": 863, - "final_score": 0, - "tournaments_participated": 0 - }, - "22": { - "name": "Doris Fesel", - "joker_used": true, - "tournament_results": [ - { - "tournament": 1, - "score": 0, - "tens_count": 0, - "participated": false, - "joker": true - }, - { - "tournament": 2, - "score": 0, - "tens_count": 0, - "participated": true - }, - { - "tournament": 3, - "score": 0, - "tens_count": 0, - "participated": true - } - ], - "total_score": 0, - "final_score": 0, - "tournaments_participated": 0 - }, - "24": { - "name": "Jože Verdinek", - "joker_used": false, - "tournament_results": [ - { - "tournament": 1, - "score": 311, - "tens_count": 5, - "participated": true - }, - { - "tournament": 2, - "score": 315, - "tens_count": 5, - "participated": true - }, - { - "tournament": 3, - "score": 312, - "tens_count": 2, - "participated": true - } - ], - "total_score": 938, - "final_score": 0, - "tournaments_participated": 0 - }, - "50": { - "name": "Vid Ravnjak", - "joker_used": true, - "tournament_results": [ - { - "tournament": 1, - "score": 302, - "tens_count": 6, - "participated": true - }, - { - "tournament": 2, - "score": 309, - "tens_count": 4, - "participated": true - }, - { - "tournament": 3, - "score": 0, - "tens_count": 0, - "participated": false, - "joker": true - } - ], - "total_score": 611, - "final_score": 0, - "tournaments_participated": 0 - }, - "51": { - "name": "Robi Ovčar", - "joker_used": true, - "tournament_results": [ - { - "tournament": 1, - "score": 269, - "tens_count": 1, - "participated": true - }, - { - "tournament": 2, - "score": 0, - "tens_count": 0, - "participated": false, - "joker": true - }, - { - "tournament": 3, - "score": 265, - "tens_count": 1, - "participated": true - } - ], - "total_score": 534, - "final_score": 0, - "tournaments_participated": 0 - } - }, - "completed_tournaments": [ - { - "tournament_number": 1, - "tournament_type": "20_targets", - "finished_at": "2025-11-15T11:50:43.358782", - "results_summary": { - "participants": 15, - "shots_per_participant": 40, - "total_shots": 600, - "format_description": "20 Targets (2 shots each)" - } - }, - { - "tournament_number": 2, - "tournament_type": "20_targets", - "finished_at": "2025-12-13T12:13:29.550924", - "results_summary": { - "participants": 12, - "shots_per_participant": 40, - "total_shots": 480, - "format_description": "20 Targets (2 shots each)" - } - }, - { - "tournament_number": 3, - "tournament_type": "20_targets", - "finished_at": "2026-01-10T11:34:15.800129", - "results_summary": { - "participants": 14, - "shots_per_participant": 40, - "total_shots": 560, - "format_description": "20 Targets (2 shots each)" - } - } - ], - "league_finished": false - }, - "archived_at": "2026-02-08T19:57:11.791065" -} \ No newline at end of file diff --git a/data/players.json b/data/players.json index 2e5e5a9..aa2d775 100644 --- a/data/players.json +++ b/data/players.json @@ -3,7 +3,7 @@ { "id": 1, "name": "Domen Pleterski", - "enabled": true + "enabled": false }, { "id": 2, @@ -23,7 +23,7 @@ { "id": 5, "name": "Jože Verhnjak", - "enabled": true + "enabled": false }, { "id": 6, @@ -43,17 +43,17 @@ { "id": 9, "name": "Janez Božič", - "enabled": true + "enabled": false }, { "id": 10, "name": "Mitja Čeh", - "enabled": true + "enabled": false }, { "id": 11, "name": "Rado Kefer", - "enabled": true + "enabled": false }, { "id": 12, @@ -63,32 +63,32 @@ { "id": 13, "name": "Angelca Mrak", - "enabled": false + "enabled": true }, { "id": 14, "name": "Karli Proje", - "enabled": true + "enabled": false }, { "id": 15, "name": "Jan Pleterski", - "enabled": true + "enabled": false }, { "id": 16, "name": "Silvo Poročnik", - "enabled": true + "enabled": false }, { "id": 17, "name": "Dušan Onuk", - "enabled": true + "enabled": false }, { "id": 18, "name": "Matjaž Pleterski", - "enabled": true + "enabled": false }, { "id": 19, @@ -108,7 +108,7 @@ { "id": 22, "name": "Doris Fesel", - "enabled": true + "enabled": false }, { "id": 23, @@ -118,12 +118,12 @@ { "id": 24, "name": "Jože Verdinek", - "enabled": true + "enabled": false }, { "id": 25, "name": "Andrej Herman", - "enabled": false + "enabled": true }, { "id": 26, @@ -138,12 +138,12 @@ { "id": 28, "name": "Anže Kolar", - "enabled": false + "enabled": true }, { "id": 29, "name": "Alen Kolar", - "enabled": false + "enabled": true }, { "id": 30, @@ -158,7 +158,7 @@ { "id": 32, "name": "David Strniša", - "enabled": false + "enabled": true }, { "id": 33, @@ -188,7 +188,7 @@ { "id": 38, "name": "Bojan Sudar", - "enabled": false + "enabled": true }, { "id": 39, @@ -218,7 +218,7 @@ { "id": 44, "name": "Anka Kačnik", - "enabled": false + "enabled": true }, { "id": 45, @@ -248,12 +248,12 @@ { "id": 50, "name": "Vid Ravnjak", - "enabled": true + "enabled": false }, { "id": 51, "name": "Robi Ovčar", - "enabled": true + "enabled": false } ] } \ No newline at end of file diff --git a/data/tournament_archives/tournament_20260208_151820.json b/data/tournament_archives/tournament_20260208_151820.json deleted file mode 100644 index cbcf1bd..0000000 --- a/data/tournament_archives/tournament_20260208_151820.json +++ /dev/null @@ -1,2035 +0,0 @@ -{ - "tournament": { - "rounds": [ - { - "round_number": 1, - "players": [ - { - "id": 22, - "name": "Doris Fesel", - "enabled": true - }, - { - "id": 27, - "name": "Janez Mrak", - "enabled": true - }, - { - "id": 19, - "name": "Franc Rizmal", - "enabled": true - }, - { - "id": 12, - "name": "Matej Kvasnik", - "enabled": true - }, - { - "id": 17, - "name": "Dušan Onuk", - "enabled": true - }, - { - "id": 39, - "name": "Tia Sudar", - "enabled": true - } - ], - "status": "pending" - }, - { - "round_number": 2, - "players": [ - { - "id": 5, - "name": "Jože Verhnjak", - "enabled": true - }, - { - "id": 13, - "name": "Angelca Mrak", - "enabled": true - }, - { - "id": 30, - "name": "Maja Hirtl", - "enabled": true - }, - { - "id": 20, - "name": "Jože Preglav", - "enabled": true - }, - { - "id": 49, - "name": "Jolanda Verhnjak", - "enabled": true - }, - { - "id": 43, - "name": "Marko Pokržnik", - "enabled": true - } - ], - "status": "waiting" - }, - { - "round_number": 3, - "players": [ - { - "id": 1, - "name": "Domen Pleterski", - "enabled": true - }, - { - "id": 35, - "name": "Vanja Kolar", - "enabled": true - }, - { - "id": 16, - "name": "Silvo Poročnik", - "enabled": true - }, - { - "id": 2, - "name": "Nik Pleterski", - "enabled": true - }, - { - "id": 48, - "name": "Janja Salcman", - "enabled": true - }, - { - "id": 29, - "name": "Alen Kolar", - "enabled": true - } - ], - "status": "waiting" - }, - { - "round_number": 4, - "players": [ - { - "id": 18, - "name": "Matjaž Pleterski", - "enabled": true - }, - { - "id": 34, - "name": "Jože Planinšec", - "enabled": true - }, - { - "id": 25, - "name": "Andrej Herman", - "enabled": true - }, - { - "id": 44, - "name": "Anka Kačnik", - "enabled": true - }, - { - "id": 40, - "name": "Jaka Cvar", - "enabled": true - }, - { - "id": 47, - "name": "Ljuba Mršak", - "enabled": true - } - ], - "status": "waiting" - }, - { - "round_number": 5, - "players": [ - { - "id": 7, - "name": "Branko Pokeržnik", - "enabled": true - }, - { - "id": 32, - "name": "David Strniša", - "enabled": true - }, - { - "id": 46, - "name": "Tijana Štumpfl", - "enabled": true - }, - { - "id": 45, - "name": "Lidija Blimen", - "enabled": true - }, - { - "id": 4, - "name": "Mateja Pleterski", - "enabled": true - }, - { - "id": 10, - "name": "Mitja Čeh", - "enabled": true - } - ], - "status": "waiting" - }, - { - "round_number": 6, - "players": [ - { - "id": 23, - "name": "Robi Krautberger", - "enabled": true - }, - { - "id": 37, - "name": "Milan Stramec", - "enabled": true - }, - { - "id": 31, - "name": "Dejan Kučnik", - "enabled": true - }, - { - "id": 24, - "name": "Jože Verdinek", - "enabled": true - }, - { - "id": 11, - "name": "Rado Kefer", - "enabled": true - }, - { - "id": 36, - "name": "Klara Wankmuller", - "enabled": true - } - ], - "status": "waiting" - }, - { - "round_number": 7, - "players": [ - { - "id": 41, - "name": "Tadej Štruc", - "enabled": true - }, - { - "id": 26, - "name": "Jakob Herman", - "enabled": true - }, - { - "id": 14, - "name": "Karli Proje", - "enabled": true - }, - { - "id": 28, - "name": "Anže Kolar", - "enabled": true - }, - { - "id": 8, - "name": "Franc Žigart", - "enabled": true - }, - { - "id": 3, - "name": "Ivan Tandler", - "enabled": true - } - ], - "status": "waiting" - }, - { - "round_number": 8, - "players": [ - { - "id": 9, - "name": "Janez Božič", - "enabled": true - }, - { - "id": 33, - "name": "Namir Uzunović", - "enabled": true - }, - { - "id": 6, - "name": "Mateja Senica", - "enabled": true - }, - { - "id": 15, - "name": "Jan Pleterski", - "enabled": true - }, - { - "id": 21, - "name": "Marko Blimen", - "enabled": true - }, - { - "id": 38, - "name": "Bojan Sudar", - "enabled": true - } - ], - "status": "waiting" - }, - { - "round_number": 9, - "players": [ - { - "id": 42, - "name": "Jure Glaser", - "enabled": true - } - ], - "status": "waiting" - } - ], - "created_at": "2026-02-08T15:17:59.536991", - "total_players": 49, - "total_rounds": 9, - "current_round": 1, - "tournament_type": "4_targets" - }, - "results": { - "tournament_id": "2026-02-08T15:17:59.536991", - "tournament_type": "4_targets", - "participants": { - "22": { - "name": "Doris Fesel", - "targets": { - "1": { - "shot1": 9, - "shot2": 3, - "shot3": 7, - "shot4": 6, - "shot5": 9 - }, - "2": { - "shot1": 6, - "shot2": 3, - "shot3": 8, - "shot4": 3, - "shot5": 5 - }, - "3": { - "shot1": 8, - "shot2": 7, - "shot3": 4, - "shot4": 5, - "shot5": 9 - }, - "4": { - "shot1": 9, - "shot2": 8, - "shot3": 9, - "shot4": 1, - "shot5": 10 - } - }, - "total_score": 129, - "completed": true - }, - "27": { - "name": "Janez Mrak", - "targets": { - "1": { - "shot1": 0, - "shot2": 4, - "shot3": 5, - "shot4": 4, - "shot5": 3 - }, - "2": { - "shot1": 6, - "shot2": 4, - "shot3": 5, - "shot4": 6, - "shot5": 6 - }, - "3": { - "shot1": 9, - "shot2": 4, - "shot3": 3, - "shot4": 1, - "shot5": 2 - }, - "4": { - "shot1": 0, - "shot2": 5, - "shot3": 5, - "shot4": 2, - "shot5": 8 - } - }, - "total_score": 82, - "completed": true - }, - "19": { - "name": "Franc Rizmal", - "targets": { - "1": { - "shot1": 1, - "shot2": 0, - "shot3": 9, - "shot4": 5, - "shot5": 10 - }, - "2": { - "shot1": 9, - "shot2": 10, - "shot3": 4, - "shot4": 6, - "shot5": 0 - }, - "3": { - "shot1": 7, - "shot2": 9, - "shot3": 1, - "shot4": 3, - "shot5": 2 - }, - "4": { - "shot1": 9, - "shot2": 3, - "shot3": 3, - "shot4": 6, - "shot5": 2 - } - }, - "total_score": 99, - "completed": true - }, - "12": { - "name": "Matej Kvasnik", - "targets": { - "1": { - "shot1": 0, - "shot2": 9, - "shot3": 6, - "shot4": 4, - "shot5": 10 - }, - "2": { - "shot1": 2, - "shot2": 0, - "shot3": 10, - "shot4": 3, - "shot5": 5 - }, - "3": { - "shot1": 1, - "shot2": 6, - "shot3": 6, - "shot4": 2, - "shot5": 3 - }, - "4": { - "shot1": 6, - "shot2": 3, - "shot3": 9, - "shot4": 1, - "shot5": 6 - } - }, - "total_score": 92, - "completed": true - }, - "17": { - "name": "Dušan Onuk", - "targets": { - "1": { - "shot1": 9, - "shot2": 7, - "shot3": 6, - "shot4": 8, - "shot5": 1 - }, - "2": { - "shot1": 0, - "shot2": 5, - "shot3": 3, - "shot4": 3, - "shot5": 10 - }, - "3": { - "shot1": 8, - "shot2": 6, - "shot3": 0, - "shot4": 2, - "shot5": 0 - }, - "4": { - "shot1": 8, - "shot2": 7, - "shot3": 6, - "shot4": 7, - "shot5": 10 - } - }, - "total_score": 106, - "completed": true - }, - "39": { - "name": "Tia Sudar", - "targets": { - "1": { - "shot1": 9, - "shot2": 0, - "shot3": 0, - "shot4": 10, - "shot5": 9 - }, - "2": { - "shot1": 6, - "shot2": 1, - "shot3": 4, - "shot4": 0, - "shot5": 6 - }, - "3": { - "shot1": 10, - "shot2": 1, - "shot3": 10, - "shot4": 4, - "shot5": 7 - }, - "4": { - "shot1": 3, - "shot2": 7, - "shot3": 8, - "shot4": 5, - "shot5": 10 - } - }, - "total_score": 110, - "completed": true - }, - "5": { - "name": "Jože Verhnjak", - "targets": { - "1": { - "shot1": 0, - "shot2": 6, - "shot3": 5, - "shot4": 9, - "shot5": 5 - }, - "2": { - "shot1": 10, - "shot2": 4, - "shot3": 3, - "shot4": 0, - "shot5": 1 - }, - "3": { - "shot1": 4, - "shot2": 7, - "shot3": 2, - "shot4": 9, - "shot5": 8 - }, - "4": { - "shot1": 3, - "shot2": 6, - "shot3": 2, - "shot4": 7, - "shot5": 4 - } - }, - "total_score": 95, - "completed": true - }, - "13": { - "name": "Angelca Mrak", - "targets": { - "1": { - "shot1": 3, - "shot2": 10, - "shot3": 8, - "shot4": 2, - "shot5": 10 - }, - "2": { - "shot1": 3, - "shot2": 3, - "shot3": 6, - "shot4": 9, - "shot5": 0 - }, - "3": { - "shot1": 10, - "shot2": 10, - "shot3": 6, - "shot4": 3, - "shot5": 0 - }, - "4": { - "shot1": 5, - "shot2": 8, - "shot3": 9, - "shot4": 9, - "shot5": 4 - } - }, - "total_score": 118, - "completed": true - }, - "30": { - "name": "Maja Hirtl", - "targets": { - "1": { - "shot1": 3, - "shot2": 8, - "shot3": 10, - "shot4": 6, - "shot5": 2 - }, - "2": { - "shot1": 10, - "shot2": 8, - "shot3": 4, - "shot4": 7, - "shot5": 7 - }, - "3": { - "shot1": 6, - "shot2": 9, - "shot3": 8, - "shot4": 0, - "shot5": 1 - }, - "4": { - "shot1": 3, - "shot2": 7, - "shot3": 7, - "shot4": 10, - "shot5": 1 - } - }, - "total_score": 117, - "completed": true - }, - "20": { - "name": "Jože Preglav", - "targets": { - "1": { - "shot1": 4, - "shot2": 6, - "shot3": 2, - "shot4": 9, - "shot5": 5 - }, - "2": { - "shot1": 6, - "shot2": 5, - "shot3": 2, - "shot4": 4, - "shot5": 6 - }, - "3": { - "shot1": 3, - "shot2": 4, - "shot3": 10, - "shot4": 8, - "shot5": 4 - }, - "4": { - "shot1": 2, - "shot2": 9, - "shot3": 8, - "shot4": 2, - "shot5": 1 - } - }, - "total_score": 100, - "completed": true - }, - "49": { - "name": "Jolanda Verhnjak", - "targets": { - "1": { - "shot1": 9, - "shot2": 7, - "shot3": 9, - "shot4": 10, - "shot5": 6 - }, - "2": { - "shot1": 4, - "shot2": 6, - "shot3": 2, - "shot4": 2, - "shot5": 4 - }, - "3": { - "shot1": 3, - "shot2": 2, - "shot3": 7, - "shot4": 5, - "shot5": 8 - }, - "4": { - "shot1": 9, - "shot2": 10, - "shot3": 3, - "shot4": 1, - "shot5": 8 - } - }, - "total_score": 115, - "completed": true - }, - "43": { - "name": "Marko Pokržnik", - "targets": { - "1": { - "shot1": 2, - "shot2": 9, - "shot3": 8, - "shot4": 4, - "shot5": 3 - }, - "2": { - "shot1": 9, - "shot2": 6, - "shot3": 4, - "shot4": 1, - "shot5": 9 - }, - "3": { - "shot1": 2, - "shot2": 1, - "shot3": 9, - "shot4": 4, - "shot5": 6 - }, - "4": { - "shot1": 4, - "shot2": 6, - "shot3": 4, - "shot4": 9, - "shot5": 0 - } - }, - "total_score": 100, - "completed": true - }, - "1": { - "name": "Domen Pleterski", - "targets": { - "1": { - "shot1": 8, - "shot2": 4, - "shot3": 2, - "shot4": 9, - "shot5": 2 - }, - "2": { - "shot1": 10, - "shot2": 5, - "shot3": 9, - "shot4": 6, - "shot5": 2 - }, - "3": { - "shot1": 4, - "shot2": 3, - "shot3": 5, - "shot4": 9, - "shot5": 3 - }, - "4": { - "shot1": 9, - "shot2": 8, - "shot3": 3, - "shot4": 5, - "shot5": 1 - } - }, - "total_score": 107, - "completed": true - }, - "35": { - "name": "Vanja Kolar", - "targets": { - "1": { - "shot1": 3, - "shot2": 1, - "shot3": 0, - "shot4": 2, - "shot5": 7 - }, - "2": { - "shot1": 9, - "shot2": 5, - "shot3": 4, - "shot4": 5, - "shot5": 8 - }, - "3": { - "shot1": 6, - "shot2": 10, - "shot3": 3, - "shot4": 6, - "shot5": 1 - }, - "4": { - "shot1": 4, - "shot2": 5, - "shot3": 6, - "shot4": 10, - "shot5": 8 - } - }, - "total_score": 103, - "completed": true - }, - "16": { - "name": "Silvo Poročnik", - "targets": { - "1": { - "shot1": 10, - "shot2": 0, - "shot3": 0, - "shot4": 4, - "shot5": 9 - }, - "2": { - "shot1": 10, - "shot2": 9, - "shot3": 0, - "shot4": 4, - "shot5": 5 - }, - "3": { - "shot1": 6, - "shot2": 4, - "shot3": 6, - "shot4": 3, - "shot5": 10 - }, - "4": { - "shot1": 7, - "shot2": 3, - "shot3": 2, - "shot4": 9, - "shot5": 1 - } - }, - "total_score": 102, - "completed": true - }, - "2": { - "name": "Nik Pleterski", - "targets": { - "1": { - "shot1": 6, - "shot2": 10, - "shot3": 8, - "shot4": 0, - "shot5": 8 - }, - "2": { - "shot1": 2, - "shot2": 1, - "shot3": 3, - "shot4": 4, - "shot5": 8 - }, - "3": { - "shot1": 7, - "shot2": 8, - "shot3": 1, - "shot4": 1, - "shot5": 8 - }, - "4": { - "shot1": 5, - "shot2": 7, - "shot3": 8, - "shot4": 2, - "shot5": 7 - } - }, - "total_score": 104, - "completed": true - }, - "48": { - "name": "Janja Salcman", - "targets": { - "1": { - "shot1": 4, - "shot2": 6, - "shot3": 2, - "shot4": 4, - "shot5": 4 - }, - "2": { - "shot1": 10, - "shot2": 6, - "shot3": 7, - "shot4": 2, - "shot5": 4 - }, - "3": { - "shot1": 4, - "shot2": 3, - "shot3": 1, - "shot4": 0, - "shot5": 5 - }, - "4": { - "shot1": 8, - "shot2": 5, - "shot3": 2, - "shot4": 5, - "shot5": 6 - } - }, - "total_score": 88, - "completed": true - }, - "29": { - "name": "Alen Kolar", - "targets": { - "1": { - "shot1": 4, - "shot2": 8, - "shot3": 5, - "shot4": 7, - "shot5": 6 - }, - "2": { - "shot1": 1, - "shot2": 0, - "shot3": 9, - "shot4": 0, - "shot5": 8 - }, - "3": { - "shot1": 2, - "shot2": 4, - "shot3": 0, - "shot4": 3, - "shot5": 1 - }, - "4": { - "shot1": 1, - "shot2": 8, - "shot3": 2, - "shot4": 7, - "shot5": 7 - } - }, - "total_score": 83, - "completed": true - }, - "18": { - "name": "Matjaž Pleterski", - "targets": { - "1": { - "shot1": 2, - "shot2": 10, - "shot3": 2, - "shot4": 7, - "shot5": 2 - }, - "2": { - "shot1": 3, - "shot2": 3, - "shot3": 8, - "shot4": 9, - "shot5": 3 - }, - "3": { - "shot1": 6, - "shot2": 1, - "shot3": 6, - "shot4": 9, - "shot5": 3 - }, - "4": { - "shot1": 2, - "shot2": 2, - "shot3": 4, - "shot4": 3, - "shot5": 9 - } - }, - "total_score": 94, - "completed": true - }, - "34": { - "name": "Jože Planinšec", - "targets": { - "1": { - "shot1": 2, - "shot2": 6, - "shot3": 6, - "shot4": 5, - "shot5": 6 - }, - "2": { - "shot1": 9, - "shot2": 5, - "shot3": 0, - "shot4": 4, - "shot5": 6 - }, - "3": { - "shot1": 3, - "shot2": 4, - "shot3": 6, - "shot4": 8, - "shot5": 1 - }, - "4": { - "shot1": 3, - "shot2": 4, - "shot3": 8, - "shot4": 9, - "shot5": 4 - } - }, - "total_score": 99, - "completed": true - }, - "25": { - "name": "Andrej Herman", - "targets": { - "1": { - "shot1": 5, - "shot2": 6, - "shot3": 10, - "shot4": 3, - "shot5": 10 - }, - "2": { - "shot1": 7, - "shot2": 8, - "shot3": 2, - "shot4": 9, - "shot5": 6 - }, - "3": { - "shot1": 10, - "shot2": 3, - "shot3": 4, - "shot4": 3, - "shot5": 9 - }, - "4": { - "shot1": 3, - "shot2": 4, - "shot3": 3, - "shot4": 4, - "shot5": 3 - } - }, - "total_score": 112, - "completed": true - }, - "44": { - "name": "Anka Kačnik", - "targets": { - "1": { - "shot1": 3, - "shot2": 4, - "shot3": 2, - "shot4": 0, - "shot5": 8 - }, - "2": { - "shot1": 6, - "shot2": 3, - "shot3": 0, - "shot4": 0, - "shot5": 3 - }, - "3": { - "shot1": 6, - "shot2": 4, - "shot3": 1, - "shot4": 4, - "shot5": 2 - }, - "4": { - "shot1": 5, - "shot2": 2, - "shot3": 8, - "shot4": 4, - "shot5": 5 - } - }, - "total_score": 70, - "completed": true - }, - "40": { - "name": "Jaka Cvar", - "targets": { - "1": { - "shot1": 4, - "shot2": 10, - "shot3": 5, - "shot4": 7, - "shot5": 2 - }, - "2": { - "shot1": 0, - "shot2": 4, - "shot3": 0, - "shot4": 10, - "shot5": 7 - }, - "3": { - "shot1": 7, - "shot2": 8, - "shot3": 1, - "shot4": 7, - "shot5": 2 - }, - "4": { - "shot1": 6, - "shot2": 2, - "shot3": 7, - "shot4": 0, - "shot5": 1 - } - }, - "total_score": 90, - "completed": true - }, - "47": { - "name": "Ljuba Mršak", - "targets": { - "1": { - "shot1": 0, - "shot2": 5, - "shot3": 9, - "shot4": 2, - "shot5": 5 - }, - "2": { - "shot1": 0, - "shot2": 4, - "shot3": 1, - "shot4": 4, - "shot5": 3 - }, - "3": { - "shot1": 1, - "shot2": 0, - "shot3": 7, - "shot4": 4, - "shot5": 10 - }, - "4": { - "shot1": 10, - "shot2": 8, - "shot3": 7, - "shot4": 9, - "shot5": 4 - } - }, - "total_score": 93, - "completed": true - }, - "7": { - "name": "Branko Pokeržnik", - "targets": { - "1": { - "shot1": 3, - "shot2": 8, - "shot3": 4, - "shot4": 10, - "shot5": 8 - }, - "2": { - "shot1": 2, - "shot2": 4, - "shot3": 5, - "shot4": 6, - "shot5": 3 - }, - "3": { - "shot1": 5, - "shot2": 0, - "shot3": 5, - "shot4": 5, - "shot5": 8 - }, - "4": { - "shot1": 8, - "shot2": 1, - "shot3": 5, - "shot4": 4, - "shot5": 5 - } - }, - "total_score": 99, - "completed": true - }, - "32": { - "name": "David Strniša", - "targets": { - "1": { - "shot1": 5, - "shot2": 2, - "shot3": 4, - "shot4": 3, - "shot5": 0 - }, - "2": { - "shot1": 2, - "shot2": 5, - "shot3": 4, - "shot4": 7, - "shot5": 9 - }, - "3": { - "shot1": 1, - "shot2": 2, - "shot3": 5, - "shot4": 9, - "shot5": 6 - }, - "4": { - "shot1": 10, - "shot2": 8, - "shot3": 4, - "shot4": 4, - "shot5": 2 - } - }, - "total_score": 92, - "completed": true - }, - "46": { - "name": "Tijana Štumpfl", - "targets": { - "1": { - "shot1": 4, - "shot2": 8, - "shot3": 1, - "shot4": 10, - "shot5": 6 - }, - "2": { - "shot1": 0, - "shot2": 0, - "shot3": 8, - "shot4": 8, - "shot5": 10 - }, - "3": { - "shot1": 7, - "shot2": 4, - "shot3": 1, - "shot4": 4, - "shot5": 9 - }, - "4": { - "shot1": 5, - "shot2": 7, - "shot3": 6, - "shot4": 9, - "shot5": 10 - } - }, - "total_score": 117, - "completed": true - }, - "45": { - "name": "Lidija Blimen", - "targets": { - "1": { - "shot1": 4, - "shot2": 7, - "shot3": 7, - "shot4": 6, - "shot5": 4 - }, - "2": { - "shot1": 8, - "shot2": 5, - "shot3": 9, - "shot4": 6, - "shot5": 0 - }, - "3": { - "shot1": 2, - "shot2": 8, - "shot3": 10, - "shot4": 2, - "shot5": 6 - }, - "4": { - "shot1": 10, - "shot2": 6, - "shot3": 10, - "shot4": 10, - "shot5": 5 - } - }, - "total_score": 125, - "completed": true - }, - "4": { - "name": "Mateja Pleterski", - "targets": { - "1": { - "shot1": 10, - "shot2": 3, - "shot3": 2, - "shot4": 5, - "shot5": 6 - }, - "2": { - "shot1": 0, - "shot2": 2, - "shot3": 7, - "shot4": 6, - "shot5": 8 - }, - "3": { - "shot1": 8, - "shot2": 1, - "shot3": 3, - "shot4": 8, - "shot5": 7 - }, - "4": { - "shot1": 7, - "shot2": 1, - "shot3": 3, - "shot4": 10, - "shot5": 10 - } - }, - "total_score": 107, - "completed": true - }, - "10": { - "name": "Mitja Čeh", - "targets": { - "1": { - "shot1": 2, - "shot2": 10, - "shot3": 10, - "shot4": 10, - "shot5": 9 - }, - "2": { - "shot1": 8, - "shot2": 0, - "shot3": 8, - "shot4": 0, - "shot5": 7 - }, - "3": { - "shot1": 6, - "shot2": 1, - "shot3": 2, - "shot4": 0, - "shot5": 4 - }, - "4": { - "shot1": 3, - "shot2": 3, - "shot3": 7, - "shot4": 1, - "shot5": 5 - } - }, - "total_score": 96, - "completed": true - }, - "23": { - "name": "Robi Krautberger", - "targets": { - "1": { - "shot1": 4, - "shot2": 5, - "shot3": 2, - "shot4": 3, - "shot5": 8 - }, - "2": { - "shot1": 4, - "shot2": 3, - "shot3": 5, - "shot4": 3, - "shot5": 4 - }, - "3": { - "shot1": 7, - "shot2": 9, - "shot3": 10, - "shot4": 0, - "shot5": 0 - }, - "4": { - "shot1": 5, - "shot2": 7, - "shot3": 2, - "shot4": 10, - "shot5": 8 - } - }, - "total_score": 99, - "completed": true - }, - "37": { - "name": "Milan Stramec", - "targets": { - "1": { - "shot1": 8, - "shot2": 5, - "shot3": 6, - "shot4": 8, - "shot5": 7 - }, - "2": { - "shot1": 6, - "shot2": 4, - "shot3": 1, - "shot4": 0, - "shot5": 7 - }, - "3": { - "shot1": 5, - "shot2": 9, - "shot3": 2, - "shot4": 5, - "shot5": 6 - }, - "4": { - "shot1": 4, - "shot2": 4, - "shot3": 2, - "shot4": 10, - "shot5": 4 - } - }, - "total_score": 103, - "completed": true - }, - "31": { - "name": "Dejan Kučnik", - "targets": { - "1": { - "shot1": 2, - "shot2": 5, - "shot3": 0, - "shot4": 2, - "shot5": 2 - }, - "2": { - "shot1": 10, - "shot2": 2, - "shot3": 3, - "shot4": 2, - "shot5": 7 - }, - "3": { - "shot1": 0, - "shot2": 8, - "shot3": 3, - "shot4": 5, - "shot5": 0 - }, - "4": { - "shot1": 4, - "shot2": 6, - "shot3": 2, - "shot4": 3, - "shot5": 7 - } - }, - "total_score": 73, - "completed": true - }, - "24": { - "name": "Jože Verdinek", - "targets": { - "1": { - "shot1": 10, - "shot2": 4, - "shot3": 10, - "shot4": 4, - "shot5": 2 - }, - "2": { - "shot1": 7, - "shot2": 6, - "shot3": 2, - "shot4": 10, - "shot5": 5 - }, - "3": { - "shot1": 8, - "shot2": 8, - "shot3": 9, - "shot4": 0, - "shot5": 9 - }, - "4": { - "shot1": 10, - "shot2": 4, - "shot3": 4, - "shot4": 10, - "shot5": 2 - } - }, - "total_score": 124, - "completed": true - }, - "11": { - "name": "Rado Kefer", - "targets": { - "1": { - "shot1": 2, - "shot2": 6, - "shot3": 3, - "shot4": 2, - "shot5": 6 - }, - "2": { - "shot1": 7, - "shot2": 9, - "shot3": 7, - "shot4": 4, - "shot5": 6 - }, - "3": { - "shot1": 6, - "shot2": 9, - "shot3": 4, - "shot4": 1, - "shot5": 10 - }, - "4": { - "shot1": 1, - "shot2": 8, - "shot3": 10, - "shot4": 8, - "shot5": 8 - } - }, - "total_score": 117, - "completed": true - }, - "36": { - "name": "Klara Wankmuller", - "targets": { - "1": { - "shot1": 10, - "shot2": 2, - "shot3": 7, - "shot4": 3, - "shot5": 10 - }, - "2": { - "shot1": 3, - "shot2": 3, - "shot3": 4, - "shot4": 8, - "shot5": 0 - }, - "3": { - "shot1": 7, - "shot2": 5, - "shot3": 5, - "shot4": 8, - "shot5": 4 - }, - "4": { - "shot1": 10, - "shot2": 1, - "shot3": 0, - "shot4": 8, - "shot5": 0 - } - }, - "total_score": 98, - "completed": true - }, - "41": { - "name": "Tadej Štruc", - "targets": { - "1": { - "shot1": 10, - "shot2": 9, - "shot3": 7, - "shot4": 4, - "shot5": 3 - }, - "2": { - "shot1": 0, - "shot2": 10, - "shot3": 2, - "shot4": 8, - "shot5": 5 - }, - "3": { - "shot1": 10, - "shot2": 10, - "shot3": 1, - "shot4": 8, - "shot5": 8 - }, - "4": { - "shot1": 10, - "shot2": 9, - "shot3": 6, - "shot4": 5, - "shot5": 0 - } - }, - "total_score": 125, - "completed": true - }, - "26": { - "name": "Jakob Herman", - "targets": { - "1": { - "shot1": 4, - "shot2": 2, - "shot3": 9, - "shot4": 0, - "shot5": 2 - }, - "2": { - "shot1": 8, - "shot2": 1, - "shot3": 10, - "shot4": 5, - "shot5": 1 - }, - "3": { - "shot1": 0, - "shot2": 8, - "shot3": 1, - "shot4": 8, - "shot5": 5 - }, - "4": { - "shot1": 1, - "shot2": 4, - "shot3": 10, - "shot4": 4, - "shot5": 6 - } - }, - "total_score": 89, - "completed": true - }, - "14": { - "name": "Karli Proje", - "targets": { - "1": { - "shot1": 10, - "shot2": 10, - "shot3": 9, - "shot4": 10, - "shot5": 10 - }, - "2": { - "shot1": 3, - "shot2": 9, - "shot3": 1, - "shot4": 9, - "shot5": 7 - }, - "3": { - "shot1": 4, - "shot2": 0, - "shot3": 2, - "shot4": 8, - "shot5": 6 - }, - "4": { - "shot1": 4, - "shot2": 0, - "shot3": 10, - "shot4": 3, - "shot5": 10 - } - }, - "total_score": 125, - "completed": true - }, - "28": { - "name": "Anže Kolar", - "targets": { - "1": { - "shot1": 10, - "shot2": 9, - "shot3": 2, - "shot4": 5, - "shot5": 1 - }, - "2": { - "shot1": 6, - "shot2": 9, - "shot3": 2, - "shot4": 9, - "shot5": 8 - }, - "3": { - "shot1": 6, - "shot2": 3, - "shot3": 4, - "shot4": 5, - "shot5": 1 - }, - "4": { - "shot1": 7, - "shot2": 9, - "shot3": 9, - "shot4": 6, - "shot5": 9 - } - }, - "total_score": 120, - "completed": true - }, - "8": { - "name": "Franc Žigart", - "targets": { - "1": { - "shot1": 4, - "shot2": 6, - "shot3": 5, - "shot4": 5, - "shot5": 3 - }, - "2": { - "shot1": 1, - "shot2": 3, - "shot3": 8, - "shot4": 4, - "shot5": 3 - }, - "3": { - "shot1": 4, - "shot2": 8, - "shot3": 3, - "shot4": 10, - "shot5": 8 - }, - "4": { - "shot1": 6, - "shot2": 2, - "shot3": 10, - "shot4": 3, - "shot5": 1 - } - }, - "total_score": 97, - "completed": true - }, - "3": { - "name": "Ivan Tandler", - "targets": { - "1": { - "shot1": 0, - "shot2": 10, - "shot3": 4, - "shot4": 8, - "shot5": 9 - }, - "2": { - "shot1": 2, - "shot2": 7, - "shot3": 8, - "shot4": 0, - "shot5": 9 - }, - "3": { - "shot1": 1, - "shot2": 2, - "shot3": 3, - "shot4": 1, - "shot5": 4 - }, - "4": { - "shot1": 6, - "shot2": 7, - "shot3": 1, - "shot4": 7, - "shot5": 9 - } - }, - "total_score": 98, - "completed": true - }, - "9": { - "name": "Janez Božič", - "targets": { - "1": { - "shot1": 8, - "shot2": 6, - "shot3": 6, - "shot4": 2, - "shot5": 2 - }, - "2": { - "shot1": 7, - "shot2": 3, - "shot3": 2, - "shot4": 5, - "shot5": 7 - }, - "3": { - "shot1": 4, - "shot2": 9, - "shot3": 3, - "shot4": 7, - "shot5": 6 - }, - "4": { - "shot1": 0, - "shot2": 7, - "shot3": 5, - "shot4": 5, - "shot5": 0 - } - }, - "total_score": 94, - "completed": true - }, - "33": { - "name": "Namir Uzunović", - "targets": { - "1": { - "shot1": 9, - "shot2": 4, - "shot3": 8, - "shot4": 10, - "shot5": 1 - }, - "2": { - "shot1": 10, - "shot2": 8, - "shot3": 2, - "shot4": 5, - "shot5": 8 - }, - "3": { - "shot1": 7, - "shot2": 8, - "shot3": 3, - "shot4": 3, - "shot5": 2 - }, - "4": { - "shot1": 5, - "shot2": 4, - "shot3": 7, - "shot4": 5, - "shot5": 1 - } - }, - "total_score": 110, - "completed": true - }, - "6": { - "name": "Mateja Senica", - "targets": { - "1": { - "shot1": 8, - "shot2": 4, - "shot3": 1, - "shot4": 10, - "shot5": 6 - }, - "2": { - "shot1": 10, - "shot2": 4, - "shot3": 8, - "shot4": 9, - "shot5": 7 - }, - "3": { - "shot1": 7, - "shot2": 2, - "shot3": 3, - "shot4": 7, - "shot5": 3 - }, - "4": { - "shot1": 0, - "shot2": 3, - "shot3": 0, - "shot4": 4, - "shot5": 6 - } - }, - "total_score": 102, - "completed": true - }, - "15": { - "name": "Jan Pleterski", - "targets": { - "1": { - "shot1": 9, - "shot2": 6, - "shot3": 5, - "shot4": 4, - "shot5": 9 - }, - "2": { - "shot1": 9, - "shot2": 7, - "shot3": 10, - "shot4": 9, - "shot5": 8 - }, - "3": { - "shot1": 8, - "shot2": 1, - "shot3": 8, - "shot4": 1, - "shot5": 9 - }, - "4": { - "shot1": 8, - "shot2": 4, - "shot3": 2, - "shot4": 8, - "shot5": 2 - } - }, - "total_score": 127, - "completed": true - }, - "21": { - "name": "Marko Blimen", - "targets": { - "1": { - "shot1": 4, - "shot2": 7, - "shot3": 4, - "shot4": 0, - "shot5": 5 - }, - "2": { - "shot1": 1, - "shot2": 3, - "shot3": 8, - "shot4": 7, - "shot5": 5 - }, - "3": { - "shot1": 6, - "shot2": 2, - "shot3": 4, - "shot4": 9, - "shot5": 7 - }, - "4": { - "shot1": 1, - "shot2": 4, - "shot3": 2, - "shot4": 9, - "shot5": 7 - } - }, - "total_score": 95, - "completed": true - }, - "38": { - "name": "Bojan Sudar", - "targets": { - "1": { - "shot1": 7, - "shot2": 1, - "shot3": 0, - "shot4": 10, - "shot5": 6 - }, - "2": { - "shot1": 0, - "shot2": 1, - "shot3": 7, - "shot4": 8, - "shot5": 9 - }, - "3": { - "shot1": 9, - "shot2": 0, - "shot3": 0, - "shot4": 0, - "shot5": 7 - }, - "4": { - "shot1": 8, - "shot2": 6, - "shot3": 8, - "shot4": 9, - "shot5": 2 - } - }, - "total_score": 98, - "completed": true - }, - "42": { - "name": "Jure Glaser", - "targets": { - "1": { - "shot1": 2, - "shot2": 3, - "shot3": 0, - "shot4": 10, - "shot5": 6 - }, - "2": { - "shot1": 0, - "shot2": 6, - "shot3": 1, - "shot4": 2, - "shot5": 8 - }, - "3": { - "shot1": 9, - "shot2": 2, - "shot3": 4, - "shot4": 2, - "shot5": 8 - }, - "4": { - "shot1": 9, - "shot2": 7, - "shot3": 10, - "shot4": 10, - "shot5": 0 - } - }, - "total_score": 99, - "completed": true - } - }, - "tournament_finished": true, - "created_at": "2026-02-08T15:17:59.537284", - "finished_at": "2026-02-08T15:18:20.664591" - }, - "archived_at": "2026-02-08T15:18:20.664621" -} \ No newline at end of file diff --git a/templates/draft.html b/templates/draft.html index 6fa997f..aa75428 100644 --- a/templates/draft.html +++ b/templates/draft.html @@ -31,39 +31,33 @@ .tournament-header { background: white; border-radius: 12px; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); - padding: 15px 20px; - text-align: center; + box-shadow: 0 2px 8px rgba(0,0,0,0.08); + padding: 10px 16px; flex-shrink: 0; - position: relative; margin: 10px 15px 5px 15px; - } - - .tournament-header .nav-btn { - position: absolute; - top: 10px; - right: 15px; - margin: 0; + display: flex; + align-items: center; + gap: 12px; + flex-wrap: wrap; } .tournament-title { - font-size: 1.5rem; - font-weight: bold; + font-size: 1rem; + font-weight: 700; color: #333; - margin-bottom: 6px; + white-space: nowrap; } .tournament-stats { - color: #666; - font-size: 0.9rem; - margin-bottom: 12px; + color: #888; + font-size: 0.82rem; } .tournament-controls { display: flex; - justify-content: center; align-items: center; - gap: 15px; + gap: 10px; + margin-left: auto; } .round-nav-btn { @@ -94,7 +88,7 @@ .current-round-display { font-size: 1rem; font-weight: bold; - color: #28a745; + color: #333; margin: 0 15px; min-width: 140px; text-align: center; @@ -387,6 +381,14 @@ display: none !important; } + .print-logo { + display: block !important; + height: 80px !important; + max-width: 300px !important; + object-fit: contain !important; + margin: 0 auto 16px auto !important; + } + html, body { height: auto !important; overflow: visible !important; @@ -410,20 +412,47 @@ page-break-inside: avoid; } - .tournament-title { - font-size: 24pt !important; - font-weight: bold !important; - color: #333 !important; - margin-bottom: 10px; - } - + .tournament-title, .tournament-stats { - font-size: 12pt !important; - color: #666 !important; - margin-bottom: 0 !important; + display: none !important; } - .current-round-info { + .tournament-header { + display: flex !important; + flex-direction: row !important; + align-items: center !important; + justify-content: space-between !important; + background: transparent !important; + border: none !important; + box-shadow: none !important; + border-radius: 0 !important; + padding: 0 0 16px 0 !important; + margin-bottom: 16px !important; + border-bottom: 1px solid #ddd !important; + } + + .print-logo { + display: block !important; + height: 80px !important; + max-width: 300px !important; + object-fit: contain !important; + margin: 0 !important; + } + + .print-meta { + display: flex !important; + flex-direction: column !important; + align-items: flex-end !important; + font-size: 11pt !important; + color: #555 !important; + gap: 4px; + } + + .current-round-info, + .round-badge, + .round-print-info, + .player-id, + .no-tournament { display: none !important; } @@ -431,209 +460,106 @@ display: block !important; overflow: visible !important; padding: 0 !important; - } - - .round-row { - background: white !important; - border: 1px solid #ddd !important; + background: transparent !important; border-radius: 0 !important; box-shadow: none !important; - page-break-inside: avoid; - display: flex !important; - flex-direction: row !important; - margin-bottom: 15px; - flex-shrink: 0 !important; + margin: 0 !important; } + .round-row, .round-row.current, .round-row.completed, .round-row.waiting { - border-left: 2px solid #ddd !important; + box-shadow: none !important; + page-break-inside: avoid !important; opacity: 1 !important; - } - - .round-header { - background: #f8f9fa !important; - border: none !important; - border-right: 1px solid #ddd !important; - display: flex !important; - flex-direction: column !important; - justify-content: center !important; - align-items: center !important; - padding: 10px 15px !important; - min-width: 130px !important; + margin-bottom: 6px !important; + min-height: 0 !important; + border-top: 1px solid #dee2e6 !important; + border-right: 1px solid #dee2e6 !important; + border-bottom: 1px solid #dee2e6 !important; + border-left: 1px solid #dee2e6 !important; + border-color: #dee2e6 !important; } .round-row.current .round-header, .round-row.completed .round-header, .round-row.waiting .round-header { - background: #f8f9fa !important; + background: linear-gradient(135deg, #f8f9fa 0%, #f0f1f3 100%) !important; } - .round-title { - font-size: 14pt !important; - font-weight: bold !important; - } - - .round-badge { - display: none !important; - } - - .round-print-info { - display: none !important; - } - - .round-time-field { - display: flex !important; - align-items: center !important; - gap: 8px !important; - } - - .round-time-label { - font-size: 11pt !important; - color: #666 !important; - font-weight: 500 !important; - } - - .round-time-input { - border: 2px solid #333 !important; - border-radius: 4px !important; - padding: 6px 10px !important; - width: 100px !important; - height: 32px !important; - background: white !important; - } - - .round-checkbox-field { - display: flex !important; - align-items: center !important; - gap: 10px !important; - } - - .round-checkbox-label { - font-size: 11pt !important; - color: #666 !important; - font-weight: 500 !important; - } - - .round-checkbox { - width: 24px !important; - height: 24px !important; - border: 2px solid #333 !important; - border-radius: 4px !important; - background: white !important; - display: inline-block !important; - } - - .positions-container { - display: grid !important; - grid-template-columns: repeat(6, 1fr) !important; - gap: 8px !important; - padding: 15px !important; - overflow: visible !important; - } - - .position-card { - border: 1px solid #5a8fd1 !important; - border-radius: 4px !important; - overflow: visible !important; - background: white !important; - box-shadow: none !important; - min-height: 70px !important; - page-break-inside: avoid; - display: flex !important; - flex-direction: row !important; - flex-shrink: 0 !important; - } - - /* All cards in print have same blue color */ .round-row.current .position-card, .round-row.completed .position-card, .round-row.waiting .position-card { border-color: #5a8fd1 !important; } - .position-header { - background: #5a8fd1 !important; - padding: 10px 0 !important; - display: flex !important; - align-items: center !important; - justify-content: center !important; - flex-shrink: 0 !important; - min-width: 40px !important; - width: 40px !important; - min-height: 70px !important; - } - - .position-number { - font-size: 12pt !important; - font-weight: bold !important; - color: white !important; - } - - .position-body { - padding: 6px 10px !important; - display: flex !important; - flex-direction: column !important; - justify-content: center !important; - align-items: center !important; - flex: 1 !important; - background: white !important; - overflow: hidden !important; - } - - .player-name { - font-size: 10pt !important; - font-weight: 600 !important; - color: #2c3e50 !important; - line-height: 1.2 !important; - white-space: nowrap !important; - overflow: hidden !important; - text-overflow: ellipsis !important; - max-width: 100% !important; - } - .round-row.current .position-card .position-header, .round-row.completed .position-card .position-header, .round-row.waiting .position-card .position-header { background: #5a8fd1 !important; } - .position-card.empty .position-header { - background: #9ca3af !important; + .round-header { + padding: 8px 12px !important; + min-width: 90px !important; + } + + .round-title { + font-size: 9pt !important; + } + + .round-badge { + display: none !important; + } + + .positions-container { + gap: 5px !important; + padding: 8px !important; + } + + .position-card { + box-shadow: none !important; + transform: none !important; + transition: none !important; + page-break-inside: avoid !important; + min-height: 48px !important; + overflow: hidden !important; + border-radius: 10px !important; + } + + .position-header { + min-width: 36px !important; + width: 36px !important; } .position-number { - font-size: 14pt !important; - color: white !important; - } - - .position-body { - padding: 10px !important; - background: white !important; - flex: 1 !important; - display: flex !important; - flex-direction: column !important; - justify-content: center !important; - align-items: center !important; - } - - .position-card.empty .position-body { - background: #f8f9fa !important; + font-size: 1.2rem !important; } .player-name { font-size: 10pt !important; - color: #2c3e50 !important; - white-space: normal !important; - overflow: visible !important; } - .position-card.empty .player-name { - color: #6c757d !important; + /* Done checkbox */ + .print-done-check { + display: flex !important; + align-items: center !important; + justify-content: center !important; + padding: 0 14px !important; + flex-shrink: 0 !important; + border-left: 1px solid rgba(0,0,0,0.1) !important; } - .player-id { + .print-done-box { + width: 20px !important; + height: 20px !important; + border: 1.5px solid #555 !important; + border-radius: 4px !important; + display: block !important; + } + + .print-done-label { display: none !important; } @@ -641,68 +567,53 @@ display: none !important; } - /* Print header - show logo in tournament header */ - .print-header { - display: none !important; - } - - .tournament-header .print-logo { - display: block !important; - height: 60px !important; - max-width: 160px !important; - margin: 0 auto 10px auto !important; - } } /* Print-only elements - hidden on screen */ - .print-header, - .round-print-info, - .tournament-header .print-logo { - display: none; + @media screen { + .round-print-info, + .print-logo, + .print-meta, + .print-done-check { + display: none !important; + } } - - -
{% if tournament %}
- - +
🎯 Shooting Tournament
{{ tournament.total_players }} players • {{ tournament.total_rounds }} rounds - {% if tournament.current_round %} - Currently on Round {{ tournament.current_round }} - {% endif %}
- + + {% if tournament.current_round %}
- - Round {{ tournament.current_round }} of {{ tournament.total_rounds }} - + + Round {{ tournament.current_round }} / {{ tournament.total_rounds }} +
{% endif %} + +
@@ -751,6 +662,10 @@
{% endfor %}
+ {% endfor %} @@ -770,6 +685,24 @@ let currentRound = {{ tournament.current_round if tournament else 1 }}; const totalRounds = {{ tournament.total_rounds if tournament else 1 }}; + // TV view toggle — only active when loaded as TV display (?tv=1) + const isTvDisplay = new URLSearchParams(window.location.search).get('tv') === '1'; + if (isTvDisplay) { + const btn = document.getElementById('btnSwitchView'); + if (btn) btn.style.display = ''; + } + + async function switchToView() { + try { + await fetch('/api/tv/view', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ view: 'cameras' }) + }); + window.location.href = '/'; + } catch (e) { console.error(e); } + } + function updateRoundNavigation() { if (tournamentActive) { const prevBtn = document.getElementById('prevRoundBtn'); @@ -822,8 +755,19 @@ } } + // Set print date + const printDateEl = document.getElementById('printDate'); + if (printDateEl) { + const now = new Date(); + printDateEl.textContent = now.toLocaleDateString('sl-SI', { day: '2-digit', month: '2-digit', year: 'numeric' }); + } + // Print function function printDraft() { + document.querySelectorAll('.round-row').forEach(el => { + el.classList.remove('current', 'completed', 'waiting'); + el.classList.add('waiting'); + }); window.print(); } @@ -836,7 +780,7 @@ window.location.reload(); } else if (event.key === 'p' || event.key === 'P') { event.preventDefault(); - window.print(); + printDraft(); } else if (tournamentActive) { if (event.key === 'ArrowLeft') { event.preventDefault(); @@ -856,17 +800,94 @@ setTimeout(() => { const currentRoundRow = document.querySelector('.round-row.current'); if (currentRoundRow) { - currentRoundRow.scrollIntoView({ - behavior: 'smooth', - block: 'center' + currentRoundRow.scrollIntoView({ + behavior: 'smooth', + block: 'start' }); } - }, 500); + }, 300); - console.log('🖥️ PC Tournament Draft (Vertical Rows) loaded'); - console.log('🏆 Tournament active:', tournamentActive); - console.log(`📊 Displaying ${totalRounds} rounds in vertical layout`); + // Poll for state changes + let lastStateHash = null; + setInterval(async () => { + if (document.visibilityState !== 'visible') return; + try { + const response = await fetch('/api/dashboard/state'); + if (!response.ok) return; + const data = await response.json(); + + // If tournament just became inactive, redirect to archive (not reload) + if (!data.tournament_active) { + if (data.archive_filename) { + window.location.href = `/archive/tournament/${data.archive_filename}`; + } else if (data.league_archive_filename) { + window.location.href = `/archive/league/${data.league_archive_filename}`; + } else { + window.location.href = '/results'; + } + return; + } + + // Follow TV view changes when used as TV display + if (isTvDisplay) { + if (data.tv_view === 'cameras') { window.location.href = '/'; return; } + if (data.tv_view === 'results') { + if (data.archive_filename) { + window.location.href = `/archive/tournament/${data.archive_filename}?tv=1`; + } else if (data.league_archive_filename) { + window.location.href = `/archive/league/${data.league_archive_filename}?tv=1`; + } else { + window.location.href = '/results?tv=1'; + } + return; + } + } + + // Reload on round change to keep draft display in sync + const hash = JSON.stringify({ round: data.current_round }); + if (lastStateHash !== null && hash !== lastStateHash) { + window.location.reload(); + } + lastStateHash = hash; + updateTvViewBtn(data.tv_view || 'cameras'); + } catch (e) {} + }, 3000); }); + + // ── TV VIEW TOGGLE ──────────────────────────────────────────────────────── + let currentTvView = 'cameras'; + + function updateTvViewBtn(view) { + currentTvView = view; + const btn = document.getElementById('btnTvView'); + if (!btn) return; + if (view === 'draft') { + btn.textContent = '📺'; + btn.style.background = '#28a745'; + btn.style.color = 'white'; + btn.style.borderColor = '#1e7e34'; + } else { + btn.textContent = '📺'; + btn.style.background = ''; + btn.style.color = ''; + btn.style.borderColor = ''; + } + } + + async function toggleTvView() { + const newView = currentTvView === 'draft' ? 'cameras' : 'draft'; + try { + await fetch('/api/tv/view', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ view: newView }) + }); + updateTvViewBtn(newView); + } catch (e) { console.error(e); } + } + + // Load initial tv_view state + fetch('/api/dashboard/state').then(r => r.json()).then(d => updateTvViewBtn(d.tv_view || 'cameras')).catch(() => {}); \ No newline at end of file diff --git a/templates/index.html b/templates/index.html index d03bae0..2c684db 100644 --- a/templates/index.html +++ b/templates/index.html @@ -655,6 +655,12 @@
+ {% if settings.tournament_active %} +
+
+
+
+ {% endif %}
- 📋 Oglej si Celoten Žreb Turnirja + 📋 Razpored Turnirja 🎯 Calculator ⚙️ Upravljaj Turnir
@@ -693,7 +699,6 @@

Turnirji

🏆 Način Turnirja - 🔗 Combine Leagues 👤 Analiza Igralcev 📚 Arhiv
@@ -809,7 +814,7 @@ const tournamentActive = {{ 'true' if settings.tournament_active else 'false' }}; let currentRound = {{ settings.current_round if settings.tournament_active else 1 }}; const totalRounds = {{ settings.total_rounds if settings.tournament_active else 1 }}; - + // Remote control state const remoteControlled = {{ 'true' if settings.remote_controlled else 'false' }}; let remotePollingInterval = null; @@ -1084,6 +1089,7 @@ } } + // TV view toggle (cameras ↔ draft) // Debounce function function debounce(func, wait) { let timeout; @@ -1479,10 +1485,29 @@ const data = await response.json(); + // If switched to draft view and tournament is active, follow it + if (data.tv_view === 'draft' && data.tournament_active) { + window.location.href = '/tournament/draft?tv=1'; + return; + } + // If switched to results view, follow it (use explicit tv_url first, then fallback) + if (data.tv_view === 'results') { + if (data.tv_url) { + window.location.href = data.tv_url.includes('?') ? data.tv_url + '&tv=1' : data.tv_url + '?tv=1'; + } else if (data.archive_filename) { + window.location.href = `/archive/tournament/${data.archive_filename}?tv=1`; + } else if (data.league_archive_filename) { + window.location.href = `/archive/league/${data.league_archive_filename}?tv=1`; + } else { + window.location.href = '/results?tv=1'; + } + return; + } + // Create a hash of the state to detect changes const stateHash = JSON.stringify(data); - // If state changed, reload the page + // If structural state changed, reload the page if (lastDashboardStateHash !== null && stateHash !== lastDashboardStateHash) { console.log('🔄 Tournament state changed, reloading TV display...'); window.location.reload(); diff --git a/templates/league_combine.html b/templates/league_combine.html index 99e09d0..579773a 100644 --- a/templates/league_combine.html +++ b/templates/league_combine.html @@ -293,7 +293,7 @@
diff --git a/templates/league_scoreboard_display.html b/templates/league_scoreboard_display.html index b473b90..ba87c84 100644 --- a/templates/league_scoreboard_display.html +++ b/templates/league_scoreboard_display.html @@ -842,9 +842,10 @@
@@ -1284,6 +1285,59 @@ window.print(); } }); + + // ── TV VIEW TOGGLE ──────────────────────────────────────────────────────── + const isTvDisplay = new URLSearchParams(window.location.search).get('tv') === '1'; + let currentTvView = 'results'; + + function updateTvViewBtn(view) { + currentTvView = view; + const btn = document.getElementById('btnTvView'); + if (!btn) return; + btn.style.background = (view === 'results') ? '#28a745' : ''; + btn.style.color = (view === 'results') ? 'white' : ''; + btn.style.borderColor = (view === 'results') ? '#1e7e34' : ''; + } + + async function toggleTvView() { + const newView = currentTvView === 'results' ? 'cameras' : 'results'; + try { + const payload = { view: newView }; + if (newView === 'results') { + // Pass the current page path so the TV follows to this league archive, not a tournament archive + payload.tv_url = window.location.pathname; + } + await fetch('/api/tv/view', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(payload) + }); + updateTvViewBtn(newView); + if (isTvDisplay && newView === 'cameras') { + window.location.href = '/'; + } + } catch (e) { console.error(e); } + } + + // Poll to stay in sync and follow back-redirect when in TV mode + setInterval(async () => { + if (document.visibilityState !== 'visible') return; + try { + const r = await fetch('/api/dashboard/state'); + if (!r.ok) return; + const d = await r.json(); + updateTvViewBtn(d.tv_view || 'cameras'); + if (isTvDisplay && d.tv_view !== 'results') { + if (d.tv_view === 'draft' && d.tournament_active) { + window.location.href = '/tournament/draft?tv=1'; + } else { + window.location.href = '/'; + } + } + } catch (e) {} + }, 3000); + + fetch('/api/dashboard/state').then(r => r.json()).then(d => updateTvViewBtn(d.tv_view || 'cameras')).catch(() => {}); \ No newline at end of file diff --git a/templates/modern_archive_index.html b/templates/modern_archive_index.html index 7c282db..fdbc1ec 100644 --- a/templates/modern_archive_index.html +++ b/templates/modern_archive_index.html @@ -458,9 +458,9 @@ diff --git a/templates/modern_player_analysis.html b/templates/modern_player_analysis.html index 2a58604..a0f27af 100644 --- a/templates/modern_player_analysis.html +++ b/templates/modern_player_analysis.html @@ -709,9 +709,9 @@ diff --git a/templates/modern_player_stats.html b/templates/modern_player_stats.html index 7f3f3eb..5fa2dc4 100644 --- a/templates/modern_player_stats.html +++ b/templates/modern_player_stats.html @@ -1143,9 +1143,9 @@ diff --git a/templates/results_calculator.html b/templates/results_calculator.html index bcc6498..86edbfb 100644 --- a/templates/results_calculator.html +++ b/templates/results_calculator.html @@ -2,7 +2,7 @@ - Results Calculator + Kalkulator @@ -45,34 +45,38 @@ overflow: hidden; width: 100%; display: flex; - flex-direction: column; + flex-direction: row; align-items: stretch; - padding: 0 0 70px 0; + padding: 12px 16px; box-sizing: border-box; - gap: 0; + gap: 12px; min-height: 0; } - .scrollable-content { - flex: 1; - overflow: hidden; - width: 100%; + /* Shared card style */ + .calc-card { + background: white; + border-radius: 12px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); display: flex; flex-direction: column; - align-items: stretch; - padding: 5px 20px 20px 20px; - box-sizing: border-box; - gap: 0; + overflow: hidden; min-height: 0; } - /* All direct children of scrollable-content */ - .scrollable-content > *:not(.cards-wrapper) { - width: 100%; - max-width: none; - flex-shrink: 0; - padding: 0; - box-sizing: border-box; + /* Middle column: scoring card + finish card stacked */ + .col-middle { + flex: 1; + display: flex; + flex-direction: column; + gap: 12px; + min-height: 0; + overflow: hidden; + } + + .col-middle .calc-card.scoring-card { + flex: 1; + min-height: 0; } .header-section { @@ -207,36 +211,82 @@ box-shadow: 0 4px 8px rgba(23, 162, 184, 0.3); } - .cards-wrapper { - background: white; - border-radius: 0; - border: 0; - box-shadow: none; - padding: 0; - margin: 0; + .players-search-bar { + padding: 8px 10px; + border-bottom: 1px solid #e9ecef; + flex-shrink: 0; + } + + .players-search-wrap { display: flex; - flex-direction: row; - gap: 0; - width: 100%; - box-sizing: border-box; - flex: 1; + align-items: center; + border: 1px solid #dee2e6; + border-radius: 6px; + background: white; overflow: hidden; - min-height: 0; + transition: border-color 0.15s; + transform: none !important; + } + + .players-search-wrap:hover { + transform: none !important; + box-shadow: none; + } + + .players-search-wrap:focus-within { + border-color: #28a745; + } + + .players-search-input { + flex: 1; + border: none !important; + border-radius: 0 !important; + box-shadow: none !important; + padding: 5px 8px; + font-size: 0.8rem; + background: transparent; + outline: none !important; + min-width: 0; + width: auto; + transform: none !important; + } + + .players-search-clear { + width: 26px; + height: 26px; + border: none; + background: transparent; + cursor: pointer; + font-size: 0.7rem; + color: #adb5bd; + display: none; + align-items: center; + justify-content: center; + flex-shrink: 0; + transition: color 0.15s; + padding: 0; + transform: none !important; + } + + .players-search-clear.visible { + display: flex; + } + + .players-search-clear:hover { + color: #dc3545; + transform: none !important; } .participants-list { display: flex; flex-direction: column; gap: 8px; - width: 280px; - max-width: none; + width: 240px; + flex-shrink: 0; box-sizing: border-box; - padding: 15px; - background: white; - border-right: 2px solid #e9ecef; + padding: 12px; overflow-y: auto; overflow-x: hidden; - flex-shrink: 0; } .participants-list::-webkit-scrollbar { @@ -335,8 +385,8 @@ display: flex; flex-direction: column; overflow: hidden; - padding: 15px; - background: white; + padding: 0; + background: transparent; min-height: 0; gap: 0; } @@ -345,7 +395,7 @@ display: flex; align-items: center; justify-content: center; - height: 100%; + flex: 1; color: #999; font-size: 1.1rem; } @@ -1129,29 +1179,18 @@ background: #e0a800; } - /* Bottom Finish Card - Full Width */ + /* Finish bar - standalone card */ .finish-section { - position: fixed; - bottom: 0; - left: 0; - right: 0; - background: linear-gradient(135deg, #f8f9fa 0%, #f0f1f3 100%); - border-radius: 0; - border: none; - border-top: 3px solid #e9ecef; - box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.1); - padding: 0 20px; - margin: 0; + background: #f8f9fa; + padding: 10px 20px; display: flex; + flex-direction: row; justify-content: center; align-items: center; gap: 15px; - z-index: 999; - height: 70px; - min-height: 70px; - box-sizing: border-box; flex-shrink: 0; width: 100%; + box-sizing: border-box; } .finish-title { @@ -1227,139 +1266,262 @@ 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } + + /* ========== DRAFT PANEL (right) ========== */ + .draft-panel { + width: 240px; + flex-shrink: 0; + display: flex; + flex-direction: column; + overflow: hidden; + } + + .draft-panel-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px 10px; + background: #f8f9fa; + border-bottom: 1px solid #e9ecef; + border-radius: 12px 12px 0 0; + flex-shrink: 0; + gap: 4px; + } + + .draft-round-nav { + background: #f0f1f3; + border: 2px solid #dee2e6; + border-radius: 6px; + cursor: pointer; + width: 28px; + height: 28px; + display: flex; + align-items: center; + justify-content: center; + font-weight: bold; + font-size: 0.9rem; + color: #333; + flex-shrink: 0; + transition: all 0.15s ease; + } + + .draft-round-nav:hover:not(:disabled) { + background: #e9ecef; + border-color: #28a745; + color: #28a745; + } + + .draft-round-nav:disabled { + opacity: 0.35; + cursor: not-allowed; + } + + .draft-round-label { + font-size: 0.78rem; + font-weight: 700; + color: #333; + text-align: center; + flex: 1; + white-space: nowrap; + } + + .draft-positions { + flex: 1; + overflow-y: auto; + padding: 8px; + display: flex; + flex-direction: column; + gap: 6px; + } + + .draft-positions::-webkit-scrollbar { width: 6px; } + .draft-positions::-webkit-scrollbar-track { background: transparent; } + .draft-positions::-webkit-scrollbar-thumb { background: #d1d5db; border-radius: 3px; } + + .draft-position-row { + display: flex; + align-items: center; + gap: 8px; + padding: 7px 9px; + background: white; + border: 2px solid #dee2e6; + border-radius: 8px; + cursor: pointer; + transition: all 0.15s ease; + } + + .draft-position-row:hover { + border-color: #5a8fd1; + background: #f0f5fc; + } + + .draft-position-num { + width: 26px; + height: 26px; + border-radius: 6px; + background: #5a8fd1; + color: white; + font-size: 0.85rem; + font-weight: 700; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + } + + .draft-position-row.empty .draft-position-num { + background: #9ca3af; + } + + .draft-position-name { + font-size: 0.8rem; + font-weight: 600; + color: #2c3e50; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + flex: 1; + min-width: 0; + } + + .draft-position-row.empty .draft-position-name { + color: #adb5bd; + font-style: italic; + font-weight: 400; + } + + .draft-panel-footer { + margin-top: auto; + padding: 12px; + border-top: 1px solid #e9ecef; + display: flex; + justify-content: center; + align-items: center; + } +
-
-
- -
- {% if results and results.tournament_type == '4_targets' %} - 🎯 Tournament Scoring - {% elif results and results.tournament_type == '40_targets' %} - 💪 Tournament Scoring - {% else %} - ⚡ Tournament Scoring - {% endif %} -
-
- {% if results.tournament_type == '40_targets' %} - Enter scores for each participant (40 targets, 2 shots each). Score 0 = miss. - {% elif results.tournament_type == '4_targets' %} - Enter scores for each participant (4 targets, 5 shots each). Score 0 = miss. - {% else %} - Enter scores for each participant (20 targets, 2 shots each). Score 0 = miss. - {% endif %} -
- -
-
-
0
-
Zaključeno
-
-
-
{{ results.participants|length }}
-
Skupaj
-
-
-
0
-
Skupaj Strelov
-
-
-
0
-
Tens
-
-
-
-
- -
- {% for player_id, participant in results.participants.items() %} -
-
- {{ participant.name }} - {{ participant.total_score }} - 0 -
+ +
+ +
+ {% for player_id, participant in results.participants.items() %} +
+
+ {{ participant.name }} + {{ participant.total_score }} + 0 +
+
+ {% endfor %} +
- -
-
- 👈 Select a participant -
- {% for player_id, participant in results.participants.items() %} -
- -
-
-
{{ participant.name }}
-
-
- {{ participant.total_score }} - pts + +
+ + +
+
+
+ 👈 Select a participant +
+ {% for player_id, participant in results.participants.items() %} +
+ +
+
+
{{ participant.name }}
+
+
+ {{ participant.total_score }} + pts +
+
+ 0 + 10s +
+
-
- 0 - 10s +
+ + +
+
+ +
+
+
-
- - -
-
- - -
-
- -
-
+ {% endfor %}
- {% endfor %} -
-
+
-
- - + +
+ + +
+ +
+ + + {% if tournament and tournament.rounds %} +
+
+ + {{ tournament.current_round }} / {{ tournament.total_rounds }} + +
+
+ +
+
-
-
+ {% endif %} + +
+
\ No newline at end of file diff --git a/templates/tournament.html b/templates/tournament.html index c2f38f2..d53da17 100644 --- a/templates/tournament.html +++ b/templates/tournament.html @@ -12,22 +12,50 @@ @@ -1500,14 +1551,12 @@ @@ -1518,7 +1567,7 @@

🏆 Upravljanje Lige

-
+

🏆 Liga (Aktivna)

@@ -1563,11 +1612,50 @@ {% endfor %}
+ + {% if not tournament_state and league_state.current_tournament < league_state.total_tournaments %} +
+ {% if league_state.completed_tournaments|length > 0 %} + + 📊 View Current Standings + + {% endif %} + + +
+ {% endif %}
+ + {% if not tournament_state and league_state.current_tournament < league_state.total_tournaments %} +
+
🃏 Izbira Jokerja za Turnir {{ league_state.current_tournament + 1 }}
+

Izberite igralce, ki bodo uporabili svojega Jokerja (preskočili ta turnir). Vsak igralec lahko uporabi svojega Žolna samo enkrat na ligo.

+ +
+
+ {% for player_id, participant in league_state.participants.items() %} +
+ {{ participant.name }} + +
+ {% endfor %} +
+
+
+ {% endif %} + {% if tournament_state %} -
+

🎯 Trenutni Turnir

Turnir je Aktiven @@ -1602,55 +1690,20 @@ {% endfor %}
+ +
+ +
{% endif %}
- -
- {% if tournament_state %} - {% else %} - {% if league_state.current_tournament < league_state.total_tournaments %} - -
-
🃏 Izbira Jokerja za Turnir {{ league_state.current_tournament + 1 }}
-

Izberite igralce, ki bodo uporabili svojega Jokerja (preskočili ta turnir). Vsak igralec lahko uporabi svojega Žolna samo enkrat na ligo.

- -
- {% for player_id, participant in league_state.participants.items() %} -
- {{ participant.name }} - -
- {% endfor %} -
-
- -
- {% if league_state.completed_tournaments|length > 0 %} - - 📊 View Current Standings - - {% endif %} - - -
- {% else %} -
- League Complete! All tournaments planned. Finish current for final results. -
- {% endif %} - {% endif %} + {% if not tournament_state and league_state.current_tournament >= league_state.total_tournaments %} +
+ League Complete! All tournaments planned. Finish current for final results.
+ {% endif %} {% elif league_state and league_state.league_finished %}

🏁 League Completed

@@ -1691,7 +1744,7 @@ {% elif not league_state and tournament_state %}

🎯 Upravljanje Turnirja

-
+

🎯 Trenutni Turnir

@@ -1748,138 +1801,115 @@
{% else %} -

🏁 Nastavitev

-
Ni Aktivne Lige ali Turnirja
+ +
+ +
+

🏁 Nastavitev

+
Ni Aktivne Lige ali Turnirja
- -
-
Izberi Tip Turnirja
-
-
- -
🎯 4 Targets
-
Hitri format s 4 tarčami, 5 strelov na tarčo (20 strelov skupaj)
+ +
+
Izberi Tip Turnirja
+
+
+ +
+
🎯 4 Targets
+
Hitri format s 4 tarčami, 5 strelov na tarčo (20 strelov skupaj)
+
+
+
+ +
+
⚡ 20 Targets
+
Standardni format z 20 tarčami, 2 strela na tarčo (40 strelov skupaj)
+
+
+
+ +
+
💪 40 Targets
+
Razširjeni format s 40 tarčami, 2 strela na tarčo (80 strelov skupaj)
+
+
+
-
- -
⚡ 20 Targets
-
Standardni format z 20 tarčami, 2 strela na tarčo (40 strelov skupaj)
+ +
+ 0 players enabled
-
- -
💪 40 Targets
-
Razširjeni format s 40 tarčami, 2 strela na tarčo (80 strelov skupaj)
+ +
+ + +
+ +
-
-
- 0 players enabled -
+ +
+

👥 Upravljanje Igralcev

-
- - -
+ +
+ + +
- + +
+
+ + 🔍 +
+ + + +
+ + +
+ + + +
+ 0 + 0 + 0 skupaj +
+
+ + +
+ +
+ + +
+
{% endif %} -
- - - - {% if not league_state and not tournament_state %} -
-

👥 Upravljanje Igralcev

- - -
-

Dodaj Novega Igralca

-
- - -
-
- - -
-
- - 🔍 -
- -
- - - -
- -
- - - -
-
- - -
-
- 0 - Skupaj Igralcev -
-
- 0 - Omogočeni -
-
- 0 - Onemogočeni -
-
- 0 - Vidni -
-
- - -
- - - - - - - - - - - - - -
- - IDImeStatusDejanja
- - -
-
- {% endif %} +
+