53 lines
1.7 KiB
JavaScript
53 lines
1.7 KiB
JavaScript
// Copyright (c) 2024 Julian Müller (ChaoticByte)
|
|
(() => {
|
|
let searchBox = document.getElementById("search-box");
|
|
let searchResults = document.getElementById("search-results");
|
|
let toc = document.getElementById("toc");
|
|
|
|
/**
|
|
* @param {string} results
|
|
*/
|
|
function showSearchResults(results) {
|
|
searchResults.innerHTML = "";
|
|
if (results.length > 0) {
|
|
results.forEach(r => {
|
|
let resultElem = document.createElement("div");
|
|
let resultAnchor = document.createElement("a");
|
|
resultAnchor.href = r[0]; // we should be at /, so this is right
|
|
resultAnchor.innerText = r[1];
|
|
resultElem.appendChild(resultAnchor);
|
|
searchResults.appendChild(resultElem);
|
|
});
|
|
}
|
|
toc.classList.add("hidden");
|
|
searchResults.classList.remove("hidden");
|
|
}
|
|
function hideSearchResults() {
|
|
toc.classList.remove("hidden");
|
|
searchResults.classList.add("hidden");
|
|
}
|
|
|
|
async function handleSearchInput() {
|
|
// get search query
|
|
const query = searchBox.value;
|
|
if (query == "") {
|
|
hideSearchResults();
|
|
return
|
|
}
|
|
// make request
|
|
const response = await fetch("/search/" + query);
|
|
if (!response.ok) {
|
|
throw new Error(`Search API returned status code ${response.status}`);
|
|
}
|
|
let results_raw = await response.text();
|
|
let results = [];
|
|
if (results_raw.length > 0) {
|
|
results_raw.split('\n').forEach(r => {
|
|
results.push(r.split("|", 2));
|
|
});
|
|
}
|
|
showSearchResults(results);
|
|
}
|
|
|
|
searchBox.addEventListener("input", handleSearchInput);
|
|
})();
|