You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
1.7KB

  1. function formatSearchResultHeader(term, count) {
  2. if (count === 0) {
  3. return "No search results for '" + term + "'.";
  4. }
  5. return count + " search result" + count > 1 ? "s" : "" + " for '" + term + "':";
  6. }
  7. function formatSearchResultItem(term, item) {
  8. console.log(item);
  9. return '<div class="search-results__item">'
  10. + item
  11. + '</div>';
  12. }
  13. function initSearch() {
  14. var $searchInput = document.getElementById("search");
  15. var $searchResults = document.querySelector(".search-results");
  16. var $searchResultsHeader = document.querySelector(".search-results__headers");
  17. var $searchResultsItems = document.querySelector(".search-results__items");
  18. var options = {
  19. bool: "AND",
  20. expand: true,
  21. teaser_word_count: 30,
  22. limit_results: 30,
  23. fields: {
  24. title: {boost: 2},
  25. body: {boost: 1},
  26. }
  27. };
  28. var currentTerm = "";
  29. var index = elasticlunr.Index.load(window.searchIndex);
  30. $searchInput.addEventListener("keyup", function() {
  31. var term = $searchInput.value.trim();
  32. if (!index || term === "" || term === currentTerm) {
  33. return;
  34. }
  35. $searchResults.style.display = term === "" ? "block" : "none";
  36. $searchResultsItems.innerHTML = "";
  37. var results = index.search(term, options);
  38. currentTerm = term;
  39. $searchResultsHeader.textContent = searchResultText(term, results.length);
  40. for (var i = 0; i < results.length; i++) {
  41. var item = document.createElement("li");
  42. item.innerHTML = formatSearchResult(results[i], term);
  43. $searchResultsItems.appendChild(item);
  44. }
  45. });
  46. }
  47. if (document.readyState === "complete" ||
  48. (document.readyState !== "loading" && !document.documentElement.doScroll)
  49. ) {
  50. initSearch();
  51. } else {
  52. document.addEventListener("DOMContentLoaded", initSearch);
  53. }