quality update:

- calculator
- result screens
- some fixes
This commit is contained in:
2026-02-08 15:19:13 +01:00
parent aa01f4136d
commit d0bbf7bdce
39 changed files with 3323 additions and 69107 deletions
File diff suppressed because it is too large Load Diff
@@ -1,275 +0,0 @@
{
"league": {
"league_id": "league_20251109_144611",
"created_at": "2025-11-09T14:46:11.803719",
"tournament_type": "4_targets",
"total_tournaments": 5,
"current_tournament": 0,
"participants": {
"2": {
"name": "Nik Pleterski",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"4": {
"name": "Mateja Pleterski",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"5": {
"name": "Jo\u017ee Verhnjak",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"6": {
"name": "Mateja Senica",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"10": {
"name": "Mitja \u010ceh",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"11": {
"name": "Rado Kefer",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"12": {
"name": "Matej Kvasnik",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"14": {
"name": "Karli Proje",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"16": {
"name": "Silvo Poro\u010dnik",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"18": {
"name": "Matja\u017e Pleterski",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"20": {
"name": "Jo\u017ee Preglav",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"21": {
"name": "Marko Blimen",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"23": {
"name": "Robi Krautberger",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"24": {
"name": "Jo\u017ee Verdinek",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"30": {
"name": "Maja Hirtl",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"33": {
"name": "Namir Uzunovi\u0107",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"34": {
"name": "Jo\u017ee Planin\u0161ec",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"35": {
"name": "Vanja Kolar",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"36": {
"name": "Klara Wankmuller",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"37": {
"name": "Milan Stramec",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"39": {
"name": "Tia Sudar",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"41": {
"name": "Tadej \u0160truc",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"42": {
"name": "Jure Glaser",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"43": {
"name": "Marko Pokr\u017enik",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"45": {
"name": "Lidija Blimen",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"46": {
"name": "Tijana \u0160tumpfl",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"47": {
"name": "Ljuba Mr\u0161ak",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"48": {
"name": "Janja Salcman",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
},
"49": {
"name": "Jolanda Verhnjak",
"joker_used": false,
"tournament_results": [],
"total_score": 0,
"final_score": 0,
"tournaments_participated": 0,
"excluded_tournament": null
}
},
"completed_tournaments": [],
"league_finished": false
},
"archived_at": "2025-11-09T14:46:18.477787"
}
File diff suppressed because it is too large Load Diff
@@ -1,759 +0,0 @@
{
"tournament": {
"rounds": [
{
"round_number": 1,
"players": [
{
"id": 4,
"name": "Mateja Pleterski",
"enabled": true
},
{
"id": 20,
"name": "Jo\u017ee Preglav",
"enabled": true
},
{
"id": 3,
"name": "Ivan Tandler",
"enabled": true
},
{
"id": 17,
"name": "Du\u0161an Onuk",
"enabled": true
},
{
"id": 9,
"name": "Janez Bo\u017ei\u010d",
"enabled": true
},
{
"id": 44,
"name": "Anka Ka\u010dnik",
"enabled": true
}
],
"status": "pending"
},
{
"round_number": 2,
"players": [
{
"id": 48,
"name": "Janja Salcman",
"enabled": true
},
{
"id": 15,
"name": "Jan Pleterski",
"enabled": true
},
{
"id": 45,
"name": "Lidija Blimen",
"enabled": true
},
{
"id": 21,
"name": "Marko Blimen",
"enabled": true
},
{
"id": 49,
"name": "Jolanda Verhnjak",
"enabled": true
},
{
"id": 11,
"name": "Rado Kefer",
"enabled": true
}
],
"status": "waiting"
},
{
"round_number": 3,
"players": [
{
"id": 12,
"name": "Matej Kvasnik",
"enabled": true
},
{
"id": 47,
"name": "Ljuba Mr\u0161ak",
"enabled": true
},
{
"id": 46,
"name": "Tijana \u0160tumpfl",
"enabled": true
},
{
"id": 1,
"name": "Domen Pleterski",
"enabled": true
},
{
"id": 7,
"name": "Branko Poker\u017enik",
"enabled": true
},
{
"id": 5,
"name": "Jo\u017ee Verhnjak",
"enabled": true
}
],
"status": "waiting"
}
],
"created_at": "2025-08-30T13:09:30.384521",
"total_players": 18,
"total_rounds": 3,
"current_round": 1,
"tournament_type": "4_targets"
},
"results": {
"tournament_id": "2025-08-30T13:09:30.384521",
"tournament_type": "4_targets",
"participants": {
"4": {
"name": "Mateja Pleterski",
"targets": {
"1": {
"shot1": 0,
"shot2": 0,
"shot3": 0,
"shot4": 0,
"shot5": 0
},
"2": {
"shot1": 0,
"shot2": 0,
"shot3": 0,
"shot4": 0,
"shot5": 0
},
"3": {
"shot1": 0,
"shot2": 0,
"shot3": 0,
"shot4": 0,
"shot5": 0
},
"4": {
"shot1": 0,
"shot2": 0,
"shot3": 0,
"shot4": 0,
"shot5": 0
}
},
"total_score": 0,
"completed": true
},
"20": {
"name": "Jo\u017ee Preglav",
"targets": {
"1": {
"shot1": 10,
"shot2": 8,
"shot3": 8,
"shot4": 7,
"shot5": 5
},
"2": {
"shot1": 9,
"shot2": 7,
"shot3": 7,
"shot4": 5,
"shot5": 4
},
"3": {
"shot1": 9,
"shot2": 9,
"shot3": 7,
"shot4": 6,
"shot5": 6
},
"4": {
"shot1": 8,
"shot2": 8,
"shot3": 7,
"shot4": 6,
"shot5": 6
}
},
"total_score": 142,
"completed": true
},
"3": {
"name": "Ivan Tandler",
"targets": {
"1": {
"shot1": 0,
"shot2": 0,
"shot3": 0,
"shot4": 0,
"shot5": 0
},
"2": {
"shot1": 0,
"shot2": 0,
"shot3": 0,
"shot4": 0,
"shot5": 0
},
"3": {
"shot1": 0,
"shot2": 0,
"shot3": 0,
"shot4": 0,
"shot5": 0
},
"4": {
"shot1": 0,
"shot2": 0,
"shot3": 0,
"shot4": 0,
"shot5": 0
}
},
"total_score": 0,
"completed": true
},
"17": {
"name": "Du\u0161an Onuk",
"targets": {
"1": {
"shot1": 10,
"shot2": 9,
"shot3": 9,
"shot4": 9,
"shot5": 9
},
"2": {
"shot1": 10,
"shot2": 10,
"shot3": 9,
"shot4": 8,
"shot5": 7
},
"3": {
"shot1": 10,
"shot2": 9,
"shot3": 9,
"shot4": 9,
"shot5": 9
},
"4": {
"shot1": 10,
"shot2": 9,
"shot3": 9,
"shot4": 8,
"shot5": 8
}
},
"total_score": 180,
"completed": true
},
"9": {
"name": "Janez Bo\u017ei\u010d",
"targets": {
"1": {
"shot1": 10,
"shot2": 10,
"shot3": 9,
"shot4": 9,
"shot5": 9
},
"2": {
"shot1": 10,
"shot2": 9,
"shot3": 8,
"shot4": 8,
"shot5": 7
},
"3": {
"shot1": 10,
"shot2": 10,
"shot3": 10,
"shot4": 9,
"shot5": 7
},
"4": {
"shot1": 10,
"shot2": 10,
"shot3": 10,
"shot4": 8,
"shot5": 6
}
},
"total_score": 179,
"completed": true
},
"44": {
"name": "Anka Ka\u010dnik",
"targets": {
"1": {
"shot1": 10,
"shot2": 9,
"shot3": 6,
"shot4": 4,
"shot5": 3
},
"2": {
"shot1": 9,
"shot2": 7,
"shot3": 6,
"shot4": 3,
"shot5": 2
},
"3": {
"shot1": 7,
"shot2": 4,
"shot3": 4,
"shot4": 2,
"shot5": 1
},
"4": {
"shot1": 7,
"shot2": 6,
"shot3": 5,
"shot4": 4,
"shot5": 3
}
},
"total_score": 102,
"completed": true
},
"48": {
"name": "Janja Salcman",
"targets": {
"1": {
"shot1": 7,
"shot2": 3,
"shot3": 2,
"shot4": 2,
"shot5": 0
},
"2": {
"shot1": 6,
"shot2": 5,
"shot3": 2,
"shot4": 2,
"shot5": 0
},
"3": {
"shot1": 9,
"shot2": 9,
"shot3": 7,
"shot4": 1,
"shot5": 0
},
"4": {
"shot1": 8,
"shot2": 5,
"shot3": 3,
"shot4": 1,
"shot5": 0
}
},
"total_score": 72,
"completed": true
},
"15": {
"name": "Jan Pleterski",
"targets": {
"1": {
"shot1": 10,
"shot2": 10,
"shot3": 9,
"shot4": 6,
"shot5": 6
},
"2": {
"shot1": 10,
"shot2": 10,
"shot3": 9,
"shot4": 8,
"shot5": 8
},
"3": {
"shot1": 10,
"shot2": 9,
"shot3": 9,
"shot4": 8,
"shot5": 6
},
"4": {
"shot1": 10,
"shot2": 9,
"shot3": 6,
"shot4": 5,
"shot5": 3
}
},
"total_score": 161,
"completed": true
},
"45": {
"name": "Lidija Blimen",
"targets": {
"1": {
"shot1": 10,
"shot2": 9,
"shot3": 6,
"shot4": 4,
"shot5": 4
},
"2": {
"shot1": 8,
"shot2": 8,
"shot3": 6,
"shot4": 6,
"shot5": 4
},
"3": {
"shot1": 8,
"shot2": 7,
"shot3": 4,
"shot4": 1,
"shot5": 1
},
"4": {
"shot1": 9,
"shot2": 8,
"shot3": 8,
"shot4": 8,
"shot5": 5
}
},
"total_score": 124,
"completed": true
},
"21": {
"name": "Marko Blimen",
"targets": {
"1": {
"shot1": 10,
"shot2": 9,
"shot3": 9,
"shot4": 8,
"shot5": 7
},
"2": {
"shot1": 10,
"shot2": 9,
"shot3": 9,
"shot4": 7,
"shot5": 7
},
"3": {
"shot1": 9,
"shot2": 8,
"shot3": 8,
"shot4": 7,
"shot5": 6
},
"4": {
"shot1": 10,
"shot2": 10,
"shot3": 9,
"shot4": 8,
"shot5": 7
}
},
"total_score": 167,
"completed": true
},
"49": {
"name": "Jolanda Verhnjak",
"targets": {
"1": {
"shot1": 8,
"shot2": 7,
"shot3": 6,
"shot4": 4,
"shot5": 3
},
"2": {
"shot1": 8,
"shot2": 8,
"shot3": 8,
"shot4": 8,
"shot5": 3
},
"3": {
"shot1": 7,
"shot2": 6,
"shot3": 5,
"shot4": 3,
"shot5": 3
},
"4": {
"shot1": 10,
"shot2": 8,
"shot3": 8,
"shot4": 5,
"shot5": 4
}
},
"total_score": 122,
"completed": true
},
"11": {
"name": "Rado Kefer",
"targets": {
"1": {
"shot1": 10,
"shot2": 9,
"shot3": 9,
"shot4": 8,
"shot5": 7
},
"2": {
"shot1": 10,
"shot2": 9,
"shot3": 9,
"shot4": 8,
"shot5": 8
},
"3": {
"shot1": 10,
"shot2": 9,
"shot3": 9,
"shot4": 8,
"shot5": 8
},
"4": {
"shot1": 9,
"shot2": 9,
"shot3": 9,
"shot4": 8,
"shot5": 8
}
},
"total_score": 174,
"completed": true
},
"12": {
"name": "Matej Kvasnik",
"targets": {
"1": {
"shot1": 9,
"shot2": 8,
"shot3": 8,
"shot4": 8,
"shot5": 6
},
"2": {
"shot1": 9,
"shot2": 9,
"shot3": 8,
"shot4": 6,
"shot5": 4
},
"3": {
"shot1": 10,
"shot2": 8,
"shot3": 6,
"shot4": 5,
"shot5": 6
},
"4": {
"shot1": 8,
"shot2": 8,
"shot3": 8,
"shot4": 7,
"shot5": 3
}
},
"total_score": 144,
"completed": true
},
"47": {
"name": "Ljuba Mr\u0161ak",
"targets": {
"1": {
"shot1": 0,
"shot2": 0,
"shot3": 0,
"shot4": 0,
"shot5": 0
},
"2": {
"shot1": 0,
"shot2": 0,
"shot3": 0,
"shot4": 0,
"shot5": 0
},
"3": {
"shot1": 0,
"shot2": 0,
"shot3": 0,
"shot4": 0,
"shot5": 0
},
"4": {
"shot1": 0,
"shot2": 0,
"shot3": 0,
"shot4": 0,
"shot5": 0
}
},
"total_score": 0,
"completed": true
},
"46": {
"name": "Tijana \u0160tumpfl",
"targets": {
"1": {
"shot1": 10,
"shot2": 10,
"shot3": 10,
"shot4": 1,
"shot5": 1
},
"2": {
"shot1": 5,
"shot2": 4,
"shot3": 2,
"shot4": 0,
"shot5": 0
},
"3": {
"shot1": 7,
"shot2": 7,
"shot3": 2,
"shot4": 1,
"shot5": 0
},
"4": {
"shot1": 5,
"shot2": 3,
"shot3": 2,
"shot4": 1,
"shot5": 0
}
},
"total_score": 71,
"completed": true
},
"1": {
"name": "Domen Pleterski",
"targets": {
"1": {
"shot1": 10,
"shot2": 10,
"shot3": 8,
"shot4": 8,
"shot5": 8
},
"2": {
"shot1": 9,
"shot2": 9,
"shot3": 9,
"shot4": 9,
"shot5": 7
},
"3": {
"shot1": 10,
"shot2": 10,
"shot3": 9,
"shot4": 9,
"shot5": 8
},
"4": {
"shot1": 10,
"shot2": 10,
"shot3": 10,
"shot4": 9,
"shot5": 8
}
},
"total_score": 180,
"completed": true
},
"7": {
"name": "Branko Poker\u017enik",
"targets": {
"1": {
"shot1": 9,
"shot2": 9,
"shot3": 9,
"shot4": 8,
"shot5": 7
},
"2": {
"shot1": 10,
"shot2": 10,
"shot3": 9,
"shot4": 8,
"shot5": 7
},
"3": {
"shot1": 10,
"shot2": 10,
"shot3": 9,
"shot4": 8,
"shot5": 8
},
"4": {
"shot1": 9,
"shot2": 9,
"shot3": 9,
"shot4": 8,
"shot5": 6
}
},
"total_score": 172,
"completed": true
},
"5": {
"name": "Jo\u017ee Verhnjak",
"targets": {
"1": {
"shot1": 10,
"shot2": 9,
"shot3": 8,
"shot4": 8,
"shot5": 5
},
"2": {
"shot1": 9,
"shot2": 8,
"shot3": 8,
"shot4": 6,
"shot5": 4
},
"3": {
"shot1": 10,
"shot2": 9,
"shot3": 8,
"shot4": 8,
"shot5": 7
},
"4": {
"shot1": 8,
"shot2": 9,
"shot3": 7,
"shot4": 6,
"shot5": 8
}
},
"total_score": 155,
"completed": true
}
},
"tournament_finished": true,
"created_at": "2025-08-30T13:09:30.386527",
"finished_at": "2025-08-30T15:33:42.405404"
},
"archived_at": "2025-08-30T15:33:42.405434"
}
@@ -1,759 +0,0 @@
{
"tournament": {
"rounds": [
{
"round_number": 1,
"players": [
{
"id": 4,
"name": "Mateja Pleterski",
"enabled": true
},
{
"id": 21,
"name": "Marko Blimen",
"enabled": true
},
{
"id": 3,
"name": "Ivan Tandler",
"enabled": true
},
{
"id": 7,
"name": "Branko Poker\u017enik",
"enabled": true
},
{
"id": 46,
"name": "Tijana \u0160tumpfl",
"enabled": true
},
{
"id": 9,
"name": "Janez Bo\u017ei\u010d",
"enabled": true
}
],
"status": "pending"
},
{
"round_number": 2,
"players": [
{
"id": 48,
"name": "Janja Salcman",
"enabled": true
},
{
"id": 45,
"name": "Lidija Blimen",
"enabled": true
},
{
"id": 20,
"name": "Jo\u017ee Preglav",
"enabled": true
},
{
"id": 11,
"name": "Rado Kefer",
"enabled": true
},
{
"id": 17,
"name": "Du\u0161an Onuk",
"enabled": true
},
{
"id": 15,
"name": "Jan Pleterski",
"enabled": true
}
],
"status": "waiting"
},
{
"round_number": 3,
"players": [
{
"id": 5,
"name": "Jo\u017ee Verhnjak",
"enabled": true
},
{
"id": 1,
"name": "Domen Pleterski",
"enabled": true
},
{
"id": 44,
"name": "Anka Ka\u010dnik",
"enabled": true
},
{
"id": 47,
"name": "Ljuba Mr\u0161ak",
"enabled": true
},
{
"id": 12,
"name": "Matej Kvasnik",
"enabled": true
},
{
"id": 49,
"name": "Jolanda Verhnjak",
"enabled": true
}
],
"status": "waiting"
}
],
"created_at": "2025-09-08T19:19:14.422360",
"total_players": 18,
"total_rounds": 3,
"current_round": 1,
"tournament_type": "4_targets"
},
"results": {
"tournament_id": "2025-09-08T19:19:14.422360",
"tournament_type": "4_targets",
"participants": {
"4": {
"name": "Mateja Pleterski",
"targets": {
"1": {
"shot1": 10,
"shot2": 9,
"shot3": 2,
"shot4": 10,
"shot5": 4
},
"2": {
"shot1": 8,
"shot2": 9,
"shot3": 8,
"shot4": 3,
"shot5": 7
},
"3": {
"shot1": 4,
"shot2": 2,
"shot3": 6,
"shot4": 0,
"shot5": 10
},
"4": {
"shot1": 7,
"shot2": 9,
"shot3": 10,
"shot4": 5,
"shot5": 6
}
},
"total_score": 129,
"completed": true
},
"21": {
"name": "Marko Blimen",
"targets": {
"1": {
"shot1": 9,
"shot2": 1,
"shot3": 8,
"shot4": 10,
"shot5": 4
},
"2": {
"shot1": 2,
"shot2": 4,
"shot3": 7,
"shot4": 7,
"shot5": 1
},
"3": {
"shot1": 0,
"shot2": 10,
"shot3": 1,
"shot4": 8,
"shot5": 9
},
"4": {
"shot1": 1,
"shot2": 8,
"shot3": 4,
"shot4": 7,
"shot5": 10
}
},
"total_score": 111,
"completed": true
},
"3": {
"name": "Ivan Tandler",
"targets": {
"1": {
"shot1": 2,
"shot2": 0,
"shot3": 9,
"shot4": 10,
"shot5": 2
},
"2": {
"shot1": 2,
"shot2": 0,
"shot3": 6,
"shot4": 10,
"shot5": 4
},
"3": {
"shot1": 0,
"shot2": 8,
"shot3": 2,
"shot4": 7,
"shot5": 4
},
"4": {
"shot1": 10,
"shot2": 1,
"shot3": 6,
"shot4": 7,
"shot5": 7
}
},
"total_score": 97,
"completed": true
},
"7": {
"name": "Branko Poker\u017enik",
"targets": {
"1": {
"shot1": 5,
"shot2": 9,
"shot3": 1,
"shot4": 9,
"shot5": 10
},
"2": {
"shot1": 2,
"shot2": 9,
"shot3": 10,
"shot4": 10,
"shot5": 7
},
"3": {
"shot1": 10,
"shot2": 1,
"shot3": 7,
"shot4": 4,
"shot5": 8
},
"4": {
"shot1": 2,
"shot2": 0,
"shot3": 10,
"shot4": 5,
"shot5": 0
}
},
"total_score": 119,
"completed": true
},
"46": {
"name": "Tijana \u0160tumpfl",
"targets": {
"1": {
"shot1": 6,
"shot2": 9,
"shot3": 4,
"shot4": 6,
"shot5": 1
},
"2": {
"shot1": 7,
"shot2": 8,
"shot3": 6,
"shot4": 5,
"shot5": 3
},
"3": {
"shot1": 10,
"shot2": 0,
"shot3": 6,
"shot4": 6,
"shot5": 8
},
"4": {
"shot1": 10,
"shot2": 4,
"shot3": 0,
"shot4": 1,
"shot5": 10
}
},
"total_score": 110,
"completed": true
},
"9": {
"name": "Janez Bo\u017ei\u010d",
"targets": {
"1": {
"shot1": 5,
"shot2": 10,
"shot3": 8,
"shot4": 5,
"shot5": 5
},
"2": {
"shot1": 8,
"shot2": 9,
"shot3": 10,
"shot4": 7,
"shot5": 10
},
"3": {
"shot1": 7,
"shot2": 5,
"shot3": 10,
"shot4": 4,
"shot5": 9
},
"4": {
"shot1": 8,
"shot2": 1,
"shot3": 6,
"shot4": 2,
"shot5": 5
}
},
"total_score": 134,
"completed": true
},
"48": {
"name": "Janja Salcman",
"targets": {
"1": {
"shot1": 10,
"shot2": 6,
"shot3": 4,
"shot4": 3,
"shot5": 9
},
"2": {
"shot1": 10,
"shot2": 5,
"shot3": 1,
"shot4": 1,
"shot5": 10
},
"3": {
"shot1": 9,
"shot2": 4,
"shot3": 0,
"shot4": 8,
"shot5": 9
},
"4": {
"shot1": 0,
"shot2": 1,
"shot3": 2,
"shot4": 0,
"shot5": 9
}
},
"total_score": 101,
"completed": true
},
"45": {
"name": "Lidija Blimen",
"targets": {
"1": {
"shot1": 2,
"shot2": 4,
"shot3": 1,
"shot4": 2,
"shot5": 6
},
"2": {
"shot1": 7,
"shot2": 0,
"shot3": 1,
"shot4": 2,
"shot5": 4
},
"3": {
"shot1": 4,
"shot2": 10,
"shot3": 2,
"shot4": 0,
"shot5": 7
},
"4": {
"shot1": 5,
"shot2": 7,
"shot3": 4,
"shot4": 7,
"shot5": 4
}
},
"total_score": 79,
"completed": true
},
"20": {
"name": "Jo\u017ee Preglav",
"targets": {
"1": {
"shot1": 7,
"shot2": 6,
"shot3": 7,
"shot4": 2,
"shot5": 4
},
"2": {
"shot1": 9,
"shot2": 4,
"shot3": 2,
"shot4": 0,
"shot5": 8
},
"3": {
"shot1": 5,
"shot2": 3,
"shot3": 8,
"shot4": 3,
"shot5": 4
},
"4": {
"shot1": 3,
"shot2": 10,
"shot3": 2,
"shot4": 9,
"shot5": 5
}
},
"total_score": 101,
"completed": true
},
"11": {
"name": "Rado Kefer",
"targets": {
"1": {
"shot1": 8,
"shot2": 10,
"shot3": 7,
"shot4": 10,
"shot5": 7
},
"2": {
"shot1": 10,
"shot2": 6,
"shot3": 0,
"shot4": 7,
"shot5": 4
},
"3": {
"shot1": 1,
"shot2": 6,
"shot3": 8,
"shot4": 9,
"shot5": 1
},
"4": {
"shot1": 0,
"shot2": 1,
"shot3": 0,
"shot4": 6,
"shot5": 9
}
},
"total_score": 110,
"completed": true
},
"17": {
"name": "Du\u0161an Onuk",
"targets": {
"1": {
"shot1": 0,
"shot2": 7,
"shot3": 0,
"shot4": 2,
"shot5": 2
},
"2": {
"shot1": 5,
"shot2": 1,
"shot3": 6,
"shot4": 4,
"shot5": 7
},
"3": {
"shot1": 7,
"shot2": 7,
"shot3": 0,
"shot4": 6,
"shot5": 3
},
"4": {
"shot1": 6,
"shot2": 4,
"shot3": 8,
"shot4": 9,
"shot5": 5
}
},
"total_score": 89,
"completed": true
},
"15": {
"name": "Jan Pleterski",
"targets": {
"1": {
"shot1": 1,
"shot2": 10,
"shot3": 8,
"shot4": 9,
"shot5": 8
},
"2": {
"shot1": 7,
"shot2": 2,
"shot3": 5,
"shot4": 4,
"shot5": 5
},
"3": {
"shot1": 10,
"shot2": 6,
"shot3": 1,
"shot4": 9,
"shot5": 10
},
"4": {
"shot1": 6,
"shot2": 2,
"shot3": 1,
"shot4": 2,
"shot5": 1
}
},
"total_score": 107,
"completed": true
},
"5": {
"name": "Jo\u017ee Verhnjak",
"targets": {
"1": {
"shot1": 1,
"shot2": 10,
"shot3": 10,
"shot4": 9,
"shot5": 1
},
"2": {
"shot1": 0,
"shot2": 10,
"shot3": 5,
"shot4": 10,
"shot5": 3
},
"3": {
"shot1": 8,
"shot2": 7,
"shot3": 4,
"shot4": 0,
"shot5": 4
},
"4": {
"shot1": 6,
"shot2": 1,
"shot3": 1,
"shot4": 9,
"shot5": 8
}
},
"total_score": 107,
"completed": true
},
"1": {
"name": "Domen Pleterski",
"targets": {
"1": {
"shot1": 0,
"shot2": 5,
"shot3": 10,
"shot4": 9,
"shot5": 6
},
"2": {
"shot1": 4,
"shot2": 9,
"shot3": 8,
"shot4": 6,
"shot5": 2
},
"3": {
"shot1": 7,
"shot2": 3,
"shot3": 7,
"shot4": 2,
"shot5": 0
},
"4": {
"shot1": 2,
"shot2": 4,
"shot3": 4,
"shot4": 5,
"shot5": 2
}
},
"total_score": 95,
"completed": true
},
"44": {
"name": "Anka Ka\u010dnik",
"targets": {
"1": {
"shot1": 1,
"shot2": 4,
"shot3": 10,
"shot4": 5,
"shot5": 9
},
"2": {
"shot1": 4,
"shot2": 5,
"shot3": 10,
"shot4": 3,
"shot5": 2
},
"3": {
"shot1": 6,
"shot2": 3,
"shot3": 7,
"shot4": 3,
"shot5": 5
},
"4": {
"shot1": 5,
"shot2": 10,
"shot3": 8,
"shot4": 10,
"shot5": 8
}
},
"total_score": 118,
"completed": true
},
"47": {
"name": "Ljuba Mr\u0161ak",
"targets": {
"1": {
"shot1": 5,
"shot2": 9,
"shot3": 6,
"shot4": 7,
"shot5": 0
},
"2": {
"shot1": 0,
"shot2": 4,
"shot3": 0,
"shot4": 2,
"shot5": 8
},
"3": {
"shot1": 2,
"shot2": 0,
"shot3": 6,
"shot4": 5,
"shot5": 7
},
"4": {
"shot1": 9,
"shot2": 1,
"shot3": 2,
"shot4": 0,
"shot5": 9
}
},
"total_score": 82,
"completed": true
},
"12": {
"name": "Matej Kvasnik",
"targets": {
"1": {
"shot1": 2,
"shot2": 7,
"shot3": 1,
"shot4": 0,
"shot5": 5
},
"2": {
"shot1": 10,
"shot2": 0,
"shot3": 3,
"shot4": 3,
"shot5": 6
},
"3": {
"shot1": 7,
"shot2": 2,
"shot3": 6,
"shot4": 5,
"shot5": 0
},
"4": {
"shot1": 10,
"shot2": 8,
"shot3": 8,
"shot4": 8,
"shot5": 9
}
},
"total_score": 100,
"completed": true
},
"49": {
"name": "Jolanda Verhnjak",
"targets": {
"1": {
"shot1": 5,
"shot2": 2,
"shot3": 0,
"shot4": 3,
"shot5": 2
},
"2": {
"shot1": 8,
"shot2": 0,
"shot3": 10,
"shot4": 5,
"shot5": 4
},
"3": {
"shot1": 2,
"shot2": 9,
"shot3": 4,
"shot4": 9,
"shot5": 2
},
"4": {
"shot1": 2,
"shot2": 9,
"shot3": 0,
"shot4": 4,
"shot5": 10
}
},
"total_score": 90,
"completed": true
}
},
"tournament_finished": true,
"created_at": "2025-09-08T19:19:14.422540",
"finished_at": "2025-09-08T19:19:26.929175"
},
"archived_at": "2025-09-08T19:19:26.929203"
}
@@ -1,759 +0,0 @@
{
"tournament": {
"rounds": [
{
"round_number": 1,
"players": [
{
"id": 9,
"name": "Janez Bo\u017ei\u010d",
"enabled": true
},
{
"id": 48,
"name": "Janja Salcman",
"enabled": true
},
{
"id": 4,
"name": "Mateja Pleterski",
"enabled": true
},
{
"id": 21,
"name": "Marko Blimen",
"enabled": true
},
{
"id": 45,
"name": "Lidija Blimen",
"enabled": true
},
{
"id": 1,
"name": "Domen Pleterski",
"enabled": true
}
],
"status": "pending"
},
{
"round_number": 2,
"players": [
{
"id": 44,
"name": "Anka Ka\u010dnik",
"enabled": true
},
{
"id": 12,
"name": "Matej Kvasnik",
"enabled": true
},
{
"id": 5,
"name": "Jo\u017ee Verhnjak",
"enabled": true
},
{
"id": 47,
"name": "Ljuba Mr\u0161ak",
"enabled": true
},
{
"id": 46,
"name": "Tijana \u0160tumpfl",
"enabled": true
},
{
"id": 49,
"name": "Jolanda Verhnjak",
"enabled": true
}
],
"status": "waiting"
},
{
"round_number": 3,
"players": [
{
"id": 17,
"name": "Du\u0161an Onuk",
"enabled": true
},
{
"id": 15,
"name": "Jan Pleterski",
"enabled": true
},
{
"id": 7,
"name": "Branko Poker\u017enik",
"enabled": true
},
{
"id": 20,
"name": "Jo\u017ee Preglav",
"enabled": true
},
{
"id": 11,
"name": "Rado Kefer",
"enabled": true
},
{
"id": 3,
"name": "Ivan Tandler",
"enabled": true
}
],
"status": "waiting"
}
],
"created_at": "2025-09-08T19:23:24.597390",
"total_players": 18,
"total_rounds": 3,
"current_round": 1,
"tournament_type": "4_targets"
},
"results": {
"tournament_id": "2025-09-08T19:23:24.597390",
"tournament_type": "4_targets",
"participants": {
"9": {
"name": "Janez Bo\u017ei\u010d",
"targets": {
"1": {
"shot1": 9,
"shot2": 2,
"shot3": 4,
"shot4": 6,
"shot5": 1
},
"2": {
"shot1": 1,
"shot2": 4,
"shot3": 4,
"shot4": 3,
"shot5": 4
},
"3": {
"shot1": 5,
"shot2": 4,
"shot3": 3,
"shot4": 3,
"shot5": 2
},
"4": {
"shot1": 3,
"shot2": 7,
"shot3": 2,
"shot4": 0,
"shot5": 0
}
},
"total_score": 67,
"completed": true
},
"48": {
"name": "Janja Salcman",
"targets": {
"1": {
"shot1": 6,
"shot2": 10,
"shot3": 0,
"shot4": 6,
"shot5": 5
},
"2": {
"shot1": 0,
"shot2": 9,
"shot3": 5,
"shot4": 4,
"shot5": 7
},
"3": {
"shot1": 8,
"shot2": 2,
"shot3": 8,
"shot4": 0,
"shot5": 1
},
"4": {
"shot1": 1,
"shot2": 4,
"shot3": 3,
"shot4": 5,
"shot5": 1
}
},
"total_score": 85,
"completed": true
},
"4": {
"name": "Mateja Pleterski",
"targets": {
"1": {
"shot1": 6,
"shot2": 10,
"shot3": 1,
"shot4": 1,
"shot5": 3
},
"2": {
"shot1": 3,
"shot2": 4,
"shot3": 6,
"shot4": 2,
"shot5": 10
},
"3": {
"shot1": 1,
"shot2": 10,
"shot3": 8,
"shot4": 5,
"shot5": 5
},
"4": {
"shot1": 9,
"shot2": 4,
"shot3": 9,
"shot4": 6,
"shot5": 3
}
},
"total_score": 106,
"completed": true
},
"21": {
"name": "Marko Blimen",
"targets": {
"1": {
"shot1": 3,
"shot2": 2,
"shot3": 3,
"shot4": 3,
"shot5": 3
},
"2": {
"shot1": 0,
"shot2": 6,
"shot3": 7,
"shot4": 0,
"shot5": 7
},
"3": {
"shot1": 3,
"shot2": 8,
"shot3": 1,
"shot4": 7,
"shot5": 6
},
"4": {
"shot1": 3,
"shot2": 4,
"shot3": 3,
"shot4": 8,
"shot5": 1
}
},
"total_score": 78,
"completed": true
},
"45": {
"name": "Lidija Blimen",
"targets": {
"1": {
"shot1": 8,
"shot2": 3,
"shot3": 8,
"shot4": 7,
"shot5": 7
},
"2": {
"shot1": 3,
"shot2": 0,
"shot3": 5,
"shot4": 7,
"shot5": 4
},
"3": {
"shot1": 7,
"shot2": 8,
"shot3": 0,
"shot4": 7,
"shot5": 3
},
"4": {
"shot1": 2,
"shot2": 10,
"shot3": 2,
"shot4": 9,
"shot5": 0
}
},
"total_score": 100,
"completed": true
},
"1": {
"name": "Domen Pleterski",
"targets": {
"1": {
"shot1": 9,
"shot2": 1,
"shot3": 3,
"shot4": 2,
"shot5": 4
},
"2": {
"shot1": 8,
"shot2": 4,
"shot3": 10,
"shot4": 9,
"shot5": 0
},
"3": {
"shot1": 7,
"shot2": 3,
"shot3": 2,
"shot4": 5,
"shot5": 6
},
"4": {
"shot1": 6,
"shot2": 6,
"shot3": 6,
"shot4": 3,
"shot5": 10
}
},
"total_score": 104,
"completed": true
},
"44": {
"name": "Anka Ka\u010dnik",
"targets": {
"1": {
"shot1": 6,
"shot2": 8,
"shot3": 6,
"shot4": 9,
"shot5": 2
},
"2": {
"shot1": 9,
"shot2": 0,
"shot3": 9,
"shot4": 2,
"shot5": 8
},
"3": {
"shot1": 5,
"shot2": 0,
"shot3": 4,
"shot4": 10,
"shot5": 3
},
"4": {
"shot1": 5,
"shot2": 4,
"shot3": 2,
"shot4": 7,
"shot5": 0
}
},
"total_score": 99,
"completed": true
},
"12": {
"name": "Matej Kvasnik",
"targets": {
"1": {
"shot1": 9,
"shot2": 1,
"shot3": 7,
"shot4": 9,
"shot5": 6
},
"2": {
"shot1": 10,
"shot2": 3,
"shot3": 2,
"shot4": 9,
"shot5": 2
},
"3": {
"shot1": 0,
"shot2": 9,
"shot3": 9,
"shot4": 3,
"shot5": 6
},
"4": {
"shot1": 4,
"shot2": 10,
"shot3": 6,
"shot4": 5,
"shot5": 2
}
},
"total_score": 112,
"completed": true
},
"5": {
"name": "Jo\u017ee Verhnjak",
"targets": {
"1": {
"shot1": 4,
"shot2": 9,
"shot3": 2,
"shot4": 4,
"shot5": 4
},
"2": {
"shot1": 3,
"shot2": 9,
"shot3": 4,
"shot4": 3,
"shot5": 1
},
"3": {
"shot1": 10,
"shot2": 7,
"shot3": 9,
"shot4": 0,
"shot5": 3
},
"4": {
"shot1": 10,
"shot2": 0,
"shot3": 8,
"shot4": 6,
"shot5": 10
}
},
"total_score": 106,
"completed": true
},
"47": {
"name": "Ljuba Mr\u0161ak",
"targets": {
"1": {
"shot1": 7,
"shot2": 10,
"shot3": 4,
"shot4": 2,
"shot5": 9
},
"2": {
"shot1": 1,
"shot2": 9,
"shot3": 2,
"shot4": 7,
"shot5": 0
},
"3": {
"shot1": 9,
"shot2": 8,
"shot3": 6,
"shot4": 5,
"shot5": 7
},
"4": {
"shot1": 9,
"shot2": 9,
"shot3": 10,
"shot4": 0,
"shot5": 2
}
},
"total_score": 116,
"completed": true
},
"46": {
"name": "Tijana \u0160tumpfl",
"targets": {
"1": {
"shot1": 10,
"shot2": 6,
"shot3": 9,
"shot4": 9,
"shot5": 7
},
"2": {
"shot1": 0,
"shot2": 6,
"shot3": 7,
"shot4": 6,
"shot5": 10
},
"3": {
"shot1": 3,
"shot2": 8,
"shot3": 6,
"shot4": 5,
"shot5": 5
},
"4": {
"shot1": 1,
"shot2": 2,
"shot3": 9,
"shot4": 8,
"shot5": 8
}
},
"total_score": 125,
"completed": true
},
"49": {
"name": "Jolanda Verhnjak",
"targets": {
"1": {
"shot1": 8,
"shot2": 0,
"shot3": 9,
"shot4": 6,
"shot5": 7
},
"2": {
"shot1": 4,
"shot2": 4,
"shot3": 6,
"shot4": 4,
"shot5": 8
},
"3": {
"shot1": 0,
"shot2": 9,
"shot3": 3,
"shot4": 4,
"shot5": 5
},
"4": {
"shot1": 2,
"shot2": 2,
"shot3": 0,
"shot4": 0,
"shot5": 0
}
},
"total_score": 81,
"completed": true
},
"17": {
"name": "Du\u0161an Onuk",
"targets": {
"1": {
"shot1": 3,
"shot2": 6,
"shot3": 5,
"shot4": 5,
"shot5": 6
},
"2": {
"shot1": 2,
"shot2": 4,
"shot3": 2,
"shot4": 8,
"shot5": 8
},
"3": {
"shot1": 3,
"shot2": 8,
"shot3": 5,
"shot4": 8,
"shot5": 1
},
"4": {
"shot1": 6,
"shot2": 5,
"shot3": 3,
"shot4": 1,
"shot5": 6
}
},
"total_score": 95,
"completed": true
},
"15": {
"name": "Jan Pleterski",
"targets": {
"1": {
"shot1": 9,
"shot2": 1,
"shot3": 7,
"shot4": 7,
"shot5": 6
},
"2": {
"shot1": 7,
"shot2": 2,
"shot3": 1,
"shot4": 10,
"shot5": 10
},
"3": {
"shot1": 9,
"shot2": 0,
"shot3": 3,
"shot4": 9,
"shot5": 10
},
"4": {
"shot1": 2,
"shot2": 2,
"shot3": 8,
"shot4": 4,
"shot5": 3
}
},
"total_score": 110,
"completed": true
},
"7": {
"name": "Branko Poker\u017enik",
"targets": {
"1": {
"shot1": 6,
"shot2": 1,
"shot3": 8,
"shot4": 9,
"shot5": 1
},
"2": {
"shot1": 6,
"shot2": 3,
"shot3": 10,
"shot4": 6,
"shot5": 0
},
"3": {
"shot1": 8,
"shot2": 6,
"shot3": 8,
"shot4": 0,
"shot5": 6
},
"4": {
"shot1": 2,
"shot2": 0,
"shot3": 10,
"shot4": 5,
"shot5": 6
}
},
"total_score": 101,
"completed": true
},
"20": {
"name": "Jo\u017ee Preglav",
"targets": {
"1": {
"shot1": 4,
"shot2": 1,
"shot3": 9,
"shot4": 2,
"shot5": 1
},
"2": {
"shot1": 0,
"shot2": 8,
"shot3": 0,
"shot4": 6,
"shot5": 5
},
"3": {
"shot1": 5,
"shot2": 7,
"shot3": 3,
"shot4": 1,
"shot5": 9
},
"4": {
"shot1": 4,
"shot2": 7,
"shot3": 3,
"shot4": 1,
"shot5": 1
}
},
"total_score": 77,
"completed": true
},
"11": {
"name": "Rado Kefer",
"targets": {
"1": {
"shot1": 1,
"shot2": 9,
"shot3": 7,
"shot4": 3,
"shot5": 10
},
"2": {
"shot1": 1,
"shot2": 2,
"shot3": 0,
"shot4": 2,
"shot5": 4
},
"3": {
"shot1": 1,
"shot2": 8,
"shot3": 10,
"shot4": 0,
"shot5": 0
},
"4": {
"shot1": 10,
"shot2": 2,
"shot3": 9,
"shot4": 1,
"shot5": 1
}
},
"total_score": 81,
"completed": true
},
"3": {
"name": "Ivan Tandler",
"targets": {
"1": {
"shot1": 5,
"shot2": 0,
"shot3": 9,
"shot4": 5,
"shot5": 7
},
"2": {
"shot1": 6,
"shot2": 0,
"shot3": 0,
"shot4": 1,
"shot5": 0
},
"3": {
"shot1": 4,
"shot2": 9,
"shot3": 5,
"shot4": 7,
"shot5": 3
},
"4": {
"shot1": 0,
"shot2": 5,
"shot3": 8,
"shot4": 5,
"shot5": 4
}
},
"total_score": 83,
"completed": true
}
},
"tournament_finished": true,
"created_at": "2025-09-08T19:23:24.597575",
"finished_at": "2025-09-08T19:23:34.271264"
},
"archived_at": "2025-09-08T19:23:34.271291"
}
@@ -1,759 +0,0 @@
{
"tournament": {
"rounds": [
{
"round_number": 1,
"players": [
{
"id": 44,
"name": "Anka Ka\u010dnik",
"enabled": true
},
{
"id": 9,
"name": "Janez Bo\u017ei\u010d",
"enabled": true
},
{
"id": 7,
"name": "Branko Poker\u017enik",
"enabled": true
},
{
"id": 1,
"name": "Domen Pleterski",
"enabled": true
},
{
"id": 21,
"name": "Marko Blimen",
"enabled": true
},
{
"id": 12,
"name": "Matej Kvasnik",
"enabled": true
}
],
"status": "pending"
},
{
"round_number": 2,
"players": [
{
"id": 48,
"name": "Janja Salcman",
"enabled": true
},
{
"id": 5,
"name": "Jo\u017ee Verhnjak",
"enabled": true
},
{
"id": 4,
"name": "Mateja Pleterski",
"enabled": true
},
{
"id": 20,
"name": "Jo\u017ee Preglav",
"enabled": true
},
{
"id": 15,
"name": "Jan Pleterski",
"enabled": true
},
{
"id": 17,
"name": "Du\u0161an Onuk",
"enabled": true
}
],
"status": "waiting"
},
{
"round_number": 3,
"players": [
{
"id": 46,
"name": "Tijana \u0160tumpfl",
"enabled": true
},
{
"id": 49,
"name": "Jolanda Verhnjak",
"enabled": true
},
{
"id": 3,
"name": "Ivan Tandler",
"enabled": true
},
{
"id": 11,
"name": "Rado Kefer",
"enabled": true
},
{
"id": 45,
"name": "Lidija Blimen",
"enabled": true
},
{
"id": 47,
"name": "Ljuba Mr\u0161ak",
"enabled": true
}
],
"status": "waiting"
}
],
"created_at": "2025-09-08T19:26:24.708355",
"total_players": 18,
"total_rounds": 3,
"current_round": 1,
"tournament_type": "4_targets"
},
"results": {
"tournament_id": "2025-09-08T19:26:24.708355",
"tournament_type": "4_targets",
"participants": {
"44": {
"name": "Anka Ka\u010dnik",
"targets": {
"1": {
"shot1": 8,
"shot2": 4,
"shot3": 0,
"shot4": 7,
"shot5": 4
},
"2": {
"shot1": 2,
"shot2": 7,
"shot3": 5,
"shot4": 0,
"shot5": 0
},
"3": {
"shot1": 0,
"shot2": 7,
"shot3": 8,
"shot4": 9,
"shot5": 7
},
"4": {
"shot1": 9,
"shot2": 6,
"shot3": 2,
"shot4": 4,
"shot5": 9
}
},
"total_score": 98,
"completed": true
},
"9": {
"name": "Janez Bo\u017ei\u010d",
"targets": {
"1": {
"shot1": 7,
"shot2": 7,
"shot3": 10,
"shot4": 4,
"shot5": 1
},
"2": {
"shot1": 9,
"shot2": 5,
"shot3": 5,
"shot4": 0,
"shot5": 4
},
"3": {
"shot1": 5,
"shot2": 1,
"shot3": 3,
"shot4": 4,
"shot5": 0
},
"4": {
"shot1": 6,
"shot2": 3,
"shot3": 3,
"shot4": 10,
"shot5": 7
}
},
"total_score": 94,
"completed": true
},
"7": {
"name": "Branko Poker\u017enik",
"targets": {
"1": {
"shot1": 9,
"shot2": 5,
"shot3": 10,
"shot4": 8,
"shot5": 3
},
"2": {
"shot1": 4,
"shot2": 4,
"shot3": 4,
"shot4": 7,
"shot5": 4
},
"3": {
"shot1": 8,
"shot2": 2,
"shot3": 5,
"shot4": 0,
"shot5": 9
},
"4": {
"shot1": 0,
"shot2": 4,
"shot3": 2,
"shot4": 4,
"shot5": 6
}
},
"total_score": 98,
"completed": true
},
"1": {
"name": "Domen Pleterski",
"targets": {
"1": {
"shot1": 0,
"shot2": 8,
"shot3": 8,
"shot4": 5,
"shot5": 3
},
"2": {
"shot1": 1,
"shot2": 7,
"shot3": 3,
"shot4": 4,
"shot5": 4
},
"3": {
"shot1": 1,
"shot2": 2,
"shot3": 0,
"shot4": 5,
"shot5": 5
},
"4": {
"shot1": 2,
"shot2": 8,
"shot3": 8,
"shot4": 7,
"shot5": 8
}
},
"total_score": 89,
"completed": true
},
"21": {
"name": "Marko Blimen",
"targets": {
"1": {
"shot1": 8,
"shot2": 8,
"shot3": 2,
"shot4": 8,
"shot5": 0
},
"2": {
"shot1": 1,
"shot2": 9,
"shot3": 4,
"shot4": 10,
"shot5": 1
},
"3": {
"shot1": 0,
"shot2": 4,
"shot3": 6,
"shot4": 8,
"shot5": 1
},
"4": {
"shot1": 10,
"shot2": 1,
"shot3": 7,
"shot4": 10,
"shot5": 9
}
},
"total_score": 107,
"completed": true
},
"12": {
"name": "Matej Kvasnik",
"targets": {
"1": {
"shot1": 3,
"shot2": 10,
"shot3": 0,
"shot4": 0,
"shot5": 0
},
"2": {
"shot1": 4,
"shot2": 7,
"shot3": 9,
"shot4": 7,
"shot5": 2
},
"3": {
"shot1": 8,
"shot2": 8,
"shot3": 3,
"shot4": 7,
"shot5": 8
},
"4": {
"shot1": 6,
"shot2": 7,
"shot3": 9,
"shot4": 7,
"shot5": 10
}
},
"total_score": 115,
"completed": true
},
"48": {
"name": "Janja Salcman",
"targets": {
"1": {
"shot1": 0,
"shot2": 1,
"shot3": 4,
"shot4": 8,
"shot5": 2
},
"2": {
"shot1": 3,
"shot2": 0,
"shot3": 0,
"shot4": 6,
"shot5": 0
},
"3": {
"shot1": 7,
"shot2": 6,
"shot3": 4,
"shot4": 3,
"shot5": 6
},
"4": {
"shot1": 5,
"shot2": 9,
"shot3": 10,
"shot4": 6,
"shot5": 7
}
},
"total_score": 87,
"completed": true
},
"5": {
"name": "Jo\u017ee Verhnjak",
"targets": {
"1": {
"shot1": 2,
"shot2": 8,
"shot3": 4,
"shot4": 10,
"shot5": 0
},
"2": {
"shot1": 0,
"shot2": 2,
"shot3": 5,
"shot4": 5,
"shot5": 1
},
"3": {
"shot1": 3,
"shot2": 0,
"shot3": 8,
"shot4": 5,
"shot5": 5
},
"4": {
"shot1": 9,
"shot2": 10,
"shot3": 5,
"shot4": 1,
"shot5": 6
}
},
"total_score": 89,
"completed": true
},
"4": {
"name": "Mateja Pleterski",
"targets": {
"1": {
"shot1": 6,
"shot2": 10,
"shot3": 1,
"shot4": 7,
"shot5": 0
},
"2": {
"shot1": 9,
"shot2": 1,
"shot3": 9,
"shot4": 2,
"shot5": 6
},
"3": {
"shot1": 7,
"shot2": 1,
"shot3": 4,
"shot4": 1,
"shot5": 9
},
"4": {
"shot1": 2,
"shot2": 6,
"shot3": 8,
"shot4": 4,
"shot5": 4
}
},
"total_score": 97,
"completed": true
},
"20": {
"name": "Jo\u017ee Preglav",
"targets": {
"1": {
"shot1": 5,
"shot2": 10,
"shot3": 4,
"shot4": 8,
"shot5": 9
},
"2": {
"shot1": 7,
"shot2": 6,
"shot3": 0,
"shot4": 6,
"shot5": 0
},
"3": {
"shot1": 6,
"shot2": 9,
"shot3": 1,
"shot4": 6,
"shot5": 1
},
"4": {
"shot1": 1,
"shot2": 2,
"shot3": 5,
"shot4": 0,
"shot5": 6
}
},
"total_score": 92,
"completed": true
},
"15": {
"name": "Jan Pleterski",
"targets": {
"1": {
"shot1": 0,
"shot2": 6,
"shot3": 9,
"shot4": 3,
"shot5": 8
},
"2": {
"shot1": 3,
"shot2": 0,
"shot3": 6,
"shot4": 4,
"shot5": 0
},
"3": {
"shot1": 3,
"shot2": 0,
"shot3": 4,
"shot4": 4,
"shot5": 10
},
"4": {
"shot1": 6,
"shot2": 9,
"shot3": 8,
"shot4": 0,
"shot5": 1
}
},
"total_score": 84,
"completed": true
},
"17": {
"name": "Du\u0161an Onuk",
"targets": {
"1": {
"shot1": 7,
"shot2": 5,
"shot3": 2,
"shot4": 7,
"shot5": 5
},
"2": {
"shot1": 9,
"shot2": 3,
"shot3": 8,
"shot4": 0,
"shot5": 6
},
"3": {
"shot1": 1,
"shot2": 6,
"shot3": 5,
"shot4": 5,
"shot5": 7
},
"4": {
"shot1": 3,
"shot2": 7,
"shot3": 6,
"shot4": 7,
"shot5": 7
}
},
"total_score": 106,
"completed": true
},
"46": {
"name": "Tijana \u0160tumpfl",
"targets": {
"1": {
"shot1": 5,
"shot2": 4,
"shot3": 4,
"shot4": 9,
"shot5": 3
},
"2": {
"shot1": 7,
"shot2": 0,
"shot3": 5,
"shot4": 4,
"shot5": 7
},
"3": {
"shot1": 2,
"shot2": 4,
"shot3": 7,
"shot4": 5,
"shot5": 9
},
"4": {
"shot1": 1,
"shot2": 4,
"shot3": 0,
"shot4": 1,
"shot5": 6
}
},
"total_score": 87,
"completed": true
},
"49": {
"name": "Jolanda Verhnjak",
"targets": {
"1": {
"shot1": 9,
"shot2": 10,
"shot3": 5,
"shot4": 8,
"shot5": 2
},
"2": {
"shot1": 4,
"shot2": 8,
"shot3": 8,
"shot4": 5,
"shot5": 1
},
"3": {
"shot1": 3,
"shot2": 5,
"shot3": 2,
"shot4": 6,
"shot5": 7
},
"4": {
"shot1": 3,
"shot2": 2,
"shot3": 1,
"shot4": 1,
"shot5": 0
}
},
"total_score": 90,
"completed": true
},
"3": {
"name": "Ivan Tandler",
"targets": {
"1": {
"shot1": 8,
"shot2": 10,
"shot3": 0,
"shot4": 8,
"shot5": 0
},
"2": {
"shot1": 3,
"shot2": 9,
"shot3": 3,
"shot4": 6,
"shot5": 6
},
"3": {
"shot1": 10,
"shot2": 8,
"shot3": 5,
"shot4": 1,
"shot5": 10
},
"4": {
"shot1": 9,
"shot2": 7,
"shot3": 8,
"shot4": 6,
"shot5": 9
}
},
"total_score": 126,
"completed": true
},
"11": {
"name": "Rado Kefer",
"targets": {
"1": {
"shot1": 10,
"shot2": 7,
"shot3": 3,
"shot4": 8,
"shot5": 6
},
"2": {
"shot1": 9,
"shot2": 1,
"shot3": 5,
"shot4": 3,
"shot5": 8
},
"3": {
"shot1": 2,
"shot2": 3,
"shot3": 5,
"shot4": 2,
"shot5": 1
},
"4": {
"shot1": 1,
"shot2": 0,
"shot3": 3,
"shot4": 1,
"shot5": 6
}
},
"total_score": 84,
"completed": true
},
"45": {
"name": "Lidija Blimen",
"targets": {
"1": {
"shot1": 9,
"shot2": 1,
"shot3": 8,
"shot4": 5,
"shot5": 8
},
"2": {
"shot1": 5,
"shot2": 7,
"shot3": 8,
"shot4": 2,
"shot5": 9
},
"3": {
"shot1": 4,
"shot2": 10,
"shot3": 5,
"shot4": 7,
"shot5": 7
},
"4": {
"shot1": 0,
"shot2": 1,
"shot3": 0,
"shot4": 4,
"shot5": 0
}
},
"total_score": 100,
"completed": true
},
"47": {
"name": "Ljuba Mr\u0161ak",
"targets": {
"1": {
"shot1": 5,
"shot2": 0,
"shot3": 7,
"shot4": 4,
"shot5": 1
},
"2": {
"shot1": 2,
"shot2": 7,
"shot3": 3,
"shot4": 1,
"shot5": 4
},
"3": {
"shot1": 1,
"shot2": 4,
"shot3": 1,
"shot4": 3,
"shot5": 1
},
"4": {
"shot1": 0,
"shot2": 5,
"shot3": 3,
"shot4": 9,
"shot5": 7
}
},
"total_score": 68,
"completed": true
}
},
"tournament_finished": true,
"created_at": "2025-09-08T19:26:24.708574",
"finished_at": "2025-09-08T19:26:31.871139"
},
"archived_at": "2025-09-08T19:26:31.871173"
}
@@ -1,759 +0,0 @@
{
"tournament": {
"rounds": [
{
"round_number": 1,
"players": [
{
"id": 5,
"name": "Jo\u017ee Verhnjak",
"enabled": true
},
{
"id": 20,
"name": "Jo\u017ee Preglav",
"enabled": true
},
{
"id": 12,
"name": "Matej Kvasnik",
"enabled": true
},
{
"id": 9,
"name": "Janez Bo\u017ei\u010d",
"enabled": true
},
{
"id": 21,
"name": "Marko Blimen",
"enabled": true
},
{
"id": 17,
"name": "Du\u0161an Onuk",
"enabled": true
}
],
"status": "pending"
},
{
"round_number": 2,
"players": [
{
"id": 45,
"name": "Lidija Blimen",
"enabled": true
},
{
"id": 47,
"name": "Ljuba Mr\u0161ak",
"enabled": true
},
{
"id": 3,
"name": "Ivan Tandler",
"enabled": true
},
{
"id": 49,
"name": "Jolanda Verhnjak",
"enabled": true
},
{
"id": 15,
"name": "Jan Pleterski",
"enabled": true
},
{
"id": 1,
"name": "Domen Pleterski",
"enabled": true
}
],
"status": "waiting"
},
{
"round_number": 3,
"players": [
{
"id": 7,
"name": "Branko Poker\u017enik",
"enabled": true
},
{
"id": 4,
"name": "Mateja Pleterski",
"enabled": true
},
{
"id": 11,
"name": "Rado Kefer",
"enabled": true
},
{
"id": 44,
"name": "Anka Ka\u010dnik",
"enabled": true
},
{
"id": 46,
"name": "Tijana \u0160tumpfl",
"enabled": true
},
{
"id": 48,
"name": "Janja Salcman",
"enabled": true
}
],
"status": "waiting"
}
],
"created_at": "2025-09-08T19:27:18.397859",
"total_players": 18,
"total_rounds": 3,
"current_round": 1,
"tournament_type": "4_targets"
},
"results": {
"tournament_id": "2025-09-08T19:27:18.397859",
"tournament_type": "4_targets",
"participants": {
"5": {
"name": "Jo\u017ee Verhnjak",
"targets": {
"1": {
"shot1": 6,
"shot2": 0,
"shot3": 1,
"shot4": 2,
"shot5": 0
},
"2": {
"shot1": 4,
"shot2": 9,
"shot3": 1,
"shot4": 4,
"shot5": 3
},
"3": {
"shot1": 3,
"shot2": 6,
"shot3": 8,
"shot4": 6,
"shot5": 3
},
"4": {
"shot1": 8,
"shot2": 7,
"shot3": 8,
"shot4": 1,
"shot5": 5
}
},
"total_score": 85,
"completed": true
},
"20": {
"name": "Jo\u017ee Preglav",
"targets": {
"1": {
"shot1": 3,
"shot2": 0,
"shot3": 3,
"shot4": 5,
"shot5": 3
},
"2": {
"shot1": 1,
"shot2": 4,
"shot3": 2,
"shot4": 0,
"shot5": 1
},
"3": {
"shot1": 6,
"shot2": 3,
"shot3": 8,
"shot4": 2,
"shot5": 5
},
"4": {
"shot1": 4,
"shot2": 6,
"shot3": 2,
"shot4": 9,
"shot5": 2
}
},
"total_score": 69,
"completed": true
},
"12": {
"name": "Matej Kvasnik",
"targets": {
"1": {
"shot1": 1,
"shot2": 4,
"shot3": 2,
"shot4": 6,
"shot5": 6
},
"2": {
"shot1": 5,
"shot2": 1,
"shot3": 2,
"shot4": 0,
"shot5": 8
},
"3": {
"shot1": 1,
"shot2": 4,
"shot3": 7,
"shot4": 3,
"shot5": 10
},
"4": {
"shot1": 0,
"shot2": 3,
"shot3": 3,
"shot4": 9,
"shot5": 5
}
},
"total_score": 80,
"completed": true
},
"9": {
"name": "Janez Bo\u017ei\u010d",
"targets": {
"1": {
"shot1": 10,
"shot2": 0,
"shot3": 6,
"shot4": 7,
"shot5": 6
},
"2": {
"shot1": 0,
"shot2": 7,
"shot3": 10,
"shot4": 10,
"shot5": 4
},
"3": {
"shot1": 9,
"shot2": 1,
"shot3": 3,
"shot4": 9,
"shot5": 6
},
"4": {
"shot1": 1,
"shot2": 9,
"shot3": 6,
"shot4": 5,
"shot5": 9
}
},
"total_score": 118,
"completed": true
},
"21": {
"name": "Marko Blimen",
"targets": {
"1": {
"shot1": 9,
"shot2": 8,
"shot3": 3,
"shot4": 0,
"shot5": 4
},
"2": {
"shot1": 9,
"shot2": 9,
"shot3": 9,
"shot4": 10,
"shot5": 3
},
"3": {
"shot1": 9,
"shot2": 4,
"shot3": 8,
"shot4": 10,
"shot5": 9
},
"4": {
"shot1": 4,
"shot2": 8,
"shot3": 1,
"shot4": 1,
"shot5": 0
}
},
"total_score": 118,
"completed": true
},
"17": {
"name": "Du\u0161an Onuk",
"targets": {
"1": {
"shot1": 5,
"shot2": 10,
"shot3": 8,
"shot4": 5,
"shot5": 1
},
"2": {
"shot1": 6,
"shot2": 3,
"shot3": 4,
"shot4": 9,
"shot5": 6
},
"3": {
"shot1": 7,
"shot2": 8,
"shot3": 1,
"shot4": 3,
"shot5": 4
},
"4": {
"shot1": 1,
"shot2": 4,
"shot3": 6,
"shot4": 9,
"shot5": 0
}
},
"total_score": 100,
"completed": true
},
"45": {
"name": "Lidija Blimen",
"targets": {
"1": {
"shot1": 1,
"shot2": 6,
"shot3": 0,
"shot4": 0,
"shot5": 8
},
"2": {
"shot1": 7,
"shot2": 7,
"shot3": 2,
"shot4": 10,
"shot5": 2
},
"3": {
"shot1": 2,
"shot2": 10,
"shot3": 1,
"shot4": 8,
"shot5": 10
},
"4": {
"shot1": 2,
"shot2": 8,
"shot3": 0,
"shot4": 8,
"shot5": 1
}
},
"total_score": 93,
"completed": true
},
"47": {
"name": "Ljuba Mr\u0161ak",
"targets": {
"1": {
"shot1": 9,
"shot2": 7,
"shot3": 0,
"shot4": 8,
"shot5": 2
},
"2": {
"shot1": 0,
"shot2": 0,
"shot3": 5,
"shot4": 4,
"shot5": 4
},
"3": {
"shot1": 4,
"shot2": 3,
"shot3": 9,
"shot4": 0,
"shot5": 0
},
"4": {
"shot1": 0,
"shot2": 3,
"shot3": 8,
"shot4": 7,
"shot5": 8
}
},
"total_score": 81,
"completed": true
},
"3": {
"name": "Ivan Tandler",
"targets": {
"1": {
"shot1": 7,
"shot2": 3,
"shot3": 5,
"shot4": 1,
"shot5": 0
},
"2": {
"shot1": 0,
"shot2": 5,
"shot3": 8,
"shot4": 10,
"shot5": 9
},
"3": {
"shot1": 7,
"shot2": 0,
"shot3": 0,
"shot4": 3,
"shot5": 6
},
"4": {
"shot1": 1,
"shot2": 8,
"shot3": 5,
"shot4": 0,
"shot5": 8
}
},
"total_score": 86,
"completed": true
},
"49": {
"name": "Jolanda Verhnjak",
"targets": {
"1": {
"shot1": 7,
"shot2": 2,
"shot3": 0,
"shot4": 8,
"shot5": 3
},
"2": {
"shot1": 10,
"shot2": 9,
"shot3": 7,
"shot4": 8,
"shot5": 6
},
"3": {
"shot1": 0,
"shot2": 2,
"shot3": 5,
"shot4": 3,
"shot5": 9
},
"4": {
"shot1": 2,
"shot2": 5,
"shot3": 10,
"shot4": 3,
"shot5": 5
}
},
"total_score": 104,
"completed": true
},
"15": {
"name": "Jan Pleterski",
"targets": {
"1": {
"shot1": 3,
"shot2": 0,
"shot3": 3,
"shot4": 2,
"shot5": 1
},
"2": {
"shot1": 10,
"shot2": 2,
"shot3": 10,
"shot4": 0,
"shot5": 6
},
"3": {
"shot1": 2,
"shot2": 9,
"shot3": 0,
"shot4": 4,
"shot5": 4
},
"4": {
"shot1": 2,
"shot2": 3,
"shot3": 8,
"shot4": 9,
"shot5": 5
}
},
"total_score": 83,
"completed": true
},
"1": {
"name": "Domen Pleterski",
"targets": {
"1": {
"shot1": 8,
"shot2": 5,
"shot3": 10,
"shot4": 8,
"shot5": 4
},
"2": {
"shot1": 0,
"shot2": 3,
"shot3": 6,
"shot4": 5,
"shot5": 2
},
"3": {
"shot1": 8,
"shot2": 0,
"shot3": 10,
"shot4": 2,
"shot5": 0
},
"4": {
"shot1": 0,
"shot2": 6,
"shot3": 7,
"shot4": 4,
"shot5": 8
}
},
"total_score": 96,
"completed": true
},
"7": {
"name": "Branko Poker\u017enik",
"targets": {
"1": {
"shot1": 9,
"shot2": 8,
"shot3": 4,
"shot4": 1,
"shot5": 3
},
"2": {
"shot1": 4,
"shot2": 5,
"shot3": 10,
"shot4": 0,
"shot5": 0
},
"3": {
"shot1": 6,
"shot2": 2,
"shot3": 9,
"shot4": 4,
"shot5": 2
},
"4": {
"shot1": 2,
"shot2": 8,
"shot3": 1,
"shot4": 8,
"shot5": 3
}
},
"total_score": 89,
"completed": true
},
"4": {
"name": "Mateja Pleterski",
"targets": {
"1": {
"shot1": 9,
"shot2": 10,
"shot3": 1,
"shot4": 6,
"shot5": 8
},
"2": {
"shot1": 10,
"shot2": 1,
"shot3": 0,
"shot4": 9,
"shot5": 10
},
"3": {
"shot1": 0,
"shot2": 1,
"shot3": 5,
"shot4": 5,
"shot5": 0
},
"4": {
"shot1": 3,
"shot2": 0,
"shot3": 10,
"shot4": 4,
"shot5": 2
}
},
"total_score": 94,
"completed": true
},
"11": {
"name": "Rado Kefer",
"targets": {
"1": {
"shot1": 7,
"shot2": 2,
"shot3": 7,
"shot4": 7,
"shot5": 9
},
"2": {
"shot1": 7,
"shot2": 8,
"shot3": 4,
"shot4": 6,
"shot5": 0
},
"3": {
"shot1": 2,
"shot2": 8,
"shot3": 5,
"shot4": 2,
"shot5": 10
},
"4": {
"shot1": 6,
"shot2": 5,
"shot3": 6,
"shot4": 5,
"shot5": 10
}
},
"total_score": 116,
"completed": true
},
"44": {
"name": "Anka Ka\u010dnik",
"targets": {
"1": {
"shot1": 10,
"shot2": 1,
"shot3": 5,
"shot4": 1,
"shot5": 8
},
"2": {
"shot1": 3,
"shot2": 4,
"shot3": 3,
"shot4": 8,
"shot5": 6
},
"3": {
"shot1": 5,
"shot2": 7,
"shot3": 10,
"shot4": 2,
"shot5": 6
},
"4": {
"shot1": 10,
"shot2": 8,
"shot3": 2,
"shot4": 9,
"shot5": 7
}
},
"total_score": 115,
"completed": true
},
"46": {
"name": "Tijana \u0160tumpfl",
"targets": {
"1": {
"shot1": 8,
"shot2": 6,
"shot3": 5,
"shot4": 0,
"shot5": 2
},
"2": {
"shot1": 3,
"shot2": 8,
"shot3": 6,
"shot4": 4,
"shot5": 1
},
"3": {
"shot1": 10,
"shot2": 10,
"shot3": 8,
"shot4": 7,
"shot5": 4
},
"4": {
"shot1": 7,
"shot2": 2,
"shot3": 2,
"shot4": 4,
"shot5": 3
}
},
"total_score": 100,
"completed": true
},
"48": {
"name": "Janja Salcman",
"targets": {
"1": {
"shot1": 5,
"shot2": 0,
"shot3": 1,
"shot4": 1,
"shot5": 4
},
"2": {
"shot1": 7,
"shot2": 4,
"shot3": 10,
"shot4": 2,
"shot5": 6
},
"3": {
"shot1": 6,
"shot2": 3,
"shot3": 2,
"shot4": 3,
"shot5": 5
},
"4": {
"shot1": 0,
"shot2": 8,
"shot3": 9,
"shot4": 6,
"shot5": 3
}
},
"total_score": 85,
"completed": true
}
},
"tournament_finished": true,
"created_at": "2025-09-08T19:27:18.398031",
"finished_at": "2025-09-08T19:27:27.631332"
},
"archived_at": "2025-09-08T19:27:27.631357"
}
@@ -1,759 +0,0 @@
{
"tournament": {
"rounds": [
{
"round_number": 1,
"players": [
{
"id": 49,
"name": "Jolanda Verhnjak",
"enabled": true
},
{
"id": 7,
"name": "Branko Poker\u017enik",
"enabled": true
},
{
"id": 3,
"name": "Ivan Tandler",
"enabled": true
},
{
"id": 46,
"name": "Tijana \u0160tumpfl",
"enabled": true
},
{
"id": 15,
"name": "Jan Pleterski",
"enabled": true
},
{
"id": 17,
"name": "Du\u0161an Onuk",
"enabled": true
}
],
"status": "pending"
},
{
"round_number": 2,
"players": [
{
"id": 12,
"name": "Matej Kvasnik",
"enabled": true
},
{
"id": 9,
"name": "Janez Bo\u017ei\u010d",
"enabled": true
},
{
"id": 4,
"name": "Mateja Pleterski",
"enabled": true
},
{
"id": 21,
"name": "Marko Blimen",
"enabled": true
},
{
"id": 20,
"name": "Jo\u017ee Preglav",
"enabled": true
},
{
"id": 11,
"name": "Rado Kefer",
"enabled": true
}
],
"status": "waiting"
},
{
"round_number": 3,
"players": [
{
"id": 47,
"name": "Ljuba Mr\u0161ak",
"enabled": true
},
{
"id": 48,
"name": "Janja Salcman",
"enabled": true
},
{
"id": 45,
"name": "Lidija Blimen",
"enabled": true
},
{
"id": 1,
"name": "Domen Pleterski",
"enabled": true
},
{
"id": 5,
"name": "Jo\u017ee Verhnjak",
"enabled": true
},
{
"id": 44,
"name": "Anka Ka\u010dnik",
"enabled": true
}
],
"status": "waiting"
}
],
"created_at": "2025-09-08T19:39:27.077222",
"total_players": 18,
"total_rounds": 3,
"current_round": 1,
"tournament_type": "4_targets"
},
"results": {
"tournament_id": "2025-09-08T19:39:27.077222",
"tournament_type": "4_targets",
"participants": {
"49": {
"name": "Jolanda Verhnjak",
"targets": {
"1": {
"shot1": 6,
"shot2": 10,
"shot3": 6,
"shot4": 3,
"shot5": 7
},
"2": {
"shot1": 6,
"shot2": 2,
"shot3": 1,
"shot4": 10,
"shot5": 0
},
"3": {
"shot1": 5,
"shot2": 5,
"shot3": 0,
"shot4": 3,
"shot5": 9
},
"4": {
"shot1": 9,
"shot2": 6,
"shot3": 8,
"shot4": 4,
"shot5": 8
}
},
"total_score": 108,
"completed": true
},
"7": {
"name": "Branko Poker\u017enik",
"targets": {
"1": {
"shot1": 10,
"shot2": 10,
"shot3": 6,
"shot4": 0,
"shot5": 9
},
"2": {
"shot1": 1,
"shot2": 2,
"shot3": 1,
"shot4": 4,
"shot5": 6
},
"3": {
"shot1": 3,
"shot2": 10,
"shot3": 5,
"shot4": 7,
"shot5": 7
},
"4": {
"shot1": 7,
"shot2": 7,
"shot3": 3,
"shot4": 2,
"shot5": 10
}
},
"total_score": 110,
"completed": true
},
"3": {
"name": "Ivan Tandler",
"targets": {
"1": {
"shot1": 6,
"shot2": 4,
"shot3": 1,
"shot4": 2,
"shot5": 0
},
"2": {
"shot1": 7,
"shot2": 6,
"shot3": 5,
"shot4": 10,
"shot5": 8
},
"3": {
"shot1": 4,
"shot2": 1,
"shot3": 4,
"shot4": 3,
"shot5": 7
},
"4": {
"shot1": 7,
"shot2": 2,
"shot3": 1,
"shot4": 1,
"shot5": 10
}
},
"total_score": 89,
"completed": true
},
"46": {
"name": "Tijana \u0160tumpfl",
"targets": {
"1": {
"shot1": 7,
"shot2": 10,
"shot3": 3,
"shot4": 7,
"shot5": 6
},
"2": {
"shot1": 5,
"shot2": 0,
"shot3": 10,
"shot4": 5,
"shot5": 1
},
"3": {
"shot1": 7,
"shot2": 9,
"shot3": 8,
"shot4": 6,
"shot5": 1
},
"4": {
"shot1": 3,
"shot2": 9,
"shot3": 0,
"shot4": 5,
"shot5": 0
}
},
"total_score": 102,
"completed": true
},
"15": {
"name": "Jan Pleterski",
"targets": {
"1": {
"shot1": 1,
"shot2": 4,
"shot3": 3,
"shot4": 1,
"shot5": 6
},
"2": {
"shot1": 5,
"shot2": 8,
"shot3": 1,
"shot4": 9,
"shot5": 2
},
"3": {
"shot1": 6,
"shot2": 9,
"shot3": 4,
"shot4": 1,
"shot5": 7
},
"4": {
"shot1": 5,
"shot2": 0,
"shot3": 2,
"shot4": 7,
"shot5": 4
}
},
"total_score": 85,
"completed": true
},
"17": {
"name": "Du\u0161an Onuk",
"targets": {
"1": {
"shot1": 6,
"shot2": 7,
"shot3": 8,
"shot4": 2,
"shot5": 8
},
"2": {
"shot1": 10,
"shot2": 7,
"shot3": 6,
"shot4": 9,
"shot5": 0
},
"3": {
"shot1": 1,
"shot2": 9,
"shot3": 0,
"shot4": 6,
"shot5": 4
},
"4": {
"shot1": 9,
"shot2": 5,
"shot3": 6,
"shot4": 3,
"shot5": 6
}
},
"total_score": 112,
"completed": true
},
"12": {
"name": "Matej Kvasnik",
"targets": {
"1": {
"shot1": 1,
"shot2": 0,
"shot3": 9,
"shot4": 2,
"shot5": 7
},
"2": {
"shot1": 7,
"shot2": 2,
"shot3": 4,
"shot4": 5,
"shot5": 5
},
"3": {
"shot1": 1,
"shot2": 0,
"shot3": 8,
"shot4": 2,
"shot5": 2
},
"4": {
"shot1": 6,
"shot2": 6,
"shot3": 5,
"shot4": 2,
"shot5": 8
}
},
"total_score": 82,
"completed": true
},
"9": {
"name": "Janez Bo\u017ei\u010d",
"targets": {
"1": {
"shot1": 9,
"shot2": 9,
"shot3": 7,
"shot4": 7,
"shot5": 9
},
"2": {
"shot1": 6,
"shot2": 0,
"shot3": 5,
"shot4": 1,
"shot5": 9
},
"3": {
"shot1": 8,
"shot2": 5,
"shot3": 10,
"shot4": 4,
"shot5": 4
},
"4": {
"shot1": 1,
"shot2": 2,
"shot3": 8,
"shot4": 1,
"shot5": 5
}
},
"total_score": 110,
"completed": true
},
"4": {
"name": "Mateja Pleterski",
"targets": {
"1": {
"shot1": 0,
"shot2": 10,
"shot3": 2,
"shot4": 4,
"shot5": 0
},
"2": {
"shot1": 0,
"shot2": 7,
"shot3": 4,
"shot4": 7,
"shot5": 0
},
"3": {
"shot1": 1,
"shot2": 0,
"shot3": 5,
"shot4": 6,
"shot5": 1
},
"4": {
"shot1": 4,
"shot2": 10,
"shot3": 4,
"shot4": 7,
"shot5": 2
}
},
"total_score": 74,
"completed": true
},
"21": {
"name": "Marko Blimen",
"targets": {
"1": {
"shot1": 8,
"shot2": 5,
"shot3": 4,
"shot4": 7,
"shot5": 8
},
"2": {
"shot1": 3,
"shot2": 1,
"shot3": 7,
"shot4": 2,
"shot5": 9
},
"3": {
"shot1": 1,
"shot2": 0,
"shot3": 2,
"shot4": 6,
"shot5": 5
},
"4": {
"shot1": 8,
"shot2": 3,
"shot3": 0,
"shot4": 3,
"shot5": 9
}
},
"total_score": 91,
"completed": true
},
"20": {
"name": "Jo\u017ee Preglav",
"targets": {
"1": {
"shot1": 1,
"shot2": 5,
"shot3": 0,
"shot4": 5,
"shot5": 9
},
"2": {
"shot1": 6,
"shot2": 5,
"shot3": 1,
"shot4": 8,
"shot5": 6
},
"3": {
"shot1": 4,
"shot2": 6,
"shot3": 10,
"shot4": 9,
"shot5": 2
},
"4": {
"shot1": 5,
"shot2": 9,
"shot3": 6,
"shot4": 3,
"shot5": 8
}
},
"total_score": 108,
"completed": true
},
"11": {
"name": "Rado Kefer",
"targets": {
"1": {
"shot1": 3,
"shot2": 5,
"shot3": 5,
"shot4": 1,
"shot5": 9
},
"2": {
"shot1": 2,
"shot2": 10,
"shot3": 8,
"shot4": 6,
"shot5": 1
},
"3": {
"shot1": 7,
"shot2": 9,
"shot3": 7,
"shot4": 9,
"shot5": 1
},
"4": {
"shot1": 0,
"shot2": 2,
"shot3": 9,
"shot4": 1,
"shot5": 3
}
},
"total_score": 98,
"completed": true
},
"47": {
"name": "Ljuba Mr\u0161ak",
"targets": {
"1": {
"shot1": 0,
"shot2": 2,
"shot3": 9,
"shot4": 7,
"shot5": 7
},
"2": {
"shot1": 7,
"shot2": 0,
"shot3": 0,
"shot4": 2,
"shot5": 3
},
"3": {
"shot1": 9,
"shot2": 9,
"shot3": 0,
"shot4": 6,
"shot5": 4
},
"4": {
"shot1": 2,
"shot2": 10,
"shot3": 9,
"shot4": 7,
"shot5": 7
}
},
"total_score": 100,
"completed": true
},
"48": {
"name": "Janja Salcman",
"targets": {
"1": {
"shot1": 8,
"shot2": 5,
"shot3": 3,
"shot4": 2,
"shot5": 2
},
"2": {
"shot1": 10,
"shot2": 6,
"shot3": 10,
"shot4": 4,
"shot5": 7
},
"3": {
"shot1": 10,
"shot2": 0,
"shot3": 6,
"shot4": 3,
"shot5": 3
},
"4": {
"shot1": 10,
"shot2": 0,
"shot3": 9,
"shot4": 8,
"shot5": 1
}
},
"total_score": 107,
"completed": true
},
"45": {
"name": "Lidija Blimen",
"targets": {
"1": {
"shot1": 8,
"shot2": 4,
"shot3": 8,
"shot4": 2,
"shot5": 1
},
"2": {
"shot1": 2,
"shot2": 4,
"shot3": 6,
"shot4": 7,
"shot5": 0
},
"3": {
"shot1": 7,
"shot2": 3,
"shot3": 10,
"shot4": 7,
"shot5": 8
},
"4": {
"shot1": 1,
"shot2": 2,
"shot3": 10,
"shot4": 4,
"shot5": 6
}
},
"total_score": 100,
"completed": true
},
"1": {
"name": "Domen Pleterski",
"targets": {
"1": {
"shot1": 9,
"shot2": 2,
"shot3": 10,
"shot4": 2,
"shot5": 2
},
"2": {
"shot1": 5,
"shot2": 4,
"shot3": 10,
"shot4": 10,
"shot5": 7
},
"3": {
"shot1": 9,
"shot2": 5,
"shot3": 5,
"shot4": 1,
"shot5": 9
},
"4": {
"shot1": 5,
"shot2": 8,
"shot3": 2,
"shot4": 10,
"shot5": 2
}
},
"total_score": 117,
"completed": true
},
"5": {
"name": "Jo\u017ee Verhnjak",
"targets": {
"1": {
"shot1": 2,
"shot2": 5,
"shot3": 3,
"shot4": 6,
"shot5": 5
},
"2": {
"shot1": 9,
"shot2": 7,
"shot3": 0,
"shot4": 2,
"shot5": 5
},
"3": {
"shot1": 5,
"shot2": 7,
"shot3": 0,
"shot4": 4,
"shot5": 2
},
"4": {
"shot1": 0,
"shot2": 7,
"shot3": 1,
"shot4": 4,
"shot5": 2
}
},
"total_score": 76,
"completed": true
},
"44": {
"name": "Anka Ka\u010dnik",
"targets": {
"1": {
"shot1": 5,
"shot2": 3,
"shot3": 2,
"shot4": 5,
"shot5": 1
},
"2": {
"shot1": 6,
"shot2": 7,
"shot3": 10,
"shot4": 10,
"shot5": 4
},
"3": {
"shot1": 1,
"shot2": 3,
"shot3": 1,
"shot4": 9,
"shot5": 0
},
"4": {
"shot1": 9,
"shot2": 10,
"shot3": 5,
"shot4": 10,
"shot5": 1
}
},
"total_score": 102,
"completed": true
}
},
"tournament_finished": true,
"created_at": "2025-09-08T19:39:27.077445",
"finished_at": "2025-09-08T19:39:44.030962"
},
"archived_at": "2025-09-08T19:39:44.030989"
}
@@ -1,759 +0,0 @@
{
"tournament": {
"rounds": [
{
"round_number": 1,
"players": [
{
"id": 12,
"name": "Matej Kvasnik",
"enabled": true
},
{
"id": 21,
"name": "Marko Blimen",
"enabled": true
},
{
"id": 1,
"name": "Domen Pleterski",
"enabled": true
},
{
"id": 4,
"name": "Mateja Pleterski",
"enabled": true
},
{
"id": 5,
"name": "Jo\u017ee Verhnjak",
"enabled": true
},
{
"id": 11,
"name": "Rado Kefer",
"enabled": true
}
],
"status": "pending"
},
{
"round_number": 2,
"players": [
{
"id": 44,
"name": "Anka Ka\u010dnik",
"enabled": true
},
{
"id": 48,
"name": "Janja Salcman",
"enabled": true
},
{
"id": 3,
"name": "Ivan Tandler",
"enabled": true
},
{
"id": 7,
"name": "Branko Poker\u017enik",
"enabled": true
},
{
"id": 9,
"name": "Janez Bo\u017ei\u010d",
"enabled": true
},
{
"id": 45,
"name": "Lidija Blimen",
"enabled": true
}
],
"status": "waiting"
},
{
"round_number": 3,
"players": [
{
"id": 47,
"name": "Ljuba Mr\u0161ak",
"enabled": true
},
{
"id": 46,
"name": "Tijana \u0160tumpfl",
"enabled": true
},
{
"id": 20,
"name": "Jo\u017ee Preglav",
"enabled": true
},
{
"id": 17,
"name": "Du\u0161an Onuk",
"enabled": true
},
{
"id": 15,
"name": "Jan Pleterski",
"enabled": true
},
{
"id": 49,
"name": "Jolanda Verhnjak",
"enabled": true
}
],
"status": "waiting"
}
],
"created_at": "2025-09-08T20:15:56.266521",
"total_players": 18,
"total_rounds": 3,
"current_round": 1,
"tournament_type": "4_targets"
},
"results": {
"tournament_id": "2025-09-08T20:15:56.266521",
"tournament_type": "4_targets",
"participants": {
"12": {
"name": "Matej Kvasnik",
"targets": {
"1": {
"shot1": 1,
"shot2": 6,
"shot3": 5,
"shot4": 1,
"shot5": 3
},
"2": {
"shot1": 8,
"shot2": 3,
"shot3": 3,
"shot4": 10,
"shot5": 4
},
"3": {
"shot1": 10,
"shot2": 0,
"shot3": 0,
"shot4": 2,
"shot5": 6
},
"4": {
"shot1": 7,
"shot2": 5,
"shot3": 0,
"shot4": 2,
"shot5": 5
}
},
"total_score": 81,
"completed": true
},
"21": {
"name": "Marko Blimen",
"targets": {
"1": {
"shot1": 1,
"shot2": 1,
"shot3": 0,
"shot4": 0,
"shot5": 5
},
"2": {
"shot1": 9,
"shot2": 0,
"shot3": 0,
"shot4": 2,
"shot5": 3
},
"3": {
"shot1": 3,
"shot2": 8,
"shot3": 2,
"shot4": 1,
"shot5": 0
},
"4": {
"shot1": 4,
"shot2": 6,
"shot3": 3,
"shot4": 9,
"shot5": 0
}
},
"total_score": 57,
"completed": true
},
"1": {
"name": "Domen Pleterski",
"targets": {
"1": {
"shot1": 0,
"shot2": 4,
"shot3": 0,
"shot4": 9,
"shot5": 10
},
"2": {
"shot1": 0,
"shot2": 3,
"shot3": 0,
"shot4": 1,
"shot5": 10
},
"3": {
"shot1": 5,
"shot2": 3,
"shot3": 4,
"shot4": 6,
"shot5": 10
},
"4": {
"shot1": 0,
"shot2": 2,
"shot3": 1,
"shot4": 8,
"shot5": 2
}
},
"total_score": 78,
"completed": true
},
"4": {
"name": "Mateja Pleterski",
"targets": {
"1": {
"shot1": 2,
"shot2": 0,
"shot3": 2,
"shot4": 3,
"shot5": 3
},
"2": {
"shot1": 7,
"shot2": 2,
"shot3": 9,
"shot4": 8,
"shot5": 6
},
"3": {
"shot1": 3,
"shot2": 8,
"shot3": 1,
"shot4": 1,
"shot5": 3
},
"4": {
"shot1": 10,
"shot2": 5,
"shot3": 10,
"shot4": 5,
"shot5": 7
}
},
"total_score": 95,
"completed": true
},
"5": {
"name": "Jo\u017ee Verhnjak",
"targets": {
"1": {
"shot1": 8,
"shot2": 3,
"shot3": 3,
"shot4": 2,
"shot5": 6
},
"2": {
"shot1": 7,
"shot2": 6,
"shot3": 7,
"shot4": 5,
"shot5": 9
},
"3": {
"shot1": 2,
"shot2": 0,
"shot3": 7,
"shot4": 6,
"shot5": 2
},
"4": {
"shot1": 6,
"shot2": 1,
"shot3": 5,
"shot4": 7,
"shot5": 5
}
},
"total_score": 97,
"completed": true
},
"11": {
"name": "Rado Kefer",
"targets": {
"1": {
"shot1": 4,
"shot2": 2,
"shot3": 3,
"shot4": 7,
"shot5": 2
},
"2": {
"shot1": 9,
"shot2": 6,
"shot3": 10,
"shot4": 7,
"shot5": 6
},
"3": {
"shot1": 8,
"shot2": 6,
"shot3": 9,
"shot4": 9,
"shot5": 1
},
"4": {
"shot1": 3,
"shot2": 0,
"shot3": 6,
"shot4": 8,
"shot5": 2
}
},
"total_score": 108,
"completed": true
},
"44": {
"name": "Anka Ka\u010dnik",
"targets": {
"1": {
"shot1": 8,
"shot2": 8,
"shot3": 4,
"shot4": 10,
"shot5": 3
},
"2": {
"shot1": 2,
"shot2": 8,
"shot3": 10,
"shot4": 7,
"shot5": 9
},
"3": {
"shot1": 3,
"shot2": 2,
"shot3": 0,
"shot4": 6,
"shot5": 9
},
"4": {
"shot1": 9,
"shot2": 5,
"shot3": 10,
"shot4": 10,
"shot5": 6
}
},
"total_score": 129,
"completed": true
},
"48": {
"name": "Janja Salcman",
"targets": {
"1": {
"shot1": 2,
"shot2": 6,
"shot3": 9,
"shot4": 4,
"shot5": 0
},
"2": {
"shot1": 0,
"shot2": 7,
"shot3": 3,
"shot4": 2,
"shot5": 0
},
"3": {
"shot1": 4,
"shot2": 6,
"shot3": 4,
"shot4": 8,
"shot5": 8
},
"4": {
"shot1": 2,
"shot2": 7,
"shot3": 0,
"shot4": 10,
"shot5": 3
}
},
"total_score": 85,
"completed": true
},
"3": {
"name": "Ivan Tandler",
"targets": {
"1": {
"shot1": 10,
"shot2": 9,
"shot3": 8,
"shot4": 8,
"shot5": 2
},
"2": {
"shot1": 7,
"shot2": 10,
"shot3": 3,
"shot4": 9,
"shot5": 2
},
"3": {
"shot1": 9,
"shot2": 4,
"shot3": 0,
"shot4": 2,
"shot5": 6
},
"4": {
"shot1": 0,
"shot2": 4,
"shot3": 1,
"shot4": 2,
"shot5": 10
}
},
"total_score": 106,
"completed": true
},
"7": {
"name": "Branko Poker\u017enik",
"targets": {
"1": {
"shot1": 4,
"shot2": 0,
"shot3": 2,
"shot4": 3,
"shot5": 6
},
"2": {
"shot1": 4,
"shot2": 5,
"shot3": 4,
"shot4": 10,
"shot5": 10
},
"3": {
"shot1": 2,
"shot2": 1,
"shot3": 0,
"shot4": 4,
"shot5": 5
},
"4": {
"shot1": 7,
"shot2": 10,
"shot3": 8,
"shot4": 5,
"shot5": 10
}
},
"total_score": 100,
"completed": true
},
"9": {
"name": "Janez Bo\u017ei\u010d",
"targets": {
"1": {
"shot1": 3,
"shot2": 9,
"shot3": 10,
"shot4": 5,
"shot5": 3
},
"2": {
"shot1": 5,
"shot2": 9,
"shot3": 6,
"shot4": 8,
"shot5": 5
},
"3": {
"shot1": 1,
"shot2": 7,
"shot3": 8,
"shot4": 1,
"shot5": 9
},
"4": {
"shot1": 6,
"shot2": 3,
"shot3": 10,
"shot4": 9,
"shot5": 4
}
},
"total_score": 121,
"completed": true
},
"45": {
"name": "Lidija Blimen",
"targets": {
"1": {
"shot1": 2,
"shot2": 9,
"shot3": 10,
"shot4": 2,
"shot5": 10
},
"2": {
"shot1": 8,
"shot2": 3,
"shot3": 7,
"shot4": 6,
"shot5": 8
},
"3": {
"shot1": 0,
"shot2": 7,
"shot3": 4,
"shot4": 1,
"shot5": 1
},
"4": {
"shot1": 2,
"shot2": 2,
"shot3": 4,
"shot4": 10,
"shot5": 1
}
},
"total_score": 97,
"completed": true
},
"47": {
"name": "Ljuba Mr\u0161ak",
"targets": {
"1": {
"shot1": 9,
"shot2": 1,
"shot3": 1,
"shot4": 5,
"shot5": 9
},
"2": {
"shot1": 2,
"shot2": 10,
"shot3": 10,
"shot4": 0,
"shot5": 9
},
"3": {
"shot1": 1,
"shot2": 5,
"shot3": 4,
"shot4": 10,
"shot5": 0
},
"4": {
"shot1": 3,
"shot2": 3,
"shot3": 2,
"shot4": 2,
"shot5": 2
}
},
"total_score": 88,
"completed": true
},
"46": {
"name": "Tijana \u0160tumpfl",
"targets": {
"1": {
"shot1": 1,
"shot2": 3,
"shot3": 2,
"shot4": 3,
"shot5": 3
},
"2": {
"shot1": 9,
"shot2": 5,
"shot3": 7,
"shot4": 7,
"shot5": 9
},
"3": {
"shot1": 3,
"shot2": 8,
"shot3": 1,
"shot4": 5,
"shot5": 6
},
"4": {
"shot1": 3,
"shot2": 0,
"shot3": 9,
"shot4": 9,
"shot5": 7
}
},
"total_score": 100,
"completed": true
},
"20": {
"name": "Jo\u017ee Preglav",
"targets": {
"1": {
"shot1": 4,
"shot2": 4,
"shot3": 9,
"shot4": 5,
"shot5": 2
},
"2": {
"shot1": 6,
"shot2": 0,
"shot3": 10,
"shot4": 0,
"shot5": 5
},
"3": {
"shot1": 7,
"shot2": 8,
"shot3": 9,
"shot4": 6,
"shot5": 5
},
"4": {
"shot1": 8,
"shot2": 7,
"shot3": 5,
"shot4": 5,
"shot5": 10
}
},
"total_score": 115,
"completed": true
},
"17": {
"name": "Du\u0161an Onuk",
"targets": {
"1": {
"shot1": 0,
"shot2": 3,
"shot3": 3,
"shot4": 2,
"shot5": 2
},
"2": {
"shot1": 2,
"shot2": 6,
"shot3": 1,
"shot4": 10,
"shot5": 10
},
"3": {
"shot1": 1,
"shot2": 7,
"shot3": 4,
"shot4": 5,
"shot5": 5
},
"4": {
"shot1": 10,
"shot2": 2,
"shot3": 8,
"shot4": 7,
"shot5": 9
}
},
"total_score": 97,
"completed": true
},
"15": {
"name": "Jan Pleterski",
"targets": {
"1": {
"shot1": 0,
"shot2": 0,
"shot3": 2,
"shot4": 0,
"shot5": 4
},
"2": {
"shot1": 1,
"shot2": 7,
"shot3": 8,
"shot4": 7,
"shot5": 9
},
"3": {
"shot1": 2,
"shot2": 8,
"shot3": 7,
"shot4": 2,
"shot5": 5
},
"4": {
"shot1": 9,
"shot2": 5,
"shot3": 1,
"shot4": 7,
"shot5": 3
}
},
"total_score": 87,
"completed": true
},
"49": {
"name": "Jolanda Verhnjak",
"targets": {
"1": {
"shot1": 8,
"shot2": 2,
"shot3": 7,
"shot4": 5,
"shot5": 0
},
"2": {
"shot1": 1,
"shot2": 8,
"shot3": 0,
"shot4": 4,
"shot5": 10
},
"3": {
"shot1": 0,
"shot2": 4,
"shot3": 4,
"shot4": 7,
"shot5": 4
},
"4": {
"shot1": 5,
"shot2": 6,
"shot3": 4,
"shot4": 6,
"shot5": 0
}
},
"total_score": 85,
"completed": true
}
},
"tournament_finished": true,
"created_at": "2025-09-08T20:15:56.266721",
"finished_at": "2025-09-08T20:16:01.584621"
},
"archived_at": "2025-09-08T20:16:01.584647"
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+10 -3
View File
@@ -18,6 +18,7 @@
"all": "All", "all": "All",
"status": "Status", "status": "Status",
"actions": "Actions", "actions": "Actions",
"select": "Select",
"select_all": "Select All", "select_all": "Select All",
"enable_selected": "Enable Selected", "enable_selected": "Enable Selected",
"disable_selected": "Disable Selected", "disable_selected": "Disable Selected",
@@ -75,6 +76,7 @@
"tournament_management": "Tournament Management", "tournament_management": "Tournament Management",
"tournament_type": "Tournament Type", "tournament_type": "Tournament Type",
"participants": "Participants", "participants": "Participants",
"rounds": "Rounds",
"start_tournament": "Start Tournament", "start_tournament": "Start Tournament",
"reset_tournament": "Reset Tournament", "reset_tournament": "Reset Tournament",
"tournament_setup": "Tournament Setup", "tournament_setup": "Tournament Setup",
@@ -127,7 +129,7 @@
"final_rankings": "Final Rankings", "final_rankings": "Final Rankings",
"final_rankings_best_4_of_5": "Final Rankings - Best 4 of 5 Tournaments", "final_rankings_best_4_of_5": "Final Rankings - Best 4 of 5 Tournaments",
"best_4_of_5": "Best 4 of 5 Tournaments", "best_4_of_5": "Best 4 of 5 Tournaments",
"league_champions": "League Champions", "league_champions": "🎖️ League Champions",
"participant": "Participant", "participant": "Participant",
"tournament_scores": "Tournament Scores", "tournament_scores": "Tournament Scores",
"final": "Final", "final": "Final",
@@ -166,7 +168,8 @@
"system": "System", "system": "System",
"camera": "Camera", "camera": "Camera",
"tournaments": "Tournaments", "tournaments": "Tournaments",
"results.most_tens": "Most 10s" "results.most_tens": "Most 10s",
"progress": "Progress"
}, },
"results": { "results": {
"results": "Results", "results": "Results",
@@ -190,6 +193,7 @@
"top_3_winners": "Top 3 Winners" "top_3_winners": "Top 3 Winners"
}, },
"players": { "players": {
"participants": "Participants",
"player": "Player", "player": "Player",
"players": "Players", "players": "Players",
"player_name": "Player Name", "player_name": "Player Name",
@@ -272,7 +276,10 @@
"finish_tournament_button": "Finish Tournament & Show Results", "finish_tournament_button": "Finish Tournament & Show Results",
"enter_scores_40_targets": "Enter scores for each participant (40 targets, 2 shots each). Score 0 = miss.", "enter_scores_40_targets": "Enter scores for each participant (40 targets, 2 shots each). Score 0 = miss.",
"enter_scores_20_targets": "Enter scores for each participant (20 targets, 2 shots each). Score 0 = miss.", "enter_scores_20_targets": "Enter scores for each participant (20 targets, 2 shots each). Score 0 = miss.",
"enter_scores_4_targets": "Enter scores for each participant (4 targets, 5 shots each). Score 0 = miss." "enter_scores_4_targets": "Enter scores for each participant (4 targets, 5 shots each). Score 0 = miss.",
"fill_zeros": "Fill Zeros",
"clear_all_scores": "Clear all scores",
"fill_empty_with_zero": "Fill empty entries with 0"
}, },
"mobile": { "mobile": {
"mobile_streams": "Mobile Streams", "mobile_streams": "Mobile Streams",
+10 -4
View File
@@ -18,6 +18,7 @@
"all": "Vse", "all": "Vse",
"status": "Status", "status": "Status",
"actions": "Dejanja", "actions": "Dejanja",
"select": "Izberi",
"select_all": "Izberi Vse", "select_all": "Izberi Vse",
"enable_selected": "Omogoči Izbrane", "enable_selected": "Omogoči Izbrane",
"disable_selected": "Onemogoči Izbrane", "disable_selected": "Onemogoči Izbrane",
@@ -74,6 +75,7 @@
"tournament_management": "Upravljanje Turnirja", "tournament_management": "Upravljanje Turnirja",
"tournament_type": "Tip Turnirja", "tournament_type": "Tip Turnirja",
"participants": "Udeleženci", "participants": "Udeleženci",
"rounds": "Krogi",
"start_tournament": "Začni Turnir", "start_tournament": "Začni Turnir",
"reset_tournament": "Ponastavi Turnir", "reset_tournament": "Ponastavi Turnir",
"tournament_setup": "Nastavitev Turnirja", "tournament_setup": "Nastavitev Turnirja",
@@ -132,7 +134,7 @@
"league_complete_info": "Vsi turnirji načrtovani. Zaključi trenutnega za končne rezultate.", "league_complete_info": "Vsi turnirji načrtovani. Zaključi trenutnega za končne rezultate.",
"view_league_results": "Oglej si Rezultate Lige", "view_league_results": "Oglej si Rezultate Lige",
"score_tournament": "Točkuj Turnir", "score_tournament": "Točkuj Turnir",
"league_champions": "Ligaški Prvaki", "league_champions": "🎖️ Ligaški Prvaki",
"participant": "Udeleženec", "participant": "Udeleženec",
"tournament_scores": "Rezultati Turnirjev", "tournament_scores": "Rezultati Turnirjev",
"final": "Končni", "final": "Končni",
@@ -171,8 +173,8 @@
"system": "Sistem", "system": "Sistem",
"camera": "Kamera", "camera": "Kamera",
"tournaments": "Turnirji", "tournaments": "Turnirji",
"results.most_tens": "Največ Desetk" "results.most_tens": "Največ Desetk",
"progress": "Stanje"
}, },
"results": { "results": {
"results": "Rezultati", "results": "Rezultati",
@@ -196,6 +198,7 @@
"top_3_winners": "Top 3 Zmagovalci" "top_3_winners": "Top 3 Zmagovalci"
}, },
"players": { "players": {
"participants": "Udeleženci",
"player": "Igralec", "player": "Igralec",
"players": "Igralci", "players": "Igralci",
"player_name": "Ime Igralca", "player_name": "Ime Igralca",
@@ -278,7 +281,10 @@
"finish_tournament_button": "Zaključi Turnir & Prikaži Rezultate", "finish_tournament_button": "Zaključi Turnir & Prikaži Rezultate",
"enter_scores_40_targets": "Vnesi rezultate za vsakega udeleženca (40 tarč, 2 strela na tarčo). Rezultat 0 = zgrešeno.", "enter_scores_40_targets": "Vnesi rezultate za vsakega udeleženca (40 tarč, 2 strela na tarčo). Rezultat 0 = zgrešeno.",
"enter_scores_20_targets": "Vnesi rezultate za vsakega udeleženca (20 tarč, 2 strela na tarčo). Rezultat 0 = zgrešeno.", "enter_scores_20_targets": "Vnesi rezultate za vsakega udeleženca (20 tarč, 2 strela na tarčo). Rezultat 0 = zgrešeno.",
"enter_scores_4_targets": "Vnesi rezultate za vsakega udeleženca (4 tarče, 5 strelov na tarčo). Rezultat 0 = zgrešeno." "enter_scores_4_targets": "Vnesi rezultate za vsakega udeleženca (4 tarče, 5 strelov na tarčo). Rezultat 0 = zgrešeno.",
"fill_zeros": "Napolni Ničle",
"clear_all_scores": "Počisti vse rezultate",
"fill_empty_with_zero": "Napolni prazne vnose z 0"
}, },
"mobile": { "mobile": {
"mobile_streams": "Mobilni Prenosi", "mobile_streams": "Mobilni Prenosi",
+155 -55
View File
@@ -24,7 +24,7 @@
height: calc(100vh - 70px); height: calc(100vh - 70px);
display: flex; display: flex;
flex-direction: column; flex-direction: column;
padding: 15px; padding: 0px;
gap: 15px; gap: 15px;
} }
@@ -36,6 +36,7 @@
text-align: center; text-align: center;
flex-shrink: 0; flex-shrink: 0;
position: relative; position: relative;
margin: 10px 15px 5px 15px;
} }
.tournament-header .nav-btn { .tournament-header .nav-btn {
@@ -104,85 +105,126 @@
flex: 1; flex: 1;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 8px; gap: 12px;
min-height: 0; min-height: 0;
overflow-y: auto; overflow-y: auto;
padding: 5px; overflow-x: hidden;
padding: 15px;
background: white;
border-radius: 12px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
margin: 5px 15px 15px 15px;
}
/* Custom scrollbar styling */
.rounds-container::-webkit-scrollbar {
width: 12px;
}
.rounds-container::-webkit-scrollbar-track {
background: #f5f5f5;
border-radius: 10px;
}
.rounds-container::-webkit-scrollbar-thumb {
background: #5a8fd1;
border-radius: 10px;
border: 2px solid #f5f5f5;
}
.rounds-container::-webkit-scrollbar-thumb:hover {
background: #4a7db8;
} }
.round-row { .round-row {
background: white; background: white;
border-radius: 10px; border-radius: 12px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1); box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
overflow: hidden; overflow: hidden;
transition: all 0.2s ease; transition: all 0.3s ease;
display: flex; display: flex;
flex-direction: row;
flex-shrink: 0; flex-shrink: 0;
min-height: 0; min-height: 0;
border: 2px solid #e9ecef;
border-left: 5px solid #9ca3af;
} }
.round-row.current { .round-row.current {
border-left: 4px solid #28a745; border-left: 5px solid #5a8fd1;
box-shadow: 0 4px 15px rgba(0, 123, 255, 0.25); border-color: #5a8fd1;
box-shadow: 0 6px 24px rgba(90, 143, 209, 0.25);
} }
.round-row.completed { .round-row.completed {
border-left: 4px solid #28a745; border-left: 5px solid #28a745;
opacity: 0.95; border-color: #28a745;
opacity: 0.98;
box-shadow: 0 4px 16px rgba(40, 167, 69, 0.15);
} }
.round-row.waiting { .round-row.waiting {
opacity: 0.8; opacity: 0.8;
border-color: #d1d5db;
} }
.round-header { .round-header {
background: #f8f9fa; background: linear-gradient(135deg, #f8f9fa 0%, #f0f1f3 100%);
border-right: 1px solid #e9ecef; border-right: 3px solid #e9ecef;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
padding: 10px 15px; padding: 14px 16px;
min-width: 120px;
flex-shrink: 0; flex-shrink: 0;
text-align: center;
min-width: 130px;
} }
.round-row.current .round-header { .round-row.current .round-header {
background: #e3f2fd; background: linear-gradient(135deg, #e3f2fd 0%, #bbdefb 100%);
border-right-color: #5a8fd1;
} }
.round-row.completed .round-header { .round-row.completed .round-header {
background: #e8f5e8; background: linear-gradient(135deg, #e8f5e8 0%, #c8e6c9 100%);
border-right-color: #28a745;
} }
.round-title { .round-title {
font-size: 1rem; font-size: 1.05rem;
font-weight: bold; font-weight: 700;
color: #333; color: #333;
margin-bottom: 4px; margin-bottom: 6px;
letter-spacing: 0.3px;
} }
.round-badge { .round-badge {
padding: 3px 8px; padding: 4px 10px;
border-radius: 10px; border-radius: 12px;
font-size: 0.65rem; font-size: 0.7rem;
font-weight: bold; font-weight: 700;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.5px;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.12);
} }
.current-badge { .current-badge {
background: #28a745; background: #5a8fd1;
color: white; color: white;
box-shadow: 0 2px 8px rgba(90, 143, 209, 0.3);
} }
.completed-badge { .completed-badge {
background: #28a745; background: #28a745;
color: white; color: white;
box-shadow: 0 2px 8px rgba(40, 167, 69, 0.3);
} }
.waiting-badge { .waiting-badge {
background: #6c757d; background: #9ca3af;
color: white; color: white;
box-shadow: 0 2px 6px rgba(156, 163, 175, 0.2);
} }
.positions-container { .positions-container {
@@ -191,59 +233,79 @@
grid-template-columns: repeat(6, 1fr); grid-template-columns: repeat(6, 1fr);
gap: 8px; gap: 8px;
padding: 12px; padding: 12px;
overflow: hidden;
} }
.position-card { .position-card {
background: white; background: white;
border: 2px solid #9ca3af; border: 2px solid #9ca3af;
border-radius: 10px; border-radius: 10px;
overflow: hidden; overflow: visible;
display: flex; display: flex;
flex-direction: row; flex-direction: row;
transition: all 0.3s ease; transition: all 0.3s ease;
box-shadow: 0 2px 6px rgba(156, 163, 175, 0.2); box-shadow: 0 2px 8px rgba(156, 163, 175, 0.18);
min-height: 70px; min-height: 80px;
flex-shrink: 0;
}
.position-card:hover {
transform: translateY(-2px);
box-shadow: 0 3px 12px rgba(156, 163, 175, 0.28);
} }
/* Current round - blue cards */ /* Current round - blue cards */
.round-row.current .position-card { .round-row.current .position-card {
border-color: #5a8fd1; border-color: #5a8fd1;
box-shadow: 0 2px 6px rgba(90, 143, 209, 0.2); box-shadow: 0 2px 8px rgba(90, 143, 209, 0.25);
}
.round-row.current .position-card:hover {
box-shadow: 0 3px 12px rgba(90, 143, 209, 0.35);
} }
.round-row.current .position-card .position-header { .round-row.current .position-card .position-header {
background: #5a8fd1; background: linear-gradient(135deg, #5a8fd1 0%, #4a7db8 100%);
} }
/* Completed round - green cards */ /* Completed round - green cards */
.round-row.completed .position-card { .round-row.completed .position-card {
border-color: #28a745; border-color: #28a745;
box-shadow: 0 2px 6px rgba(40, 167, 69, 0.2); box-shadow: 0 2px 8px rgba(40, 167, 69, 0.25);
}
.round-row.completed .position-card:hover {
box-shadow: 0 3px 12px rgba(40, 167, 69, 0.35);
} }
.round-row.completed .position-card .position-header { .round-row.completed .position-card .position-header {
background: #28a745; background: linear-gradient(135deg, #28a745 0%, #1e7e34 100%);
} }
/* Waiting round - gray cards */ /* Waiting round - gray cards */
.round-row.waiting .position-card { .round-row.waiting .position-card {
border-color: #9ca3af; border-color: #9ca3af;
box-shadow: 0 2px 6px rgba(156, 163, 175, 0.2); box-shadow: 0 2px 8px rgba(156, 163, 175, 0.2);
}
.round-row.waiting .position-card:hover {
box-shadow: 0 3px 10px rgba(156, 163, 175, 0.3);
} }
.round-row.waiting .position-card .position-header { .round-row.waiting .position-card .position-header {
background: #9ca3af; background: linear-gradient(135deg, #9ca3af 0%, #8b929f 100%);
} }
.position-header { .position-header {
background: #9ca3af; background: #9ca3af;
padding: 0; padding: 12px 0;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
flex-shrink: 0; flex-shrink: 0;
min-width: 50px; min-width: 50px;
width: 50px; width: 50px;
min-height: 80px;
} }
.position-card.empty .position-header { .position-card.empty .position-header {
@@ -251,14 +313,14 @@
} }
.position-number { .position-number {
font-size: 1.6rem; font-size: 2rem;
font-weight: 700; font-weight: 700;
color: white; color: white;
line-height: 1; line-height: 1;
} }
.position-body { .position-body {
padding: 10px 12px; padding: 12px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: center; justify-content: center;
@@ -266,6 +328,7 @@
flex: 1; flex: 1;
background: white; background: white;
border-radius: 0 8px 8px 0; border-radius: 0 8px 8px 0;
overflow: visible;
} }
.position-card.empty .position-body { .position-card.empty .position-body {
@@ -276,10 +339,13 @@
font-size: 1.15rem; font-size: 1.15rem;
font-weight: 600; font-weight: 600;
color: #2c3e50; color: #2c3e50;
line-height: 1.3; line-height: 1.4;
word-wrap: break-word; word-wrap: break-word;
max-width: 100%; max-width: 100%;
text-align: center; text-align: center;
white-space: normal;
overflow: visible;
text-overflow: clip;
} }
.position-card.empty .player-name { .position-card.empty .player-name {
@@ -372,26 +438,30 @@
border: 1px solid #ddd !important; border: 1px solid #ddd !important;
border-radius: 0 !important; border-radius: 0 !important;
box-shadow: none !important; box-shadow: none !important;
margin-bottom: 15px;
page-break-inside: avoid; page-break-inside: avoid;
display: block !important; display: flex !important;
flex-direction: row !important;
margin-bottom: 15px;
flex-shrink: 0 !important;
} }
.round-row.current, .round-row.current,
.round-row.completed, .round-row.completed,
.round-row.waiting { .round-row.waiting {
border-left: 1px solid #ddd !important; border-left: 2px solid #ddd !important;
opacity: 1 !important; opacity: 1 !important;
} }
.round-header { .round-header {
background: #f8f9fa !important; background: #f8f9fa !important;
border: none !important; border: none !important;
border-bottom: 1px solid #ddd !important; border-right: 1px solid #ddd !important;
display: flex !important; display: flex !important;
justify-content: space-between !important; flex-direction: column !important;
justify-content: center !important;
align-items: center !important; align-items: center !important;
padding: 10px 15px !important; padding: 10px 15px !important;
min-width: 130px !important;
} }
.round-row.current .round-header, .round-row.current .round-header,
@@ -403,7 +473,6 @@
.round-title { .round-title {
font-size: 14pt !important; font-size: 14pt !important;
font-weight: bold !important; font-weight: bold !important;
flex-shrink: 0;
} }
.round-badge { .round-badge {
@@ -411,9 +480,7 @@
} }
.round-print-info { .round-print-info {
display: flex !important; display: none !important;
align-items: center !important;
gap: 20px !important;
} }
.round-time-field { .round-time-field {
@@ -460,21 +527,23 @@
.positions-container { .positions-container {
display: grid !important; display: grid !important;
grid-template-columns: repeat(3, 1fr) !important; grid-template-columns: repeat(6, 1fr) !important;
gap: 10px !important; gap: 8px !important;
padding: 15px !important; padding: 15px !important;
overflow: visible !important;
} }
.position-card { .position-card {
border: 1px solid #5a8fd1 !important; border: 1px solid #5a8fd1 !important;
border-radius: 8px !important; border-radius: 4px !important;
overflow: hidden !important; overflow: visible !important;
background: white !important; background: white !important;
box-shadow: none !important; box-shadow: none !important;
min-height: 60px !important; min-height: 70px !important;
page-break-inside: avoid; page-break-inside: avoid;
display: flex !important; display: flex !important;
flex-direction: row !important; flex-direction: row !important;
flex-shrink: 0 !important;
} }
/* All cards in print have same blue color */ /* All cards in print have same blue color */
@@ -486,13 +555,42 @@
.position-header { .position-header {
background: #5a8fd1 !important; background: #5a8fd1 !important;
padding: 0 !important; padding: 10px 0 !important;
display: flex !important; display: flex !important;
align-items: center !important; align-items: center !important;
justify-content: center !important; justify-content: center !important;
flex-shrink: 0 !important; flex-shrink: 0 !important;
min-width: 40px !important; min-width: 40px !important;
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.current .position-card .position-header,
@@ -511,7 +609,7 @@
} }
.position-body { .position-body {
padding: 8px 10px !important; padding: 10px !important;
background: white !important; background: white !important;
flex: 1 !important; flex: 1 !important;
display: flex !important; display: flex !important;
@@ -525,8 +623,10 @@
} }
.player-name { .player-name {
font-size: 11pt !important; font-size: 10pt !important;
color: #2c3e50 !important; color: #2c3e50 !important;
white-space: normal !important;
overflow: visible !important;
} }
.position-card.empty .player-name { .position-card.empty .player-name {
+51 -7
View File
@@ -683,17 +683,12 @@
<div class="tournament-actions"> <div class="tournament-actions">
<a href="/tournament/draft" class="nav-link tournament-btn">📋 <span data-i18n="tournament.view_full_tournament_draft">Oglej si Celoten Žreb Turnirja</span></a> <a href="/tournament/draft" class="nav-link tournament-btn">📋 <span data-i18n="tournament.view_full_tournament_draft">Oglej si Celoten Žreb Turnirja</span></a>
<a href="/results/calculator" class="nav-link tournament-btn">🎯 <span data-i18n="scoring.results_calculator">Calculator</span></a>
<a href="/tournament" class="nav-link tournament-btn" id="manageTournamentLink">⚙️ <span data-i18n="tournament.manage_tournament">Upravljaj Turnir</span></a> <a href="/tournament" class="nav-link tournament-btn" id="manageTournamentLink">⚙️ <span data-i18n="tournament.manage_tournament">Upravljaj Turnir</span></a>
</div> </div>
</div> </div>
{% endif %} {% endif %}
{% if settings.tournament_active %}
<div class="settings-group">
<a href="/results/calculator" class="nav-link tournament-btn">🎯 <span data-i18n="scoring.results_calculator">Calculator</span></a>
</div>
{% endif %}
<!-- Tournaments Section --> <!-- Tournaments Section -->
<div class="settings-group"> <div class="settings-group">
<h4 data-i18n="league.tournaments">Turnirji</h4> <h4 data-i18n="league.tournaments">Turnirji</h4>
@@ -771,7 +766,7 @@
<!-- Version Information --> <!-- Version Information -->
<div class="version-info" style="margin-top: 30px; padding: 15px; text-align: center; border-top: 1px solid #e9ecef; color: #6c757d; font-size: 0.85rem;"> <div class="version-info" style="margin-top: 30px; padding: 15px; text-align: center; border-top: 1px solid #e9ecef; color: #6c757d; font-size: 0.85rem;">
Version 1.0.0 Version 1.0.1
</div> </div>
</div> </div>
</div> </div>
@@ -1466,11 +1461,60 @@
}, { once: true }); }, { once: true });
}); });
// TV Display Auto-Update Polling
// (Separate from remote control polling)
let lastDashboardStateHash = null;
let dashboardPollingInterval = null;
async function pollDashboardState() {
// Only poll when page is visible
if (document.visibilityState !== 'visible') {
return;
}
try {
const response = await fetch('/api/dashboard/state');
if (!response.ok) return;
const data = await response.json();
// Create a hash of the state to detect changes
const stateHash = JSON.stringify(data);
// If state changed, reload the page
if (lastDashboardStateHash !== null && stateHash !== lastDashboardStateHash) {
console.log('🔄 Tournament state changed, reloading TV display...');
window.location.reload();
}
lastDashboardStateHash = stateHash;
} catch (error) {
console.error('Dashboard polling error:', error);
// Silent failure - keep polling
}
}
// Start dashboard polling (every 3 seconds)
dashboardPollingInterval = setInterval(pollDashboardState, 3000);
// Initial poll
pollDashboardState();
// Pause polling when page is hidden
document.addEventListener('visibilitychange', () => {
if (document.visibilityState === 'visible') {
pollDashboardState();
}
});
// Cleanup on page unload // Cleanup on page unload
window.addEventListener('beforeunload', function() { window.addEventListener('beforeunload', function() {
if (remotePollingInterval) { if (remotePollingInterval) {
clearInterval(remotePollingInterval); clearInterval(remotePollingInterval);
} }
if (dashboardPollingInterval) {
clearInterval(dashboardPollingInterval);
}
}); });
</script> </script>
</body> </body>
+152 -97
View File
@@ -96,22 +96,25 @@
.league-container { .league-container {
height: calc(100vh - 90px); height: calc(100vh - 90px);
display: grid; display: grid;
grid-template-columns: 1fr 3fr; grid-template-columns: 1fr 2fr;
gap: 20px; gap: 20px;
padding: 20px; padding: 20px;
overflow: hidden;
} }
/* Left Column - Header & Champions */ /* Left Column - Header & Champions */
.left-column { .left-column {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 20px; gap: 0;
min-height: 0;
overflow: hidden;
} }
.league-header { .league-header {
border-radius: 12px; border-radius: 12px 12px 0 0;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); box-shadow: none;
padding: 25px; padding: 20px;
text-align: center; text-align: center;
flex-shrink: 0; flex-shrink: 0;
color: white; color: white;
@@ -149,37 +152,37 @@
} }
.header-logo { .header-logo {
height: 70px; height: 50px;
max-width: 180px; max-width: 150px;
object-fit: contain; object-fit: contain;
margin-bottom: 20px; margin-bottom: 10px;
filter: brightness(1.2) contrast(1.1); filter: brightness(1.2) contrast(1.1);
background-color: white; background-color: white;
padding: 10px; padding: 6px;
border-radius: 8px; border-radius: 6px;
backdrop-filter: blur(10px); backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.2); border: 1px solid rgba(255, 255, 255, 0.2);
} }
.league-title { .league-title {
font-size: 2.2rem; font-size: 1.8rem;
font-weight: 700; font-weight: 700;
color: rgb(255, 255, 255); color: rgb(255, 255, 255);
margin-bottom: 10px; margin-bottom: 8px;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
} }
.league-subtitle { .league-subtitle {
font-size: 1.1rem; font-size: 0.9rem;
color: rgba(255, 255, 255, 0.95); color: rgba(255, 255, 255, 0.95);
margin-bottom: 20px; margin-bottom: 12px;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
} }
.league-meta { .league-meta {
display: flex; display: flex;
justify-content: space-around; justify-content: space-around;
gap: 15px; gap: 10px;
} }
.meta-item { .meta-item {
@@ -187,7 +190,7 @@
} }
.meta-number { .meta-number {
font-size: 1.6rem; font-size: 1.2rem;
font-weight: 700; font-weight: 700;
color: #ffffff; color: #ffffff;
display: block; display: block;
@@ -195,83 +198,121 @@
} }
.meta-label { .meta-label {
font-size: 0.8rem; font-size: 0.65rem;
color: rgba(255, 255, 255, 0.9); color: rgba(255, 255, 255, 0.9);
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.5px; letter-spacing: 0.3px;
font-weight: 500; font-weight: 500;
} }
/* League Champion Section */ /* League Champion Section */
.champion-section { .champion-section {
background: white; background: white;
border-radius: 12px; border-radius: 0 0 12px 12px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
padding: 25px; padding: 12px;
flex: 1; flex: 1;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
overflow: visible;
min-height: 0;
border-top: 1px solid #e9ecef;
} }
.champion-title { .champion-title {
text-align: center; text-align: center;
font-size: 1.4rem; font-size: 0.9rem;
font-weight: 700; font-weight: 700;
color: #2c3e50; color: #2c3e50;
margin-bottom: 20px; margin-bottom: 8px;
flex-shrink: 0;
} }
.champion-container { .champion-container {
display: flex; display: grid;
flex-direction: column; grid-template-columns: repeat(3, 1fr);
gap: 15px; grid-template-rows: 0.75fr 0.75fr 1.5fr;
gap: 10px;
flex: 1; flex: 1;
overflow: hidden;
min-height: 0;
} }
.champion-card { .champion-card {
background: white; background: white;
border-radius: 12px; border-radius: 12px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
padding: 20px; padding: 12px 12px 18px 12px;
display: flex; display: flex;
flex-direction: column;
align-items: center; align-items: center;
gap: 20px; gap: 8px;
transition: all 0.2s ease; transition: all 0.3s ease;
position: relative; position: relative;
overflow: hidden; overflow: hidden;
border-left: 5px solid; border: 1px solid #e9ecef;
border-top: 6px solid;
justify-content: flex-end;
}
.champion-card::before {
content: '';
position: absolute;
top: 6px;
left: 1px;
right: 1px;
bottom: 1px;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.8) 0%, rgba(255, 255, 255, 0) 100%);
pointer-events: none;
z-index: 1;
border-radius: 0 0 11px 11px;
} }
.champion-card:hover { .champion-card:hover {
transform: translateY(-2px); box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.15);
} }
.champion-card.rank-1 { .champion-card.rank-1 {
border-left-color: #ffd700; border-top-color: #ffd700;
background: linear-gradient(135deg, #fff9e6 0%, #ffffff 100%); border-color: #ffd700;
background: linear-gradient(135deg, #fffbf0 0%, #fff9e6 100%);
grid-column: 2;
grid-row: 1 / 4;
} }
.champion-card.rank-2 { .champion-card.rank-2 {
border-left-color: #c0c0c0; border-top-color: #c0c0c0;
background: linear-gradient(135deg, #f5f5f5 0%, #ffffff 100%); border-color: #c0c0c0;
background: linear-gradient(135deg, #f5f5f5 0%, #f0f0f0 100%);
grid-column: 1;
grid-row: 2 / 4;
} }
.champion-card.rank-3 { .champion-card.rank-3 {
border-left-color: #cd7f32; border-top-color: #cd7f32;
background: linear-gradient(135deg, #fdf6f0 0%, #ffffff 100%); border-color: #cd7f32;
background: linear-gradient(135deg, #fff5f0 0%, #ffe8dc 100%);
grid-column: 3;
grid-row: 3;
} }
.rank-display { .rank-display {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
min-width: 60px; gap: 2px;
position: relative;
z-index: 2;
}
.medal {
font-size: 4.5rem;
line-height: 1;
} }
.rank-number { .rank-number {
font-size: 1.8rem; font-size: 1.9rem;
font-weight: bold; font-weight: 900;
color: #333; color: #333;
line-height: 1; line-height: 1;
} }
@@ -280,29 +321,31 @@
.champion-card.rank-2 .rank-number { color: #696969; } .champion-card.rank-2 .rank-number { color: #696969; }
.champion-card.rank-3 .rank-number { color: #8b4513; } .champion-card.rank-3 .rank-number { color: #8b4513; }
.rank-suffix {
font-size: 0.7rem;
color: #666;
text-transform: uppercase;
font-weight: bold;
}
.medal {
font-size: 1.5rem;
margin-top: 3px;
}
.participant-info { .participant-info {
flex: 1; flex: 1;
min-width: 0; min-width: 0;
text-align: center;
position: relative;
z-index: 2;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
} }
.participant-name { .participant-name {
font-size: 1.3rem; font-size: 1rem;
font-weight: bold; font-weight: 700;
color: #333; color: #2c3e50;
margin-bottom: 5px; margin: 0;
word-wrap: break-word; word-wrap: break-word;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
line-height: 1.2;
} }
.participant-details { .participant-details {
@@ -315,59 +358,80 @@
.participant-id { .participant-id {
background: #28a745; background: #28a745;
color: white; color: white;
padding: 3px 10px; padding: 6px 12px;
border-radius: 12px; border-radius: 12px;
font-size: 0.8rem; font-size: 0.75rem;
font-weight: bold; font-weight: 700;
display: inline-block; display: inline-block;
text-transform: uppercase;
letter-spacing: 0.5px;
box-shadow: 0 2px 8px rgba(40, 167, 69, 0.3);
} }
.joker-badge { .joker-badge {
background: #ffc107; background: #ffc107;
color: #856404; color: #856404;
padding: 3px 8px; padding: 6px 12px;
border-radius: 8px; border-radius: 12px;
font-size: 0.7rem; font-size: 0.75rem;
font-weight: bold; font-weight: 700;
display: inline-block; display: inline-block;
text-transform: uppercase;
letter-spacing: 0.5px;
box-shadow: 0 2px 8px rgba(255, 193, 7, 0.3);
} }
.score-display { .score-display {
text-align: right; text-align: center;
min-width: 100px; position: relative;
z-index: 2;
display: flex;
flex-direction: column;
align-items: center;
gap: 1px;
} }
.final-score { .score-number {
font-size: 2rem; font-size: 1.8rem;
font-weight: bold; font-weight: 900;
color: #28a745; color: #28a745;
line-height: 1; line-height: 1;
} }
.tens-count {
font-size: 1.2rem;
color: #ffc107;
font-weight: 700;
}
.total-score { .total-score {
font-size: 0.9rem; font-size: 0.8rem;
color: #666; color: #ffc107;
margin-top: 2px; font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.3px;
} }
.tens-count { .tens-count {
font-size: 0.9rem; font-size: 0.8rem;
color: #ffc107; color: #ffc107;
font-weight: bold; font-weight: 700;
margin-top: 2px; text-transform: uppercase;
letter-spacing: 0.3px;
} }
.score-label { .score-label {
font-size: 0.8rem; font-size: 0.6rem;
color: #666; color: #999;
text-transform: uppercase; text-transform: uppercase;
font-weight: bold; font-weight: 600;
letter-spacing: 0.3px;
} }
/* Right Column - League Table */ /* Right Column - League Table */
.right-column { .right-column {
background: white; background: white;
border-radius: 8px; border-radius: 12px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
overflow: hidden; overflow: hidden;
display: flex; display: flex;
@@ -376,13 +440,13 @@
.table-header { .table-header {
background: #f8f9fa; background: #f8f9fa;
padding: 15px 20px; padding: 12px 15px;
border-bottom: 1px solid #dee2e6; border-bottom: 1px solid #dee2e6;
flex-shrink: 0; flex-shrink: 0;
} }
.table-title { .table-title {
font-size: 1.25rem; font-size: 0.95rem;
font-weight: 600; font-weight: 600;
color: #2c3e50; color: #2c3e50;
margin: 0; margin: 0;
@@ -396,12 +460,12 @@
.league-table { .league-table {
width: 100%; width: 100%;
border-collapse: collapse; border-collapse: collapse;
font-size: 0.85rem; font-size: 0.75rem;
} }
.league-table th, .league-table th,
.league-table td { .league-table td {
padding: 7px 5px; padding: 6px 4px;
text-align: center; text-align: center;
border-bottom: 1px solid #f1f3f4; border-bottom: 1px solid #f1f3f4;
border-right: 1px solid #f1f3f4; border-right: 1px solid #f1f3f4;
@@ -421,20 +485,20 @@
.league-table th.player-col { .league-table th.player-col {
text-align: left; text-align: left;
width: 120px; width: 100px;
} }
.league-table th.tournament-col { .league-table th.tournament-col {
width: 70px; width: 60px;
} }
.league-table th.final-col { .league-table th.final-col {
width: 80px; width: 70px;
background: #e3f2fd; background: #e3f2fd;
} }
.league-table th.tens-col { .league-table th.tens-col {
width: 70px; width: 60px;
background: #fff3cd; background: #fff3cd;
} }
@@ -1043,10 +1107,6 @@
const topThree = processedParticipants.slice(0, 3); const topThree = processedParticipants.slice(0, 3);
return topThree.map(participant => { return topThree.map(participant => {
const suffix = participant.rank === 1 ? 'st' :
participant.rank === 2 ? 'nd' :
participant.rank === 3 ? 'rd' : 'th';
const medal = participant.rank === 1 ? '🥇' : const medal = participant.rank === 1 ? '🥇' :
participant.rank === 2 ? '🥈' : participant.rank === 2 ? '🥈' :
participant.rank === 3 ? '🥉' : ''; participant.rank === 3 ? '🥉' : '';
@@ -1055,21 +1115,16 @@
return ` return `
<div class="champion-card rank-${participant.rank}"> <div class="champion-card rank-${participant.rank}">
<div class="rank-display"> <div class="rank-display">
<div class="rank-number">${participant.rank}</div>
<div class="rank-suffix">${suffix}</div>
<div class="medal">${medal}</div> <div class="medal">${medal}</div>
</div> </div>
<div class="participant-info"> <div class="participant-info">
<div class="participant-name">${participant.name}</div> <div class="participant-name">${participant.name}</div>
<div class="participant-details">
<div class="participant-id">ID: ${participant.id}</div>
</div>
</div> </div>
<div class="score-display"> <div class="score-display">
<div class="final-score">${participant.final_score}</div> <div class="score-number">${participant.final_score}</div>
<div class="tens-count">🎯 ${participant.total_tens} × 10</div> <div class="tens-count">🎯 ${participant.total_tens}</div>
</div> </div>
</div> </div>
`; `;
File diff suppressed because it is too large Load Diff
+144 -99
View File
@@ -96,7 +96,7 @@
.tv-container { .tv-container {
height: calc(100vh - 90px); height: calc(100vh - 90px);
display: grid; display: grid;
grid-template-columns: 1fr 3fr; grid-template-columns: 1fr 2fr;
gap: 20px; gap: 20px;
padding: 20px; padding: 20px;
} }
@@ -105,18 +105,26 @@
.left-column { .left-column {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 20px; gap: 0;
overflow: hidden;
flex: 1;
min-height: 0;
} }
.results-header { .results-header {
border-radius: 12px; border-radius: 12px 12px 0 0;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); box-shadow: none;
padding: 25px; padding: 15px;
text-align: center; text-align: center;
flex-shrink: 0; flex-shrink: 0;
color: white; color: white;
position: relative; position: relative;
overflow: hidden; overflow: hidden;
min-height: 0;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
} }
/* Dynamic header colors based on tournament type */ /* Dynamic header colors based on tournament type */
@@ -149,37 +157,37 @@
} }
.header-logo { .header-logo {
height: 70px; height: 60px;
max-width: 180px; max-width: 160px;
object-fit: contain; object-fit: contain;
margin-bottom: 20px; margin-bottom: 12px;
filter: brightness(1.2) contrast(1.1); filter: brightness(1.2) contrast(1.1);
background-color: white; background-color: white;
padding: 10px; padding: 8px;
border-radius: 8px; border-radius: 8px;
backdrop-filter: blur(10px); backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.2); border: 1px solid rgba(255, 255, 255, 0.2);
} }
.results-title { .results-title {
font-size: 2.2rem; font-size: 2rem;
font-weight: 700; font-weight: 700;
color: rgb(255, 255, 255); color: rgb(255, 255, 255);
margin-bottom: 10px; margin-bottom: 6px;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
} }
.results-subtitle { .results-subtitle {
font-size: 1.1rem; font-size: 1rem;
color: rgba(255, 255, 255, 0.95); color: rgba(255, 255, 255, 0.95);
margin-bottom: 20px; margin-bottom: 12px;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
} }
.results-meta { .results-meta {
display: flex; display: flex;
justify-content: space-around; justify-content: space-around;
gap: 20px; gap: 12px;
} }
.meta-item { .meta-item {
@@ -187,7 +195,7 @@
} }
.meta-number { .meta-number {
font-size: 1.8rem; font-size: 1.2rem;
font-weight: 700; font-weight: 700;
color: #ffffff; color: #ffffff;
display: block; display: block;
@@ -195,83 +203,121 @@
} }
.meta-label { .meta-label {
font-size: 0.8rem; font-size: 0.65rem;
color: rgba(255, 255, 255, 0.9); color: rgba(255, 255, 255, 0.9);
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.5px; letter-spacing: 0.3px;
font-weight: 500; font-weight: 500;
} }
/* Modern Podium Design */ /* Modern Podium Design */
.podium-section { .podium-section {
background: white; background: white;
border-radius: 12px; border-radius: 0 0 12px 12px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); padding: 12px;
padding: 25px;
flex: 1; flex: 1;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
overflow: visible;
min-height: 0;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
border-top: 1px solid #e9ecef;
} }
.podium-title { .podium-title {
text-align: center; text-align: center;
font-size: 1.4rem; font-size: 0.9rem;
font-weight: 700; font-weight: 700;
color: #2c3e50; color: #2c3e50;
margin-bottom: 20px; margin-bottom: 8px;
} }
.podium-container { .podium-container {
display: flex; display: grid;
flex-direction: column; grid-template-columns: repeat(3, 1fr);
gap: 15px; grid-template-rows: 0.75fr 0.75fr 1.5fr;
gap: 10px;
overflow: hidden;
flex: 1; flex: 1;
min-height: 0;
} }
.podium-card { .podium-card {
background: white; background: white;
border-radius: 12px; border-radius: 12px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
padding: 20px; padding: 12px 12px 18px 12px;
display: flex; display: flex;
flex-direction: column;
align-items: center; align-items: center;
gap: 20px; gap: 8px;
transition: all 0.2s ease; transition: all 0.3s ease;
position: relative; position: relative;
overflow: hidden; overflow: hidden;
border-left: 5px solid; border-top: 6px solid;
border: 1px solid #e9ecef;
border-top-width: 6px;
justify-content: flex-end;
}
.podium-card::before {
content: '';
position: absolute;
top: 6px;
left: 1px;
right: 1px;
bottom: 1px;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.8) 0%, rgba(255, 255, 255, 0) 100%);
pointer-events: none;
z-index: 1;
border-radius: 0 0 11px 11px;
} }
.podium-card:hover { .podium-card:hover {
transform: translateY(-2px); box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.15);
} }
.podium-card.rank-1 { .podium-card.rank-1 {
border-left-color: #ffd700; border-top-color: #ffd700;
background: linear-gradient(135deg, #fff9e6 0%, #ffffff 100%); border-color: #ffd700;
background: linear-gradient(135deg, #fffbf0 0%, #fff9e6 100%);
grid-column: 2;
grid-row: 1 / 4;
} }
.podium-card.rank-2 { .podium-card.rank-2 {
border-left-color: #c0c0c0; border-top-color: #c0c0c0;
background: linear-gradient(135deg, #f5f5f5 0%, #ffffff 100%); border-color: #c0c0c0;
background: linear-gradient(135deg, #f5f5f5 0%, #f0f0f0 100%);
grid-column: 1;
grid-row: 2 / 4;
} }
.podium-card.rank-3 { .podium-card.rank-3 {
border-left-color: #cd7f32; border-top-color: #cd7f32;
background: linear-gradient(135deg, #fdf6f0 0%, #ffffff 100%); border-color: #cd7f32;
background: linear-gradient(135deg, #fff5f0 0%, #ffe8dc 100%);
grid-column: 3;
grid-row: 3;
} }
.rank-display { .rank-display {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
min-width: 60px; gap: 2px;
position: relative;
z-index: 2;
}
.medal {
font-size: 4.5rem;
line-height: 1;
} }
.rank-number { .rank-number {
font-size: 1.8rem; font-size: 1.9rem;
font-weight: bold; font-weight: 900;
color: #333; color: #333;
line-height: 1; line-height: 1;
} }
@@ -280,71 +326,74 @@
.podium-card.rank-2 .rank-number { color: #696969; } .podium-card.rank-2 .rank-number { color: #696969; }
.podium-card.rank-3 .rank-number { color: #8b4513; } .podium-card.rank-3 .rank-number { color: #8b4513; }
.rank-suffix {
font-size: 0.7rem;
color: #666;
text-transform: uppercase;
font-weight: bold;
}
.medal {
font-size: 1.5rem;
margin-top: 3px;
}
.participant-info { .participant-info {
flex: 1; flex: 1;
min-width: 0; min-width: 0;
text-align: center;
position: relative;
z-index: 2;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
} }
.participant-name { .participant-name {
font-size: 1.3rem; font-size: 1rem;
font-weight: bold; font-weight: 700;
color: #333; color: #2c3e50;
margin-bottom: 5px; margin: 0;
word-wrap: break-word; word-wrap: break-word;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
line-height: 1.2;
} }
.participant-id { .participant-id {
background: #28a745; display: none;
color: white;
padding: 3px 10px;
border-radius: 12px;
font-size: 0.8rem;
font-weight: bold;
display: inline-block;
} }
.score-display { .score-display {
text-align: right; text-align: center;
min-width: 100px; position: relative;
z-index: 2;
display: flex;
flex-direction: column;
align-items: center;
gap: 1px;
} }
.score-number { .score-number {
font-size: 2rem; font-size: 1.8rem;
font-weight: bold; font-weight: 900;
color: #28a745; color: #28a745;
line-height: 1; line-height: 1;
} }
.tens-count { .tens-count {
font-size: 1rem; font-size: 1.2rem;
color: #ffc107; color: #ffc107;
font-weight: bold; font-weight: 700;
margin-top: 2px; text-transform: uppercase;
letter-spacing: 0.3px;
} }
.score-label { .score-label {
font-size: 0.8rem; font-size: 0.6rem;
color: #666; color: #999;
text-transform: uppercase; text-transform: uppercase;
font-weight: bold; font-weight: 600;
letter-spacing: 0.3px;
} }
/* Right Column - Full Results Table */ /* Right Column - Full Results Table */
.right-column { .right-column {
background: white; background: white;
border-radius: 8px; border-radius: 12px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
overflow: hidden; overflow: hidden;
display: flex; display: flex;
@@ -353,13 +402,13 @@
.table-header { .table-header {
background: #f8f9fa; background: #f8f9fa;
padding: 15px 20px; padding: 8px 12px;
border-bottom: 1px solid #dee2e6; border-bottom: 1px solid #dee2e6;
flex-shrink: 0; flex-shrink: 0;
} }
.table-title { .table-title {
font-size: 1.25rem; font-size: 0.95rem;
font-weight: 600; font-weight: 600;
color: #2c3e50; color: #2c3e50;
margin: 0; margin: 0;
@@ -367,17 +416,19 @@
.table-container { .table-container {
flex: 1; flex: 1;
overflow-y: auto; overflow: auto;
min-height: 0;
} }
.results-table { .results-table {
width: 100%; width: 100%;
border-collapse: collapse; border-collapse: collapse;
font-size: 0.75rem;
} }
.results-table th, .results-table th,
.results-table td { .results-table td {
padding: 10px 8px; padding: 4px 6px;
text-align: center; text-align: center;
border-bottom: 1px solid #f1f3f4; border-bottom: 1px solid #f1f3f4;
border-right: 1px solid #f1f3f4; border-right: 1px solid #f1f3f4;
@@ -388,15 +439,15 @@
font-weight: 600; font-weight: 600;
color: #495057; color: #495057;
text-transform: uppercase; text-transform: uppercase;
font-size: 0.8rem; font-size: 0.65rem;
letter-spacing: 0.5px; letter-spacing: 0.3px;
position: sticky; position: sticky;
top: 0; top: 0;
z-index: 10; z-index: 10;
} }
.results-table th.rank-col { .results-table th.rank-col {
width: 80px; width: auto;
} }
.results-table th.player-col { .results-table th.player-col {
@@ -405,12 +456,12 @@
} }
.results-table th.score-col { .results-table th.score-col {
width: 100px; width: auto;
background: #e3f2fd; background: #e3f2fd;
} }
.results-table th.tens-col { .results-table th.tens-col {
width: 100px; width: auto;
background: #fff3cd; background: #fff3cd;
} }
@@ -452,30 +503,30 @@
.rank-2 { color: #6c757d; } .rank-2 { color: #6c757d; }
.rank-3 { color: #8b4513; } .rank-3 { color: #8b4513; }
.results-table tbody {
display: table-row-group;
}
.player-cell { .player-cell {
text-align: left !important; text-align: left !important;
padding-left: 12px !important;
} }
.player-name { .player-name {
font-size: 1rem; font-size: 0.75rem;
font-weight: 600; font-weight: 600;
color: #2c3e50; color: #2c3e50;
word-break: keep-all;
overflow-wrap: break-word;
hyphens: none;
} }
.score-cell { .score-cell {
background: #e3f2fd !important; background: #e3f2fd !important;
font-size: 1.1rem; font-size: 0.75rem;
font-weight: 700; font-weight: 700;
color: #1976d2; color: #1976d2;
} }
.tens-cell { .tens-cell {
background: #fff3cd !important; background: #fff3cd !important;
font-size: 1rem; font-size: 0.75rem;
font-weight: 700; font-weight: 700;
color: #856404; color: #856404;
} }
@@ -484,10 +535,10 @@
.stats-footer { .stats-footer {
background: white; background: white;
border-top: 1px solid #dee2e6; border-top: 1px solid #dee2e6;
padding: 10px 20px; padding: 6px 15px;
display: flex; display: flex;
justify-content: space-around; justify-content: space-around;
font-size: 0.8rem; font-size: 0.7rem;
color: #6c757d; color: #6c757d;
flex-shrink: 0; flex-shrink: 0;
} }
@@ -833,10 +884,6 @@
const topThree = processedParticipants.slice(0, 3); const topThree = processedParticipants.slice(0, 3);
return topThree.map(participant => { return topThree.map(participant => {
const suffix = participant.rank === 1 ? 'st' :
participant.rank === 2 ? 'nd' :
participant.rank === 3 ? 'rd' : 'th';
const medal = participant.rank === 1 ? '🥇' : const medal = participant.rank === 1 ? '🥇' :
participant.rank === 2 ? '🥈' : participant.rank === 2 ? '🥈' :
participant.rank === 3 ? '🥉' : ''; participant.rank === 3 ? '🥉' : '';
@@ -844,8 +891,6 @@
return ` return `
<div class="podium-card rank-${participant.rank}"> <div class="podium-card rank-${participant.rank}">
<div class="rank-display"> <div class="rank-display">
<div class="rank-number">${participant.rank}</div>
<div class="rank-suffix">${suffix}</div>
<div class="medal">${medal}</div> <div class="medal">${medal}</div>
</div> </div>
@@ -856,7 +901,7 @@
<div class="score-display"> <div class="score-display">
<div class="score-number">${participant.total_score}</div> <div class="score-number">${participant.total_score}</div>
<div class="tens-count">🎯 ${participant.tens_count} × 10</div> <div class="tens-count">🎯 ${participant.tens_count}</div>
</div> </div>
</div> </div>
`; `;
+8
View File
@@ -2463,6 +2463,10 @@
if (response.ok) { if (response.ok) {
const result = await response.json(); const result = await response.json();
// Open main page in new tab for TV display
window.open('/', '_blank', 'noopener,noreferrer');
alert('Tournament started successfully!'); alert('Tournament started successfully!');
window.location.reload(); window.location.reload();
} else { } else {
@@ -2502,6 +2506,10 @@
if (response.ok) { if (response.ok) {
const result = await response.json(); const result = await response.json();
// Open main page in new tab for TV display
window.open('/', '_blank', 'noopener,noreferrer');
alert('Tournament started successfully!'); alert('Tournament started successfully!');
window.location.reload(); window.location.reload();
} else { } else {
+31 -1
View File
@@ -1,5 +1,5 @@
""" """
TV_APP V1.0.0 - Tournament and League Management System TV_APP V1.0.1 - Tournament and League Management System
Flask web application for managing tournaments with multi-camera streaming Flask web application for managing tournaments with multi-camera streaming
""" """
@@ -1698,6 +1698,36 @@ def get_league():
else: else:
return jsonify({'status': 'error', 'message': 'No league found'}), 404 return jsonify({'status': 'error', 'message': 'No league found'}), 404
@app.route('/api/dashboard/state', methods=['GET'])
def api_dashboard_state():
"""Get current dashboard state for polling updates (TV display sync)"""
tournament_state = load_tournament_state()
league_state = load_league_state()
response_data = {
'tournament_active': tournament_state is not None,
'current_round': None,
'total_rounds': None,
'league_active': league_state is not None,
'league_tournament': None,
'league_total': None,
'player_names': []
}
if tournament_state:
response_data['current_round'] = tournament_state.get('current_round', 1)
response_data['total_rounds'] = tournament_state.get('total_rounds', 1)
current_round_data = get_current_round_data()
if current_round_data:
response_data['player_names'] = [p['name'] for p in current_round_data.get('players', [])]
if league_state:
response_data['league_tournament'] = league_state.get('current_tournament', 1)
response_data['league_total'] = league_state.get('total_tournaments', 6)
return jsonify(response_data)
# Add this route to your Flask app (around line 850, with the other mobile routes) # Add this route to your Flask app (around line 850, with the other mobile routes)
@app.route('/mobile/remote') @app.route('/mobile/remote')