diff --git a/scm-ui/ui-components/src/MarkdownView.stories.tsx b/scm-ui/ui-components/src/MarkdownView.stories.tsx index 22a478f1b2..6598bbcce8 100644 --- a/scm-ui/ui-components/src/MarkdownView.stories.tsx +++ b/scm-ui/ui-components/src/MarkdownView.stories.tsx @@ -5,19 +5,24 @@ import styled from "styled-components"; import TestPage from "./__resources__/test-page.md"; import MarkdownWithoutLang from "./__resources__/markdown-without-lang.md"; +import MarkdownXmlCodeBlock from "./__resources__/markdown-xml-codeblock.md"; +import MarkdownInlineXml from "./__resources__/markdown-inline-xml.md"; +import Title from "./layout/Title"; +import { Subtitle } from "./layout"; const Spacing = styled.div` padding: 2em; `; storiesOf("MarkdownView", module) - .add("Default", () => ( - - - - )) - .add("Code without Lang", () => ( - - - + .addDecorator(story => {story()}) + .add("Default", () => ) + .add("Code without Lang", () => ) + .add("Xml Code Block", () => ) + .add("Inline Xml", () => ( + <> + + <Subtitle subtitle="Inline xml outside of a code block is not supported" /> + <MarkdownView content={MarkdownInlineXml} /> + </> )); diff --git a/scm-ui/ui-components/src/MarkdownView.tsx b/scm-ui/ui-components/src/MarkdownView.tsx index 01a2b35512..4a5b418bfb 100644 --- a/scm-ui/ui-components/src/MarkdownView.tsx +++ b/scm-ui/ui-components/src/MarkdownView.tsx @@ -3,6 +3,7 @@ import { withRouter, RouteComponentProps } from "react-router-dom"; // @ts-ignore import Markdown from "react-markdown/with-html"; import { binder } from "@scm-manager/ui-extensions"; +import ErrorBoundary from "./ErrorBoundary"; import SyntaxHighlighter from "./SyntaxHighlighter"; import MarkdownHeadingRenderer from "./MarkdownHeadingRenderer"; @@ -64,15 +65,17 @@ class MarkdownView extends React.Component<Props> { } return ( - <div ref={el => (this.contentRef = el)}> - <Markdown - className="content" - skipHtml={skipHtml} - escapeHtml={skipHtml} - source={content} - renderers={rendererList} - /> - </div> + <ErrorBoundary> + <div ref={el => (this.contentRef = el)}> + <Markdown + className="content" + skipHtml={skipHtml} + escapeHtml={skipHtml} + source={content} + renderers={rendererList} + /> + </div> + </ErrorBoundary> ); } } diff --git a/scm-ui/ui-components/src/__resources__/markdown-inline-xml.md.ts b/scm-ui/ui-components/src/__resources__/markdown-inline-xml.md.ts new file mode 100644 index 0000000000..c5be8f33f4 --- /dev/null +++ b/scm-ui/ui-components/src/__resources__/markdown-inline-xml.md.ts @@ -0,0 +1,24 @@ +export default `# Xml in Markdown +<project [...]> + + [...] + + <build> + <plugins> + + [...] + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-enforcer-plugin</artifactId> + </plugin> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>animal-sniffer-maven-plugin</artifactId> + </plugin> + </plugins> + </build> + + [...] + +</project>`; diff --git a/scm-ui/ui-components/src/__resources__/markdown-xml-codeblock.md.ts b/scm-ui/ui-components/src/__resources__/markdown-xml-codeblock.md.ts new file mode 100644 index 0000000000..afcb4f0bf4 --- /dev/null +++ b/scm-ui/ui-components/src/__resources__/markdown-xml-codeblock.md.ts @@ -0,0 +1,26 @@ +export default `# Xml Code Block in Markdown +\`\`\`xml +<project [...]> + + [...] + + <build> + <plugins> + + [...] + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-enforcer-plugin</artifactId> + </plugin> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>animal-sniffer-maven-plugin</artifactId> + </plugin> + </plugins> + </build> + + [...] + +</project> +\`\`\``;