zola/docs/static/search.js

61 lines
1.7 KiB
JavaScript
Raw Normal View History

2018-03-15 17:58:32 +00:00
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);
}