(function (window, document) { "use strict"; const search = (e) => { const results = window.searchIndex.search(e.target.value, { bool: "AND", expand: true, }); const cleanResults = results.filter((r) => r.doc.title !== undefined) const resEl = document.getElementById("search-results"); const noResultsEl = document.getElementById("no-results-found"); resEl.innerHTML = ""; if (cleanResults.length > 0) { resEl.style.display = "block"; noResultsEl.style.display = "none"; cleanResults.map((r) => { const { id, title, description } = r.doc; const el = document.createElement("li"); resEl.appendChild(el); const h3 = document.createElement("h3"); el.appendChild(h3); const a = document.createElement("a"); // TODO: highlight the search term in the dest page a.setAttribute("href", id); a.textContent = title; h3.appendChild(a); // TODO: show an excerpt of the found page // const p = document.createElement("p"); // p.textContent = description; // el.appendChild(p); }); } else { resEl.style.display = "none"; noResultsEl.style.display = "block"; } }; const hideSearch = (e) => { setTimeout(() => { e.target.value = ""; const resEl = document.getElementById("search-results"); const noResultsEl = document.getElementById("no-results-found"); resEl.style.display = "none"; noResultsEl.style.display = "none"; }, 200); }; fetch("/search-index.json").then((response) => response.json().then((rawIndex) => { window.searchIndex = elasticlunr.Index.load(rawIndex); document.getElementById("search-field").addEventListener("input", search); document.getElementById("search-field").addEventListener("blur", hideSearch); }) ); })(window, document);