From 8e1df0f5621a5aea67804d3b966ba79366635ceb Mon Sep 17 00:00:00 2001 From: Yashaswini K P Date: Tue, 14 Jul 2026 13:48:52 +0530 Subject: [PATCH 1/2] feat: fetch and dynamically render local leaderboard ranks in profile banner --- frontend/js/user/ranks.js | 55 +++++++++++++++++++++++++++++++++++++++ frontend/user.html | 17 ++++++------ 2 files changed, 64 insertions(+), 8 deletions(-) create mode 100644 frontend/js/user/ranks.js diff --git a/frontend/js/user/ranks.js b/frontend/js/user/ranks.js new file mode 100644 index 00000000..1d9fab77 --- /dev/null +++ b/frontend/js/user/ranks.js @@ -0,0 +1,55 @@ +async function loadLeaderboardRanks(username) { + const periods = ["overall", "monthly", "weekly", "daily"]; + + try { + const res = await fetch(`/api/user/${username}`); + if (!res.ok) throw new Error("API response error"); + + const data = await res.json(); + const ranks = data.leaderboardRanks; + if (!ranks) return; + + periods.forEach((period) => { + const rankEl = document.getElementById(`${period}-rank`); + const itemContainer = document.getElementById(`${period}-item`); + + const rankData = ranks[period]; + + // Clean fallback if rank is not present, is '--', or has a 0 rank score + if ( + !rankData || + rankData.rank === "--" || + rankData.rank === 0 || + rankData.rank === null + ) { + if (rankEl) rankEl.textContent = "--"; + if (itemContainer) itemContainer.classList.add("placeholder-rank"); + return; + } + + if (itemContainer) { + itemContainer.classList.remove("placeholder-rank"); + } + + if (rankEl) { + rankEl.textContent = Number(rankData.rank); + } + }); + } catch (err) { + console.error("Error loading leaderboard ranks:", err); + periods.forEach((period) => { + const el = document.getElementById(`${period}-rank`); + if (el) el.textContent = "--"; + }); + } +} + +// Automatically fire on load +document.addEventListener("DOMContentLoaded", () => { + const pathSegments = window.location.pathname.split("/"); + const username = pathSegments[pathSegments.length - 1]; + + if (username) { + loadLeaderboardRanks(username); + } +}); diff --git a/frontend/user.html b/frontend/user.html index d53a583e..2e94946d 100644 --- a/frontend/user.html +++ b/frontend/user.html @@ -529,21 +529,21 @@

[USER_PROFILE]

>-- -
+
OVERALL: - -- + --
-
+
MONTHLY: - -- + --
-
+
WEEKLY: - -- + --
-
+
DAILY: - -- + --
@@ -634,6 +634,7 @@

[USER_PROFILE]

+ From 3fc590422fd153ff5060fb71e3f83644c672d861 Mon Sep 17 00:00:00 2001 From: Yashaswini K P Date: Fri, 17 Jul 2026 03:01:30 +0530 Subject: [PATCH 2/2] solved bug --- frontend/js/user/ranks.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/frontend/js/user/ranks.js b/frontend/js/user/ranks.js index 1d9fab77..0c2e60db 100644 --- a/frontend/js/user/ranks.js +++ b/frontend/js/user/ranks.js @@ -47,8 +47,9 @@ async function loadLeaderboardRanks(username) { // Automatically fire on load document.addEventListener("DOMContentLoaded", () => { const pathSegments = window.location.pathname.split("/"); - const username = pathSegments[pathSegments.length - 1]; - + const username = + pathSegments[pathSegments.length - 1] || + pathSegments[pathSegments.length - 2]; if (username) { loadLeaderboardRanks(username); }