2019-03-12 18:46:44 +01:00
|
|
|
//@flow
|
|
|
|
|
import React from "react";
|
|
|
|
|
import SyntaxHighlighter from "./SyntaxHighlighter";
|
|
|
|
|
import Markdown from "react-markdown/with-html";
|
|
|
|
|
import {binder} from "@scm-manager/ui-extensions";
|
2019-05-07 10:11:26 +02:00
|
|
|
import MarkdownHeadingRenderer from "./MarkdownHeadingRenderer";
|
2019-03-12 18:46:44 +01:00
|
|
|
|
|
|
|
|
type Props = {
|
|
|
|
|
content: string,
|
2019-03-13 09:36:48 +01:00
|
|
|
renderContext?: Object,
|
2019-03-12 18:46:44 +01:00
|
|
|
renderers?: Object,
|
2019-05-07 10:11:26 +02:00
|
|
|
enableAnchorHeadings: boolean
|
2019-03-12 18:46:44 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class MarkdownView extends React.Component<Props> {
|
|
|
|
|
|
2019-05-07 10:11:26 +02:00
|
|
|
static defaultProps = {
|
|
|
|
|
enableAnchorHeadings: false
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
constructor(props: Props) {
|
|
|
|
|
super(props);
|
|
|
|
|
}
|
|
|
|
|
|
2019-03-12 18:46:44 +01:00
|
|
|
render() {
|
2019-05-07 10:11:26 +02:00
|
|
|
const {content, renderers, renderContext, enableAnchorHeadings} = this.props;
|
2019-03-12 18:46:44 +01:00
|
|
|
|
|
|
|
|
const rendererFactory = binder.getExtension("markdown-renderer-factory");
|
|
|
|
|
let rendererList = renderers;
|
|
|
|
|
|
|
|
|
|
if (rendererFactory){
|
|
|
|
|
rendererList = rendererFactory(renderContext);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!rendererList){
|
|
|
|
|
rendererList = {};
|
|
|
|
|
}
|
|
|
|
|
|
2019-05-07 10:11:26 +02:00
|
|
|
if (enableAnchorHeadings) {
|
|
|
|
|
rendererList.heading = MarkdownHeadingRenderer;
|
|
|
|
|
}
|
|
|
|
|
|
2019-03-12 18:46:44 +01:00
|
|
|
if (!rendererList.code){
|
|
|
|
|
rendererList.code = SyntaxHighlighter;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<Markdown
|
2019-03-13 09:36:48 +01:00
|
|
|
className="content"
|
2019-03-12 18:46:44 +01:00
|
|
|
skipHtml={true}
|
|
|
|
|
escapeHtml={true}
|
|
|
|
|
source={content}
|
|
|
|
|
renderers={rendererList}
|
|
|
|
|
/>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default MarkdownView;
|