From 7684fff545b95d9e661e5761704b965eacee40e9 Mon Sep 17 00:00:00 2001 From: Nikolay Kazakov Date: Fri, 11 May 2018 07:05:55 +0500 Subject: [PATCH] Fix issue when a nested in mark node a "void" inline node is the cause of error in applyMark method (#1831) --- packages/slate-html-serializer/src/index.js | 2 +- .../test/deserialize/mark-void-inline.js | 53 +++++++++++++++++++ .../slate-html-serializer/test/helpers/h.js | 4 ++ 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 packages/slate-html-serializer/test/deserialize/mark-void-inline.js diff --git a/packages/slate-html-serializer/src/index.js b/packages/slate-html-serializer/src/index.js index 032380288..2da99649f 100644 --- a/packages/slate-html-serializer/src/index.js +++ b/packages/slate-html-serializer/src/index.js @@ -299,7 +299,7 @@ class Html { leaf.marks.push({ type, data }) return leaf }) - } else { + } else if (node.nodes) { node.nodes = node.nodes.map(applyMark) } diff --git a/packages/slate-html-serializer/test/deserialize/mark-void-inline.js b/packages/slate-html-serializer/test/deserialize/mark-void-inline.js new file mode 100644 index 000000000..eb5e55f44 --- /dev/null +++ b/packages/slate-html-serializer/test/deserialize/mark-void-inline.js @@ -0,0 +1,53 @@ +/** @jsx h */ + +import h from '../helpers/h' + +export const config = { + rules: [ + { + deserialize(el, next) { + switch (el.tagName.toLowerCase()) { + case 'p': { + return { + object: 'block', + type: 'paragraph', + nodes: next(el.childNodes), + } + } + case 'strong': { + return { + object: 'mark', + type: 'bold', + nodes: next(el.childNodes), + } + } + case 'br': { + return { + object: 'inline', + type: 'linebreak', + isVoid: true, + } + } + } + }, + }, + ], +} + +export const input = ` +

one
two

+`.trim() + +export const output = ( + + + + + one + + two + + + + +) diff --git a/packages/slate-html-serializer/test/helpers/h.js b/packages/slate-html-serializer/test/helpers/h.js index 63c2dc01b..98e4bee00 100644 --- a/packages/slate-html-serializer/test/helpers/h.js +++ b/packages/slate-html-serializer/test/helpers/h.js @@ -25,6 +25,10 @@ const h = createHyperscript({ type: 'emoji', isVoid: true, }, + linebreak: { + type: 'linebreak', + isVoid: true, + }, }, marks: { b: 'bold',