{source}<h2 id="roundTitle">Stand na ronde ...</h2>
<p id="fileInfo"></p>
<div id="stand"></div>
<!-- Popup (Verborgen bij start) -->
<div id="playerModal" style="display: none;">
<div class="modal-content">
<span class="close-button">&times;</span>
<h3 id="playerName"></h3>
<table id="roundResults">
<thead>
<tr>
<th>Ronde</th>
<th>Tegenstander</th>
<th>Rating</th>
<th>Score</th>
<th>Kleur</th>
</tr>
</thead>
<tbody></tbody>
<tfoot>
<tr>
<td colspan="3"><b>Totaalscore:</b></td>
<td id="totalScore"><b>0</b></td>
<td colspan="3"></td>
</tr>
</tfoot>
</table>
</div>
</div>
<!-- Stijlen -->
<style>
table {
border-collapse: collapse;
width: 100%;
margin-bottom: 20px;
}
th, td {
border: 1px solid #555;
text-align: center;
padding: 8px;
}
thead th {
background-color: #d9edf7;
}
tbody tr:nth-child(even) {
background-color: #f2f2f2;
}
td:nth-child(2) {
text-align: left;
}
.modal-content {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: white;
border: 1px solid #888;
width: 80%;
padding: 20px;
z-index: 1000;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
}
.close-button {
float: right;
font-size: 20px;
font-weight: bold;
cursor: pointer;
}
#playerModal {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.4);
z-index: 999;
display: none;
}
</style>
<script>
document.addEventListener('DOMContentLoaded', () => {
fetch('https://www.sv-spijkenisse.nl/data/toernooi/jeugdtoernooi/2026/catd/SMWSite/data.json')
.then(response => response.json())
.then(data => {
console.log("Volledige JSON Data:", data); // Debugging
const players = data.players || [];
const rounds = data.rounds || [];
if (players.length === 0 || rounds.length === 0) {
console.error("Geen spelers of rondes gevonden in de JSON.");
return;
}
// Pak de laatste beschikbare ronde
const lastRoundNumber = rounds.length;
const lastRound = rounds[lastRoundNumber - 1];
const rankings = lastRound.ranking || [];
// Update de titel met het correcte ronde nummer
document.getElementById('roundTitle').textContent = `Stand na ronde ${lastRoundNumber}`;
// Map speler ID naar naam en rating
const playerMap = {};
players.forEach(player => {
playerMap[player.pairing_number] = player;
});
// Stand genereren
const standContainer = document.getElementById('stand');
const table = document.createElement('table');
table.innerHTML = `
<thead>
<tr>
<th>Rank</th>
<th>Naam</th>
<th>Score</th>
<th>WP</th>
<th>SB</th>
<th>Rating</th>
<th>TPR</th>
<th>W-We</th>
</tr>
</thead>
<tbody>
${rankings
.map(rank => {
const player = playerMap[rank.player] || {}; // Zoek spelergegevens
return `
<tr>
<td>${rank.rank !== undefined ? rank.rank : "-"}</td>
<td><a href="#" class="player-link" data-id="${rank.player}">${player.name ? player.name : "Onbekend"}</a></td>
<td>${rank.score !== undefined ? rank.score.toFixed(1) : "-"}</td>
<td>${rank.buchholz !== undefined ? rank.buchholz.toFixed(2) : "-"}</td>
<td>${rank.sonneborn_berger !== undefined ? rank.sonneborn_berger.toFixed(2) : "-"}</td>
<td>${player.rating !== undefined ? player.rating : "-"}</td>
<td>${rank.tpr !== undefined ? rank.tpr : "-"}</td>
<td>${rank.w_we !== undefined ? rank.w_we.toFixed(2) : "-"}</td>
</tr>
`;
})
.join('')}
</tbody>
`;
standContainer.appendChild(table);
// Bestanddatum weergeven
const updatedAt = new Date(data.updated_at);
const formattedDate = updatedAt.toLocaleString('nl-NL', {
day: '2-digit', month: '2-digit', year: 'numeric',
hour: '2-digit', minute: '2-digit'
});
document.getElementById("fileInfo").textContent = `Laatst bijgewerkt: ${formattedDate}`;
// Speler popups activeren
const modal = document.getElementById('playerModal');
const closeButton = document.querySelector('.close-button');
const playerNameElement = document.getElementById('playerName');
const roundResultsTable = document.getElementById('roundResults').querySelector('tbody');
const totalScoreElement = document.getElementById('totalScore');
document.querySelectorAll('.player-link').forEach(link => {
link.addEventListener('click', event => {
event.preventDefault(); // Voorkom scrollen naar boven
const playerId = event.target.dataset.id;
const player = playerMap[playerId];
if (!player) return;
playerNameElement.textContent = player.name;

let totalScore = 0;
// Uitslagen per ronde
roundResultsTable.innerHTML = rounds
.map((round, roundIndex) => {
const pairing = round.pairings.find(
p => p.white === parseInt(playerId) || p.black === parseInt(playerId)
);
if (!pairing) return '';
const opponentId = pairing.white === parseInt(playerId) ? pairing.black : pairing.white;
const opponent = playerMap[opponentId];
const isWhite = pairing.white === parseInt(playerId);
const color = isWhite ? 'w' : 'b';
const playerScore = isWhite ? pairing.white_points : pairing.black_points;
totalScore += playerScore; // Score optellen
return `
<tr>
<td>${roundIndex + 1}</td>
<td>${opponent ? opponent.name : "-"}</td>
<td>${opponent ? opponent.rating : "-"}</td>
<td>${playerScore}</td>
<td>${color}</td>
</tr>
`;
})
.join('');
totalScoreElement.textContent = totalScore.toFixed(1); // Totaalscore invullen
// Popup tonen
modal.style.display = 'block';
});
});
// Popup sluiten
closeButton.addEventListener('click', () => {
modal.style.display = 'none';
});
});
});
</script>{/source}