OXIESEC PANEL
- Current Dir:
/
/
var
/
www
/
reader
/
_backup
/
tinymce
/
tinymce
/
src
/
core
/
main
/
ts
/
selection
Server IP: 139.59.38.164
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
02/20/2020 05:44:43 AM
rwxr-xr-x
📄
CaretRangeFromPoint.ts
2.6 KB
02/20/2020 05:44:11 AM
rw-r--r--
📄
DetailsElement.ts
1.19 KB
02/20/2020 05:44:11 AM
rw-r--r--
📄
ElementSelection.ts
4.83 KB
02/20/2020 05:44:12 AM
rw-r--r--
📄
EventProcessRanges.ts
593 bytes
02/20/2020 05:44:12 AM
rw-r--r--
📄
FragmentReader.ts
3.82 KB
02/20/2020 05:44:13 AM
rw-r--r--
📄
GetSelectionContent.ts
2.12 KB
02/20/2020 05:44:15 AM
rw-r--r--
📄
MultiClickSelection.ts
1.64 KB
02/20/2020 05:44:16 AM
rw-r--r--
📄
MultiRange.ts
955 bytes
02/20/2020 05:44:17 AM
rw-r--r--
📄
NormalizeRange.ts
10.02 KB
02/20/2020 05:44:17 AM
rw-r--r--
📄
RangeCompare.ts
580 bytes
02/20/2020 05:44:18 AM
rw-r--r--
📄
RangeInsertNode.ts
1.52 KB
02/20/2020 05:44:18 AM
rw-r--r--
📄
RangeNodes.ts
946 bytes
02/20/2020 05:44:19 AM
rw-r--r--
📄
RangeNormalizer.ts
1.69 KB
02/20/2020 05:44:19 AM
rw-r--r--
📄
RangeWalk.ts
4.38 KB
02/20/2020 05:44:20 AM
rw-r--r--
📄
SelectionBookmark.ts
3.36 KB
02/20/2020 05:44:20 AM
rw-r--r--
📄
SelectionRestore.ts
1.98 KB
02/20/2020 05:44:21 AM
rw-r--r--
📄
SelectionUtils.ts
3.65 KB
02/20/2020 05:44:21 AM
rw-r--r--
📄
SetSelectionContent.ts
2.44 KB
02/20/2020 05:44:22 AM
rw-r--r--
📄
SimpleTableModel.ts
4.08 KB
02/20/2020 05:44:22 AM
rw-r--r--
📄
SplitRange.ts
1.94 KB
02/20/2020 05:44:23 AM
rw-r--r--
📄
TableCellSelection.ts
1.25 KB
02/20/2020 05:44:24 AM
rw-r--r--
📄
WordSelection.ts
1.47 KB
02/20/2020 05:44:24 AM
rw-r--r--
Editing: SetSelectionContent.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 Editor from '../api/Editor'; import ScrollIntoView from '../dom/ScrollIntoView'; import { Range, DocumentFragment, Text } from '@ephox/dom-globals'; import { Option, Options } from '@ephox/katamari'; import { Element, Traverse, Node, Remove } from '@ephox/sugar'; const prependData = (target: Text, data: string): void => { target.insertData(0, data); }; const removeEmpty = (text: Element): Option<Element> => { if (text.dom().length === 0) { Remove.remove(text); return Option.none(); } return Option.some(text); }; const rngSetContent = (rng: Range, fragment: DocumentFragment): void => { const firstChild = Option.from(fragment.firstChild).map(Element.fromDom); const lastChild = Option.from(fragment.lastChild).map(Element.fromDom); rng.deleteContents(); rng.insertNode(fragment); const prevText = firstChild.bind(Traverse.prevSibling).filter(Node.isText).bind(removeEmpty); const nextText = lastChild.bind(Traverse.nextSibling).filter(Node.isText).bind(removeEmpty); // Join start Options.liftN([prevText, firstChild.filter(Node.isText)], (prev: Element, start: Element) => { prependData(start.dom(), prev.dom().data); Remove.remove(prev); }); // Join end Options.liftN([nextText, lastChild.filter(Node.isText)], (next: Element, end: Element) => { const oldLength = end.dom().length; end.dom().appendData(next.dom().data); rng.setEnd(end.dom(), oldLength); Remove.remove(next); }); rng.collapse(false); }; const setupArgs = (args, content: string) => { args = args || { format: 'html' }; args.set = true; args.selection = true; args.content = content; return args; }; const setContent = (editor: Editor, content: string, args) => { args = setupArgs(args, content); // mutates if (!args.no_events) { args = editor.fire('BeforeSetContent', args); if (args.isDefaultPrevented()) { editor.fire('SetContent', args); return; } } const rng = editor.selection.getRng(); rngSetContent(rng, rng.createContextualFragment(args.content)); editor.selection.setRng(rng); ScrollIntoView.scrollRangeIntoView(editor, rng); if (!args.no_events) { editor.fire('SetContent', args); } }; export default { setContent };