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 textSearch() { const query = document.getElementById("text-query").value.trim(); if (!query) return; document.getElementById("results").innerHTML = "
Searching...
"; fetch("/text-search", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ query: query }), }) .then((r) => r.json()) .then((data) => { allResults = data.results; window.searchTimeMs = data.time_ms; currentPage = 0; displayPage(); }); } function updateInfo() { document.getElementById('fen').value = board.fen(); } 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} games${allResults.length > 0 ? ` in ${window.searchTimeMs.toFixed(0)}ms (page ${currentPage + 1} of ${totalPages})` : ""}
`; html += paginationHtml; html += `${p.White} vs ${p.Black}
${p.Event}
${p.Date} · ${p.Result}
Move ${p.MatchedMove}