commonmark-react-renderer
Advanced tools
Comparing version
@@ -5,2 +5,8 @@ # Change Log | ||
## [4.0.0] - 2016-02-21 | ||
### Changes | ||
- **Breaking change**: Inline HTML nodes are now wrapped in a `<span>`, block HTML nodes in `<div>`. This is necessary to properly support custom renderers. | ||
## [3.0.2] - 2016-02-21 | ||
@@ -7,0 +13,0 @@ |
{ | ||
"name": "commonmark-react-renderer", | ||
"description": "React renderer for CommonMark (rationalized Markdown)", | ||
"version": "3.0.2", | ||
"version": "4.0.0", | ||
"keywords": [ | ||
@@ -6,0 +6,0 @@ "commonmark", |
@@ -39,19 +39,13 @@ 'use strict'; | ||
}, | ||
Text: function Text(props) { | ||
return props.literal; | ||
}, | ||
Softbreak: function Softbreak(props) { | ||
return props.softBreak; | ||
} | ||
Text: null, | ||
Softbreak: null | ||
}; | ||
function HtmlRenderer(props) { | ||
if (props.escapeHtml) { | ||
return props.literal; | ||
} | ||
var nodeProps = props.escapeHtml ? {} : { dangerouslySetInnerHTML: { __html: props.literal } }; | ||
var children = props.escapeHtml ? [props.literal] : null; | ||
if (!props.skipHtml) { | ||
return createElement(props.isBlock ? 'div' : 'span', { | ||
dangerouslySetInnerHTML: { __html: props.literal } | ||
}); | ||
if (props.escapeHtml || !props.skipHtml) { | ||
return createElement(props.isBlock ? 'div' : 'span', nodeProps, children); | ||
} | ||
@@ -194,2 +188,7 @@ } | ||
// If we're skipping HTML nodes, don't keep processing | ||
if (this.skipHtml && (node.type === 'HtmlBlock' || node.type === 'HtmlInline')) { | ||
continue; | ||
} | ||
var isDocument = node === doc; | ||
@@ -222,3 +221,4 @@ var disallowedByConfig = this.allowedTypes.indexOf(node.type) === -1; | ||
var renderer = this.renderers[node.type]; | ||
if (typeof renderer !== 'function') { | ||
var isSimpleNode = node.type === 'Text' || node.type === 'Softbreak'; | ||
if (typeof renderer !== 'function' && !isSimpleNode) { | ||
throw new Error( | ||
@@ -236,3 +236,10 @@ 'Renderer for type `' + node.type + '` not defined or is not a function' | ||
} else { | ||
addChild(node, renderer(nodeProps || getNodeProps(node, key, propOptions))); | ||
var childProps = nodeProps || getNodeProps(node, key, propOptions); | ||
if (renderer) { | ||
addChild(node, React.createElement(renderer, childProps)); | ||
} else if (node.type === 'Text') { | ||
addChild(node, node.literal); | ||
} else if (node.type === 'Softbreak') { | ||
addChild(node, softBreak); | ||
} | ||
} | ||
@@ -239,0 +246,0 @@ } |
22331
3.34%272
1.87%