OXIESEC PANEL
- Current Dir:
/
/
var
/
www
/
reader
/
_backup
/
tinymce
/
tinymce
/
src
/
core
/
main
/
ts
/
delete
Server IP: 139.59.38.164
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
02/20/2020 05:44:43 AM
rwxr-xr-x
📄
BlockBoundaryDelete.ts
950 bytes
02/20/2020 05:42:46 AM
rw-r--r--
📄
BlockMergeBoundary.ts
3.03 KB
02/20/2020 05:42:46 AM
rw-r--r--
📄
BlockRangeDelete.ts
2.51 KB
02/20/2020 05:42:47 AM
rw-r--r--
📄
CefBoundaryDelete.ts
3.77 KB
02/20/2020 05:42:47 AM
rw-r--r--
📄
CefDelete.ts
3.16 KB
02/20/2020 05:42:48 AM
rw-r--r--
📄
CefDeleteAction.ts
5.63 KB
02/20/2020 05:42:49 AM
rw-r--r--
📄
DeleteCommands.ts
2.09 KB
02/20/2020 05:42:49 AM
rw-r--r--
📄
DeleteElement.ts
6.5 KB
02/20/2020 05:42:50 AM
rw-r--r--
📄
DeleteUtils.ts
2.39 KB
02/20/2020 05:42:50 AM
rw-r--r--
📄
ImageBlockDelete.ts
1.23 KB
02/20/2020 05:42:51 AM
rw-r--r--
📄
InlineBoundaryDelete.ts
4.91 KB
02/20/2020 05:42:52 AM
rw-r--r--
📄
InlineFormatDelete.ts
2.38 KB
02/20/2020 05:42:52 AM
rw-r--r--
📄
MergeBlocks.ts
3.69 KB
02/20/2020 05:42:53 AM
rw-r--r--
📄
MergeText.ts
2.9 KB
02/20/2020 05:42:53 AM
rw-r--r--
📄
TableDelete.ts
5.81 KB
02/20/2020 05:42:54 AM
rw-r--r--
📄
TableDeleteAction.ts
4.26 KB
02/20/2020 05:42:54 AM
rw-r--r--
Editing: CefDelete.ts
Close
/** * Copyright (c) Tiny Technologies, Inc. All rights reserved. * Licensed under the LGPL or a commercial license. * For LGPL see License.txt in the project root for license information. * For commercial licenses see https://www.tiny.cloud/ */ import { Arr } from '@ephox/katamari'; import { Remove, Element, SelectorFilter } from '@ephox/sugar'; import CaretPosition from '../caret/CaretPosition'; import * as CefDeleteAction from './CefDeleteAction'; import DeleteElement from './DeleteElement'; import DeleteUtils from './DeleteUtils'; import NodeType from '../dom/NodeType'; import Editor from '../api/Editor'; const deleteElement = function (editor: Editor, forward) { return function (element) { editor._selectionOverrides.hideFakeCaret(); DeleteElement.deleteElement(editor, forward, Element.fromDom(element)); return true; }; }; const moveToElement = function (editor: Editor, forward) { return function (element) { const pos = forward ? CaretPosition.before(element) : CaretPosition.after(element); editor.selection.setRng(pos.toRange()); return true; }; }; const moveToPosition = function (editor: Editor) { return function (pos) { editor.selection.setRng(pos.toRange()); return true; }; }; const backspaceDeleteCaret = function (editor: Editor, forward: boolean) { const result = CefDeleteAction.read(editor.getBody(), forward, editor.selection.getRng()).map(function (deleteAction) { return deleteAction.fold( deleteElement(editor, forward), moveToElement(editor, forward), moveToPosition(editor) ); }); return result.getOr(false); }; const deleteOffscreenSelection = function (rootElement) { Arr.each(SelectorFilter.descendants(rootElement, '.mce-offscreen-selection'), Remove.remove); }; const backspaceDeleteRange = function (editor: Editor, forward: boolean) { const selectedElement = editor.selection.getNode(); if (NodeType.isContentEditableFalse(selectedElement)) { deleteOffscreenSelection(Element.fromDom(editor.getBody())); DeleteElement.deleteElement(editor, forward, Element.fromDom(editor.selection.getNode())); DeleteUtils.paddEmptyBody(editor); return true; } else { return false; } }; const getContentEditableRoot = function (root, node) { while (node && node !== root) { if (NodeType.isContentEditableTrue(node) || NodeType.isContentEditableFalse(node)) { return node; } node = node.parentNode; } return null; }; const paddEmptyElement = function (editor: Editor) { let br; const ceRoot = getContentEditableRoot(editor.getBody(), editor.selection.getNode()); if (NodeType.isContentEditableTrue(ceRoot) && editor.dom.isBlock(ceRoot) && editor.dom.isEmpty(ceRoot)) { br = editor.dom.create('br', { 'data-mce-bogus': '1' }); editor.dom.setHTML(ceRoot, ''); ceRoot.appendChild(br); editor.selection.setRng(CaretPosition.before(br).toRange()); } return true; }; const backspaceDelete = function (editor: Editor, forward) { if (editor.selection.isCollapsed()) { return backspaceDeleteCaret(editor, forward); } else { return backspaceDeleteRange(editor, forward); } }; export default { backspaceDelete, paddEmptyElement };