From b7f317ac4bbd63b62ee3bb70f14c2c9b931a05f4 Mon Sep 17 00:00:00 2001 From: Suwijak Chaipipat Date: Thu, 15 Sep 2016 04:48:21 +0700 Subject: [PATCH 1/4] Unset selection before remove node (#316) --- examples/images/index.js | 1 + 1 file changed, 1 insertion(+) 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) From 7756f769ec8c1e7c7f4c3285859dd6d07d745ab7 Mon Sep 17 00:00:00 2001 From: Ian Storm Taylor Date: Wed, 14 Sep 2016 15:04:38 -0700 Subject: [PATCH 2/4] fix setMarkByKey by adding tests, closes #319 --- lib/models/text.js | 8 +++---- lib/transforms/apply-operation.js | 1 + .../by-key/set-mark-by-key/set-data/index.js | 21 +++++++++++++++++++ .../set-mark-by-key/set-data/input.yaml | 12 +++++++++++ .../set-mark-by-key/set-data/output.yaml | 12 +++++++++++ 5 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 test/transforms/fixtures/by-key/set-mark-by-key/set-data/index.js create mode 100644 test/transforms/fixtures/by-key/set-mark-by-key/set-data/input.yaml create mode 100644 test/transforms/fixtures/by-key/set-mark-by-key/set-data/output.yaml diff --git a/lib/models/text.js b/lib/models/text.js index fde1a2745..738ecd35f 100644 --- a/lib/models/text.js +++ b/lib/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/lib/transforms/apply-operation.js b/lib/transforms/apply-operation.js index 74fb31469..3d80d3a5a 100644 --- a/lib/transforms/apply-operation.js +++ b/lib/transforms/apply-operation.js @@ -245,6 +245,7 @@ function setMark(state, operation) { let { document } = state let node = document.assertPath(path) node = node.updateMark(offset, length, mark, properties) + debugger document = document.updateDescendant(node) state = state.merge({ document }) return state 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 From 14f939d46358c0576b29a3a64b03c10865149ced Mon Sep 17 00:00:00 2001 From: Ian Storm Taylor Date: Wed, 14 Sep 2016 15:07:25 -0700 Subject: [PATCH 3/4] remove debugger --- lib/transforms/apply-operation.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/transforms/apply-operation.js b/lib/transforms/apply-operation.js index 3d80d3a5a..74fb31469 100644 --- a/lib/transforms/apply-operation.js +++ b/lib/transforms/apply-operation.js @@ -245,7 +245,6 @@ function setMark(state, operation) { let { document } = state let node = document.assertPath(path) node = node.updateMark(offset, length, mark, properties) - debugger document = document.updateDescendant(node) state = state.merge({ document }) return state From 79eafe26d808874e9ccbe19ec8b57acaa43a7d82 Mon Sep 17 00:00:00 2001 From: Ian Storm Taylor Date: Wed, 14 Sep 2016 15:09:59 -0700 Subject: [PATCH 4/4] 0.14.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 207a85d3f..078d4c8b1 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": "./dist/index.js",