/** * global hexo * from printempw/hexo-hide-posts * modify by Jerry */ 'use strict'; var public_generators = []; hexo.extend.filter.register('before_generate', function () { this._bindLocals(); const all_posts = this.locals.get('posts'); const hidden_posts = all_posts.find({ 'hide': true }); const normal_posts = all_posts.filter(post => !post['hide']); this.locals.set('all_posts', all_posts); this.locals.set('hidden_posts', hidden_posts); this.locals.set('posts', normal_posts); }); hexo.extend.filter.register('after_init', function () { const original = {}; for (const name in hexo.extend.generator.list()) { original[name] = hexo.extend.generator.get(name); } hexo.extend.generator.register('post', async function (locals) { const fg = original.post.bind(this); const generated_public = await fg(locals); const generated_hidden = await fg(Object.assign({}, locals, { posts: locals.hidden_posts })); // Remove post.prev and post.next for hidden posts generated_hidden.forEach(ele => { ele.data.prev = ele.data.next = null; }); return generated_public.concat(generated_hidden); }); // Then we hack into other generators if necessary public_generators.filter( name => Object.keys(original).includes(name) ).forEach(name => { // Overwrite original generator hexo.extend.generator.register(name, function (locals) { const fg = original[name].bind(this); return fg(Object.assign({}, locals, { posts: new locals.posts.constructor( locals.posts.data.concat(locals.hidden_posts.data) ) })); }); }); });