hexo-theme-amane/include/hexo/generator/insight.js

44 lines
1.4 KiB
JavaScript

const util = require('hexo-util');
/**
* Insight search content.json generator.
*/
module.exports = function(hexo) {
hexo.extend.generator.register('insight', function(locals) {
const url_for = hexo.extend.helper.get('url_for').bind(this);
function minify(str) {
return util.stripHTML(str).trim().replace(/\n/g, ' ').replace(/\s+/g, ' ')
.replace(/&#x([\da-fA-F]+);/g, (match, hex) => {
return String.fromCharCode(parseInt(hex, 16));
})
.replace(/&#([\d]+);/g, (match, dec) => {
return String.fromCharCode(dec);
});
}
function postMapper(post) {
return {
title: post.title,
text: minify(post.content),
link: url_for(post.path)
};
}
function tagMapper(tag) {
return {
name: tag.name,
slug: tag.slug,
link: url_for(tag.path)
};
}
const site = {
pages: locals.pages.map(postMapper),
posts: locals.posts.map(postMapper),
tags: locals.tags.map(tagMapper),
categories: locals.categories.map(tagMapper)
};
return {
path: '/content.json',
data: JSON.stringify(site)
};
});
};