document.addEventListener("DOMContentLoaded", () => { fetch("/api/data") .then(res => res.json()) .then(data => { const playerList = document.getElementById("player-list"); const playerDetails = document.getElementById("player-details"); const attacksList = document.getElementById("attacks-list"); // Fill player list Object.keys(data.players).forEach(name => { const div = document.createElement("div"); div.className = "player-item"; div.textContent = name; div.addEventListener("click", () => { showTownSelection(data.players[name]); }); playerList.appendChild(div); }); // Fill incoming attacks panel if (data.attacks.length === 0) { attacksList.innerHTML = "
No incoming attacks
"; } else { data.attacks.forEach(atk => { const div = document.createElement("div"); div.className = "p-2 border-bottom"; div.innerHTML = `${atk.player}: ${atk.target_town} (${atk.units || 'Unknown units'}) ETA: ${atk.eta}`; attacksList.appendChild(div); }); } // Step 1: Show list of towns for selected player function showTownSelection(player) { if (player.error) { playerDetails.innerHTML = `${player.error}
`; return; } let html = `Last Update: ${player.timestamp}
`; html += `Points: ${town.points} | Population: ${town.population}
`; html += `