feat: update footer and support hidden posts
This commit is contained in:
50
scripts/hide_posts.js
Normal file
50
scripts/hide_posts.js
Normal file
@@ -0,0 +1,50 @@
|
||||
'use strict';
|
||||
|
||||
const visiblePostFilter = post => !post.hide;
|
||||
|
||||
const createPostQuery = hexo => {
|
||||
const query = {};
|
||||
|
||||
if (!hexo.config.future) query.date = { $lte: Date.now() };
|
||||
if (!hexo._showDrafts()) query.published = true;
|
||||
|
||||
return query;
|
||||
};
|
||||
|
||||
hexo.extend.filter.register('after_init', () => {
|
||||
const getAllPosts = () => hexo.database.model('Post').find(createPostQuery(hexo));
|
||||
const getVisiblePosts = () => getAllPosts().filter(visiblePostFilter);
|
||||
|
||||
hexo.locals.set('posts', () => getVisiblePosts());
|
||||
hexo.locals.set('categories', () => hexo.model('Category').filter(category => category.posts.length));
|
||||
hexo.locals.set('tags', () => hexo.model('Tag').filter(tag => tag.posts.length));
|
||||
|
||||
hexo.extend.generator.register('post', () => {
|
||||
const posts = getAllPosts().sort('-date').toArray();
|
||||
const visiblePosts = getVisiblePosts().sort('-date').toArray();
|
||||
const visibleIndex = new Map(visiblePosts.map((post, index) => [String(post._id), index]));
|
||||
|
||||
return posts.map(post => {
|
||||
const { path, layout } = post;
|
||||
const index = visibleIndex.get(String(post._id));
|
||||
|
||||
post.prev = null;
|
||||
post.next = null;
|
||||
|
||||
if (index !== undefined) {
|
||||
post.prev = index > 0 ? visiblePosts[index - 1] : null;
|
||||
post.next = index < visiblePosts.length - 1 ? visiblePosts[index + 1] : null;
|
||||
}
|
||||
|
||||
if (!layout || layout === 'false') return { path, data: post.content };
|
||||
|
||||
const layouts = ['post', 'page', 'index'];
|
||||
|
||||
if (layout !== 'post') layouts.unshift(layout);
|
||||
|
||||
post.__post = true;
|
||||
|
||||
return { path, layout: layouts, data: post };
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user