diff --git a/examples/images/index.js b/examples/images/index.js index 49ef91b3a..03f80355f 100644 --- a/examples/images/index.js +++ b/examples/images/index.js @@ -178,6 +178,7 @@ class Images extends React.Component { onDropNode = (e, data, state) => { return state .transform() + .unsetSelection() .removeNodeByKey(data.node.key) .moveTo(data.target) .insertBlock(data.node) diff --git a/package.json b/package.json index e27b75c4b..5f032cb7d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "slate", "description": "A completely customizable framework for building rich text editors.", - "version": "0.14.3", + "version": "0.14.4", "license": "MIT", "repository": "git://github.com/ianstormtaylor/slate.git", "main": "./lib/index.js", diff --git a/src/models/text.js b/src/models/text.js index fde1a2745..738ecd35f 100644 --- a/src/models/text.js +++ b/src/models/text.js @@ -287,14 +287,14 @@ class Text extends new Record(DEFAULTS) { */ updateMark(index, length, mark, properties) { + const m = mark.merge(properties) const characters = this.characters.map((char, i) => { if (i < index) return char if (i >= index + length) return char let { marks } = char - const j = marks.indexOf(mark) - let m = marks.get(j) - m = m.merge(properties) - marks = marks.set(j, m) + if (!marks.has(mark)) return char + marks = marks.remove(mark) + marks = marks.add(m) char = char.merge({ marks }) return char }) diff --git a/test/transforms/fixtures/by-key/set-mark-by-key/set-data/index.js b/test/transforms/fixtures/by-key/set-mark-by-key/set-data/index.js new file mode 100644 index 000000000..9c2a24bb3 --- /dev/null +++ b/test/transforms/fixtures/by-key/set-mark-by-key/set-data/index.js @@ -0,0 +1,21 @@ + +export default function (state) { + const { document, selection } = state + const first = document.getTexts().first() + + return state + .transform() + .setMarkByKey( + first.key, + 0, + first.length, + { + type: 'bold', + data: { key: true } + }, + { + data: { key: false } + } + ) + .apply() +} diff --git a/test/transforms/fixtures/by-key/set-mark-by-key/set-data/input.yaml b/test/transforms/fixtures/by-key/set-mark-by-key/set-data/input.yaml new file mode 100644 index 000000000..bc54126ff --- /dev/null +++ b/test/transforms/fixtures/by-key/set-mark-by-key/set-data/input.yaml @@ -0,0 +1,12 @@ + +nodes: + - kind: block + type: paragraph + nodes: + - kind: text + ranges: + - text: word + marks: + - type: bold + data: + key: true diff --git a/test/transforms/fixtures/by-key/set-mark-by-key/set-data/output.yaml b/test/transforms/fixtures/by-key/set-mark-by-key/set-data/output.yaml new file mode 100644 index 000000000..88518e9d8 --- /dev/null +++ b/test/transforms/fixtures/by-key/set-mark-by-key/set-data/output.yaml @@ -0,0 +1,12 @@ + +nodes: + - kind: block + type: paragraph + nodes: + - kind: text + ranges: + - text: word + marks: + - type: bold + data: + key: false