js/search.js (41 lines of code) (raw):

jQuery(function() { window.idx = lunr(function () { this.field('id'); this.field('title'); this.field('content', { boost: 10 }); this.field('categories'); }); window.data = $.getJSON('/search_data.json'); window.data.then(function(loaded_data){ $.each(loaded_data, function(index, value){ window.idx.add($.extend({ "id": index }, value)); }); }); $("#site_search").submit(function(event){ event.preventDefault(); var query = $("#search_box").val(); var results = window.idx.search(query); display_search_results(query, results); }); function display_search_results(query, results) { var $search_status = $("#search_status"); var $search_results = $("#search_results"); window.data.then(function(loaded_data) { if (results.length) { $search_status.html('Found ' + results.length + ' results for "' + query + '"'); $search_results.empty(); results.forEach(function(result) { var item = loaded_data[result.ref]; var n = item.content.search(query) - 50 if (n < 0) { n = 0; } var appendString = '<tr><td><a href="' + item.url + '">' + item.title + '</a><td>' + item.content.substring(n, n+100) + '</tr>'; $search_results.append(appendString); }); } else { $search_status.html('No results found!'); } }); } });