OXIESEC PANEL
- Current Dir:
/
/
var
/
www
/
reader
/
_backup
/
tinymce
/
tinymce
/
src
/
core
/
main
/
ts
/
caret
Server IP: 139.59.38.164
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
02/20/2020 05:44:43 AM
rwxr-xr-x
📄
BlockBoundary.ts
1.53 KB
02/20/2020 05:42:20 AM
rw-r--r--
📄
CaretBr.ts
1.47 KB
02/20/2020 05:42:20 AM
rw-r--r--
📄
CaretCandidate.ts
2.68 KB
02/20/2020 05:42:21 AM
rw-r--r--
📄
CaretContainer.ts
5.4 KB
02/20/2020 05:42:21 AM
rw-r--r--
📄
CaretContainerInline.ts
2.23 KB
02/20/2020 05:42:22 AM
rw-r--r--
📄
CaretContainerInput.ts
1.87 KB
02/20/2020 05:42:22 AM
rw-r--r--
📄
CaretContainerRemove.ts
3.3 KB
02/20/2020 05:42:23 AM
rw-r--r--
📄
CaretFinder.ts
4.09 KB
02/20/2020 05:42:25 AM
rw-r--r--
📄
CaretPosition.ts
13.27 KB
02/20/2020 05:42:26 AM
rw-r--r--
📄
CaretPositionPredicates.ts
2.24 KB
02/20/2020 05:42:27 AM
rw-r--r--
📄
CaretUtils.ts
8.54 KB
02/20/2020 05:42:27 AM
rw-r--r--
📄
CaretWalker.ts
7.67 KB
02/20/2020 05:42:28 AM
rw-r--r--
📄
FakeCaret.ts
6.26 KB
02/20/2020 05:42:28 AM
rw-r--r--
📄
InsertText.ts
1.32 KB
02/20/2020 05:42:29 AM
rw-r--r--
📄
LineReader.ts
5.88 KB
02/20/2020 05:42:29 AM
rw-r--r--
📄
LineUtils.ts
4.11 KB
02/20/2020 05:42:30 AM
rw-r--r--
📄
LineWalker.ts
4.56 KB
02/20/2020 05:42:30 AM
rw-r--r--
📄
TableCells.ts
3.58 KB
02/20/2020 05:42:31 AM
rw-r--r--
Editing: CaretCandidate.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 NodeType from '../dom/NodeType'; import * as CaretContainer from './CaretContainer'; import { Node, HTMLElement } from '@ephox/dom-globals'; import { Arr } from '@ephox/katamari'; /** * This module contains logic for handling caret candidates. A caret candidate is * for example text nodes, images, input elements, cE=false elements etc. * * @private * @class tinymce.caret.CaretCandidate */ const isContentEditableTrue = NodeType.isContentEditableTrue; const isContentEditableFalse = NodeType.isContentEditableFalse; const isBr = NodeType.isBr; const isText = NodeType.isText; const isInvalidTextElement = NodeType.matchNodeNames('script style textarea'); const isAtomicInline = NodeType.matchNodeNames('img input textarea hr iframe video audio object'); const isTable = NodeType.matchNodeNames('table'); const isCaretContainer = CaretContainer.isCaretContainer; const isCaretCandidate = (node: Node): boolean => { if (isCaretContainer(node)) { return false; } if (isText(node)) { if (isInvalidTextElement(node.parentNode)) { return false; } return true; } return isAtomicInline(node) || isBr(node) || isTable(node) || isNonUiContentEditableFalse(node); }; // UI components on IE is marked with contenteditable=false and unselectable=true so lets not handle those as real content editables const isUnselectable = (node: Node) => NodeType.isElement(node) && node.getAttribute('unselectable') === 'true'; const isNonUiContentEditableFalse = (node: Node): node is HTMLElement => isUnselectable(node) === false && isContentEditableFalse(node); const isInEditable = (node: Node, root: Node): boolean => { for (node = node.parentNode; node && node !== root; node = node.parentNode) { if (isNonUiContentEditableFalse(node)) { return false; } if (isContentEditableTrue(node)) { return true; } } return true; }; const isAtomicContentEditableFalse = (node: Node): boolean => { if (!isNonUiContentEditableFalse(node)) { return false; } return Arr.foldl(Arr.from(node.getElementsByTagName('*')), function (result, elm) { return result || isContentEditableTrue(elm); }, false) !== true; }; const isAtomic = (node: Node): boolean => isAtomicInline(node) || isAtomicContentEditableFalse(node); const isEditableCaretCandidate = (node: Node, root?: Node) => isCaretCandidate(node) && isInEditable(node, root); export { isCaretCandidate, isInEditable, isAtomic, isEditableCaretCandidate };