From 243377ea7011422cb2bb6509cd1d461c566973c8 Mon Sep 17 00:00:00 2001 From: Frank Tovar Date: Wed, 4 Feb 2026 15:17:25 +0100 Subject: [PATCH] Show emoji votes and my vote in results --- Endpoints/ResultsEndpoints.cs | 5 +++++ wwwroot/js/i18n.js | 10 ++++------ wwwroot/js/ui.js | 21 +++++++++++++++------ 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/Endpoints/ResultsEndpoints.cs b/Endpoints/ResultsEndpoints.cs index 8cb381a..16d0903 100644 --- a/Endpoints/ResultsEndpoints.cs +++ b/Endpoints/ResultsEndpoints.cs @@ -34,6 +34,11 @@ public static class ResultsEndpoints Total = s.Votes.Sum(v => v.Score), Count = s.Votes.Count, Average = s.Votes.Count == 0 ? 0 : s.Votes.Average(v => v.Score), + Votes = s.Votes.Select(v => v.Score).ToList(), + MyVote = s.Votes + .Where(v => v.PlayerId == player.Id) + .Select(v => (int?)v.Score) + .FirstOrDefault(), s.ScreenshotUrl, s.YoutubeUrl, s.GameUrl, diff --git a/wwwroot/js/i18n.js b/wwwroot/js/i18n.js index 9b4ceab..75939fe 100644 --- a/wwwroot/js/i18n.js +++ b/wwwroot/js/i18n.js @@ -71,9 +71,8 @@ const translations = { "results.rank": "Rank", "results.game": "Game", "results.author": "Author", - "results.votes": "Votes", - "results.avg": "Average", - "results.total": "Total", + "results.votesList": "Votes", + "results.myVote": "Your vote", "results.links": "Links", "results.link.site": "Site ↗", "results.link.youtube": "YouTube ↗", @@ -177,9 +176,8 @@ const translations = { "results.rank": "Rang", "results.game": "Spiel", "results.author": "Autor", - "results.votes": "Stimmen", - "results.avg": "Durchschnitt", - "results.total": "Gesamt", + "results.votesList": "Stimmen (Emojis)", + "results.myVote": "Deine Stimme", "results.links": "Links", "results.link.site": "Webseite ↗", "results.link.youtube": "YouTube ↗", diff --git a/wwwroot/js/ui.js b/wwwroot/js/ui.js index 557edc7..da97d37 100644 --- a/wwwroot/js/ui.js +++ b/wwwroot/js/ui.js @@ -216,9 +216,8 @@ export function renderResults() { ${t("results.rank")} ${t("results.game")} ${t("results.author")} - ${t("results.votes")} - ${t("results.avg")} - ${t("results.total")} + ${t("results.votesList")} + ${t("results.myVote")} ${t("results.links")} @@ -240,9 +239,8 @@ export function renderResults() { ${r.author ?? "—"} - ${r.count} - ${r.average.toFixed(1)} - ${r.total} + ${formatVotes(r.votes)} + ${formatMyVote(r.myVote)} ${r.gameUrl ? `${t("results.link.site")}
` : ''} ${r.youtubeUrl ? `${t("results.link.youtube")}` : ''} @@ -587,6 +585,17 @@ export function neutralEmoji() { return "😐"; } +function formatVotes(votes) { + if (!Array.isArray(votes) || votes.length === 0) return "—"; + const sorted = [...votes].sort((a, b) => a - b); + return sorted.map((v) => scoreToEmoji(v)).join(" "); +} + +function formatMyVote(score) { + if (score == null || Number.isNaN(score)) return "—"; + return `${score} ${scoreToEmoji(score)}`; +} + function isValidImageUrl(url) { if (!url) return true; try {