Averon Network
Network Leaderboard
Loading Champions...
Full Ranking List
Loading Champions...
Loading...
';
try {
const response = await fetch(`/api/leaderboard/?server=${serverId}&metric=${metricId}&page=${page}`);
const data = await response.json();
if (page === 1) renderPodium(data.entries, serverId, metricId);
renderList(data.entries);
currentPage = page;
prevBtn.disabled = page === 1;
nextBtn.disabled = !data.has_more;
} catch (err) {
console.error("Fetch error:", err);
listContent.innerHTML = 'Error loading data.
';
}
}
function renderPodium(entries, serverId, metricId) {
const meta = leaderboardData[serverId].find(b => b.id.toString() === metricId.toString());
const podiumContent = document.getElementById('podium-content');
let html = `
${meta ? meta.title : 'Leaderboard'}
Top Champions
`;
const top3 = entries.slice(0, 3);
if (top3.length >= 2) {
html += `
`;
}
if (top3.length >= 1) {
html += `
`;
}
if (top3.length >= 3) {
html += `
`;
}
html += '
';
podiumContent.innerHTML = html;
}
function renderList(entries) {
const listContent = document.getElementById('list-content');
if (entries.length === 0) {
listContent.innerHTML = '${top3[1].name}
${top3[1].value}
${top3[0].name}
${top3[0].value}
${top3[2].name}
${top3[2].value}
No further data.
';
return;
}
let html = '';
entries.forEach(entry => {
html += `
#${entry.pos}
${entry.name}
${entry.value}
`;
});
listContent.innerHTML = html;
document.getElementById('list-viewport').scrollTop = 0;
}
function changeServer(serverId, targetMetricId = null) {
activeServer = serverId;
document.querySelectorAll('[data-server-tab]').forEach(tab => {
tab.classList.toggle('active', tab.getAttribute('data-server-tab') === serverId);
});
const container = document.getElementById('metric-sidebar');
container.innerHTML = '';
const boards = leaderboardData[serverId] || [];
boards.forEach(b => {
const item = document.createElement('div');
item.className = 'side-item';
item.innerHTML = ` ${b.title}`;
item.setAttribute('data-metric-id', b.id);
item.onclick = () => selectMetric(b.id);
container.appendChild(item);
});
if (boards.length > 0) {
const saved = localStorage.getItem(`v4_metric_${serverId}`);
const target = targetMetricId || (saved && boards.find(b => b.id.toString() === saved.toString()) ? saved : boards[0].id);
selectMetric(target);
}
localStorage.setItem('v4_server', serverId);
}
function selectMetric(metricId) {
activeMetric = metricId;
document.querySelectorAll('#metric-sidebar .side-item').forEach(item => {
item.classList.toggle('active', item.getAttribute('data-metric-id').toString() === metricId.toString());
});
localStorage.setItem(`v4_metric_${activeServer}`, metricId);
updateURL(activeServer, metricId);
fetchBoardData(activeServer, metricId, 1);
}
function changePage(delta) {
const newPage = currentPage + delta;
if (newPage < 1) return;
fetchBoardData(activeServer, activeMetric, newPage);
}
document.addEventListener('DOMContentLoaded', () => {
const urlParams = new URLSearchParams(window.location.search);
const urlServer = urlParams.get('server');
const urlMetric = urlParams.get('metric');
const savedSrv = localStorage.getItem('v4_server');
const firstSrv = Object.keys(leaderboardData)[0];
const targetServer = (urlServer && leaderboardData[urlServer]) ? urlServer : ( (savedSrv && leaderboardData[savedSrv]) ? savedSrv : firstSrv );
if (targetServer) {
changeServer(targetServer, urlMetric);
}
});