You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.6 KiB
59 lines
1.6 KiB
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); |
|
} |
|
}); |
|
});
|
|
|