document.addEventListener("DOMContentLoaded", () => { loadLeaderboard(); }); function loadLeaderboard() { // Tambahkan '?t=' + waktu sekarang agar URL selalu unik & tidak di-cache fetch('Leaderboard.php?t=' + new Date().getTime()) .then(response => response.json()) .then(data => { if (data.status === "success") { // 1. Render Top 10 renderLeaderboard(data.leaderboard); // 2. LOGIKA BARU UNTUK USER RANK const rankContainer = document.getElementById('userRankContainer'); if (data.user_rank) { // Kalo user LOGIN (ada datanya): // Render isinya & Pastikan MUNCUL (display: block) renderUserRank(data.user_rank); if (rankContainer) rankContainer.style.display = 'block'; } else { // Kalo user LOGOUT (datanya null): // SEMBUNYIKAN elemennya! if (rankContainer) rankContainer.style.display = 'none'; } } }) .catch(error => console.error("Error loading leaderboard:", error)); } // TAMBAHKAN FUNGSI INI DI BAWAH function renderUserRank(user) { const container = document.getElementById('userRankContainer'); if (!container) return; // Format angka skor const formattedScore = new Intl.NumberFormat().format(user.score); // HTML structure sesuai CSS .your-rank-container const html = `
${user.rank}
${escapeHtml(user.username)}
${formattedScore}
Points
`; container.innerHTML = html; } function renderLeaderboard(players) { const listContainer = document.getElementById('leaderboardList'); if (!listContainer) return; // Safety check listContainer.innerHTML = ""; // Hapus data dummy statis players.forEach((player, index) => { const rank = index + 1; let rankClass = 'rank-other'; // Tentukan styling berdasarkan ranking if (rank === 1) rankClass = 'rank-1'; else if (rank === 2) rankClass = 'rank-2'; else if (rank === 3) rankClass = 'rank-3'; // Format angka skor dengan koma (contoh: 1,000) // Fallback jika score tidak valid const scoreVal = parseInt(player.score) || 0; const formattedScore = new Intl.NumberFormat().format(scoreVal); const itemHtml = `
  • ${rank}
    ${escapeHtml(player.username)}
    ${formattedScore}
    Points
  • `; listContainer.insertAdjacentHTML('beforeend', itemHtml); }); } // Mencegah XSS attack (keamanan tambahan) function escapeHtml(text) { if (!text) return text; return text .replace(/&/g, "&") .replace(//g, ">") .replace(/"/g, """) .replace(/'/g, "'"); }