Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Ryan778
GitHub Repository: Ryan778/Ryan778.github.io
Path: blob/master/emojionearea/src/block/selection.js
576 views
1
define([], function() {
2
var saveSelection, restoreSelection;
3
if (window.getSelection && document.createRange) {
4
saveSelection = function(el) {
5
var sel = window.getSelection && window.getSelection();
6
if (sel && sel.rangeCount > 0) {
7
var range = sel.getRangeAt(0);
8
var preSelectionRange = range.cloneRange();
9
preSelectionRange.selectNodeContents(el);
10
preSelectionRange.setEnd(range.startContainer, range.startOffset);
11
return preSelectionRange.toString().length;
12
}
13
};
14
15
restoreSelection = function(el, sel) {
16
var charIndex = 0, range = document.createRange();
17
range.setStart(el, 0);
18
range.collapse(true);
19
var nodeStack = [el], node, foundStart = false, stop = false;
20
21
while (!stop && (node = nodeStack.pop())) {
22
if (node.nodeType == 3) {
23
var nextCharIndex = charIndex + node.length;
24
if (!foundStart && sel >= charIndex && sel <= nextCharIndex) {
25
range.setStart(node, sel - charIndex);
26
range.setEnd(node, sel - charIndex);
27
stop = true;
28
}
29
charIndex = nextCharIndex;
30
} else {
31
var i = node.childNodes.length;
32
while (i--) {
33
nodeStack.push(node.childNodes[i]);
34
}
35
}
36
}
37
38
sel = window.getSelection();
39
sel.removeAllRanges();
40
sel.addRange(range);
41
}
42
} else if (document.selection && document.body.createTextRange) {
43
saveSelection = function(el) {
44
var selectedTextRange = document.selection.createRange(),
45
preSelectionTextRange = document.body.createTextRange();
46
preSelectionTextRange.moveToElementText(el);
47
preSelectionTextRange.setEndPoint("EndToStart", selectedTextRange);
48
var start = preSelectionTextRange.text.length;
49
return start + selectedTextRange.text.length;
50
};
51
52
restoreSelection = function(el, sel) {
53
var textRange = document.body.createTextRange();
54
textRange.moveToElementText(el);
55
textRange.collapse(true);
56
textRange.moveEnd("character", sel);
57
textRange.moveStart("character", sel);
58
textRange.select();
59
};
60
}
61
});
62