diff --git a/src/js/editor/event-manager.js b/src/js/editor/event-manager.js index 79c9b189f..22ea4d7ec 100644 --- a/src/js/editor/event-manager.js +++ b/src/js/editor/event-manager.js @@ -21,9 +21,7 @@ export default class EventManager { this._textInputHandler = new TextInputHandler(editor); this._listeners = []; this.modifierKeys = { - shift: false, - alt: false, - ctrl: false + shift: false }; this._selectionManager = new SelectionManager( @@ -156,6 +154,7 @@ export default class EventManager { if (!editor.hasCursor()) { return; } if (!editor.isEditable) { return; } + let key = Key.fromEvent(event); this._updateModifiersFromKey(key, {isDown:true}); @@ -184,9 +183,9 @@ export default class EventManager { case key.isDelete(): { let { direction } = key; let unit = 'char'; - if (this.modifierKeys.alt && Browser.isMac()) { + if (key.altKey && Browser.isMac()) { unit = 'word'; - } else if (this.modifierKeys.ctrl && Browser.isWin()) { + } else if (key.ctrlKey && Browser.isWin()) { unit = 'word'; } editor.performDelete({direction, unit}); @@ -286,10 +285,6 @@ export default class EventManager { _updateModifiersFromKey(key, {isDown}) { if (key.isShiftKey()) { this.modifierKeys.shift = isDown; - } else if (key.isAltKey()) { - this.modifierKeys.alt = isDown; - } else if (key.isCtrlKey()) { - this.modifierKeys.ctrl = isDown; } } diff --git a/tests/acceptance/editor-copy-paste-test.js b/tests/acceptance/editor-copy-paste-test.js index 08cdd9591..261ad1017 100644 --- a/tests/acceptance/editor-copy-paste-test.js +++ b/tests/acceptance/editor-copy-paste-test.js @@ -407,7 +407,7 @@ test('paste with shift key pastes plain text', (assert) => { Helpers.dom.triggerCopyEvent(editor); editor.selectRange(editor.post.tailPosition()); - Helpers.dom.triggerKeyEvent(editor, 'keydown', { keyCode: Keycodes.SHIFT }); + Helpers.dom.triggerKeyEvent(editor, 'keydown', { keyCode: Keycodes.SHIFT, shiftKey: true }); Helpers.dom.triggerPasteEvent(editor); assert.postIsSimilar(editor.post, expected); diff --git a/tests/acceptance/editor-sections-test.js b/tests/acceptance/editor-sections-test.js index 1f1d8e281..5f5c74b38 100644 --- a/tests/acceptance/editor-sections-test.js +++ b/tests/acceptance/editor-sections-test.js @@ -5,6 +5,7 @@ import { NO_BREAK_SPACE } from 'mobiledoc-kit/renderers/editor-dom'; import Range from 'mobiledoc-kit/utils/cursor/range'; import Keycodes from 'mobiledoc-kit/utils/keycodes'; import Browser from 'mobiledoc-kit/utils/browser'; +import { DIRECTION } from 'mobiledoc-kit/utils/key'; const { test, module } = Helpers; @@ -665,18 +666,15 @@ test('delete with option (Mac) or control (Win) key deletes full word', (assert editor.selectRange(new Range(editor.post.tailPosition())); let keyCode = Browser.isMac() ? Keycodes.ALT : Keycodes.CTRL; + let altKey = Browser.isMac(); + let ctrlKey = !Browser.isMac(); - Helpers.dom.triggerKeyEvent(editor, 'keydown', {keyCode}); Helpers.wait(() => { - Helpers.dom.triggerDelete(editor); + Helpers.dom.triggerDelete(editor, DIRECTION.BACKWARD, {altKey, ctrlKey}); Helpers.wait(() => { - Helpers.dom.triggerKeyEvent(editor, 'keyup', {keyCode}); - - Helpers.wait(() => { - assert.postIsSimilar(editor.post, expected); - done(); - }); + assert.postIsSimilar(editor.post, expected); + done(); }); }); }); diff --git a/tests/helpers/dom.js b/tests/helpers/dom.js index caf5e7683..4e72d3f8d 100644 --- a/tests/helpers/dom.js +++ b/tests/helpers/dom.js @@ -154,18 +154,17 @@ function createMockEvent(eventName, element, options={}) { return event; } -function triggerDelete(editor, direction=DIRECTION.BACKWARD) { +function triggerDelete(editor, direction=DIRECTION.BACKWARD, options={}) { assertEditor(editor); const keyCode = direction === DIRECTION.BACKWARD ? KEY_CODES.BACKSPACE : KEY_CODES.DELETE; - let event = createMockEvent('keydown', editor.element, { - keyCode - }); + let eventOptions = merge({keyCode}, options); + let event = createMockEvent('keydown', editor.element, eventOptions); _triggerEditorEvent(editor, event); } -function triggerForwardDelete(editor) { - return triggerDelete(editor, DIRECTION.FORWARD); +function triggerForwardDelete(editor, options) { + return triggerDelete(editor, DIRECTION.FORWARD, options); } function triggerEnter(editor) {