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.
60 lines
1.6 KiB
60 lines
1.6 KiB
5 years ago
|
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);
|
||
|
}
|
||
|
});
|
||
|
});
|