Add search functionality
This commit is contained in:
parent
149841bdd1
commit
85470a277e
8 changed files with 138 additions and 24 deletions
45
public/static/search.js
Normal file
45
public/static/search.js
Normal 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);
|
||||
})();
|
Reference in a new issue