@cocreate/selection 1.1.1 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +7 -0
- package/package.json +1 -1
- package/src/index.js +73 -76
package/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
## [1.1.2](https://github.com/CoCreate-app/CoCreate-selection/compare/v1.1.1...v1.1.2) (2021-10-30)
|
2
|
+
|
3
|
+
|
4
|
+
### Bug Fixes
|
5
|
+
|
6
|
+
* removed for loop in getElementPosition ([20b7ff4](https://github.com/CoCreate-app/CoCreate-selection/commit/20b7ff45dc1f321a246d4fe9f22590c5b1e17c0e))
|
7
|
+
|
1
8
|
## [1.1.1](https://github.com/CoCreate-app/CoCreate-selection/compare/v1.1.0...v1.1.1) (2021-10-29)
|
2
9
|
|
3
10
|
|
package/package.json
CHANGED
package/src/index.js
CHANGED
@@ -124,89 +124,85 @@ export function hasSelection(el) {
|
|
124
124
|
|
125
125
|
export function getElementPosition(str, start, end) {
|
126
126
|
let response = {};
|
127
|
-
let
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
let
|
135
|
-
|
136
|
-
|
137
|
-
let
|
138
|
-
let
|
139
|
-
|
140
|
-
|
127
|
+
let startString = str.substr(0, start);
|
128
|
+
let endString = str.substr(start);
|
129
|
+
let angleStart = startString.lastIndexOf("<");
|
130
|
+
let angleEnd = startString.lastIndexOf(">");
|
131
|
+
let endStringAngleEnd = endString.indexOf(">");
|
132
|
+
let element, position, nodeStart, nodeEnd, startNode, type;
|
133
|
+
if (angleEnd > angleStart) {
|
134
|
+
let length = 0;
|
135
|
+
if (start != end)
|
136
|
+
length = end - start;
|
137
|
+
let string = str.customSplice(start, length, '<findelement></findelement>');
|
138
|
+
let newDom = domParser(string);
|
139
|
+
let findEl = newDom.querySelector('findelement');
|
140
|
+
if (findEl) {
|
141
|
+
let insert = getInsertPosition(findEl);
|
142
|
+
element = insert.target;
|
143
|
+
position = insert.position;
|
144
|
+
type = 'insertAdjacent';
|
145
|
+
if(!position)
|
146
|
+
type = 'textNode';
|
147
|
+
if (type == 'textNode' || type == 'afterbegin');
|
148
|
+
nodeStart = start - angleEnd - 1;
|
149
|
+
findEl.remove();
|
150
|
+
}
|
151
|
+
}
|
152
|
+
else {
|
153
|
+
let node = str.slice(angleStart, startString.length + endStringAngleEnd + 1);
|
154
|
+
if (node.startsWith("</")) {
|
155
|
+
startNode = node.slice(0, 1) + node.slice(2);
|
156
|
+
startNode = startNode.substr(0, startNode.length - 1);
|
157
|
+
nodeStart = startString.lastIndexOf(startNode);
|
158
|
+
let endString1 = str.substr(nodeStart);
|
159
|
+
let end = endString1.indexOf(">");
|
160
|
+
nodeEnd = nodeStart + end + 1;
|
161
|
+
type = 'isEndTag';
|
162
|
+
}
|
163
|
+
else {
|
164
|
+
nodeEnd = startString.length + endStringAngleEnd + 1;
|
165
|
+
startNode = node;
|
166
|
+
nodeStart = angleStart;
|
167
|
+
type = 'isStartTag';
|
168
|
+
}
|
169
|
+
if (nodeEnd > 0) {
|
170
|
+
let string = str.customSplice(nodeEnd - 1, 0, ' findelement');
|
141
171
|
let newDom = domParser(string);
|
142
|
-
|
143
|
-
if (
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
if(!position)
|
149
|
-
type = 'textNode';
|
150
|
-
if (type == 'textNode' || type == 'afterbegin');
|
151
|
-
nodeStart = start - angleEnd - 1;
|
152
|
-
findEl.remove();
|
153
|
-
}
|
172
|
+
element = newDom.querySelector('[findelement]');
|
173
|
+
if (!element && newDom.tagName == 'HTML')
|
174
|
+
element = newDom;
|
175
|
+
else if (type == "isEndTag")
|
176
|
+
element = element.parentElement;
|
177
|
+
element.removeAttribute('findelement');
|
154
178
|
}
|
155
179
|
else {
|
156
|
-
let
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
type = 'isEndTag';
|
165
|
-
}
|
166
|
-
else {
|
167
|
-
nodeEnd = startString.length + endStringAngleEnd + 1;
|
168
|
-
startNode = node;
|
169
|
-
nodeStart = angleStart;
|
170
|
-
type = 'isStartTag';
|
171
|
-
}
|
172
|
-
if (nodeEnd > 0) {
|
173
|
-
let string = str.customSplice(nodeEnd - 1, 0, ' findelement');
|
174
|
-
let newDom = domParser(string);
|
175
|
-
element = newDom.querySelector('[findelement]');
|
176
|
-
if (type == "isEndTag")
|
180
|
+
let string = str.customSplice(angleStart, 0, '<findelement></findelement>');
|
181
|
+
let newDom = domParser(string);
|
182
|
+
element = newDom.querySelector('findelement');
|
183
|
+
if (element) {
|
184
|
+
let insert = getInsertPosition(element);
|
185
|
+
element = insert.target.parentElement;
|
186
|
+
position = insert.position;
|
187
|
+
if(position == 'afterend')
|
177
188
|
element = element.parentElement;
|
178
|
-
|
179
|
-
element = newDom;
|
180
|
-
element.removeAttribute('findelement');
|
189
|
+
type = 'innerHTML';
|
181
190
|
}
|
182
|
-
|
183
|
-
|
184
|
-
let newDom = domParser(string);
|
185
|
-
element = newDom.querySelector('findelement');
|
186
|
-
if (element) {
|
187
|
-
let insert = getInsertPosition(element);
|
188
|
-
element = insert.target.parentElement;
|
189
|
-
position = insert.position;
|
190
|
-
if(position == 'afterend')
|
191
|
-
element = element.parentElement;
|
192
|
-
type = 'innerHTML';
|
193
|
-
}
|
194
|
-
if (!element) {
|
195
|
-
console.log('Could not find element');
|
196
|
-
}
|
191
|
+
if (!element) {
|
192
|
+
console.log('Could not find element');
|
197
193
|
}
|
198
194
|
}
|
199
|
-
|
200
|
-
if (element) {
|
201
|
-
response.element = element;
|
202
|
-
response.path = cssPath(element);
|
203
|
-
response.position = position;
|
204
|
-
response.start = nodeStart;
|
205
|
-
response.end = nodeEnd;
|
206
|
-
response.type = type;
|
207
|
-
}
|
208
|
-
|
209
195
|
}
|
196
|
+
|
197
|
+
if (element) {
|
198
|
+
response.element = element;
|
199
|
+
response.path = cssPath(element);
|
200
|
+
response.position = position;
|
201
|
+
response.start = nodeStart;
|
202
|
+
response.end = nodeEnd;
|
203
|
+
response.type = type;
|
204
|
+
}
|
205
|
+
|
210
206
|
return response;
|
211
207
|
}
|
212
208
|
|
@@ -248,7 +244,8 @@ export function getStringPosition({string, target, position, attribute, property
|
|
248
244
|
let dom = domParser(string);
|
249
245
|
let element = dom.querySelector(selector);
|
250
246
|
if (!element){
|
251
|
-
console.log('element could not be found using selector:', selector)
|
247
|
+
console.log('element could not be found using selector:', selector);
|
248
|
+
return;
|
252
249
|
}
|
253
250
|
let start = 0, end = 0;
|
254
251
|
|