From e0724aa1bd71b5c1f473fb4d9003bff32e22eadf Mon Sep 17 00:00:00 2001 From: Andrey Okonetchnikov Date: Tue, 27 Sep 2016 11:26:28 +0200 Subject: [PATCH] Use react-htmlparser2 to render HTML to React VDOM --- package.json | 1 + src/components/Widgets/MarkitupReactRenderer.js | 7 ++----- .../Widgets/__tests__/MarkitupReactRenderer.spec.js | 13 +++++++++---- .../MarkitupReactRenderer.spec.js.snap | 12 +++++++++++- 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index fe2099a5..8c9df5af 100644 --- a/package.json +++ b/package.json @@ -97,6 +97,7 @@ "prismjs": "^1.5.1", "react-addons-css-transition-group": "^15.3.1", "react-datetime": "^2.6.0", + "react-htmlparser2": "^0.1.0", "react-portal": "^2.2.1", "react-simple-dnd": "^0.1.2", "react-toolbox": "^1.2.1", diff --git a/src/components/Widgets/MarkitupReactRenderer.js b/src/components/Widgets/MarkitupReactRenderer.js index 40923448..a2e79bfd 100644 --- a/src/components/Widgets/MarkitupReactRenderer.js +++ b/src/components/Widgets/MarkitupReactRenderer.js @@ -1,7 +1,7 @@ import React, { PropTypes } from 'react'; +import reactParser from 'react-htmlparser2'; import MarkupIt, { Syntax, BLOCKS, STYLES, ENTITIES } from 'markup-it'; import { pick } from 'lodash'; -import htmlSyntax from 'markup-it/syntaxes/html'; const defaultSchema = { [BLOCKS.DOCUMENT]: 'article', @@ -11,10 +11,7 @@ const defaultSchema = { [BLOCKS.PARAGRAPH]: 'p', [BLOCKS.FOOTNOTE]: 'footnote', [BLOCKS.HTML]: ({ token }) => { - return ; + return reactParser(token.get('raw'), React); }, [BLOCKS.HR]: 'hr', [BLOCKS.HEADING_1]: 'h1', diff --git a/src/components/Widgets/__tests__/MarkitupReactRenderer.spec.js b/src/components/Widgets/__tests__/MarkitupReactRenderer.spec.js index a7e351a8..d38f2719 100644 --- a/src/components/Widgets/__tests__/MarkitupReactRenderer.spec.js +++ b/src/components/Widgets/__tests__/MarkitupReactRenderer.spec.js @@ -170,10 +170,15 @@ I get 10 times more traffic from [Google] [1] than from [Yahoo] [2] or [MSN] [3] const value = ` # Title - +
+ +
+
Test HTML content
+
Testing HTML in Markdown
+
+
`; const component = shallow(

H1

Text with bold & em elements

H2

  • ul item 1
  • ul item 2

H3

  1. ol item 1
  2. ol item 2
  3. ol item 3

H4

link title

H5

\"alt

H6
"`; -exports[`MarkitupReactRenderer Markdown rendering HTML should render HTML as is using Markdown 1`] = `"

Title

  • Test HTML content
  • Testing HTML in Markdown
"`; +exports[`MarkitupReactRenderer Markdown rendering HTML should render HTML as is using Markdown 1`] = ` +"

Title

+ +
+
Test HTML content
+
Testing HTML in Markdown
+
+
" +`; exports[`MarkitupReactRenderer Markdown rendering Headings should render Heading 1 1`] = `"

Title

"`;