From a9f84ab1cc69450e1a5db283dce373cd2cafeeec Mon Sep 17 00:00:00 2001 From: MrTT Date: Sat, 4 Jan 2020 12:50:01 +0800 Subject: [PATCH 1/3] Add after_route_render filter --- lib/hexo/index.js | 19 ++++++++++++------- lib/plugins/filter/after_render/index.js | 4 ++-- test/scripts/hexo/hexo.js | 13 +++++++++++++ 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/lib/hexo/index.js b/lib/hexo/index.js index 97a9566ef9..18e7a89305 100644 --- a/lib/hexo/index.js +++ b/lib/hexo/index.js @@ -56,13 +56,18 @@ const createLoadThemeRoute = function(generatorResult, locals, ctx) { if (view) { log.debug(`Rendering HTML ${name}: ${magenta(path)}`); - return view.render(locals).tap(result => { - if (useCache) { - routeCache.set(generatorResult, result); - } - }).tapCatch(err => { - log.error({ err }, `Render HTML failed: ${magenta(path)}`); - }); + return view.render(locals) + .then(result => ctx.execFilter('after_route_render', result, { + context: ctx, + args: [locals] + })) + .tap(result => { + if (useCache) { + routeCache.set(generatorResult, result); + } + }).tapCatch(err => { + log.error({ err }, `Render HTML failed: ${magenta(path)}`); + }); } } diff --git a/lib/plugins/filter/after_render/index.js b/lib/plugins/filter/after_render/index.js index 819e0490ce..655e4102e4 100644 --- a/lib/plugins/filter/after_render/index.js +++ b/lib/plugins/filter/after_render/index.js @@ -3,6 +3,6 @@ module.exports = ctx => { const { filter } = ctx.extend; - filter.register('after_render:html', require('./external_link')); - filter.register('after_render:html', require('./meta_generator')); + filter.register('after_route_render', require('./external_link')); + filter.register('after_route_render', require('./meta_generator')); }; diff --git a/test/scripts/hexo/hexo.js b/test/scripts/hexo/hexo.js index c9668f5274..5ece6ef696 100644 --- a/test/scripts/hexo/hexo.js +++ b/test/scripts/hexo/hexo.js @@ -418,6 +418,19 @@ describe('Hexo', () => { }); }); + it('_generate() - after_route_render filter', () => { + const hook = sinon.spy(result => result.replace('', 'content')); + hexo.extend.filter.register('after_route_render', hook); + hexo.theme.setView('test.swig', ''); + hexo.extend.generator.register('test', () => ({ + path: 'test', + layout: 'test' + })); + return hexo._generate() + .then(() => checkStream(route.get('test'), 'content')) + .then(() => hook.called.should.be.true); + }); + it('_generate() - return nothing in generator', () => { hexo.extend.generator.register('test_nothing', () => { // From 6276ff4f6f50480bc2194258baf528f07e78d772 Mon Sep 17 00:00:00 2001 From: MrTT Date: Sat, 4 Jan 2020 19:12:06 +0800 Subject: [PATCH 2/3] Update test --- test/scripts/hexo/hexo.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/scripts/hexo/hexo.js b/test/scripts/hexo/hexo.js index 5ece6ef696..773ab7d3cf 100644 --- a/test/scripts/hexo/hexo.js +++ b/test/scripts/hexo/hexo.js @@ -419,15 +419,15 @@ describe('Hexo', () => { }); it('_generate() - after_route_render filter', () => { - const hook = sinon.spy(result => result.replace('', 'content')); + const hook = sinon.spy(result => '1'); hexo.extend.filter.register('after_route_render', hook); - hexo.theme.setView('test.swig', ''); + hexo.theme.setView('test.swig', '0'); hexo.extend.generator.register('test', () => ({ path: 'test', layout: 'test' })); return hexo._generate() - .then(() => checkStream(route.get('test'), 'content')) + .then(() => checkStream(route.get('test'), '1')) .then(() => hook.called.should.be.true); }); From 91c70ef6b6f8ed695d763dbcb39d3ad8cec3887d Mon Sep 17 00:00:00 2001 From: MrTT Date: Sat, 4 Jan 2020 19:16:22 +0800 Subject: [PATCH 3/3] Update test .... --- test/scripts/hexo/hexo.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/scripts/hexo/hexo.js b/test/scripts/hexo/hexo.js index 773ab7d3cf..dd960b2d8c 100644 --- a/test/scripts/hexo/hexo.js +++ b/test/scripts/hexo/hexo.js @@ -419,15 +419,15 @@ describe('Hexo', () => { }); it('_generate() - after_route_render filter', () => { - const hook = sinon.spy(result => '1'); + const hook = sinon.spy(result => result.replace('foo', 'bar')); hexo.extend.filter.register('after_route_render', hook); - hexo.theme.setView('test.swig', '0'); + hexo.theme.setView('test.swig', 'foo'); hexo.extend.generator.register('test', () => ({ path: 'test', layout: 'test' })); return hexo._generate() - .then(() => checkStream(route.get('test'), '1')) + .then(() => checkStream(route.get('test'), 'bar')) .then(() => hook.called.should.be.true); });