mirror of
https://github.com/getzola/zola
synced 2025-03-04 23:17:13 +00:00
60 lines
1.7 KiB
JavaScript
60 lines
1.7 KiB
JavaScript
function formatSearchResultHeader(term, count) {
|
|
if (count === 0) {
|
|
return "No search results for '" + term + "'.";
|
|
}
|
|
|
|
return count + " search result" + count > 1 ? "s" : "" + " for '" + term + "':";
|
|
}
|
|
|
|
function formatSearchResultItem(term, item) {
|
|
console.log(item);
|
|
return '<div class="search-results__item">'
|
|
+ item
|
|
+ '</div>';
|
|
}
|
|
|
|
function initSearch() {
|
|
var $searchInput = document.getElementById("search");
|
|
var $searchResults = document.querySelector(".search-results");
|
|
var $searchResultsHeader = document.querySelector(".search-results__headers");
|
|
var $searchResultsItems = document.querySelector(".search-results__items");
|
|
|
|
var options = {
|
|
bool: "AND",
|
|
expand: true,
|
|
teaser_word_count: 30,
|
|
limit_results: 30,
|
|
fields: {
|
|
title: {boost: 2},
|
|
body: {boost: 1},
|
|
}
|
|
};
|
|
var currentTerm = "";
|
|
var index = elasticlunr.Index.load(window.searchIndex);
|
|
|
|
$searchInput.addEventListener("keyup", function() {
|
|
var term = $searchInput.value.trim();
|
|
if (!index || term === "" || term === currentTerm) {
|
|
return;
|
|
}
|
|
$searchResults.style.display = term === "" ? "block" : "none";
|
|
$searchResultsItems.innerHTML = "";
|
|
var results = index.search(term, options);
|
|
currentTerm = term;
|
|
$searchResultsHeader.textContent = searchResultText(term, results.length);
|
|
for (var i = 0; i < results.length; i++) {
|
|
var item = document.createElement("li");
|
|
item.innerHTML = formatSearchResult(results[i], term);
|
|
$searchResultsItems.appendChild(item);
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
if (document.readyState === "complete" ||
|
|
(document.readyState !== "loading" && !document.documentElement.doScroll)
|
|
) {
|
|
initSearch();
|
|
} else {
|
|
document.addEventListener("DOMContentLoaded", initSearch);
|
|
}
|