var Entities = require('html-entities').AllHtmlEntities; var Html = new Entities(); // Map of Lunr ref to document var documentsStore = {}; module.exports = { book: { assets: './assets', js: [ 'jquery.mark.min.js', 'search.js' ], css: [ 'search.css' ] }, hooks: { // Index each page 'page': function(page) { if (this.output.name != 'website' || page.search === false) { return page; } var text; this.log.debug.ln('index page', page.path); text = page.content; // Decode HTML text = Html.decode(text); // Strip HTML tags text = text.replace(/(<([^>]+)>)/ig, ''); text = text.replace(/[\n ]+/g, ' '); var keywords = []; if (page.search) { keywords = page.search.keywords || []; } // Add to index var doc = { url: this.output.toURL(page.path), title: page.title, summary: page.description, keywords: keywords.join(' '), body: text }; documentsStore[doc.url] = doc; return page; }, // Write index to disk 'finish': function() { if (this.output.name != 'website') return; this.log.debug.ln('write search index'); return this.output.writeFile('search_plus_index.json', JSON.stringify(documentsStore)); } } };