|
|
@@ -13,9 +13,11 @@ import { CodeBlock } from '~/components/ReactMarkdownComponents/CodeBlock';
|
|
|
import { Header } from '~/components/ReactMarkdownComponents/Header';
|
|
|
import { NextLink } from '~/components/ReactMarkdownComponents/NextLink';
|
|
|
import { RendererConfig } from '~/interfaces/services/renderer';
|
|
|
-import { addClass } from '~/services/renderer/rehype-plugins/add-class';
|
|
|
import loggerFactory from '~/utils/logger';
|
|
|
|
|
|
+import { addClass } from './rehype-plugins/add-class';
|
|
|
+import { relativeLinks } from './rehype-plugins/relative-links';
|
|
|
+
|
|
|
// import CsvToTable from './PreProcessor/CsvToTable';
|
|
|
// import EasyGrid from './PreProcessor/EasyGrid';
|
|
|
// import Linker from './PreProcessor/Linker';
|
|
|
@@ -212,15 +214,13 @@ const logger = loggerFactory('growi:util:GrowiRenderer');
|
|
|
|
|
|
export type RendererOptions = Partial<ReactMarkdownOptions>;
|
|
|
|
|
|
-export interface ReactMarkdownOptionsGenerator {
|
|
|
- (config: RendererConfig): RendererOptions
|
|
|
-}
|
|
|
|
|
|
-const generateCommonOptions: ReactMarkdownOptionsGenerator = (config: RendererConfig): RendererOptions => {
|
|
|
+const generateCommonOptions = (pagePath: string|undefined, config: RendererConfig): RendererOptions => {
|
|
|
return {
|
|
|
remarkPlugins: [gfm],
|
|
|
rehypePlugins: [
|
|
|
slug,
|
|
|
+ [relativeLinks, { pagePath }],
|
|
|
raw,
|
|
|
[sanitize, {
|
|
|
...sanitizeDefaultSchema,
|
|
|
@@ -243,11 +243,12 @@ const generateCommonOptions: ReactMarkdownOptionsGenerator = (config: RendererCo
|
|
|
};
|
|
|
|
|
|
export const generateViewOptions = (
|
|
|
+ pagePath: string,
|
|
|
config: RendererConfig,
|
|
|
storeTocNode: (node: HtmlElementNode) => void,
|
|
|
): RendererOptions => {
|
|
|
|
|
|
- const options = generateCommonOptions(config);
|
|
|
+ const options = generateCommonOptions(pagePath, config);
|
|
|
|
|
|
const { remarkPlugins, rehypePlugins, components } = options;
|
|
|
|
|
|
@@ -312,7 +313,7 @@ export const generateViewOptions = (
|
|
|
|
|
|
export const generateTocOptions = (config: RendererConfig, tocNode: HtmlElementNode | undefined): RendererOptions => {
|
|
|
|
|
|
- const options = generateCommonOptions(config);
|
|
|
+ const options = generateCommonOptions(undefined, config);
|
|
|
|
|
|
const { remarkPlugins, rehypePlugins } = options;
|
|
|
|
|
|
@@ -334,8 +335,8 @@ export const generateTocOptions = (config: RendererConfig, tocNode: HtmlElementN
|
|
|
return options;
|
|
|
};
|
|
|
|
|
|
-export const generatePreviewOptions: ReactMarkdownOptionsGenerator = (config: RendererConfig): RendererOptions => {
|
|
|
- const options = generateCommonOptions(config);
|
|
|
+export const generatePreviewOptions = (config: RendererConfig): RendererOptions => {
|
|
|
+ const options = generateCommonOptions(undefined, config);
|
|
|
|
|
|
// // Add configurers for preview
|
|
|
// renderer.addConfigurers([
|
|
|
@@ -350,8 +351,8 @@ export const generatePreviewOptions: ReactMarkdownOptionsGenerator = (config: Re
|
|
|
return options;
|
|
|
};
|
|
|
|
|
|
-export const generateCommentPreviewOptions: ReactMarkdownOptionsGenerator = (config: RendererConfig): RendererOptions => {
|
|
|
- const options = generateCommonOptions(config);
|
|
|
+export const generateCommentPreviewOptions = (config: RendererConfig): RendererOptions => {
|
|
|
+ const options = generateCommonOptions(undefined, config);
|
|
|
const { remarkPlugins } = options;
|
|
|
|
|
|
// add remark plugins
|
|
|
@@ -372,8 +373,8 @@ export const generateCommentPreviewOptions: ReactMarkdownOptionsGenerator = (con
|
|
|
return options;
|
|
|
};
|
|
|
|
|
|
-export const generateOthersOptions: ReactMarkdownOptionsGenerator = (config: RendererConfig): RendererOptions => {
|
|
|
- const options = generateCommonOptions(config);
|
|
|
+export const generateOthersOptions = (config: RendererConfig): RendererOptions => {
|
|
|
+ const options = generateCommonOptions(undefined, config);
|
|
|
|
|
|
// renderer.addConfigurers([
|
|
|
// new TableConfigurer(),
|