75 lines
2.2 KiB
JavaScript
75 lines
2.2 KiB
JavaScript
// results.js — results page logic
|
|
|
|
document.addEventListener("DOMContentLoaded", () => {
|
|
const state = Storage.getGameState();
|
|
const name = Storage.getPlayerName();
|
|
|
|
document.getElementById("results-player").textContent = name;
|
|
|
|
if (!state) {
|
|
document.getElementById("results-title").textContent = "No game found.";
|
|
document.getElementById("total-score").textContent = "—";
|
|
return;
|
|
}
|
|
|
|
const { scores, totalScore, countries } = state;
|
|
|
|
// Determine emoji and title based on average score
|
|
const avg = totalScore / 3;
|
|
let emoji = "🌍";
|
|
let title = "Not bad!";
|
|
if (avg >= 85) {
|
|
emoji = "🔥";
|
|
title = "Incredible!";
|
|
} else if (avg >= 70) {
|
|
emoji = "🎉";
|
|
title = "Well done!";
|
|
} else if (avg >= 50) {
|
|
emoji = "👏";
|
|
title = "Good effort!";
|
|
} else {
|
|
emoji = "😅";
|
|
title = "Keep practising!";
|
|
}
|
|
|
|
document.getElementById("results-emoji").textContent = emoji;
|
|
document.getElementById("results-title").textContent = title;
|
|
document.getElementById("total-score").textContent = totalScore;
|
|
|
|
// Grade badge
|
|
const grade = Scoring.getGrade(avg);
|
|
const gradeEl = document.getElementById("total-grade");
|
|
gradeEl.textContent = `Grade ${grade.label}`;
|
|
|
|
// Round breakdown rows
|
|
const rowsContainer = document.getElementById("round-rows");
|
|
(scores || []).forEach((score, index) => {
|
|
const row = document.createElement("div");
|
|
row.className = "round-row";
|
|
row.innerHTML = `
|
|
<span class="round-row__label">Round ${index + 1}</span>
|
|
<div class="round-row__bar-wrap">
|
|
<div class="round-row__bar" style="width:0%" data-target="${score}"></div>
|
|
</div>
|
|
<span class="round-row__score">${score}%</span>
|
|
`;
|
|
rowsContainer.appendChild(row);
|
|
});
|
|
|
|
// Animate score bars on next frame so CSS transition fires
|
|
requestAnimationFrame(() => {
|
|
document.querySelectorAll(".round-row__bar").forEach((bar) => {
|
|
bar.style.width = `${bar.dataset.target}%`;
|
|
});
|
|
});
|
|
|
|
// Country tags
|
|
const tagsContainer = document.getElementById("countries-row");
|
|
(countries || []).forEach((country) => {
|
|
const tag = document.createElement("span");
|
|
tag.className = "country-tag";
|
|
tag.textContent = country;
|
|
tagsContainer.appendChild(tag);
|
|
});
|
|
});
|