/** * DeleteBackspaceKeys.js * * Released under LGPL License. * Copyright (c) 1999-2017 Ephox Corp. All rights reserved * * License: http://www.tinymce.com/license * Contributing: http://www.tinymce.com/contributing */ import BlockBoundaryDelete from '../delete/BlockBoundaryDelete'; import BlockRangeDelete from '../delete/BlockRangeDelete'; import CefDelete from '../delete/CefDelete'; import InlineBoundaryDelete from '../delete/InlineBoundaryDelete'; import InlineFormatDelete from '../delete/InlineFormatDelete'; import TableDelete from '../delete/TableDelete'; import MatchKeys from './MatchKeys'; import VK from '../api/util/VK'; import { Editor } from 'tinymce/core/api/Editor'; import { Cell } from '@ephox/katamari'; import { EditorEvent } from 'tinymce/core/api/dom/EventUtils'; const executeKeydownOverride = function (editor: Editor, caret: Cell, evt: KeyboardEvent) { MatchKeys.execute([ { keyCode: VK.BACKSPACE, action: MatchKeys.action(CefDelete.backspaceDelete, editor, false) }, { keyCode: VK.DELETE, action: MatchKeys.action(CefDelete.backspaceDelete, editor, true) }, { keyCode: VK.BACKSPACE, action: MatchKeys.action(InlineBoundaryDelete.backspaceDelete, editor, caret, false) }, { keyCode: VK.DELETE, action: MatchKeys.action(InlineBoundaryDelete.backspaceDelete, editor, caret, true) }, { keyCode: VK.BACKSPACE, action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, false) }, { keyCode: VK.DELETE, action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, true) }, { keyCode: VK.BACKSPACE, action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, false) }, { keyCode: VK.DELETE, action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, true) }, { keyCode: VK.BACKSPACE, action: MatchKeys.action(TableDelete.backspaceDelete, editor, false) }, { keyCode: VK.DELETE, action: MatchKeys.action(TableDelete.backspaceDelete, editor, true) }, { keyCode: VK.BACKSPACE, action: MatchKeys.action(InlineFormatDelete.backspaceDelete, editor, false) }, { keyCode: VK.DELETE, action: MatchKeys.action(InlineFormatDelete.backspaceDelete, editor, true) } ], evt).each(function (_) { evt.preventDefault(); }); }; const executeKeyupOverride = function (editor: Editor, evt: KeyboardEvent) { MatchKeys.execute([ { keyCode: VK.BACKSPACE, action: MatchKeys.action(CefDelete.paddEmptyElement, editor) }, { keyCode: VK.DELETE, action: MatchKeys.action(CefDelete.paddEmptyElement, editor) } ], evt); }; const setup = function (editor: Editor, caret: Cell) { editor.on('keydown', function (evt: EditorEvent) { if (evt.isDefaultPrevented() === false) { executeKeydownOverride(editor, caret, evt); } }); editor.on('keyup', function (evt: EditorEvent) { if (evt.isDefaultPrevented() === false) { executeKeyupOverride(editor, evt); } }); }; export default { setup };