Add search functionality

This commit is contained in:
ChaoticByte 2024-08-28 19:49:23 +02:00
parent 149841bdd1
commit 85470a277e
No known key found for this signature in database
8 changed files with 138 additions and 24 deletions

45
public/static/search.js Normal file
View file

@ -0,0 +1,45 @@
(() => {
let searchBox = document.getElementById("search-box");
let searchResults = document.getElementById("search-results");
let toc = document.getElementById("toc");
/**
* @param {string} results
*/
function updateSearchResults(results) {
if (results.length > 0) {
searchResults.innerHTML = "";
for (let i = 0; i < results.length; i++) {
let resultElem = document.createElement("div");
let resultAnchor = document.createElement("a");
resultAnchor.href = results[i]; // we should be at /, so this is right
resultAnchor.innerText = results[i];
resultElem.appendChild(resultAnchor);
searchResults.appendChild(resultElem);
}
toc.classList.add("hidden");
searchResults.classList.remove("hidden");
} else {
toc.classList.remove("hidden");
searchResults.classList.add("hidden");
}
}
async function handleSearchInput() {
// get search query
const query = searchBox.value;
if (query == "") {
updateSearchResults([]);
return
}
// make request
const response = await fetch("/search/" + query);
if (!response.ok) {
throw new Error("Couldn't search, status code ", response.status);
}
let result = await response.text();
updateSearchResults(result.split('\n'));
}
searchBox.addEventListener("input", handleSearchInput);
})();