UNPKG

hexo-plugin-aurora

Version:

A plugin for Hexo Aurora theme

70 lines (61 loc) 1.72 kB
const pagination = require('hexo-pagination'); const { categoryMapper, categoryPageMapper, postListMapper } = require('../helpers/mapper'); class CategoryGenerator { data = []; posts = []; configs = {}; constructor(categories, posts, configs) { this.data = categories.length > 0 ? categories : []; this.posts = posts; this.configs = configs; this.reduceCategories(); for (let cat of this.data) { cat.data.postlist.sort(function (a, b) { return a.date < b.date ? 1 : -1; }); } } addCategories(data) { if (this.count() <= 0) { data.push({ path: 'api/categories.json', data: JSON.stringify([]) }); } else { data.push({ path: 'api/categories.json', data: JSON.stringify(this.data.map(categoryMapper)) }); const categoryPages = this.data.map(categoryPageMapper); data = data.concat(categoryPages); } return data; } reduceCategories() { if (this.count() <= 0) return; const categories = this.data; const posts = this.posts; const configs = this.configs; this.data = categories.reduce(function (result, item) { if (!item.length) return result; return result.concat( pagination(item.path, posts, { perPage: 0, data: { name: item.name, slug: item.slug, count: item.posts.length, path: 'api/categories/' + item.slug + '.json', postlist: item.posts.map((post) => { return postListMapper(post, configs); }) } }) ); }, []); } count() { return this.data.length; } } module.exports = CategoryGenerator;