From 10b912113215d0dcee8a562275b270015d91fbed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marin=20Petruni=C4=87?= Date: Tue, 5 Sep 2023 00:04:50 +0200 Subject: [PATCH] new: Use docs path from config (#99) Signed-off-by: Marin Petrunic --- packages/plugin/src/components/Markdown.tsx | 4 +++- packages/plugin/src/utils/markdown.ts | 10 ++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/plugin/src/components/Markdown.tsx b/packages/plugin/src/components/Markdown.tsx index 635e132..4768d90 100644 --- a/packages/plugin/src/components/Markdown.tsx +++ b/packages/plugin/src/components/Markdown.tsx @@ -3,6 +3,7 @@ import React, { useState } from 'react'; import { marked } from 'marked'; +import { useDocsData } from '@docusaurus/plugin-content-docs/client'; import { useDocsVersion } from '@docusaurus/theme-common/internal'; import MDX from '@theme/MDXComponents'; import { useReflectionMap } from '../hooks/useReflectionMap'; @@ -229,8 +230,9 @@ export interface MarkdownProps { export function Markdown({ content }: MarkdownProps) { const reflections = useReflectionMap(); const version = useDocsVersion(); + const docsData = useDocsData(version.pluginId); const [ast] = useState(() => - marked.lexer(replaceLinkTokens(content, reflections, version)), + marked.lexer(replaceLinkTokens(content, reflections, version, docsData.path)), ); if (!content) { diff --git a/packages/plugin/src/utils/markdown.ts b/packages/plugin/src/utils/markdown.ts index babfb23..a1ffac4 100644 --- a/packages/plugin/src/utils/markdown.ts +++ b/packages/plugin/src/utils/markdown.ts @@ -1,4 +1,5 @@ import type { PropVersionMetadata } from '@docusaurus/plugin-content-docs'; +import type { DocusaurusConfig } from '@docusaurus/types'; import type { DeclarationReflectionMap } from '../types'; function splitLinkText(text: string): { caption: string; target: string } { @@ -57,13 +58,13 @@ function replaceApiLinks( function replaceDocLinks( currentVersion: PropVersionMetadata, + baseUrl: string ): (match: string, content: string) => string { return (match: string, content: string) => { const { caption, target } = splitLinkText(content); const version = currentVersion.version === 'current' ? 'next' : currentVersion.version; - - // TODO: Handle `routeBasePath`? Something else besides "docs"? - const url = currentVersion.isLast ? `/docs/${target}` : `/docs/${version}/${target}`; + + const url = currentVersion.isLast ? `${baseUrl === "/" ? "" : baseUrl }/${target}` : `${baseUrl === "/" ? "" : baseUrl }/${version}/${target}`; return `[${caption}](${url})`; }; @@ -75,8 +76,9 @@ export function replaceLinkTokens( markdown: string, reflections: DeclarationReflectionMap, currentVersion: PropVersionMetadata, + docsBaseUrl: string ) { return markdown .replace(/{@(link|linkcode|linkplain|apilink)\s+([^}]+?)}/gi, replaceApiLinks(reflections)) - .replace(/{@doclink\s+([^}]+?)}/gi, replaceDocLinks(currentVersion)); + .replace(/{@doclink\s+([^}]+?)}/gi, replaceDocLinks(currentVersion, docsBaseUrl)); }