From 08bf8204e3ecbe331e02322a37825dea5c171928 Mon Sep 17 00:00:00 2001 From: FloPinguin <25036848+FloPinguin@users.noreply.github.com> Date: Sun, 22 Feb 2026 18:11:57 +0100 Subject: [PATCH] style: enhance leaderboard player list layout with sticky headers for improved usability --- .../leaderboard/LeaderboardClanTable.ts | 212 +++++++++--------- .../leaderboard/LeaderboardPlayerList.ts | 79 +++---- 2 files changed, 136 insertions(+), 155 deletions(-) diff --git a/src/client/components/leaderboard/LeaderboardClanTable.ts b/src/client/components/leaderboard/LeaderboardClanTable.ts index a1e428404..da2664c89 100644 --- a/src/client/components/leaderboard/LeaderboardClanTable.ts +++ b/src/client/components/leaderboard/LeaderboardClanTable.ts @@ -196,113 +196,9 @@ export class LeaderboardClanTable extends LitElement { return html`
-
- - - - - - - - - - - - - - - - - - - -
- ${translateText("leaderboard_modal.rank")} - - ${translateText("leaderboard_modal.clan")} - - - - - - - - -
+
@@ -313,6 +209,104 @@ export class LeaderboardClanTable extends LitElement { + + + + + + + + + + ${sorted.map((clan, index) => { const displayRank = index + 1; @@ -369,14 +363,14 @@ export class LeaderboardClanTable extends LitElement { @@ -387,7 +381,7 @@ export class LeaderboardClanTable extends LitElement { 1 ? "text-green-400" : "text-red-400"}" - >${clan.weightedWLRatio.toLocaleString("fullwide", { + >${clan.weightedWLRatio.toLocaleString(undefined, { maximumFractionDigits: 2, })} diff --git a/src/client/components/leaderboard/LeaderboardPlayerList.ts b/src/client/components/leaderboard/LeaderboardPlayerList.ts index 5763b0f9b..8322c0bc5 100644 --- a/src/client/components/leaderboard/LeaderboardPlayerList.ts +++ b/src/client/components/leaderboard/LeaderboardPlayerList.ts @@ -1,4 +1,4 @@ -import { html, LitElement } from "lit"; +import { html, LitElement, nothing } from "lit"; import { customElement, query, state } from "lit/decorators.js"; import { PlayerLeaderboardEntry } from "../../../core/ApiSchemas"; import { RankedType } from "../../../core/game/Game"; @@ -210,7 +210,6 @@ export class LeaderboardPlayerList extends LitElement { private renderPlayerRow(player: PlayerLeaderboardEntry) { const isCurrentUser = this.currentUserEntry?.playerId === player.playerId; const displayRank = player.rank; - const winRate = player.games > 0 ? player.wins / player.games : 0; const rankColor = { @@ -258,23 +257,17 @@ export class LeaderboardPlayerList extends LitElement { + + + + + + + + + ${this.playerData.map((player) => this.renderPlayerRow(player))} @@ -436,7 +418,7 @@ export class LeaderboardPlayerList extends LitElement { .showStickyUser ? "opacity-100 translate-y-0" : "opacity-0 translate-y-3 pointer-events-none"}" - aria-hidden=${this.showStickyUser ? "false" : "true"} + aria-hidden=${this.showStickyUser ? nothing : "true"} >
${this.currentUserEntry.username}${this.currentUserEntry.clanTag + ? this.currentUserEntry.username.replace( + /^\[.*?\]\s*/, + "", + ) + : this.currentUserEntry.username}
+ ${translateText("leaderboard_modal.rank")} + + ${translateText("leaderboard_modal.clan")} + + + + + + + + +
- ${clan.weightedWins.toLocaleString("fullwide", { + ${clan.weightedWins.toLocaleString(undefined, { maximumFractionDigits: 1, })} - ${clan.weightedLosses.toLocaleString("fullwide", { + ${clan.weightedLosses.toLocaleString(undefined, { maximumFractionDigits: 1, })} ${player.elo} - ${translateText("leaderboard_modal.elo")} ${player.games} - ${translateText("leaderboard_modal.games")}
= 0.5 ? "text-green-400" : "text-red-400"}" - >${(winRate * 100).toFixed(1)}%${(player.winRate * 100).toFixed(1)}% -
- - - - - - - - - - - - - - - - - -
- ${translateText("leaderboard_modal.rank")} - - ${translateText("leaderboard_modal.player")} - - ${translateText("leaderboard_modal.elo")} - - ${translateText("leaderboard_modal.games")} - - ${translateText("leaderboard_modal.win_loss_ratio")} -
+
+ ${translateText("leaderboard_modal.rank")} + + ${translateText("leaderboard_modal.player")} + + ${translateText("leaderboard_modal.elo")} + + ${translateText("leaderboard_modal.games")} + + ${translateText("leaderboard_modal.win_loss_ratio")} +