@pie-element/extended-text-entry 13.4.1-next.3 → 14.0.0-beta.1
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 +0 -17
- package/configure/CHANGELOG.md +0 -11
- package/configure/lib/defaults.js +2 -3
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/index.js +97 -151
- package/configure/lib/index.js.map +1 -1
- package/configure/lib/main.js +223 -298
- package/configure/lib/main.js.map +1 -1
- package/configure/package.json +9 -6
- package/controller/CHANGELOG.md +0 -11
- package/controller/lib/defaults.js +2 -3
- package/controller/lib/defaults.js.map +1 -1
- package/controller/lib/index.js +73 -170
- package/controller/lib/index.js.map +1 -1
- package/controller/package.json +2 -2
- package/lib/annotation/annotation-editor.js +493 -566
- package/lib/annotation/annotation-editor.js.map +1 -1
- package/lib/annotation/annotation-menu.js +131 -190
- package/lib/annotation/annotation-menu.js.map +1 -1
- package/lib/annotation/annotation-utils.js +77 -121
- package/lib/annotation/annotation-utils.js.map +1 -1
- package/lib/annotation/freeform-editor.js +202 -227
- package/lib/annotation/freeform-editor.js.map +1 -1
- package/lib/index.js +77 -131
- package/lib/index.js.map +1 -1
- package/lib/main.js +179 -243
- package/lib/main.js.map +1 -1
- package/lib/print.js +45 -87
- package/lib/print.js.map +1 -1
- package/package.json +13 -19
- package/esm/configure.js +0 -9412
- package/esm/configure.js.map +0 -1
- package/esm/controller.js +0 -905
- package/esm/controller.js.map +0 -1
- package/esm/element.js +0 -21631
- package/esm/element.js.map +0 -1
- package/esm/package.json +0 -3
- package/esm/print.js +0 -21600
- package/esm/print.js.map +0 -1
- package/module/configure.js +0 -1
- package/module/controller.js +0 -139
- package/module/demo.js +0 -38
- package/module/element.js +0 -1
- package/module/index.html +0 -21
- package/module/manifest.json +0 -22
- package/module/print-demo.js +0 -76
- package/module/print.html +0 -18
- package/module/print.js +0 -1
|
@@ -1,56 +1,42 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
3
|
Object.defineProperty(exports, "__esModule", {
|
|
6
4
|
value: true
|
|
7
5
|
});
|
|
8
6
|
exports.wrapRange = exports.removeElemsWrapping = exports.isSideLabel = exports.getRangeDetails = exports.getLabelElement = exports.getDOMNodes = exports.getAnnotationElements = exports.clearSelection = void 0;
|
|
9
|
-
|
|
10
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
|
-
|
|
12
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
-
|
|
14
7
|
// returns DOM Nodes before the stopOffset
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}, 0);
|
|
20
|
-
var keepWalking = true;
|
|
21
|
-
|
|
8
|
+
const getAllTextNodesBeforePosition = (node, stopOffset, nodeArray) => {
|
|
9
|
+
const nodes = nodeArray ? nodeArray : [];
|
|
10
|
+
const offset = nodes.reduce((acc, node) => acc + node.textContent.length, 0);
|
|
11
|
+
let keepWalking = true;
|
|
22
12
|
if (offset > stopOffset) {
|
|
23
13
|
return false;
|
|
24
14
|
}
|
|
25
|
-
|
|
26
15
|
if (node) {
|
|
27
16
|
// 3 = HTML DOM node value for text nodes
|
|
28
17
|
if (node.nodeType === 3 && node.parentNode && !node.parentNode.hasAttribute('data-ann-id')) {
|
|
29
18
|
nodes.push(node);
|
|
30
19
|
}
|
|
31
|
-
|
|
32
20
|
node = node.firstChild;
|
|
33
21
|
}
|
|
34
|
-
|
|
35
22
|
while (node && keepWalking) {
|
|
36
23
|
keepWalking = getAllTextNodesBeforePosition(node, stopOffset, nodes);
|
|
37
24
|
node = node.nextSibling;
|
|
38
25
|
}
|
|
39
|
-
|
|
40
26
|
return nodes;
|
|
41
|
-
};
|
|
42
|
-
|
|
27
|
+
};
|
|
43
28
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
29
|
+
// returns DOM Nodes that overlap the start or end position
|
|
30
|
+
const getDOMNodes = (startOffset, endOffset, rootNode) => {
|
|
31
|
+
const textNodesToEnd = getAllTextNodesBeforePosition(rootNode, endOffset);
|
|
32
|
+
const domNodes = [];
|
|
33
|
+
let start = 0;
|
|
34
|
+
textNodesToEnd.forEach(node => {
|
|
35
|
+
const end = start + node.textContent.length;
|
|
36
|
+
[startOffset, endOffset].forEach(offset => {
|
|
51
37
|
if (start <= offset && offset < end) {
|
|
52
38
|
domNodes.push({
|
|
53
|
-
node
|
|
39
|
+
node,
|
|
54
40
|
offset: offset - start
|
|
55
41
|
});
|
|
56
42
|
}
|
|
@@ -58,45 +44,43 @@ var getDOMNodes = function getDOMNodes(startOffset, endOffset, rootNode) {
|
|
|
58
44
|
start = end;
|
|
59
45
|
});
|
|
60
46
|
return domNodes;
|
|
61
|
-
};
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
// returns [ textNodes, text ]
|
|
62
50
|
// textNodes = DOM Text Nodes between start range and end range node
|
|
63
51
|
// text = plain text in range
|
|
64
|
-
|
|
65
|
-
|
|
66
52
|
exports.getDOMNodes = getDOMNodes;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
53
|
+
const getTextNodesBetween = range => {
|
|
54
|
+
const {
|
|
55
|
+
commonAncestorContainer: rootNode,
|
|
56
|
+
startContainer: startNode,
|
|
57
|
+
endContainer: endNode,
|
|
58
|
+
startOffset,
|
|
59
|
+
endOffset
|
|
60
|
+
} = range;
|
|
61
|
+
const textNodes = [];
|
|
62
|
+
let pastStartNode = false;
|
|
63
|
+
let reachedEndNode = false;
|
|
64
|
+
let text = '';
|
|
65
|
+
const getTextNodes = node => {
|
|
66
|
+
const {
|
|
67
|
+
nodeValue: value,
|
|
68
|
+
childNodes
|
|
69
|
+
} = node;
|
|
83
70
|
if (node === startNode && node === endNode) {
|
|
84
71
|
if (value) {
|
|
85
72
|
text += value.substring(startOffset, endOffset);
|
|
86
73
|
}
|
|
87
|
-
|
|
88
74
|
pastStartNode = reachedEndNode = true;
|
|
89
75
|
} else if (node === startNode) {
|
|
90
76
|
if (value) {
|
|
91
77
|
text += value.substring(startOffset);
|
|
92
78
|
}
|
|
93
|
-
|
|
94
79
|
pastStartNode = true;
|
|
95
80
|
} else if (node === endNode) {
|
|
96
81
|
if (value) {
|
|
97
82
|
text += value.substring(0, endOffset);
|
|
98
83
|
}
|
|
99
|
-
|
|
100
84
|
reachedEndNode = true;
|
|
101
85
|
} else if (node && node.nodeType === 3 && node.parentNode && !node.parentNode.hasAttribute('data-ann-id')) {
|
|
102
86
|
// 3 = HTML DOM node value for text nodes
|
|
@@ -105,8 +89,7 @@ var getTextNodesBetween = function getTextNodesBetween(range) {
|
|
|
105
89
|
textNodes.push(node);
|
|
106
90
|
}
|
|
107
91
|
}
|
|
108
|
-
|
|
109
|
-
childNodes.forEach(function (childNode) {
|
|
92
|
+
childNodes.forEach(childNode => {
|
|
110
93
|
if (!reachedEndNode) {
|
|
111
94
|
getTextNodes(childNode);
|
|
112
95
|
} else {
|
|
@@ -114,98 +97,83 @@ var getTextNodesBetween = function getTextNodesBetween(range) {
|
|
|
114
97
|
}
|
|
115
98
|
});
|
|
116
99
|
};
|
|
117
|
-
|
|
118
100
|
getTextNodes(rootNode);
|
|
119
101
|
return [textNodes, text];
|
|
120
102
|
};
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
var wrapper = document.createElement('SPAN');
|
|
103
|
+
const surroundContent = range => {
|
|
104
|
+
const wrapper = document.createElement('SPAN');
|
|
124
105
|
range.surroundContents(wrapper);
|
|
125
106
|
return wrapper;
|
|
126
|
-
};
|
|
127
|
-
|
|
107
|
+
};
|
|
128
108
|
|
|
129
|
-
|
|
109
|
+
// wrap each DOM Text Node in range into a span
|
|
110
|
+
const wrapRange = range => {
|
|
130
111
|
if (range.startContainer === range.endContainer) {
|
|
131
112
|
return [surroundContent(range)];
|
|
132
113
|
}
|
|
114
|
+
const [nodesBetween] = getTextNodesBetween(range);
|
|
133
115
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
nodesBetween = _getTextNodesBetween2[0]; // wrap the start node
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
var startRange = document.createRange();
|
|
116
|
+
// wrap the start node
|
|
117
|
+
const startRange = document.createRange();
|
|
140
118
|
startRange.selectNodeContents(range.startContainer);
|
|
141
119
|
startRange.setStart(range.startContainer, range.startOffset);
|
|
142
|
-
|
|
120
|
+
const startWrapper = surroundContent(startRange);
|
|
143
121
|
|
|
144
|
-
|
|
122
|
+
// wrap the end node
|
|
123
|
+
const endRange = document.createRange();
|
|
145
124
|
endRange.selectNode(range.endContainer);
|
|
146
125
|
endRange.setEnd(range.endContainer, range.endOffset);
|
|
147
|
-
|
|
126
|
+
const endWrapper = surroundContent(endRange);
|
|
148
127
|
|
|
149
|
-
|
|
150
|
-
|
|
128
|
+
// wrap the nodes between start and end nodes, if any
|
|
129
|
+
const centerWrappers = nodesBetween.map(node => {
|
|
130
|
+
const wrapper = document.createElement('SPAN');
|
|
151
131
|
node.parentNode.insertBefore(wrapper, node);
|
|
152
132
|
wrapper.appendChild(node);
|
|
153
133
|
return wrapper;
|
|
154
134
|
});
|
|
155
|
-
return [startWrapper
|
|
156
|
-
};
|
|
157
|
-
|
|
135
|
+
return [startWrapper, ...centerWrappers, endWrapper];
|
|
136
|
+
};
|
|
158
137
|
|
|
138
|
+
// returns text in range with start and end position in rootNode
|
|
159
139
|
exports.wrapRange = wrapRange;
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
var rangeBefore = document.createRange();
|
|
140
|
+
const getRangeDetails = (range, rootNode) => {
|
|
141
|
+
const rangeBefore = document.createRange();
|
|
163
142
|
rangeBefore.setStart(rootNode, 0);
|
|
164
143
|
rangeBefore.setEnd(range.startContainer, range.startOffset);
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
var _getTextNodesBetween5 = getTextNodesBetween(range),
|
|
171
|
-
_getTextNodesBetween6 = (0, _slicedToArray2["default"])(_getTextNodesBetween5, 2),
|
|
172
|
-
textSelected = _getTextNodesBetween6[1];
|
|
173
|
-
|
|
174
|
-
var start = text.length;
|
|
175
|
-
var end = start + textSelected.length;
|
|
144
|
+
const [, text] = getTextNodesBetween(rangeBefore);
|
|
145
|
+
const [, textSelected] = getTextNodesBetween(range);
|
|
146
|
+
const start = text.length;
|
|
147
|
+
const end = start + textSelected.length;
|
|
176
148
|
return {
|
|
177
149
|
quote: textSelected,
|
|
178
|
-
start
|
|
179
|
-
end
|
|
150
|
+
start,
|
|
151
|
+
end
|
|
180
152
|
};
|
|
181
|
-
};
|
|
182
|
-
|
|
153
|
+
};
|
|
183
154
|
|
|
155
|
+
// removes the annotation spans without changing the content inside
|
|
184
156
|
exports.getRangeDetails = getRangeDetails;
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
var childNodesLength = childNodes.length;
|
|
191
|
-
|
|
157
|
+
const removeElemsWrapping = (elems, container) => {
|
|
158
|
+
(elems || []).forEach(elem => {
|
|
159
|
+
const parent = elem.parentNode;
|
|
160
|
+
const childNodes = elem.childNodes;
|
|
161
|
+
const childNodesLength = childNodes.length;
|
|
192
162
|
if (childNodesLength > 0) {
|
|
193
|
-
for (
|
|
163
|
+
for (let i = 0; i < childNodesLength; i++) {
|
|
194
164
|
parent.insertBefore(childNodes[0], elem);
|
|
195
165
|
}
|
|
196
166
|
} else {
|
|
197
167
|
parent.insertBefore(document.createTextNode(elem.textContent), elem);
|
|
198
168
|
}
|
|
199
|
-
|
|
200
169
|
parent.removeChild(elem);
|
|
201
170
|
});
|
|
202
171
|
container.normalize();
|
|
203
|
-
};
|
|
204
|
-
|
|
172
|
+
};
|
|
205
173
|
|
|
174
|
+
// also used in select-text
|
|
206
175
|
exports.removeElemsWrapping = removeElemsWrapping;
|
|
207
|
-
|
|
208
|
-
var clearSelection = function clearSelection() {
|
|
176
|
+
const clearSelection = () => {
|
|
209
177
|
if (document.getSelection) {
|
|
210
178
|
// for all new browsers (IE9+, Chrome, Firefox)
|
|
211
179
|
document.getSelection().removeAllRanges();
|
|
@@ -224,26 +192,14 @@ var clearSelection = function clearSelection() {
|
|
|
224
192
|
// IE8-
|
|
225
193
|
document.selection.empty();
|
|
226
194
|
}
|
|
227
|
-
}; // check if annotation label contains line breaks or its length >= 20 characters
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
exports.clearSelection = clearSelection;
|
|
231
|
-
|
|
232
|
-
var isSideLabel = function isSideLabel(text) {
|
|
233
|
-
return text.length >= 20 || text.search(/\n|\r|\r\n/) !== -1;
|
|
234
195
|
};
|
|
235
196
|
|
|
197
|
+
// check if annotation label contains line breaks or its length >= 20 characters
|
|
198
|
+
exports.clearSelection = clearSelection;
|
|
199
|
+
const isSideLabel = text => text.length >= 20 || text.search(/\n|\r|\r\n/) !== -1;
|
|
236
200
|
exports.isSideLabel = isSideLabel;
|
|
237
|
-
|
|
238
|
-
var getAnnotationElements = function getAnnotationElements(id) {
|
|
239
|
-
return Array.from(document.querySelectorAll("[data-id='".concat(id, "']")));
|
|
240
|
-
};
|
|
241
|
-
|
|
201
|
+
const getAnnotationElements = id => Array.from(document.querySelectorAll(`[data-id='${id}']`));
|
|
242
202
|
exports.getAnnotationElements = getAnnotationElements;
|
|
243
|
-
|
|
244
|
-
var getLabelElement = function getLabelElement(id) {
|
|
245
|
-
return document.querySelector("[data-ann-id='".concat(id, "']"));
|
|
246
|
-
};
|
|
247
|
-
|
|
203
|
+
const getLabelElement = id => document.querySelector(`[data-ann-id='${id}']`);
|
|
248
204
|
exports.getLabelElement = getLabelElement;
|
|
249
205
|
//# sourceMappingURL=annotation-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/annotation/annotation-utils.js"],"names":["getAllTextNodesBeforePosition","node","stopOffset","nodeArray","nodes","offset","reduce","acc","textContent","length","keepWalking","nodeType","parentNode","hasAttribute","push","firstChild","nextSibling","getDOMNodes","startOffset","endOffset","rootNode","textNodesToEnd","domNodes","start","forEach","end","getTextNodesBetween","range","commonAncestorContainer","startNode","startContainer","endNode","endContainer","textNodes","pastStartNode","reachedEndNode","text","getTextNodes","value","nodeValue","childNodes","substring","childNode","surroundContent","wrapper","document","createElement","surroundContents","wrapRange","nodesBetween","startRange","createRange","selectNodeContents","setStart","startWrapper","endRange","selectNode","setEnd","endWrapper","centerWrappers","map","insertBefore","appendChild","getRangeDetails","rangeBefore","textSelected","quote","removeElemsWrapping","elems","container","elem","parent","childNodesLength","i","createTextNode","removeChild","normalize","clearSelection","getSelection","removeAllRanges","addRange","window","empty","selection","isSideLabel","search","getAnnotationElements","id","Array","from","querySelectorAll","getLabelElement","querySelector"],"mappings":"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","sourcesContent":["// returns DOM Nodes before the stopOffset\nconst getAllTextNodesBeforePosition = (node, stopOffset, nodeArray) => {\n const nodes = nodeArray ? nodeArray : [];\n const offset = nodes.reduce((acc, node) => acc + node.textContent.length, 0);\n let keepWalking = true;\n\n if (offset > stopOffset) {\n return false;\n }\n\n if (node) {\n // 3 = HTML DOM node value for text nodes\n if (node.nodeType === 3 && node.parentNode && !node.parentNode.hasAttribute('data-ann-id')) {\n nodes.push(node);\n }\n\n node = node.firstChild;\n }\n\n while (node && keepWalking) {\n keepWalking = getAllTextNodesBeforePosition(node, stopOffset, nodes);\n node = node.nextSibling;\n }\n\n return nodes;\n};\n\n// returns DOM Nodes that overlap the start or end position\nexport const getDOMNodes = (startOffset, endOffset, rootNode) => {\n const textNodesToEnd = getAllTextNodesBeforePosition(rootNode, endOffset);\n const domNodes = [];\n let start = 0;\n\n textNodesToEnd.forEach((node) => {\n const end = start + node.textContent.length;\n\n [startOffset, endOffset].forEach((offset) => {\n if (start <= offset && offset < end) {\n domNodes.push({\n node,\n offset: offset - start,\n });\n }\n });\n\n start = end;\n });\n\n return domNodes;\n};\n\n// returns [ textNodes, text ]\n// textNodes = DOM Text Nodes between start range and end range node\n// text = plain text in range\nconst getTextNodesBetween = (range) => {\n const {\n commonAncestorContainer: rootNode,\n startContainer: startNode,\n endContainer: endNode,\n startOffset,\n endOffset,\n } = range;\n const textNodes = [];\n let pastStartNode = false;\n let reachedEndNode = false;\n let text = '';\n\n const getTextNodes = (node) => {\n const { nodeValue: value, childNodes } = node;\n\n if (node === startNode && node === endNode) {\n if (value) {\n text += value.substring(startOffset, endOffset);\n }\n\n pastStartNode = reachedEndNode = true;\n } else if (node === startNode) {\n if (value) {\n text += value.substring(startOffset);\n }\n\n pastStartNode = true;\n } else if (node === endNode) {\n if (value) {\n text += value.substring(0, endOffset);\n }\n\n reachedEndNode = true;\n } else if (node && node.nodeType === 3 && node.parentNode && !node.parentNode.hasAttribute('data-ann-id')) {\n // 3 = HTML DOM node value for text nodes\n if (value && pastStartNode && !reachedEndNode) {\n text += value;\n textNodes.push(node);\n }\n }\n\n childNodes.forEach((childNode) => {\n if (!reachedEndNode) {\n getTextNodes(childNode);\n } else {\n return;\n }\n });\n };\n\n getTextNodes(rootNode);\n\n return [textNodes, text];\n};\n\nconst surroundContent = (range) => {\n const wrapper = document.createElement('SPAN');\n\n range.surroundContents(wrapper);\n\n return wrapper;\n};\n\n// wrap each DOM Text Node in range into a span\nexport const wrapRange = (range) => {\n if (range.startContainer === range.endContainer) {\n return [surroundContent(range)];\n }\n\n const [nodesBetween] = getTextNodesBetween(range);\n\n // wrap the start node\n const startRange = document.createRange();\n\n startRange.selectNodeContents(range.startContainer);\n startRange.setStart(range.startContainer, range.startOffset);\n\n const startWrapper = surroundContent(startRange);\n\n // wrap the end node\n const endRange = document.createRange();\n\n endRange.selectNode(range.endContainer);\n endRange.setEnd(range.endContainer, range.endOffset);\n\n const endWrapper = surroundContent(endRange);\n\n // wrap the nodes between start and end nodes, if any\n const centerWrappers = nodesBetween.map((node) => {\n const wrapper = document.createElement('SPAN');\n\n node.parentNode.insertBefore(wrapper, node);\n wrapper.appendChild(node);\n\n return wrapper;\n });\n\n return [startWrapper, ...centerWrappers, endWrapper];\n};\n\n// returns text in range with start and end position in rootNode\nexport const getRangeDetails = (range, rootNode) => {\n const rangeBefore = document.createRange();\n\n rangeBefore.setStart(rootNode, 0);\n rangeBefore.setEnd(range.startContainer, range.startOffset);\n\n const [, text] = getTextNodesBetween(rangeBefore);\n const [, textSelected] = getTextNodesBetween(range);\n const start = text.length;\n const end = start + textSelected.length;\n\n return {\n quote: textSelected,\n start,\n end,\n };\n};\n\n// removes the annotation spans without changing the content inside\nexport const removeElemsWrapping = (elems, container) => {\n (elems || []).forEach((elem) => {\n const parent = elem.parentNode;\n const childNodes = elem.childNodes;\n const childNodesLength = childNodes.length;\n\n if (childNodesLength > 0) {\n for (let i = 0; i < childNodesLength; i++) {\n parent.insertBefore(childNodes[0], elem);\n }\n } else {\n parent.insertBefore(document.createTextNode(elem.textContent), elem);\n }\n\n parent.removeChild(elem);\n });\n\n container.normalize();\n};\n\n// also used in select-text\nexport const clearSelection = () => {\n if (document.getSelection) {\n // for all new browsers (IE9+, Chrome, Firefox)\n document.getSelection().removeAllRanges();\n document.getSelection().addRange(document.createRange());\n } else if (window.getSelection) {\n // equals with the document.getSelection (MSDN info)\n if (window.getSelection().removeAllRanges) {\n // for all new browsers (IE9+, Chrome, Firefox)\n window.getSelection().removeAllRanges();\n window.getSelection().addRange(document.createRange());\n } else if (window.getSelection().empty) {\n // Chrome supports this as well\n window.getSelection().empty();\n }\n } else if (document.selection) {\n // IE8-\n document.selection.empty();\n }\n};\n\n// check if annotation label contains line breaks or its length >= 20 characters\nexport const isSideLabel = (text) => text.length >= 20 || text.search(/\\n|\\r|\\r\\n/) !== -1;\n\nexport const getAnnotationElements = (id) => Array.from(document.querySelectorAll(`[data-id='${id}']`));\n\nexport const getLabelElement = (id) => document.querySelector(`[data-ann-id='${id}']`);\n"],"file":"annotation-utils.js"}
|
|
1
|
+
{"version":3,"file":"annotation-utils.js","names":["getAllTextNodesBeforePosition","node","stopOffset","nodeArray","nodes","offset","reduce","acc","textContent","length","keepWalking","nodeType","parentNode","hasAttribute","push","firstChild","nextSibling","getDOMNodes","startOffset","endOffset","rootNode","textNodesToEnd","domNodes","start","forEach","end","exports","getTextNodesBetween","range","commonAncestorContainer","startContainer","startNode","endContainer","endNode","textNodes","pastStartNode","reachedEndNode","text","getTextNodes","nodeValue","value","childNodes","substring","childNode","surroundContent","wrapper","document","createElement","surroundContents","wrapRange","nodesBetween","startRange","createRange","selectNodeContents","setStart","startWrapper","endRange","selectNode","setEnd","endWrapper","centerWrappers","map","insertBefore","appendChild","getRangeDetails","rangeBefore","textSelected","quote","removeElemsWrapping","elems","container","elem","parent","childNodesLength","i","createTextNode","removeChild","normalize","clearSelection","getSelection","removeAllRanges","addRange","window","empty","selection","isSideLabel","search","getAnnotationElements","id","Array","from","querySelectorAll","getLabelElement","querySelector"],"sources":["../../src/annotation/annotation-utils.js"],"sourcesContent":["// returns DOM Nodes before the stopOffset\nconst getAllTextNodesBeforePosition = (node, stopOffset, nodeArray) => {\n const nodes = nodeArray ? nodeArray : [];\n const offset = nodes.reduce((acc, node) => acc + node.textContent.length, 0);\n let keepWalking = true;\n\n if (offset > stopOffset) {\n return false;\n }\n\n if (node) {\n // 3 = HTML DOM node value for text nodes\n if (node.nodeType === 3 && node.parentNode && !node.parentNode.hasAttribute('data-ann-id')) {\n nodes.push(node);\n }\n\n node = node.firstChild;\n }\n\n while (node && keepWalking) {\n keepWalking = getAllTextNodesBeforePosition(node, stopOffset, nodes);\n node = node.nextSibling;\n }\n\n return nodes;\n};\n\n// returns DOM Nodes that overlap the start or end position\nexport const getDOMNodes = (startOffset, endOffset, rootNode) => {\n const textNodesToEnd = getAllTextNodesBeforePosition(rootNode, endOffset);\n const domNodes = [];\n let start = 0;\n\n textNodesToEnd.forEach((node) => {\n const end = start + node.textContent.length;\n\n [startOffset, endOffset].forEach((offset) => {\n if (start <= offset && offset < end) {\n domNodes.push({\n node,\n offset: offset - start,\n });\n }\n });\n\n start = end;\n });\n\n return domNodes;\n};\n\n// returns [ textNodes, text ]\n// textNodes = DOM Text Nodes between start range and end range node\n// text = plain text in range\nconst getTextNodesBetween = (range) => {\n const {\n commonAncestorContainer: rootNode,\n startContainer: startNode,\n endContainer: endNode,\n startOffset,\n endOffset,\n } = range;\n const textNodes = [];\n let pastStartNode = false;\n let reachedEndNode = false;\n let text = '';\n\n const getTextNodes = (node) => {\n const { nodeValue: value, childNodes } = node;\n\n if (node === startNode && node === endNode) {\n if (value) {\n text += value.substring(startOffset, endOffset);\n }\n\n pastStartNode = reachedEndNode = true;\n } else if (node === startNode) {\n if (value) {\n text += value.substring(startOffset);\n }\n\n pastStartNode = true;\n } else if (node === endNode) {\n if (value) {\n text += value.substring(0, endOffset);\n }\n\n reachedEndNode = true;\n } else if (node && node.nodeType === 3 && node.parentNode && !node.parentNode.hasAttribute('data-ann-id')) {\n // 3 = HTML DOM node value for text nodes\n if (value && pastStartNode && !reachedEndNode) {\n text += value;\n textNodes.push(node);\n }\n }\n\n childNodes.forEach((childNode) => {\n if (!reachedEndNode) {\n getTextNodes(childNode);\n } else {\n return;\n }\n });\n };\n\n getTextNodes(rootNode);\n\n return [textNodes, text];\n};\n\nconst surroundContent = (range) => {\n const wrapper = document.createElement('SPAN');\n\n range.surroundContents(wrapper);\n\n return wrapper;\n};\n\n// wrap each DOM Text Node in range into a span\nexport const wrapRange = (range) => {\n if (range.startContainer === range.endContainer) {\n return [surroundContent(range)];\n }\n\n const [nodesBetween] = getTextNodesBetween(range);\n\n // wrap the start node\n const startRange = document.createRange();\n\n startRange.selectNodeContents(range.startContainer);\n startRange.setStart(range.startContainer, range.startOffset);\n\n const startWrapper = surroundContent(startRange);\n\n // wrap the end node\n const endRange = document.createRange();\n\n endRange.selectNode(range.endContainer);\n endRange.setEnd(range.endContainer, range.endOffset);\n\n const endWrapper = surroundContent(endRange);\n\n // wrap the nodes between start and end nodes, if any\n const centerWrappers = nodesBetween.map((node) => {\n const wrapper = document.createElement('SPAN');\n\n node.parentNode.insertBefore(wrapper, node);\n wrapper.appendChild(node);\n\n return wrapper;\n });\n\n return [startWrapper, ...centerWrappers, endWrapper];\n};\n\n// returns text in range with start and end position in rootNode\nexport const getRangeDetails = (range, rootNode) => {\n const rangeBefore = document.createRange();\n\n rangeBefore.setStart(rootNode, 0);\n rangeBefore.setEnd(range.startContainer, range.startOffset);\n\n const [, text] = getTextNodesBetween(rangeBefore);\n const [, textSelected] = getTextNodesBetween(range);\n const start = text.length;\n const end = start + textSelected.length;\n\n return {\n quote: textSelected,\n start,\n end,\n };\n};\n\n// removes the annotation spans without changing the content inside\nexport const removeElemsWrapping = (elems, container) => {\n (elems || []).forEach((elem) => {\n const parent = elem.parentNode;\n const childNodes = elem.childNodes;\n const childNodesLength = childNodes.length;\n\n if (childNodesLength > 0) {\n for (let i = 0; i < childNodesLength; i++) {\n parent.insertBefore(childNodes[0], elem);\n }\n } else {\n parent.insertBefore(document.createTextNode(elem.textContent), elem);\n }\n\n parent.removeChild(elem);\n });\n\n container.normalize();\n};\n\n// also used in select-text\nexport const clearSelection = () => {\n if (document.getSelection) {\n // for all new browsers (IE9+, Chrome, Firefox)\n document.getSelection().removeAllRanges();\n document.getSelection().addRange(document.createRange());\n } else if (window.getSelection) {\n // equals with the document.getSelection (MSDN info)\n if (window.getSelection().removeAllRanges) {\n // for all new browsers (IE9+, Chrome, Firefox)\n window.getSelection().removeAllRanges();\n window.getSelection().addRange(document.createRange());\n } else if (window.getSelection().empty) {\n // Chrome supports this as well\n window.getSelection().empty();\n }\n } else if (document.selection) {\n // IE8-\n document.selection.empty();\n }\n};\n\n// check if annotation label contains line breaks or its length >= 20 characters\nexport const isSideLabel = (text) => text.length >= 20 || text.search(/\\n|\\r|\\r\\n/) !== -1;\n\nexport const getAnnotationElements = (id) => Array.from(document.querySelectorAll(`[data-id='${id}']`));\n\nexport const getLabelElement = (id) => document.querySelector(`[data-ann-id='${id}']`);\n"],"mappings":"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","ignoreList":[]}
|