65 lines
1.3 KiB
JavaScript
65 lines
1.3 KiB
JavaScript
|
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))
|
||
|
}
|
||
|
}
|
||
|
}
|