(function () {
var SEARCH_BOX_ID = "search-box"; var NO_RESULTS_MESSAGE_ID = "not-found"; var SEARCH_RESULTS_CONTAINER_ID = "search-results"; var QUERY_VARIABLE_URL_STRING = "query"; function getQueryVariable(queryParam) { var query = window.location.search.substring(1); var vars = query.split("&"); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split("="); var param = pair[0]; var value = pair[1]; if (param === queryParam) { return decodeURIComponent(value.replace(/\+/g, "%20")); } } } function getSearchTerm() { return getQueryVariable(QUERY_VARIABLE_URL_STRING); } function setSearchBoxValue(searchBoxValue) { document.getElementById(SEARCH_BOX_ID).setAttribute("value", searchBoxValue); } function showNoResultsMessage() { document.getElementById(NO_RESULTS_MESSAGE_ID).style.display = "block"; } function setSearchResultsHTML(innerHTML) { var searchResults = document.getElementById(SEARCH_RESULTS_CONTAINER_ID); searchResults.innerHTML = innerHTML; } function createPostListingHTML(postItem) { var headingHTML = "<h2><a class='search-link' href='" + postItem.url + "''>" + postItem.title + "</a></h2>"; var metaHTML = "<div class='meta'>" + postItem.date + "</div>"; var descriptionHTML = "<p>" + postItem.content.substring(0, 150) + "...</p>"; return headingHTML + metaHTML + descriptionHTML; } function displaySearchResults(results, store) { if (results.length) { var postsListingHTML = ""; for (var i = 0; i < results.length; i++) { var postItem = store[results[i].ref]; postsListingHTML += createPostListingHTML(postItem); } setSearchResultsHTML(postsListingHTML); } else { showNoResultsMessage(); } } function addPostToSearchIndex(lunrIndex, key, postJSON) { lunrIndex.add({ "id": key, "title": postJSON.title, "author": postJSON.author, "category": postJSON.category, "content": postJSON.content }); } function search(searchTerm) { setSearchBoxValue(searchTerm); var lunrIndex = lunr(function () { this.field("id"); this.field("title", { boost: 10 }); this.field("author"); this.field("category"); this.field("content"); }); for (var key in window.store) { addPostToSearchIndex(lunrIndex, key, window.store[key]) } var results = lunrIndex.search(searchTerm); displaySearchResults(results, window.store); } var searchTerm = getSearchTerm(); if (searchTerm) { search(searchTerm); }
})();