const RESULTS_PER_PAGE = 20; let allResults = []; let currentPage = 0; var board = Chessboard("board", { draggable: true, dropOffBoard: "trash", sparePieces: true, pieceTheme: "/static/img/chesspieces/wikipedia/{piece}.png", onSnapEnd: updateInfo, }); function updateInfo() { document.getElementById('fen').value = board.fen(); let pos = board.position(); let pieces = Object.keys(pos).length; } function search() { let pos = board.position(); if (Object.keys(pos).length < 3) { document.getElementById("results").innerHTML = "
Add at least 3 pieces to search.
"; return; } document.getElementById("results").innerHTML = "Searching...
"; fetch("/search", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ fen: board.fen() }), }) .then((r) => r.json()) .then((data) => { allResults = data.results; window.searchTimeMs = data.time_ms; currentPage = 0; displayPage(); }); } function displayPage() { const start = currentPage * RESULTS_PER_PAGE, end = start + RESULTS_PER_PAGE, pageResults = allResults.slice(start, end), totalPages = Math.ceil(allResults.length / RESULTS_PER_PAGE); const paginationHtml = allResults.length > 0 ? `` : ""; let html = `Found ${allResults.length} puzzles${allResults.length > 0 ? ` in ${window.searchTimeMs.toFixed(0)}ms (page ${currentPage + 1} of ${totalPages})` : ""}
`; html += paginationHtml; html += `Rating: ${p.Rating} | Pop: ${p.Popularity}%
Move ${p.MatchedMove}