//= require lunr.min //= require _vendor/jquery.mark.js (function($, Modules) { 'use strict'; Modules.Search = function Search() { var s = this; var $html = $('html'); s.lunrIndex; s.lunrData; var $searchForm; var $searchLabel; var $searchInput; var $searchResults; var $searchResultsTitle; var $searchResultsWrapper; var $searchResultsClose; var results; var maxSearchEntries = 10; this.start = function start($element) { $searchForm = $element.find('form'); $searchInput = $element.find('#search'); $searchLabel = $element.find('.search__label'); $searchResultsWrapper = $element.find('.search-results') $searchResults = $searchResultsWrapper.find('.search-results__content'); $searchResultsTitle = $searchResultsWrapper.find('.search-results__title'); $searchResultsClose = $searchResultsWrapper.find('.search-results__close'); s.downloadSearchIndex(); attach(); changeSearchLabel(); }; this.downloadSearchIndex = function downloadSearchIndex() { updateTitle('Loading search index') $.ajax({ url: '/search.json', cache: true, method: 'GET', success: function(data) { s.lunrData = data; s.lunrIndex = lunr.Index.load(s.lunrData.index); $(document).trigger('lunrIndexLoaded'); } }); } function attach() { // Search functionality on search text input $searchInput.on('input', function (e) { e.preventDefault(); var query = $(this).val(); s.search(query, function(r) { results = r; renderResults(query); updateTitle(); }); }); // Set focus on the first search result instead of submiting the search // form to Google $searchForm.on('submit', function(e) { e.preventDefault(); showResults(); $searchResults.find('.search-result__title a').first().focus(); }); // Closing the search results, move focus back to the search input $searchResultsClose.on('click', function(e) { e.preventDefault(); $searchInput.focus(); hideResults(); }); } function changeSearchLabel() { $searchLabel.text('Search'); } function getResults(query) { var results = []; s.lunrIndex.search(query).forEach( function (item, index) { if ( index < maxSearchEntries ) { results.push(s.lunrData.docs[item.ref]); } }); return results; } this.search = function search(query, callback) { if(query === '') { hideResults(); return; } showResults(); // The index has not been downloaded yet, exit early and wait. if(!s.lunrIndex) { $(document).on('lunrIndexLoaded', function() { s.search(query, callback); }); return; } callback(getResults(query)); } function renderResults(query) { var output = ''; if (results.length == 0) { output += '
Nothing found
'; } output += '' + content + '
'; } output += '