diff --git a/scripts/filters/post-filter.js b/scripts/filters/post-filter.js index f872f62c..d37bbd76 100644 --- a/scripts/filters/post-filter.js +++ b/scripts/filters/post-filter.js @@ -26,10 +26,12 @@ hexo.extend.filter.register('before_generate', function() { }); const hidePosts = allPosts.filter(post => post.hide); const normalPosts = allPosts.filter(post => !post.hide); + const indexPost = allPosts.filter(post => !post.archive) this.locals.set('all_posts', allPosts); this.locals.set('hide_posts', hidePosts); this.locals.set('posts', normalPosts); + this.locals.set('index_posts', indexPost); }); const original_post_generator = hexo.extend.generator.get('post'); diff --git a/scripts/generators/index-generator.js b/scripts/generators/index-generator.js new file mode 100644 index 00000000..d90c1327 --- /dev/null +++ b/scripts/generators/index-generator.js @@ -0,0 +1,22 @@ +'use strict'; + +const pagination = require('hexo-pagination'); + +module.exports = function(locals) { + const config = this.config; + const posts = locals.index_posts.sort(config.index_generator.order_by); + + posts.data.sort((a, b) => (b.sticky || 0) - (a.sticky || 0)); + + const paginationDir = config.pagination_dir || 'page'; + const path = config.index_generator.path || ''; + + return pagination(path, posts, { + perPage: config.index_generator.per_page, + layout: 'index', + format: paginationDir + '/%d/', + data: { + __index: true + } + }); +}; diff --git a/scripts/generators/pages.js b/scripts/generators/pages.js index b1539310..1dfd2876 100644 --- a/scripts/generators/pages.js +++ b/scripts/generators/pages.js @@ -50,3 +50,6 @@ hexo.extend.generator.register('_links', function(locals) { }; } }); + +// generate index page +hexo.extend.generator.register('index', require('./index-generator'));