From 804954cf4d5417b1abcba9854ed5f064348292c5 Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Tue, 22 Feb 2022 07:52:13 +0530 Subject: [PATCH] fix: append base to links (#502) fix #252 --- src/node/markdown/markdown.ts | 17 +++++++++++------ src/node/markdown/plugins/link.ts | 8 +++++++- src/node/markdownToVue.ts | 3 ++- src/node/plugin.ts | 1 + 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/node/markdown/markdown.ts b/src/node/markdown/markdown.ts index 1fdb926814a..c9d68b9ec86 100644 --- a/src/node/markdown/markdown.ts +++ b/src/node/markdown/markdown.ts @@ -49,7 +49,8 @@ export type { Header } export const createMarkdownRenderer = ( srcDir: string, - options: MarkdownOptions = {} + options: MarkdownOptions = {}, + base: string ): MarkdownRenderer => { const md = MarkdownIt({ html: true, @@ -66,11 +67,15 @@ export const createMarkdownRenderer = ( .use(hoistPlugin) .use(containerPlugin) .use(headingPlugin) - .use(linkPlugin, { - target: '_blank', - rel: 'noopener noreferrer', - ...options.externalLinks - }) + .use( + linkPlugin, + { + target: '_blank', + rel: 'noopener noreferrer', + ...options.externalLinks + }, + base + ) // 3rd party plugins .use(attrs, options.attrs) .use(anchor, { diff --git a/src/node/markdown/plugins/link.ts b/src/node/markdown/plugins/link.ts index e44c043a14d..d1448bc803e 100644 --- a/src/node/markdown/plugins/link.ts +++ b/src/node/markdown/plugins/link.ts @@ -11,7 +11,8 @@ const indexRE = /(^|.*\/)index.md(#?.*)$/i export const linkPlugin = ( md: MarkdownIt, - externalAttrs: Record + externalAttrs: Record, + base: string ) => { md.renderer.rules.link_open = (tokens, idx, options, env, self) => { const token = tokens[idx] @@ -76,6 +77,11 @@ export const linkPlugin = ( // export it for existence check pushLink(url.replace(/\.html$/, '')) + // append base to internal (non-relative) urls + if (url.startsWith('/')) { + url = `${base}${url}`.replace(/\/+/g, '/') + } + // markdown-it encodes the uri hrefAttr[1] = decodeURI(url) } diff --git a/src/node/markdownToVue.ts b/src/node/markdownToVue.ts index 436192f0a51..29db746129a 100644 --- a/src/node/markdownToVue.ts +++ b/src/node/markdownToVue.ts @@ -27,9 +27,10 @@ export function createMarkdownToVueRenderFn( pages: string[], userDefines: Record | undefined, isBuild = false, + base: string, includeLastUpdatedData = false ) { - const md = createMarkdownRenderer(srcDir, options) + const md = createMarkdownRenderer(srcDir, options, base) pages = pages.map((p) => slash(p.replace(/\.md$/, ''))) const userDefineRegex = userDefines diff --git a/src/node/plugin.ts b/src/node/plugin.ts index ee70ecc53b8..7f6e6f33c31 100644 --- a/src/node/plugin.ts +++ b/src/node/plugin.ts @@ -78,6 +78,7 @@ export function createVitePressPlugin( pages, config.define, config.command === 'build', + config.base, siteConfig.lastUpdated ) },