From add174ef3763deedec29efd817a1ac724bfef7bd Mon Sep 17 00:00:00 2001 From: Per-Kristian Nordnes Date: Tue, 14 Feb 2017 03:16:08 +0100 Subject: [PATCH] Allow setting a defaultBlockType as object for HTML serializer (#595) * Allow setting a defaultBlockType as object for HTML serializer * Add test for html deserializer default block as object * Code enhancement/compacting --- src/serializers/html.js | 10 ++++---- .../html/deserialize/default-block/index.js | 24 ++++++++++++++++++ .../html/deserialize/default-block/input.html | 2 ++ .../deserialize/default-block/output.yaml | 25 +++++++++++++++++++ 4 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 test/serializers/fixtures/html/deserialize/default-block/index.js create mode 100644 test/serializers/fixtures/html/deserialize/default-block/input.html create mode 100644 test/serializers/fixtures/html/deserialize/default-block/output.yaml diff --git a/src/serializers/html.js b/src/serializers/html.js index 8ecd648b3..39d5cbf68 100644 --- a/src/serializers/html.js +++ b/src/serializers/html.js @@ -70,6 +70,7 @@ class Html { * @param {Object} options * @property {Array} rules * @property {String} defaultBlockType + * @property {String|Object} defaultBlockType */ constructor(options = {}) { @@ -108,11 +109,10 @@ class Html { return memo } - const block = { - kind: 'block', - type: this.defaultBlockType, - nodes: [node] - } + const commonProps = {kind: 'block', nodes: [node]} + const block = this.defaultBlockType.typeof === 'string' + ? {type: this.defaultBlockType, ...commonProps} + : {...commonProps, ...this.defaultBlockType} memo.push(block) return memo diff --git a/test/serializers/fixtures/html/deserialize/default-block/index.js b/test/serializers/fixtures/html/deserialize/default-block/index.js new file mode 100644 index 000000000..d1c5c1b73 --- /dev/null +++ b/test/serializers/fixtures/html/deserialize/default-block/index.js @@ -0,0 +1,24 @@ + +export default { + rules: [ + { + deserialize(el, next) { + switch (el.tagName) { + case 'p': { + return { + kind: 'block', + type: 'paragraph', + nodes: next(el.children) + } + } + } + } + } + ], + defaultBlockType: { + type: 'contentBlock', + data: { + style: 'default' + } + } +} diff --git a/test/serializers/fixtures/html/deserialize/default-block/input.html b/test/serializers/fixtures/html/deserialize/default-block/input.html new file mode 100644 index 000000000..844829033 --- /dev/null +++ b/test/serializers/fixtures/html/deserialize/default-block/input.html @@ -0,0 +1,2 @@ +

one

+
two
diff --git a/test/serializers/fixtures/html/deserialize/default-block/output.yaml b/test/serializers/fixtures/html/deserialize/default-block/output.yaml new file mode 100644 index 000000000..0ed92925c --- /dev/null +++ b/test/serializers/fixtures/html/deserialize/default-block/output.yaml @@ -0,0 +1,25 @@ +data: {} +nodes: + - type: paragraph + isVoid: false + data: {} + nodes: + - characters: + - text: o + marks: [] + - text: n + marks: [] + - text: e + marks: [] + - type: contentBlock + isVoid: false + data: {style: default} + nodes: + - characters: + - text: t + marks: [] + - text: w + marks: [] + - text: o + marks: [] +