@cocreate/text 1.16.5 → 1.17.0
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 +12 -0
- package/package.json +1 -1
- package/src/updateDom.js +51 -17
package/CHANGELOG.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
# [1.17.0](https://github.com/CoCreate-app/CoCreate-text/compare/v1.16.5...v1.17.0) (2022-06-23)
|
2
|
+
|
3
|
+
|
4
|
+
### Bug Fixes
|
5
|
+
|
6
|
+
* try to update parent element of previous element rather then html tag ([37ab36c](https://github.com/CoCreate-app/CoCreate-text/commit/37ab36ce79fa270b3a43daaf14597e765f42e371))
|
7
|
+
|
8
|
+
|
9
|
+
### Features
|
10
|
+
|
11
|
+
* if newEl can not be found using path, update path to query parent element ([2c637f1](https://github.com/CoCreate-app/CoCreate-text/commit/2c637f1e0c3d15f00d1664c4d744d4ee9c4581c6))
|
12
|
+
|
1
13
|
## [1.16.5](https://github.com/CoCreate-app/CoCreate-text/compare/v1.16.4...v1.16.5) (2022-06-22)
|
2
14
|
|
3
15
|
|
package/package.json
CHANGED
package/src/updateDom.js
CHANGED
@@ -11,8 +11,28 @@ export function updateDom({domTextEditor, value, start, end, html}) {
|
|
11
11
|
let {element, path, position, type} = getElementPosition(domTextEditor.htmlString, start, end);
|
12
12
|
parseHtml(domTextEditor, html);
|
13
13
|
|
14
|
-
let domEl, oldEl, curCaret;
|
15
|
-
|
14
|
+
let domEl, oldEl, curCaret, newEl;
|
15
|
+
if (path && path.includes('<')) {
|
16
|
+
let index = path.lastIndexOf(' >')
|
17
|
+
if (index != -1)
|
18
|
+
path = path.slice(0, index)
|
19
|
+
else{
|
20
|
+
index = path.lastIndexOf('<')
|
21
|
+
path = path.slice(0, index)
|
22
|
+
}
|
23
|
+
}
|
24
|
+
|
25
|
+
try {
|
26
|
+
newEl = domTextEditor.newHtml.querySelector(path);
|
27
|
+
} catch(err){
|
28
|
+
console.log('error', err)
|
29
|
+
}
|
30
|
+
if (path && !newEl){
|
31
|
+
let index = path.lastIndexOf(' >')
|
32
|
+
if (index != -1)
|
33
|
+
path = path.slice(0, index)
|
34
|
+
newEl = domTextEditor.newHtml.querySelector(path);
|
35
|
+
}
|
16
36
|
if(!newEl){
|
17
37
|
newEl = domTextEditor.cloneNode(true);
|
18
38
|
if (html != undefined)
|
@@ -40,46 +60,60 @@ export function updateDom({domTextEditor, value, start, end, html}) {
|
|
40
60
|
}
|
41
61
|
}
|
42
62
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
63
|
+
if (domEl) {
|
64
|
+
let activeElement = domEl.ownerDocument.activeElement;
|
65
|
+
if (activeElement == domEl)
|
66
|
+
curCaret = getSelection(activeElement);
|
67
|
+
else if (activeElement.tagName == 'BODY')
|
68
|
+
curCaret = getSelection(domEl);
|
69
|
+
else
|
70
|
+
curCaret = getSelection(activeElement);
|
71
|
+
}
|
72
|
+
|
51
73
|
if (!value && type != 'isStartTag' && type != 'textNode'){
|
52
74
|
type = 'innerHTML';
|
53
75
|
}
|
54
|
-
|
76
|
+
|
55
77
|
if(domEl && newEl) {
|
56
78
|
if(start != end && type == 'innerHTML') {
|
57
79
|
domTextEditor.htmlString = html;
|
58
80
|
if (domEl.tagName != 'HTML'){
|
59
|
-
if (newEl.parentElement)
|
81
|
+
if (newEl.parentElement) {
|
60
82
|
domEl.parentElement.replaceChildren(...newEl.parentElement.childNodes);
|
61
|
-
|
83
|
+
// console.log('parent', domEl.parentElement)
|
84
|
+
} else {
|
62
85
|
domEl.replaceChildren(...newEl.childNodes);
|
86
|
+
// console.log('domEl', domEl)
|
87
|
+
}
|
63
88
|
}
|
64
|
-
else
|
89
|
+
else {
|
65
90
|
domEl.replaceChildren(...newEl.childNodes);
|
66
|
-
|
91
|
+
// console.log('Html tag', domEl)
|
92
|
+
}
|
67
93
|
if (curCaret && curCaret.range) {
|
68
94
|
curCaret.range.startContainer = domEl;
|
69
95
|
curCaret.range.endContainer = domEl;
|
70
96
|
}
|
71
97
|
}
|
72
|
-
else if (type == 'isStartTag')
|
98
|
+
else if (type == 'isStartTag') {
|
73
99
|
assignAttributes(newEl, oldEl, domEl);
|
74
|
-
|
100
|
+
// console.log('isStartTag', domEl, newEl)
|
101
|
+
|
102
|
+
}
|
103
|
+
else if (type == 'insertAdjacent') {
|
75
104
|
domEl.insertAdjacentHTML(position, value);
|
105
|
+
// console.log('insertAdjacent', domEl, value)
|
106
|
+
}
|
76
107
|
else if (type == 'textNode'){
|
77
108
|
if(start != end)
|
78
109
|
domTextEditor.htmlString = html;
|
79
110
|
domEl.innerHTML = newEl.innerHTML;
|
111
|
+
// console.log('textnode', domEl.innerHTML, newEl.innerHTML)
|
112
|
+
|
80
113
|
}
|
81
114
|
else if (type == 'innerHTML') {
|
82
115
|
domEl.replaceChildren(...newEl.childNodes);
|
116
|
+
// console.log('innerHtml', domEl, newEl)
|
83
117
|
}
|
84
118
|
domTextEditor.htmlString = html;
|
85
119
|
}
|