// This file and its minified version is adapted from https://github.com/BLE-LTER/Lunr-Index-and-Search-for-Static-Sites which is unlicensed. // "use strict"; var LUNR_CONFIG = { "resultsElementId": "searchResults", // Element to contain results "countElementId": "resultCount" // Element showing number of results }; // Get URL arguments function getParameterByName(name) { var url = window.location.href; name = name.replace(/[\[\]]/g, "\\$&"); var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), results = regex.exec(url); if (!results) return null; if (!results[2]) return ""; return decodeURIComponent(results[2].replace(/\+/g, " ")); } // Parse search results into HTML function parseLunrResults(results) { var html = []; for (var i = 0; i < results.length; i++) { var id = results[i]["ref"]; var item = PREVIEW_LOOKUP[id] var title = item["t"]; var preview = item["p"]; var link = item["l"].replace("__site/", ""); var result = ('
  • ' + title + ''); html.push(result); } if (html.length) { html.join(""); return '' } else { return ""; } } function escapeHtml(unsafe) { return unsafe .replace(/&/g, "&") .replace(//g, ">") .replace(/"/g, """) .replace(/'/g, "'"); } function showResultCount(total) { var element = document.getElementById(LUNR_CONFIG["countElementId"]) if (element !== null) { element.innerHTML = total + "."; } } function searchLunr(query) { var idx = lunr.Index.load(LUNR_DATA); // Write results to page var results = idx.search(query); var resultHtml = parseLunrResults(results); var elementId = LUNR_CONFIG["resultsElementId"]; document.getElementById(elementId).innerHTML = resultHtml; // Write the number of results showResultCount(results.length); } // When the window loads, read query parameters and perform search window.onload = function() { var query = getParameterByName("q"); if (query != "" && query != null) { document.forms.lunrSearchForm.q.value = query; searchLunr(query); } else { // empty query: show 0 results (no query) showResultCount("0 (empty query)"); } document.getElementById("focus").focus(); };