From d8a7608a255cc89790d508a4cf67eb10c10f6e89 Mon Sep 17 00:00:00 2001 From: Shawn Erquhart Date: Mon, 2 Oct 2017 17:31:31 -0400 Subject: [PATCH] fix bugs due to Slate "nodes" properties being boolean --- .../__tests__/__snapshots__/parser.spec.js.snap | 3 --- .../Widgets/Markdown/serializers/remarkSlate.js | 16 +++++++++++++--- .../serializers/remarkSquashReferences.js | 3 ++- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/components/Widgets/Markdown/MarkdownControl/VisualEditor/__tests__/__snapshots__/parser.spec.js.snap b/src/components/Widgets/Markdown/MarkdownControl/VisualEditor/__tests__/__snapshots__/parser.spec.js.snap index 209c8676..011dd595 100644 --- a/src/components/Widgets/Markdown/MarkdownControl/VisualEditor/__tests__/__snapshots__/parser.spec.js.snap +++ b/src/components/Widgets/Markdown/MarkdownControl/VisualEditor/__tests__/__snapshots__/parser.spec.js.snap @@ -241,7 +241,6 @@ Object { Object { "isVoid": true, "kind": "block", - "nodes": undefined, "type": "thematic-break", }, Object { @@ -286,7 +285,6 @@ Object { Object { "isVoid": true, "kind": "block", - "nodes": undefined, "type": "thematic-break", }, Object { @@ -1200,7 +1198,6 @@ more important, there there are only so many sizes that you can use.", Object { "isVoid": true, "kind": "block", - "nodes": undefined, "type": "thematic-break", }, Object { diff --git a/src/components/Widgets/Markdown/serializers/remarkSlate.js b/src/components/Widgets/Markdown/serializers/remarkSlate.js index 8293410a..210bc13c 100644 --- a/src/components/Widgets/Markdown/serializers/remarkSlate.js +++ b/src/components/Widgets/Markdown/serializers/remarkSlate.js @@ -58,6 +58,14 @@ const markMap = { }; +/** + * Add nodes to a parent node only if `nodes` is truthy. + */ +function addNodes(parent, nodes) { + return nodes ? { ...parent, nodes } : parent; +} + + /** * Create a Slate Inline node. */ @@ -67,7 +75,8 @@ function createBlock(type, nodes, props = {}) { nodes = undefined; } - return { kind: 'block', type, nodes, ...props }; + const node = { kind: 'block', type, ...props }; + return addNodes(node, nodes); } @@ -75,7 +84,8 @@ function createBlock(type, nodes, props = {}) { * Create a Slate Block node. */ function createInline(type, props = {}, nodes) { - return { kind: 'inline', type, nodes, ...props }; + const node = { kind: 'inline', type, ...props }; + return addNodes(node, nodes); } @@ -143,7 +153,7 @@ function processMarkNode(node, parentMarks = []) { function convertMarkNode(node) { const slateNodes = processMarkNode(node); - const convertedSlateNodes = slateNodes.reduce((acc, node, idx, nodes) => { + const convertedSlateNodes = slateNodes.reduce((acc, node) => { const lastConvertedNode = last(acc); if (node.text && lastConvertedNode && lastConvertedNode.ranges) { lastConvertedNode.ranges.push(node); diff --git a/src/components/Widgets/Markdown/serializers/remarkSquashReferences.js b/src/components/Widgets/Markdown/serializers/remarkSquashReferences.js index 64c57f3d..5e49d2e9 100644 --- a/src/components/Widgets/Markdown/serializers/remarkSquashReferences.js +++ b/src/components/Widgets/Markdown/serializers/remarkSquashReferences.js @@ -55,7 +55,8 @@ export default function remarkSquashReferences() { const pre = u('text', node.type === 'imageReference' ? '![' : '['); const post = u('text', ']'); - return [ pre, ...children, post]; + const nodes = children || [ u('text', node.alt) ]; + return [ pre, ...nodes, post]; } /**