This repository has been archived on 2025-09-28. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
plaintext-encyclopedia/public/static/search.js

54 lines
1.7 KiB
JavaScript
Raw Permalink Normal View History

2024-08-28 20:29:34 +02:00
// Copyright (c) 2024 Julian Müller (ChaoticByte)
2024-08-28 19:49:23 +02:00
(() => {
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 = "";
2024-08-28 19:49:23 +02:00
if (results.length > 0) {
results.forEach(r => {
2024-08-28 19:49:23 +02:00
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];
2024-08-28 19:49:23 +02:00
resultElem.appendChild(resultAnchor);
searchResults.appendChild(resultElem);
});
2024-08-28 19:49:23 +02:00
}
toc.classList.add("hidden");
searchResults.classList.remove("hidden");
}
function hideSearchResults() {
toc.classList.remove("hidden");
searchResults.classList.add("hidden");
2024-08-28 19:49:23 +02:00
}
async function handleSearchInput() {
// get search query
const query = searchBox.value;
if (query == "") {
hideSearchResults();
2024-08-28 19:49:23 +02:00
return
}
// make request
const response = await fetch("/search/" + query);
if (!response.ok) {
throw new Error(`Search API returned status code ${response.status}`);
2024-08-28 19:49:23 +02:00
}
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);
2024-08-28 19:49:23 +02:00
}
searchBox.addEventListener("input", handleSearchInput);
})();