diff --git a/examples/index.css b/examples/index.css index c9d82a275..c72284241 100644 --- a/examples/index.css +++ b/examples/index.css @@ -16,6 +16,7 @@ p { pre { padding: 10px; background-color: #eee; + white-space: pre-wrap; } img { diff --git a/lib/models/node.js b/lib/models/node.js index 80f49260b..c50e43904 100644 --- a/lib/models/node.js +++ b/lib/models/node.js @@ -857,7 +857,10 @@ const Node = { let ret = node if (ret.kind != 'text') ret = ret.mapDescendants(iterator) ret = iterator(ret, i, this.nodes) - if (ret != node) nodes = nodes.set(ret.key, ret) + if (ret == node) return + + const index = nodes.indexOf(node) + nodes = nodes.set(index, ret) }) return this.merge({ nodes }) diff --git a/test/rendering/fixtures/custom-decorator/index.js b/test/rendering/fixtures/custom-decorator/index.js new file mode 100644 index 000000000..9c64b3cc8 --- /dev/null +++ b/test/rendering/fixtures/custom-decorator/index.js @@ -0,0 +1,21 @@ + +import React from 'react' +import { Mark } from '../../../..' + +const BOLD = { + fontWeight: 'bold' +} + +export function renderMark(mark) { + if (mark.type == 'bold') return BOLD +} + +export function renderDecorations(text) { + let { characters } = text + let second = characters.get(1) + let mark = Mark.create({ type: 'bold' }) + let marks = second.marks.add(mark) + second = second.merge({ marks }) + characters = characters.set(1, second) + return characters +} diff --git a/test/rendering/fixtures/custom-decorator/input.yaml b/test/rendering/fixtures/custom-decorator/input.yaml new file mode 100644 index 000000000..9b822c1a1 --- /dev/null +++ b/test/rendering/fixtures/custom-decorator/input.yaml @@ -0,0 +1,8 @@ + +nodes: + - kind: block + type: default + nodes: + - kind: text + ranges: + - text: one diff --git a/test/rendering/fixtures/custom-decorator/output.html b/test/rendering/fixtures/custom-decorator/output.html new file mode 100644 index 000000000..1e8974b3a --- /dev/null +++ b/test/rendering/fixtures/custom-decorator/output.html @@ -0,0 +1,10 @@ + +