diff --git a/static/js/app.js b/static/js/app.js new file mode 100644 index 0000000..e29d5b2 --- /dev/null +++ b/static/js/app.js @@ -0,0 +1,79 @@ +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 = `

${player.player} (${player.player_id})

`; + html += `

Last Update: ${player.timestamp}

`; + html += `
Select a town:
`; + playerDetails.innerHTML = html; + + // Attach click events for towns + document.querySelectorAll(".town-item").forEach(item => { + item.addEventListener("click", () => { + const townId = parseInt(item.dataset.townid); + const selectedTown = player.towns.find(t => t.town_id === townId); + showTownDetails(selectedTown); + }); + }); + } + + // Step 2: Show town data + function showTownDetails(town) { + let html = `

${town.town_name}

`; + html += `

Points: ${town.points} | Population: ${town.population}

`; + html += `
Resources
+ `; + html += `
Buildings
`; + playerDetails.innerHTML = html; + } + }); +});