diff --git a/blots/cursor.js b/blots/cursor.js index 9de63ff936..e763befa1f 100644 --- a/blots/cursor.js +++ b/blots/cursor.js @@ -1,5 +1,6 @@ import Parchment from 'parchment'; import Embed from './embed'; +import Emitter from '../core/emitter'; class Cursor extends Embed { @@ -79,14 +80,12 @@ class Cursor extends Embed { } this.remove(); if (range != null && range.start.node === textNode && range.end.node === textNode) { - // optimize() might move the cursor after our restore - let [start, end] = [range.start.offset, range.end.offset].map(function(offset) { - return Math.max(0, Math.min(textNode.data.length, offset - 1)); - }); - setTimeout(() => { - // optimize() might move selection after us + this.selection.emitter.once(Emitter.events.SCROLL_OPTIMIZE, () => { + let [start, end] = [range.start.offset, range.end.offset].map(function(offset) { + return Math.max(0, Math.min(textNode.data.length, offset - 1)); + }); this.selection.setNativeRange(textNode, start, textNode, end); - }, 1); + }); } } diff --git a/test/functional/epic.js b/test/functional/epic.js index c2576bca77..fd98cd022c 100644 --- a/test/functional/epic.js +++ b/test/functional/epic.js @@ -118,8 +118,7 @@ describe('compose an epic', function(done) { if (browser.desiredCapabilities.browserName === 'firefox') { browser.click('.ql-editor .ql-cursor'); } - browser.keys('M').pause(200); - browser.keys('oby Dick'); + browser.keys('Moby Dick'); expect(browser.getHTML('.ql-editor', false)).toEqual([ '
Moby Dick
', '' + CHAPTER + '
',