@cocreate/selection 1.2.14 → 1.2.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [1.2.15](https://github.com/CoCreate-app/CoCreate-selection/compare/v1.2.14...v1.2.15) (2021-11-24)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * processSelection when at position 0 ([2143e31](https://github.com/CoCreate-app/CoCreate-selection/commit/2143e313e1dcf744980df298790f13442e5715bd))
7
+
1
8
  ## [1.2.14](https://github.com/CoCreate-app/CoCreate-selection/compare/v1.2.13...v1.2.14) (2021-11-23)
2
9
 
3
10
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocreate/selection",
3
- "version": "1.2.14",
3
+ "version": "1.2.15",
4
4
  "description": "A simple selection component in vanilla javascript. Easily configured using HTML5 data-attributes and/or JavaScript API.",
5
5
  "keywords": [
6
6
  "selection",
package/src/index.js CHANGED
@@ -20,7 +20,7 @@ export function getSelection(element) {
20
20
  let start = range.startOffset;
21
21
  let end = range.endOffset;
22
22
  let previousSibling = range.startContainer.previousSibling;
23
- if(previousSibling && previousSibling.nodeType == 3) {
23
+ if(element.innerHTML && previousSibling && previousSibling.nodeType == 3) {
24
24
  let length = 0;
25
25
  do {
26
26
  length += previousSibling.length;
@@ -29,6 +29,7 @@ export function getSelection(element) {
29
29
  start += length;
30
30
  end += length;
31
31
  }
32
+
32
33
  if(range.startContainer != range.endContainer) {
33
34
  // toDo: replace common ancestor value
34
35
  }
@@ -37,7 +38,7 @@ export function getSelection(element) {
37
38
  domTextEditor = element.closest('[contenteditable]');
38
39
  }
39
40
  let elementStart = start, elementEnd = end;
40
- if (domTextEditor){
41
+ if (domTextEditor && domTextEditor.htmlString){
41
42
  let nodePos = getStringPosition({ string: domTextEditor.htmlString, target: range.startContainer.parentElement, position: 'afterbegin'});
42
43
  if (nodePos){
43
44
  elementStart = nodePos.start;
@@ -46,11 +47,20 @@ export function getSelection(element) {
46
47
  end = end + nodePos.end;
47
48
  }
48
49
  }
50
+
51
+ let startContainer = range.startContainer;
52
+ if (startContainer.nodeType == 3)
53
+ startContainer = range.startContainer.parentElement;
54
+
55
+ let endContainer = range.endContainer;
56
+ if (endContainer.nodeType == 3)
57
+ endContainer = range.endContainer.parentElement;
58
+
49
59
  let rangeObj = {
50
60
  startOffset: range.startOffset,
51
61
  endOffset: range.endOffset,
52
- startContainer: range.startContainer.parentElement,
53
- endContainer: range.endContainer.parentElement,
62
+ startContainer,
63
+ endContainer,
54
64
  elementStart,
55
65
  elementEnd
56
66
  };
@@ -85,8 +95,9 @@ export function processSelection(element, value = "", prev_start, prev_end, star
85
95
  }
86
96
  else if (prevStart < prev_start){
87
97
  let length = prev_start - prevStart;
88
- if(Math.sign(length) === 1 && range.startOffset >= length)
89
- range.startOffset += length;
98
+ if(Math.sign(length) === 1)
99
+ if (range.startOffset == 0 || range.startOffset >= length)
100
+ range.startOffset += length;
90
101
  }
91
102
  if (prevEnd > prev_end){
92
103
  let length = prevEnd - prev_end;
@@ -95,8 +106,9 @@ export function processSelection(element, value = "", prev_start, prev_end, star
95
106
  }
96
107
  else if (prevEnd < prev_end){
97
108
  let length = prev_end - prevEnd;
98
- if(Math.sign(length) === 1 && range.endOffset >= length)
99
- range.endOffset += length;
109
+ if(Math.sign(length) === 1)
110
+ if (range.endOffset == 0 || range.endOffset >= length)
111
+ range.endOffset += length;
100
112
  }
101
113
  }
102
114