From 8633e00eefb4fb805099718e75a9f708e007e1a8 Mon Sep 17 00:00:00 2001 From: endiliey Date: Tue, 28 Aug 2018 09:43:30 +0800 Subject: [PATCH 1/2] fix: pretty url should only remove html extension --- lib/core/__tests__/utils.test.js | 29 ++++++++++++++++++----------- lib/core/utils.js | 16 ++++++++-------- 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/lib/core/__tests__/utils.test.js b/lib/core/__tests__/utils.test.js index 5c1e9ec53d4d..dfd22613cb2f 100644 --- a/lib/core/__tests__/utils.test.js +++ b/lib/core/__tests__/utils.test.js @@ -39,20 +39,27 @@ describe('utils', () => { }); test('getPath', () => { - expect(utils.getPath('/docs/en/versioning.html', true)).toBe( - '/docs/en/versioning' - ); - expect(utils.getPath('/en/users.html', true)).toBe('/en/users'); - expect(utils.getPath('/docs/en/asd/index.html', true)).toBe('/docs/en/asd'); - expect(utils.getPath('/en/help/index.html', true)).toBe('/en/help'); - expect(utils.getPath('/en/help.a.b.c.d.e.html', true)).toBe( - '/en/help.a.b.c.d.e' - ); - expect(utils.getPath('/en/help.js', true)).toBe('/en/help'); + // does not change/transform path + expect(utils.getPath('/en/users.html', false)).toBe('/en/users.html'); expect(utils.getPath('/docs/en/versioning.html', false)).toBe( '/docs/en/versioning.html' ); - expect(utils.getPath('/en/users.html', false)).toBe('/en/users.html'); + expect(utils.getPath(undefined, false)).toBeUndefined(); + expect(utils.getPath(null, false)).toBeNull(); + + // transform to pretty/clean path + const cleanPath = pathStr => utils.getPath(pathStr, true); + expect(cleanPath('/en/users')).toBe('/en/users'); + expect(cleanPath('/docs/versioning.html')).toBe('/docs/versioning'); + expect(cleanPath('/en/users.html')).toBe('/en/users'); + expect(cleanPath('/docs/en/asd/index.html')).toBe('/docs/en/asd'); + expect(cleanPath('/en/help/index.html')).toBe('/en/help'); + expect(cleanPath('/en/help.a.b.c.d.e.html')).toBe('/en/help.a.b.c.d.e'); + expect(cleanPath('/en/help.js')).toBe('/en/help.js'); + expect(cleanPath('/test.md')).toBe('/test.md'); + expect(cleanPath('/blog/7.0.0')).toBe('/blog/7.0.0'); + expect(cleanPath('/test/5.html.2')).toBe('/test/5.html.2'); + expect(cleanPath('/docs/en/5.2')).toBe('/docs/en/5.2'); }); test('removeExtension', () => { diff --git a/lib/core/utils.js b/lib/core/utils.js index 5e4b66e9fed6..f4e8837b30fe 100644 --- a/lib/core/utils.js +++ b/lib/core/utils.js @@ -15,17 +15,17 @@ function extractBlogPostBeforeTruncate(content) { return content.split(TRUNCATE_MARKER)[0]; } -function removeExtension(path) { - return path.replace(/\.[^/.]+$/, ''); +function removeExtension(pathStr) { + return pathStr.replace(/\.[^/.]+$/, ''); } -function getPath(path, cleanUrl = false) { - if (cleanUrl) { - return path.endsWith('/index.html') - ? path.replace(/\/index.html$/, '') - : removeExtension(path); +function getPath(pathStr, cleanUrl = false) { + if (!pathStr || !cleanUrl || !pathStr.endsWith('.html')) { + return pathStr; } - return path; + return pathStr.endsWith('/index.html') + ? pathStr.replace(/\/index.html$/, '') + : removeExtension(pathStr); } module.exports = { From 6e02c4901e2617b5da06e3b143e1a0555c84e513 Mon Sep 17 00:00:00 2001 From: endiliey Date: Tue, 28 Aug 2018 10:21:33 +0800 Subject: [PATCH 2/2] cleanUrl of '/index.html' should be '/' --- lib/core/__tests__/utils.test.js | 6 ++++-- lib/core/utils.js | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/core/__tests__/utils.test.js b/lib/core/__tests__/utils.test.js index dfd22613cb2f..dd5091948e7f 100644 --- a/lib/core/__tests__/utils.test.js +++ b/lib/core/__tests__/utils.test.js @@ -52,8 +52,10 @@ describe('utils', () => { expect(cleanPath('/en/users')).toBe('/en/users'); expect(cleanPath('/docs/versioning.html')).toBe('/docs/versioning'); expect(cleanPath('/en/users.html')).toBe('/en/users'); - expect(cleanPath('/docs/en/asd/index.html')).toBe('/docs/en/asd'); - expect(cleanPath('/en/help/index.html')).toBe('/en/help'); + expect(cleanPath('/docs/en/asd/index.html')).toBe('/docs/en/asd/'); + expect(cleanPath('/en/help/index.html')).toBe('/en/help/'); + expect(cleanPath('/index.html')).toBe('/'); + expect(cleanPath('/react/index.html')).toBe('/react/'); expect(cleanPath('/en/help.a.b.c.d.e.html')).toBe('/en/help.a.b.c.d.e'); expect(cleanPath('/en/help.js')).toBe('/en/help.js'); expect(cleanPath('/test.md')).toBe('/test.md'); diff --git a/lib/core/utils.js b/lib/core/utils.js index f4e8837b30fe..a01f9921504a 100644 --- a/lib/core/utils.js +++ b/lib/core/utils.js @@ -24,7 +24,7 @@ function getPath(pathStr, cleanUrl = false) { return pathStr; } return pathStr.endsWith('/index.html') - ? pathStr.replace(/\/index.html$/, '') + ? pathStr.replace(/index\.html$/, '') : removeExtension(pathStr); }