From 78a9eb24f01ace184b39669e3af8d94d2d9974f2 Mon Sep 17 00:00:00 2001 From: Soreine Date: Wed, 9 Nov 2016 14:37:42 +0100 Subject: [PATCH] Fix undoing setMark --- src/models/text.js | 7 +++---- src/transforms/apply-operation.js | 4 ++-- src/transforms/by-key.js | 3 ++- src/transforms/operations.js | 15 +++++---------- 4 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/models/text.js b/src/models/text.js index aad02090b..f9711d7e9 100644 --- a/src/models/text.js +++ b/src/models/text.js @@ -311,19 +311,18 @@ class Text extends new Record(DEFAULTS) { * @param {Number} index * @param {Number} length * @param {Mark} mark - * @param {Object} properties + * @param {Mark} newMark * @return {Text} */ - updateMark(index, length, mark, properties) { - const m = mark.merge(properties) + updateMark(index, length, mark, newMark) { const characters = this.characters.map((char, i) => { if (i < index) return char if (i >= index + length) return char let { marks } = char if (!marks.has(mark)) return char marks = marks.remove(mark) - marks = marks.add(m) + marks = marks.add(newMark) char = char.merge({ marks }) return char }) diff --git a/src/transforms/apply-operation.js b/src/transforms/apply-operation.js index 76bb76e7c..14870b4af 100644 --- a/src/transforms/apply-operation.js +++ b/src/transforms/apply-operation.js @@ -326,10 +326,10 @@ function removeText(state, operation) { */ function setMark(state, operation) { - const { path, offset, length, mark, properties } = operation + const { path, offset, length, mark, newMark } = operation let { document } = state let node = document.assertPath(path) - node = node.updateMark(offset, length, mark, properties) + node = node.updateMark(offset, length, mark, newMark) document = document.updateDescendant(node) state = state.merge({ document }) return state diff --git a/src/transforms/by-key.js b/src/transforms/by-key.js index a9aa6394e..21a1ff247 100644 --- a/src/transforms/by-key.js +++ b/src/transforms/by-key.js @@ -248,11 +248,12 @@ export function setMarkByKey(transform, key, offset, length, mark, properties, o const { normalize = true } = options mark = Normalize.mark(mark) properties = Normalize.markProperties(properties) + const newMark = mark.merge(properties) const { state } = transform const { document } = state const path = document.getPath(key) - transform = transform.setMarkOperation(path, offset, length, mark, properties) + transform = transform.setMarkOperation(path, offset, length, mark, newMark) if (normalize) { const parent = document.getParent(key) transform = transform.normalizeNodeByKey(parent.key) diff --git a/src/transforms/operations.js b/src/transforms/operations.js index 3fc6c7ec3..3a49f5e40 100644 --- a/src/transforms/operations.js +++ b/src/transforms/operations.js @@ -290,23 +290,18 @@ export function removeTextOperation(transform, path, offset, length) { * @param {Number} offset * @param {Number} length * @param {Mark} mark + * @param {Mark} newMark * @return {Transform} */ -export function setMarkOperation(transform, path, offset, length, mark, properties) { - const inverseProps = {} - - for (const k in properties) { - inverseProps[k] = mark[k] - } - +export function setMarkOperation(transform, path, offset, length, mark, newMark) { const inverse = [{ type: 'set_mark', path, offset, length, - mark, - properties: inverseProps, + mark: newMark, + newMark: mark }] const operation = { @@ -315,7 +310,7 @@ export function setMarkOperation(transform, path, offset, length, mark, properti offset, length, mark, - properties, + newMark, inverse, }