- ${translateText("leaderboard.player")}
+
this.setSort("tiles")}
>
- ${translateText("leaderboard.owned")}
+ 🌐
${this._sortKey === "tiles"
? this._sortOrder === "asc"
? "⬆️"
@@ -200,10 +211,15 @@ export class Leaderboard extends LitElement implements Layer {
: ""}
this.setSort("gold")}
>
- ${translateText("leaderboard.gold")}
+

${this._sortKey === "gold"
? this._sortOrder === "asc"
? "⬆️"
@@ -211,10 +227,15 @@ export class Leaderboard extends LitElement implements Layer {
: ""}
this.setSort("maxtroops")}
>
- ${translateText("leaderboard.maxtroops")}
+

${this._sortKey === "maxtroops"
? this._sortOrder === "asc"
? "⬆️"
diff --git a/src/client/graphics/layers/PlayerInfoOverlay.ts b/src/client/graphics/layers/PlayerInfoOverlay.ts
index e720738f4b..5a9f969666 100644
--- a/src/client/graphics/layers/PlayerInfoOverlay.ts
+++ b/src/client/graphics/layers/PlayerInfoOverlay.ts
@@ -498,13 +498,13 @@ export class PlayerInfoOverlay extends LitElement implements Layer {
return html`
this.hide()}
@contextmenu=${(e: MouseEvent) => e.preventDefault()}
>
${this.player !== null ? this.renderPlayerInfo(this.player) : ""}
${this.unit !== null ? this.renderUnitInfo(this.unit) : ""}
diff --git a/src/client/graphics/layers/ReplayPanel.ts b/src/client/graphics/layers/ReplayPanel.ts
index ea48bbb609..28d43a4f37 100644
--- a/src/client/graphics/layers/ReplayPanel.ts
+++ b/src/client/graphics/layers/ReplayPanel.ts
@@ -19,8 +19,8 @@ export class ShowReplayPanelEvent {
@customElement("replay-panel")
export class ReplayPanel extends LitElement implements Layer {
- public game: GameView | undefined;
- public eventBus: EventBus | undefined;
+ @property({ attribute: false }) game: GameView | undefined;
+ @property({ attribute: false }) eventBus: EventBus | undefined;
@property({ type: Boolean })
visible: boolean = false;
@@ -31,12 +31,21 @@ export class ReplayPanel extends LitElement implements Layer {
@property({ type: Boolean })
isSingleplayer = false;
+ private _eventBusSubscribed = false;
+
createRenderRoot() {
return this; // Enable Tailwind CSS
}
- init() {
- if (this.eventBus) {
+ init() {}
+
+ willUpdate(changed: Map) {
+ if (
+ !this._eventBusSubscribed &&
+ this.eventBus &&
+ (changed.has("eventBus") || changed.size === 0)
+ ) {
+ this._eventBusSubscribed = true;
this.eventBus.on(ShowReplayPanelEvent, (event: ShowReplayPanelEvent) => {
this.visible = event.visible;
this.isSingleplayer = event.isSingleplayer;
diff --git a/src/client/graphics/layers/TeamStats.ts b/src/client/graphics/layers/TeamStats.ts
index 6e846bcdf6..2625fdd605 100644
--- a/src/client/graphics/layers/TeamStats.ts
+++ b/src/client/graphics/layers/TeamStats.ts
@@ -27,8 +27,8 @@ interface TeamEntry {
@customElement("team-stats")
export class TeamStats extends LitElement implements Layer {
- public game: GameView;
- public eventBus: EventBus;
+ @property({ attribute: false }) game!: GameView;
+ @property({ attribute: false }) eventBus!: EventBus;
@property({ type: Boolean }) visible = false;
teams: TeamEntry[] = [];