diff --git a/lib/core/__tests__/utils.test.js b/lib/core/__tests__/utils.test.js index fcd69112e7..9a172d7956 100644 --- a/lib/core/__tests__/utils.test.js +++ b/lib/core/__tests__/utils.test.js @@ -46,4 +46,30 @@ describe('utils', () => { utils.extractBlogPostSummary(blogPostWithoutTruncateContents) ).toMatchSnapshot(); }); + + 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'); + expect(utils.getPath('/docs/en/versioning.html', false)).toBe( + '/docs/en/versioning.html' + ); + expect(utils.getPath('/en/users.html', false)).toBe('/en/users.html'); + }); + + test('removeExtension', () => { + expect(utils.removeExtension('/endiliey.html')).toBe('/endiliey'); + expect(utils.removeExtension('/a.b/')).toBe('/a.b/'); + expect(utils.removeExtension('/a.b/c.png')).toBe('/a.b/c'); + expect(utils.removeExtension('/a.b/c.d.e')).toBe('/a.b/c.d'); + expect(utils.removeExtension('/docs/test')).toBe('/docs/test'); + expect(utils.removeExtension('pages.js')).toBe('pages'); + }); }); diff --git a/lib/core/utils.js b/lib/core/utils.js index 0f99620eb3..9f12ef3eb0 100644 --- a/lib/core/utils.js +++ b/lib/core/utils.js @@ -20,12 +20,16 @@ function extractBlogPostSummary(content) { return content.substring(0, BLOG_POST_SUMMARY_LENGTH); } +function removeExtension(path) { + return path.replace(/\.[^/.]+$/, ''); +} + function getPath(path, cleanUrl = false) { if (cleanUrl) { if (path.endsWith('/index.html')) { return path.replace(/\/index.html$/, ''); } else { - return path.replace(/\.html$/, ''); + return removeExtension(path); } } return path; @@ -36,4 +40,5 @@ module.exports = { extractBlogPostBeforeTruncate, extractBlogPostSummary, getPath, + removeExtension, }; diff --git a/lib/server/generate.js b/lib/server/generate.js index b4486f9aef..1d4758f8a2 100644 --- a/lib/server/generate.js +++ b/lib/server/generate.js @@ -16,6 +16,7 @@ async function execute() { const readMetadata = require('./readMetadata.js'); const path = require('path'); const getTOC = require('../core/getTOC.js'); + const utils = require('../core/utils.js'); const React = require('react'); const mkdirp = require('mkdirp'); const glob = require('glob'); @@ -164,7 +165,7 @@ async function execute() { // replace any links to markdown files to their website html links Object.keys(mdToHtml).forEach(function(key, index) { let link = mdToHtml[key]; - link = siteConfig.cleanUrl ? link.replace(/\.html$/, '') : link; + link = utils.getPath(link, siteConfig.cleanUrl); link = link.replace('/en/', '/' + language + '/'); link = link.replace( '/VERSION/', @@ -205,9 +206,10 @@ async function execute() { env.translation.enabled && metadata.permalink.indexOf('docs/en') !== -1 ) { - const redirectlink = siteConfig.cleanUrl - ? metadata.permalink.replace(/\.html$/, '') - : metadata.permalink; + const redirectlink = utils.getPath( + metadata.permalink, + siteConfig.cleanUrl + ); const redirectComp = ( { urls.push({ - url: - '/blog/' + - (siteConfig.cleanUrl ? blog.path.replace(/\.html$/, '') : blog.path), + url: '/blog/' + utils.getPath(blog.path, siteConfig.cleanUrl), changefreq: 'weekly', priority: 0.3, }); @@ -79,14 +78,13 @@ module.exports = function(callback) { .filter(key => Metadata[key].language === 'en') .map(key => { let doc = Metadata[key]; + let docUrl = utils.getPath(doc.permalink, siteConfig.cleanUrl); let links = enabledLanguages.map(lang => { - let langUrl = doc.permalink.replace('docs/en/', `docs/${lang.tag}/`); + let langUrl = docUrl.replace('docs/en/', `docs/${lang.tag}/`); return {lang: lang.tag, url: langUrl}; }); urls.push({ - url: siteConfig.cleanUrl - ? doc.permalink.replace(/\.html$/, '') - : doc.permalink, + url: docUrl, changefreq: 'hourly', priority: 1.0, links,