require([ 'gitbook', 'jquery' ], function(gitbook, $) { // Define global search engine function LunrSearchEngine() { this.index = null; this.store = {}; this.name = 'LunrSearchEngine'; } // Initialize lunr by fetching the search index LunrSearchEngine.prototype.init = function() { var that = this; var d = $.Deferred(); $.getJSON(gitbook.state.basePath+'/search_index.json') .then(function(data) { // eslint-disable-next-line no-undef that.index = lunr.Index.load(data.index); that.store = data.store; d.resolve(); }); return d.promise(); }; // Search for a term and return results LunrSearchEngine.prototype.search = function(q, offset, length) { var that = this; var results = []; if (this.index) { results = $.map(this.index.search(q), function(result) { var doc = that.store[result.ref]; return { title: doc.title, url: doc.url, body: doc.summary || doc.body }; }); } return $.Deferred().resolve({ query: q, results: results.slice(0, length), count: results.length }).promise(); }; // Set gitbook research gitbook.events.bind('start', function(e, config) { var engine = gitbook.search.getEngine(); if (!engine) { gitbook.search.setEngine(LunrSearchEngine, config); } }); });