/* * << * Davinci * == * Copyright (C) 2016 - 2017 EDP * == * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * >> */ import { ReactEditor } from 'slate-react' import { Editor, Range, Point } from 'slate' import { ElementTypes } from '../constants' const withTables = (editor: ReactEditor) => { const { deleteBackward, deleteForward, insertBreak } = editor editor.deleteBackward = (unit) => { const { selection } = editor if (selection && Range.isCollapsed(selection)) { const [cell] = Editor.nodes(editor, { match: (n) => n.type === ElementTypes.TableCell }) if (cell) { const [, cellPath] = cell const start = Editor.start(editor, cellPath) if (Point.equals(selection.anchor, start)) { return } } } deleteBackward(unit) } editor.deleteForward = (unit) => { const { selection } = editor if (selection && Range.isCollapsed(selection)) { const [cell] = Editor.nodes(editor, { match: (n) => n.type === ElementTypes.TableCell }) if (cell) { const [, cellPath] = cell const end = Editor.end(editor, cellPath) if (Point.equals(selection.anchor, end)) { return } } } deleteForward(unit) } editor.insertBreak = () => { const { selection } = editor if (selection) { const [table] = Editor.nodes(editor, { match: (n) => n.type === ElementTypes.Table }) if (table) { return } } insertBreak() } return editor } export default withTables