(function () { function getQueryVariable(variable) { var query = window.location.search.substring(1), vars = query.split("&"); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split("="); if (pair[0] === variable) { return decodeURIComponent(pair[1].replace(/\+/g, '%20')).trim(); } } } function getPreview(query, content, previewLength) { previewLength = previewLength || (content.length * 2); var parts = query.split(" "), match = content.toLowerCase().indexOf(query.toLowerCase()), matchLength = query.length, preview; // Find a relevant location in content for (var i = 0; i < parts.length; i++) { if (match >= 0) { break; } match = content.toLowerCase().indexOf(parts[i].toLowerCase()); matchLength = parts[i].length; } // Create preview if (match >= 0) { var start = match - (previewLength / 2), end = start > 0 ? match + matchLength + (previewLength / 2) : previewLength; preview = content.substring(start, end).trim(); if (start > 0) { preview = "..." + preview; } if (end < content.length) { preview = preview + "..."; } // Highlight query parts preview = preview.replace(new RegExp("(" + parts.join("|") + ")", "gi"), "$1"); } else { // Use start of content if no match found preview = content.substring(0, previewLength).trim() + (content.length > previewLength ? "..." : ""); } return preview; } function displaySearchResults(results, query) { var searchResultsEl = document.getElementById("search-results"), searchProcessEl = document.getElementById("search-process"); if (results.length) { var resultsHTML = ""; results.forEach(function (result) { var item = window.data[result.ref] if (item.title) { contentPreview = getPreview(query, item.content, 170), titlePreview = getPreview(query, item.title); resultsHTML += "
  • " + titlePreview + "

    " + contentPreview + "

  • "; } }); searchResultsEl.innerHTML = resultsHTML; searchProcessEl.innerText = "Showing"; } else { searchResultsEl.style.display = "none"; searchProcessEl.innerText = "No"; } } window.index = lunr(function () { this.field("id"); this.field("title", {boost: 10}); this.field("categories"); this.field("url"); this.field("content"); }); var query = decodeURIComponent((getQueryVariable("q") || "").replace(/\+/g, "%20")), searchQueryContainerEl = document.getElementById("search-query-container"), searchQueryEl = document.getElementById("search-query"); searchQueryEl.innerText = query; if (query != ""){ searchQueryContainerEl.style.display = "inline"; } for (var key in window.data) { window.index.add(window.data[key]); } displaySearchResults(window.index.search(query), query); // Hand the results off to be displayed })();