Files
kewt/lib/search.js
N0\A 009877ae76
All checks were successful
Lint / shellcheck (push) Successful in 17s
feat: colour palettes
2026-04-01 14:23:12 +02:00

55 lines
1.6 KiB
JavaScript

document.addEventListener("DOMContentLoaded", function () {
var params = new URLSearchParams(window.location.search);
var query = params.get("q");
var box = document.getElementById("search-box");
var resultsContainer = document.getElementById("search-results-list");
if (box && query) box.value = query;
if (!query) {
resultsContainer.innerHTML = "<p>Enter a search term above.</p>";
return;
}
fetch("/search.json")
.then(function (response) {
return response.json();
})
.then(function (data) {
var q = query.toLowerCase();
var results = data.filter(function (item) {
return (
item.title.toLowerCase().indexOf(q) !== -1 ||
item.content.toLowerCase().indexOf(q) !== -1
);
});
var esc = query.replace(/</g, "&lt;").replace(/>/g, "&gt;");
if (results.length === 0) {
resultsContainer.innerHTML =
'<p>No results found for "<strong>' + esc + '</strong>".</p>';
return;
}
var html =
"<p>Found " +
results.length +
' result(s) for "<strong>' +
esc +
'</strong>":</p>';
results.forEach(function (result) {
var snippet = result.content.substring(0, 200);
if (result.content.length > 200) snippet += "...";
html += '<div class="search-result">';
html += '<a href="' + result.url + '">' + result.title + "</a>";
if (snippet) html += "<p>" + snippet + "</p>";
html += "</div>";
});
resultsContainer.innerHTML = html;
})
.catch(function () {
resultsContainer.innerHTML = "<p>Error loading search index.</p>";
});
});