From 07614e16251eb5bc7424be1e8c9f9947098b95a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20Bl=C3=A4ttermann?= Date: Tue, 15 Nov 2022 01:43:38 +0100 Subject: [PATCH] Fix markdown rendering inside components --- website/src/components/layout/models.js | 6 ++--- website/src/components/layout/universe.js | 8 +++++-- website/src/components/util.js | 28 +++++++++++++++++++---- 3 files changed, 32 insertions(+), 10 deletions(-) diff --git a/website/src/components/layout/models.js b/website/src/components/layout/models.js index 884ff67ac..7234f73b8 100644 --- a/website/src/components/layout/models.js +++ b/website/src/components/layout/models.js @@ -13,7 +13,7 @@ import Icon from '../icon' import Link, { OptionalLink } from '../link' import Infobox from '../infobox' import Accordion from '../accordion' -import { join, arrayToObj, abbrNum, markdownToReact, isString, isEmptyObj } from '../util' +import { join, arrayToObj, abbrNum, MarkdownToReact, isString, isEmptyObj } from '../util' import siteMetadata from '../../../meta/site.json' import languages from '../../../meta/languages.json' @@ -295,7 +295,7 @@ const Model = ({ python -m spacy download {name} - {meta.description && markdownToReact(meta.description, MARKDOWN_COMPONENTS)} + {meta.description & } {isError && error} @@ -317,7 +317,7 @@ const Model = ({ )}
- {meta.notes && markdownToReact(meta.notes, MARKDOWN_COMPONENTS)} + {meta.notes & } {hasInteractiveCode && ( {[ diff --git a/website/src/components/layout/universe.js b/website/src/components/layout/universe.js index 414d4bd5e..87c02cd63 100644 --- a/website/src/components/layout/universe.js +++ b/website/src/components/layout/universe.js @@ -16,7 +16,7 @@ import Main from '../main' import Footer from '../footer' import { H3, H5, Label, InlineList } from '../typography' import { YouTube, SoundCloud, Iframe } from '../embed' -import { github, markdownToReact } from '../util' +import { github, MarkdownToReact } from '../util' import { nightly, legacy } from '../../../meta/dynamicMeta' import universe from '../../../meta/universe.json' @@ -258,7 +258,11 @@ const Project = ({ data, components }) => ( /> )} - {data.description &&
{markdownToReact(data.description, components)}
} + {data.description && ( +
+ +
+ )} {data.code_example && ( diff --git a/website/src/components/util.js b/website/src/components/util.js index 698140f0d..e103f5d0f 100644 --- a/website/src/components/util.js +++ b/website/src/components/util.js @@ -1,9 +1,10 @@ -import React, { Fragment } from 'react' +import React, { Fragment, useEffect, useState } from 'react' import { Parser as HtmlToReactParser } from 'html-to-react' -import remark from 'remark' -import remark2react from 'remark-react' import siteMetadata from '../../meta/site.json' import { domain } from '../../meta/dynamicMeta' +import remarkPlugins from '../../plugins/index.mjs' +import { serialize } from 'next-mdx-remote/serialize' +import { MDXRemote } from 'next-mdx-remote' const htmlToReactParser = new HtmlToReactParser() @@ -85,8 +86,25 @@ export function htmlToReact(html) { * for HTML elements. * @returns {Node} - The converted React elements. */ -export function markdownToReact(markdown, remarkReactComponents = {}) { - return remark().use(remark2react, { remarkReactComponents }).processSync(markdown).contents +export function MarkdownToReact({ markdown }) { + const [mdx, setMdx] = useState(null) + + useEffect(() => { + const getMdx = async () => { + setMdx( + await serialize(markdown, { + parseFrontmatter: false, + mdxOptions: { + remarkPlugins, + }, + }) + ) + } + + getMdx() + }, [markdown]) + + return mdx ? : <> } /**