车栈

Hexo插件之自动摘要生成器(hexo-excerpt)

Hexo 默认没有对列表页面进行摘要处理,即列表页面会把整个文章内容抛出,很吓人对不对?

除非手动在内容中增加:

<!-- more -->

本插件通过注册generator对所有文章在生成的时候进行处理,如果文章内容含有10个一级html标签,那么取这10个做为列表页面摘要,否则全部显示。

更新 v1.1.0

  • 支持传统的分割模式

用到了htmlparser2模块。

核心代码:

let nodes = [];

let parser = new htmlparser.Parser(new htmlparser.DomHandler((err, dom) => {
  if (!err) {
    nodes = dom;
  }
}), {
  decodeEntities: false
});

parser.write(post.content);
parser.done();

if (nodes.length > 10) {
  let stopIndex = 0;
  for (let i = 0; i < nodes.length; i++) {
    if (nodes[i].type === 'tag') {
      if (++stopIndex > 9) {
        break;
      }
    }
  }

  nodes = nodes.slice(0, stopIndex);
  post.excerpt = (nodes.map(node => domutils.getOuterHTML(node))).join('');
}

Github仓库:

{% githubCard chekun hexo-excerpt %}

Keep on hacking!