From c644e8d22036f8693e9144747fc86d8bb7b95009 Mon Sep 17 00:00:00 2001 From: Soreine Date: Mon, 7 Nov 2016 16:56:52 +0100 Subject: [PATCH] Fix forEachDescendant early exit --- src/models/node.js | 13 ++++++++++--- src/models/selection.js | 4 ++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/models/node.js b/src/models/node.js index 81347e194..184edf6d9 100644 --- a/src/models/node.js +++ b/src/models/node.js @@ -178,12 +178,19 @@ const Node = { */ forEachDescendant(iterator) { - return this.nodes.forEach((child, i, nodes) => { + let returned // Returned value of iterator. False to break from loop + + this.nodes.forEach((child, i, nodes) => { if (iterator(child, i, nodes) === false) { - return false + return returned = false + } + + if (child.kind != 'text') { + return returned = child.forEachDescendant(iterator) } - if (child.kind != 'text') child.forEachDescendant(iterator) }) + + return returned }, /** diff --git a/src/models/selection.js b/src/models/selection.js index 039cb09e8..1ae5f4416 100644 --- a/src/models/selection.js +++ b/src/models/selection.js @@ -332,10 +332,10 @@ class Selection extends new Record(DEFAULTS) { // If `isBackward` is not set, derive it. if (isBackward == null) { - if (anchorKey === focusKey) { + if (anchorNode.key === focusNode.key) { isBackward = anchorOffset > focusOffset } else { - isBackward = !node.areDescendantSorted(anchorKey, focusKey) + isBackward = !node.areDescendantSorted(anchorNode.key, focusNode.key) } }