| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129 | 1×
1×
1×
10689×
10689×
10670×
19×
1×
1×
266×
266×
266×
266×
266×
266×
266×
1×
1×
2038×
2038×
2038×
2608×
2038×
2038×
2038×
2038×
1808×
1808×
1808×
1691×
1691×
1691×
117×
2038×
347×
347×
2038×
1946×
1946×
505×
1441×
1946×
1946×
1946×
1×
1×
1104×
1104×
1104×
1104×
1104×
1×
1×
3436×
3436×
6×
3430×
3430×
3430×
525×
2905×
1×
1×
5810×
5810×
5810×
16811×
16811×
16811×
16811×
16811×
5810×
1×
1×
156×
156×
322×
322×
4×
318×
152×
1×
| define(["require", "exports", "./block"], function (require, exports, block_1) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function getSelectedRange() {
var selection = window.getSelection();
if (selection && selection.rangeCount > 0) {
return selection.getRangeAt(0);
}
return null;
}
exports.getSelectedRange = getSelectedRange;
function setSelectionRange(element, start, end) {
var range = document.createRange();
var selection = window.getSelection();
Eif (selection) {
range.setStart(element, start);
range.setEnd(element, end);
selection.removeAllRanges();
selection.addRange(range);
}
}
exports.setSelectionRange = setSelectionRange;
function setCursorPosition(element, position) {
var selection = window.getSelection();
Iif (!selection || !element) {
return;
}
var treeWalker = document.createTreeWalker(element, NodeFilter.SHOW_TEXT | NodeFilter.SHOW_ELEMENT, {
acceptNode: function (node) {
return node.nodeType === Node.TEXT_NODE ||
(node.nodeType === Node.ELEMENT_NODE && node.childNodes.length === 0)
? NodeFilter.FILTER_ACCEPT
: NodeFilter.FILTER_SKIP;
}
});
var currentPosition = 0;
var targetNode;
var targetOffset = 0;
while (treeWalker.nextNode()) {
var node = treeWalker.currentNode;
var contentLength = node.textContent.length || 0;
if (currentPosition + contentLength >= position) {
targetNode = node;
targetOffset = position - currentPosition;
break;
}
currentPosition += contentLength;
}
if (!targetNode) {
targetNode = element;
targetOffset = element.childNodes.length;
}
if (document.contains(targetNode)) {
var range = document.createRange();
if (targetNode.nodeType === Node.ELEMENT_NODE && targetNode.childNodes.length === 0) {
range.setStart(targetNode, 0);
}
else {
range.setStart(targetNode, Math.min(targetOffset, targetNode.textContent.length || 0));
}
range.collapse(true);
selection.removeAllRanges();
selection.addRange(range);
}
}
exports.setCursorPosition = setCursorPosition;
function getTextOffset(node, within) {
var offset = 0;
var walker = document.createTreeWalker(within, NodeFilter.SHOW_TEXT, null);
var current = walker.nextNode();
while (current && current !== node) {
offset += current.textContent.length || 0;
current = walker.nextNode();
}
return offset;
}
exports.getTextOffset = getTextOffset;
function captureSelectionState() {
var range = getSelectedRange();
if (!range) {
return null;
}
var startBlock = block_1.getParentBlock(range.startContainer);
var endBlock = block_1.getParentBlock(range.endContainer);
if (!startBlock || !endBlock) {
return null;
}
return {
startBlockId: startBlock.id,
endBlockId: endBlock.id,
startContainerPath: getPathFromBlock(startBlock, range.startContainer),
endContainerPath: getPathFromBlock(endBlock, range.endContainer),
startOffset: range.startOffset,
endOffset: range.endOffset,
isCollapsed: range.collapsed
};
}
exports.captureSelectionState = captureSelectionState;
function getPathFromBlock(blockElement, targetNode) {
var path = [];
var currentNode = targetNode;
while (currentNode && currentNode !== blockElement) {
var parent_1 = currentNode.parentNode;
Eif (parent_1) {
var index = Array.prototype.indexOf.call(parent_1.childNodes, currentNode);
path.unshift(index);
currentNode = parent_1;
}
else {
break;
}
}
return path;
}
exports.getPathFromBlock = getPathFromBlock;
function getNodeFromPath(blockElement, path) {
var currentNode = blockElement;
for (var _i = 0, path_1 = path; _i < path_1.length; _i++) {
var index = path_1[_i];
if (!currentNode.childNodes || index >= currentNode.childNodes.length) {
return null;
}
currentNode = currentNode.childNodes[parseInt(index.toString(), 10)];
}
return currentNode;
}
exports.getNodeFromPath = getNodeFromPath;
});
|