feat: add scoreboard with player names, per-category leaderboards, and themed tables
Add player_name column to games (migration included), with regex-based validation and anti-abuse sanitization. New /scoreboard page shows recent games from localStorage, popular categories with play counts, and top-10 per-category leaderboards sorted by completion time. Also includes two-click reverse word matching, base URL prefix support for reverse-proxy hosting, BasePageHandler refactoring, themed table CSS for all 5 themes, and comprehensive test coverage for player names and scoreboard API. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
9319f08875
commit
36c3c712fe
+7
-7
@@ -19,12 +19,12 @@
|
||||
})();
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<body data-base-url="{{ base_url }}">
|
||||
{% block active_page %}{% end %}
|
||||
|
||||
<nav class="navbar navbar-expand-lg">
|
||||
<div class="container">
|
||||
<a class="navbar-brand" href="/">
|
||||
<a class="navbar-brand" href="{{ base_url }}">
|
||||
<i class="bi bi-search"></i> Word Search
|
||||
</a>
|
||||
<button class="navbar-toggler" type="button"
|
||||
@@ -35,31 +35,31 @@
|
||||
<ul class="navbar-nav ms-auto">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {% if active_page == 'home' %}active{% end %}"
|
||||
href="/">
|
||||
href="{{ base_url }}">
|
||||
<i class="bi bi-house-door"></i> Home
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {% if active_page == 'play' %}active{% end %}"
|
||||
href="/game">
|
||||
href="{{ base_url }}game">
|
||||
<i class="bi bi-controller"></i> Play
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {% if active_page == 'howtoplay' %}active{% end %}"
|
||||
href="/howtoplay">
|
||||
href="{{ base_url }}howtoplay">
|
||||
<i class="bi bi-question-circle"></i> How to Play
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {% if active_page == 'scoreboard' %}active{% end %}"
|
||||
href="/scoreboard">
|
||||
href="{{ base_url }}scoreboard">
|
||||
<i class="bi bi-trophy"></i> Scoreboard
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {% if active_page == 'about' %}active{% end %}"
|
||||
href="/about">
|
||||
href="{{ base_url }}about">
|
||||
<i class="bi bi-info-circle"></i> About
|
||||
</a>
|
||||
</li>
|
||||
|
||||
Reference in New Issue
Block a user