interactive tables for game history on variants

This commit is contained in:
Maximilian Keßler 2023-12-05 15:44:08 +01:00
parent 31f71c6d5c
commit de146b779a
Signed by: max
GPG key ID: BCC5A619923C0BA5
2 changed files with 47 additions and 19 deletions

View file

@ -150,6 +150,17 @@ def get_games():
return [GameRow(**row) for row in cur.fetchall()] return [GameRow(**row) for row in cur.fetchall()]
def group_games_by_var_id_and_num_players(games: List[GameRow]):
ret = {}
for game in games:
if game.variant_id not in ret.keys():
ret[game.variant_id] = {}
if game.num_players not in ret[game.variant_id].keys():
ret[game.variant_id][game.num_players] = []
ret[game.variant_id][game.num_players].append(dataclasses.asdict(game))
return ret
def get_rating_lists() -> Dict[int, List[PlayerEntry]]: def get_rating_lists() -> Dict[int, List[PlayerEntry]]:
cur = conn_manager.get_connection().cursor() cur = conn_manager.get_connection().cursor()
rating_types = [utils.get_rating_type(x) for x in [False, True]] rating_types = [utils.get_rating_type(x) for x in [False, True]]
@ -338,6 +349,9 @@ def render_leaderboard():
with open(output_file, 'w') as f: with open(output_file, 'w') as f:
f.write(rendered_html) f.write(rendered_html)
games = get_games()
grouped_games = group_games_by_var_id_and_num_players(games)
variant_template = env.get_template('variant.html') variant_template = env.get_template('variant.html')
for variant_id, stats in variant_stats.items(): for variant_id, stats in variant_stats.items():
rendered_var = variant_template.render( rendered_var = variant_template.render(
@ -346,7 +360,7 @@ def render_leaderboard():
latest_run=datetime.datetime.now().isoformat(), latest_run=datetime.datetime.now().isoformat(),
variant_stats=stats, variant_stats=stats,
variant_name=variant_names[variant_id], variant_name=variant_names[variant_id],
games=[dataclasses.asdict(game) for game in get_games()] variant_games=grouped_games.get(variant_id,{})
) )
output_file = out_dir / 'variant' / str(variant_id) / 'index.html' output_file = out_dir / 'variant' / str(variant_id) / 'index.html'

View file

@ -89,29 +89,43 @@
</ul> </ul>
</div> </div>
<div id="table-{{num_players}}p"></div> <div id="table-{{num_players}}p"></div>
<script>
let tabledata_{{num_players}} = [
{% for game in games %}
{{game}},
{% endfor %}
];
var table = new Tabulator("#table-{{num_players}}p", {
height: 205,
data:tabledata_{{num_players}},
layout:"fitColumns",
columns:[
{title: "Game", field: "game_id", width: 150},
{title: "# Players", field: "num_players", width:200},
{title: "Seed", field: "seed"},
],
});
</script>
</div> </div>
</div> </div>
{% endfor %} {% endfor %}
</div> </div>
<!-- JavaScript part for the interactive tables -->
<script>
{% for num_players, games in variant_games.items() %}
let tabledata_{{num_players}} = [
{% for game in games %}
{{game }},
{% endfor %}
];
var table_{{num_players}} = new Tabulator("#table-{{num_players}}p", {
height: 205,
data:tabledata_{{num_players}},
layout:"fitColumns",
columns: [
{title: "id", field: "league_id"},
{title: "Game", field: "game_id", formatter: "link", formatterParams:{
urlPrefix: "https://hanab.live/replay/",
target:"_blank"
}},
{title: "Players", field: "users"},
{title: "Seed", field: "seed", formatter: "link", formatterParams: {
urlPrefix: "https://hanab.live/seed/",
target:"_blank"
}},
{title: "Score", field: "score"},
{title: "BDR", field: "num_bdrs"},
{title: "Result", field: "game_outcomes"}
],
});
{% endfor %}
</script>
<footer class="footer mt-auto py-3 bg-light"> <footer class="footer mt-auto py-3 bg-light">
<div class="container text-center"> <div class="container text-center">
<span class="text-muted">{{ total_games_played }} games | {{ total_players }} players | Thanks for playing <3</span><br> <span class="text-muted">{{ total_games_played }} games | {{ total_players }} players | Thanks for playing <3</span><br>