diff --git a/lib/plugins/filter/post_permalink.js b/lib/plugins/filter/post_permalink.js index 12b57ea207..1087c5ef37 100644 --- a/lib/plugins/filter/post_permalink.js +++ b/lib/plugins/filter/post_permalink.js @@ -6,7 +6,13 @@ let permalink; function postPermalinkFilter(data) { const { config } = this; - const { id, _id, slug, title, date } = data; + const { id, _id, slug, title, date, __permalink } = data; + + if (__permalink) { + if (!__permalink.startsWith('/')) return `/${__permalink}`; + return __permalink; + } + const hash = slug && date ? createSha1Hash().update(slug + date.unix().toString()).digest('hex').slice(0, 12) : null; @@ -58,7 +64,6 @@ function postPermalinkFilter(data) { } } - return permalink.stringify(meta); } diff --git a/lib/plugins/processor/post.js b/lib/plugins/processor/post.js index fd0721668f..7336025bbb 100644 --- a/lib/plugins/processor/post.js +++ b/lib/plugins/processor/post.js @@ -121,7 +121,7 @@ module.exports = ctx => { } if (data.permalink) { - data.slug = data.permalink; + data.__permalink = data.permalink; delete data.permalink; } diff --git a/test/scripts/filters/post_permalink.js b/test/scripts/filters/post_permalink.js index 9b82ca8952..0098edf065 100644 --- a/test/scripts/filters/post_permalink.js +++ b/test/scripts/filters/post_permalink.js @@ -148,4 +148,27 @@ describe('post_permalink', () => { await Promise.all(posts.map(post => Post.removeById(post._id))); }); + + it('permalink - should override everything', async () => { + hexo.config.permalink = ':year/:month/:day/:title/'; + + const posts = await Post.insert([{ + source: 'my-new-post.md', + slug: 'hexo/permalink-test', + __permalink: 'hexo/permalink-test', + title: 'Permalink Test', + date: moment('2014-01-02') + }, { + source: 'another-new-post.md', + slug: '/hexo-hexo/permalink-test-2', + __permalink: '/hexo-hexo/permalink-test-2', + title: 'Permalink Test', + date: moment('2014-01-02') + }]); + + postPermalink(posts[0]).should.eql('/hexo/permalink-test'); + postPermalink(posts[1]).should.eql('/hexo-hexo/permalink-test-2'); + + await Promise.all(posts.map(post => Post.removeById(post._id))); + }); }); diff --git a/test/scripts/processors/post.js b/test/scripts/processors/post.js index ebdf173097..07cacaa210 100644 --- a/test/scripts/processors/post.js +++ b/test/scripts/processors/post.js @@ -979,7 +979,8 @@ describe('post', () => { await writeFile(file.source, body); await process(file); const post = Post.findOne({source: file.path}); - post.slug.should.eql('foooo'); + + post.__permalink.should.eql('foooo'); post.remove(); unlink(file.source);