123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- (function(compodoc) {
- function LunrSearchEngine() {
- this.index = null;
- this.store = {};
- this.name = 'LunrSearchEngine';
- }
- LunrSearchEngine.prototype.init = function() {
- var that = this,
- d = new promise.Promise();
- that.index = lunr.Index.load(COMPODOC_SEARCH_INDEX.index);
- that.store = COMPODOC_SEARCH_INDEX.store;
- d.done();
- return d;
- };
- LunrSearchEngine.prototype.search = function(q, offset, length) {
- var that = this,
- results = [],
- d = new promise.Promise();
- 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
- };
- });
- }
- d.done({
- query: q,
- results: results.slice(0, length),
- count: results.length
- });
- return d;
- };
- compodoc.addEventListener(compodoc.EVENTS.READY, function(event) {
- console.log('compodoc ready');
- var engine = new LunrSearchEngine(),
- initialized = false;
- engine.init()
- .then(function() {
- initialized = true;
- compodoc.dispatchEvent({
- type: compodoc.EVENTS.SEARCH_READY
- });
- });
- function query(q, offset, length) {
- if (!initialized) throw new Error('Search has not been initialized');
- return engine.search(q, offset, length);
- }
- compodoc.search = {
- query: query
- };
- });
- })(compodoc);
|