happy-dom 5.3.3 → 6.0.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.

Potentially problematic release.


This version of happy-dom might be problematic. Click here for more details.

Files changed (144) hide show
  1. package/.eslintrc.js +2 -2
  2. package/lib/base64/Base64.d.ts +23 -0
  3. package/lib/base64/Base64.js +89 -0
  4. package/lib/base64/Base64.js.map +1 -0
  5. package/lib/config/ElementTag.d.ts +2 -1
  6. package/lib/config/ElementTag.js +2 -1
  7. package/lib/config/ElementTag.js.map +1 -1
  8. package/lib/config/NonImplemenetedElementClasses.js +0 -1
  9. package/lib/config/NonImplemenetedElementClasses.js.map +1 -1
  10. package/lib/dom-implementation/DOMImplementation.d.ts +7 -1
  11. package/lib/dom-implementation/DOMImplementation.js +10 -2
  12. package/lib/dom-implementation/DOMImplementation.js.map +1 -1
  13. package/lib/dom-parser/DOMParser.d.ts +9 -4
  14. package/lib/dom-parser/DOMParser.js +13 -2
  15. package/lib/dom-parser/DOMParser.js.map +1 -1
  16. package/lib/exception/DOMExceptionNameEnum.d.ts +5 -1
  17. package/lib/exception/DOMExceptionNameEnum.js +4 -0
  18. package/lib/exception/DOMExceptionNameEnum.js.map +1 -1
  19. package/lib/fetch/Request.d.ts +8 -0
  20. package/lib/fetch/Request.js +15 -6
  21. package/lib/fetch/Request.js.map +1 -1
  22. package/lib/fetch/Response.d.ts +5 -0
  23. package/lib/fetch/Response.js +12 -6
  24. package/lib/fetch/Response.js.map +1 -1
  25. package/lib/file/FileReader.d.ts +7 -2
  26. package/lib/file/FileReader.js +9 -3
  27. package/lib/file/FileReader.js.map +1 -1
  28. package/lib/index.d.ts +4 -1
  29. package/lib/index.js +5 -1
  30. package/lib/index.js.map +1 -1
  31. package/lib/location/URL.js +1 -1
  32. package/lib/location/URL.js.map +1 -1
  33. package/lib/nodes/comment/Comment.d.ts +1 -1
  34. package/lib/nodes/document/Document.d.ts +18 -15
  35. package/lib/nodes/document/Document.js +36 -33
  36. package/lib/nodes/document/Document.js.map +1 -1
  37. package/lib/nodes/document/IDocument.d.ts +7 -0
  38. package/lib/nodes/document-fragment/DocumentFragment.d.ts +1 -1
  39. package/lib/nodes/document-type/DocumentType.d.ts +1 -1
  40. package/lib/nodes/element/DOMRectListFactory.d.ts +23 -0
  41. package/lib/nodes/element/DOMRectListFactory.js +33 -0
  42. package/lib/nodes/element/DOMRectListFactory.js.map +1 -0
  43. package/lib/nodes/element/Element.d.ts +6 -5
  44. package/lib/nodes/element/Element.js +9 -11
  45. package/lib/nodes/element/Element.js.map +1 -1
  46. package/lib/nodes/element/IDOMRectList.d.ts +11 -0
  47. package/lib/nodes/element/IDOMRectList.js +3 -0
  48. package/lib/nodes/element/IDOMRectList.js.map +1 -0
  49. package/lib/nodes/element/IElement.d.ts +5 -4
  50. package/lib/nodes/html-dialog-element/HTMLDialogElement.d.ts +31 -0
  51. package/lib/nodes/html-dialog-element/HTMLDialogElement.js +51 -0
  52. package/lib/nodes/html-dialog-element/HTMLDialogElement.js.map +1 -0
  53. package/lib/nodes/html-dialog-element/IHTMLDialogElement.d.ts +25 -0
  54. package/lib/nodes/html-dialog-element/IHTMLDialogElement.js +3 -0
  55. package/lib/nodes/html-dialog-element/IHTMLDialogElement.js.map +1 -0
  56. package/lib/nodes/html-template-element/HTMLTemplateElement.d.ts +1 -10
  57. package/lib/nodes/html-template-element/HTMLTemplateElement.js +2 -15
  58. package/lib/nodes/html-template-element/HTMLTemplateElement.js.map +1 -1
  59. package/lib/nodes/node/INode.d.ts +8 -6
  60. package/lib/nodes/node/Node.d.ts +20 -17
  61. package/lib/nodes/node/Node.js +19 -15
  62. package/lib/nodes/node/Node.js.map +1 -1
  63. package/lib/nodes/node/NodeTypeEnum.d.ts +10 -0
  64. package/lib/nodes/node/NodeTypeEnum.js +14 -0
  65. package/lib/nodes/node/NodeTypeEnum.js.map +1 -0
  66. package/lib/nodes/node/NodeUtility.d.ts +59 -0
  67. package/lib/nodes/node/NodeUtility.js +123 -0
  68. package/lib/nodes/node/NodeUtility.js.map +1 -0
  69. package/lib/nodes/text/IText.d.ts +9 -0
  70. package/lib/nodes/text/Text.d.ts +10 -1
  71. package/lib/nodes/text/Text.js +24 -0
  72. package/lib/nodes/text/Text.js.map +1 -1
  73. package/lib/range/IRangeBoundaryPoint.d.ts +8 -0
  74. package/lib/range/IRangeBoundaryPoint.js +3 -0
  75. package/lib/range/IRangeBoundaryPoint.js.map +1 -0
  76. package/lib/range/Range.d.ts +249 -0
  77. package/lib/range/Range.js +820 -0
  78. package/lib/range/Range.js.map +1 -0
  79. package/lib/range/RangeHowEnum.d.ts +7 -0
  80. package/lib/range/RangeHowEnum.js +11 -0
  81. package/lib/range/RangeHowEnum.js.map +1 -0
  82. package/lib/range/RangeUtility.d.ts +46 -0
  83. package/lib/range/RangeUtility.js +92 -0
  84. package/lib/range/RangeUtility.js.map +1 -0
  85. package/lib/selection/Selection.d.ts +167 -44
  86. package/lib/selection/Selection.js +369 -58
  87. package/lib/selection/Selection.js.map +1 -1
  88. package/lib/selection/SelectionDirectionEnum.d.ts +6 -0
  89. package/lib/selection/SelectionDirectionEnum.js +10 -0
  90. package/lib/selection/SelectionDirectionEnum.js.map +1 -0
  91. package/lib/window/IWindow.d.ts +22 -0
  92. package/lib/window/Window.d.ts +25 -9
  93. package/lib/window/Window.js +85 -35
  94. package/lib/window/Window.js.map +1 -1
  95. package/lib/xml-parser/XMLParser.d.ts +2 -2
  96. package/lib/xml-parser/XMLParser.js +5 -3
  97. package/lib/xml-parser/XMLParser.js.map +1 -1
  98. package/lib/xml-serializer/XMLSerializer.js +4 -1
  99. package/lib/xml-serializer/XMLSerializer.js.map +1 -1
  100. package/package.json +2 -2
  101. package/src/base64/Base64.ts +97 -0
  102. package/src/config/ElementTag.ts +2 -1
  103. package/src/config/NonImplemenetedElementClasses.ts +0 -1
  104. package/src/dom-implementation/DOMImplementation.ts +13 -2
  105. package/src/dom-parser/DOMParser.ts +20 -7
  106. package/src/exception/DOMExceptionNameEnum.ts +5 -1
  107. package/src/fetch/Request.ts +16 -6
  108. package/src/fetch/Response.ts +13 -6
  109. package/src/file/FileReader.ts +14 -4
  110. package/src/index.ts +7 -1
  111. package/src/location/URL.ts +1 -1
  112. package/src/nodes/document/Document.ts +47 -39
  113. package/src/nodes/document/IDocument.ts +8 -0
  114. package/src/nodes/element/DOMRectListFactory.ts +33 -0
  115. package/src/nodes/element/Element.ts +10 -11
  116. package/src/nodes/element/IDOMRectList.ts +11 -0
  117. package/src/nodes/element/IElement.ts +5 -4
  118. package/src/nodes/html-dialog-element/HTMLDialogElement.ts +47 -0
  119. package/src/nodes/html-dialog-element/IHTMLDialogElement.ts +29 -0
  120. package/src/nodes/html-template-element/HTMLTemplateElement.ts +3 -21
  121. package/src/nodes/node/INode.ts +8 -6
  122. package/src/nodes/node/Node.ts +24 -19
  123. package/src/nodes/node/NodeTypeEnum.ts +11 -0
  124. package/src/nodes/node/NodeUtility.ts +139 -0
  125. package/src/nodes/text/IText.ts +10 -0
  126. package/src/nodes/text/Text.ts +33 -0
  127. package/src/range/IRangeBoundaryPoint.ts +9 -0
  128. package/src/range/Range.ts +1057 -0
  129. package/src/range/RangeHowEnum.ts +8 -0
  130. package/src/range/RangeUtility.ts +114 -0
  131. package/src/selection/Selection.ts +444 -60
  132. package/src/selection/SelectionDirectionEnum.ts +7 -0
  133. package/src/window/IWindow.ts +24 -0
  134. package/src/window/Window.ts +104 -32
  135. package/src/xml-parser/XMLParser.ts +15 -7
  136. package/src/xml-serializer/XMLSerializer.ts +6 -1
  137. package/lib/nodes/element/Range.d.ts +0 -167
  138. package/lib/nodes/element/Range.js +0 -215
  139. package/lib/nodes/element/Range.js.map +0 -1
  140. package/lib/window/WindowBase64.d.ts +0 -19
  141. package/lib/window/WindowBase64.js +0 -88
  142. package/lib/window/WindowBase64.js.map +0 -1
  143. package/src/nodes/element/Range.ts +0 -237
  144. package/src/window/WindowBase64.ts +0 -95
@@ -1,125 +1,436 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ const Event_1 = __importDefault(require("../event/Event"));
7
+ const DOMException_1 = __importDefault(require("../exception/DOMException"));
8
+ const DOMExceptionNameEnum_1 = __importDefault(require("../exception/DOMExceptionNameEnum"));
9
+ const NodeTypeEnum_1 = __importDefault(require("../nodes/node/NodeTypeEnum"));
10
+ const NodeUtility_1 = __importDefault(require("../nodes/node/NodeUtility"));
11
+ const Range_1 = __importDefault(require("../range/Range"));
12
+ const RangeUtility_1 = __importDefault(require("../range/RangeUtility"));
13
+ const SelectionDirectionEnum_1 = __importDefault(require("./SelectionDirectionEnum"));
3
14
  /**
4
15
  * Selection.
5
16
  *
17
+ * Based on logic from:
18
+ * https://github.com/jsdom/jsdom/blob/master/lib/jsdom/living/selection/Selection-impl.js
19
+ *
6
20
  * Reference:
7
21
  * https://developer.mozilla.org/en-US/docs/Web/API/Selection.
8
22
  */
9
23
  class Selection {
10
- constructor() {
11
- this.anchorNode = null;
12
- this.anchorOffset = 0;
13
- this.baseNode = null;
14
- this.baseOffset = 0;
15
- this.extentNode = null;
16
- this.extentOffset = 0;
17
- this.focusNode = null;
18
- this.focusOffset = 0;
19
- this.isCollapsed = true;
20
- this.rangeCount = 0;
21
- this.type = 'None';
24
+ /**
25
+ * Constructor.
26
+ *
27
+ * @param ownerDocument Owner document.
28
+ */
29
+ constructor(ownerDocument) {
30
+ this._ownerDocument = null;
31
+ this._range = null;
32
+ this._direction = SelectionDirectionEnum_1.default.directionless;
33
+ this._ownerDocument = ownerDocument;
22
34
  }
23
35
  /**
24
- * Adds a range.
36
+ * Returns range count.
25
37
  *
26
- * @param _range Range.
38
+ * @see https://w3c.github.io/selection-api/#dom-selection-rangecount
39
+ * @returns Range count.
27
40
  */
28
- addRange(_range) {
29
- // Do nothing.
41
+ get rangeCount() {
42
+ return this._range ? 1 : 0;
30
43
  }
31
44
  /**
32
- * Collapses the current selection to a single point.
45
+ * Returns collapsed state.
33
46
  *
34
- * @param _node Node.
35
- * @param _offset Offset.
47
+ * @see https://w3c.github.io/selection-api/#dom-selection-iscollapsed
48
+ * @returns "true" if collapsed.
36
49
  */
37
- collapse(_node, _offset) {
38
- // Do nothing.
50
+ get isCollapsed() {
51
+ return this._range === null || this._range.collapsed;
39
52
  }
40
53
  /**
41
- * Collapses the selection to the end.
54
+ * Returns type.
55
+ *
56
+ * @see https://w3c.github.io/selection-api/#dom-selection-type
57
+ * @returns Type.
42
58
  */
43
- collapseToEnd() {
44
- // Do nothing.
59
+ get type() {
60
+ if (!this._range) {
61
+ return 'None';
62
+ }
63
+ else if (this._range.collapsed) {
64
+ return 'Caret';
65
+ }
66
+ return 'Range';
45
67
  }
46
68
  /**
47
- * Collapses the selection to the start.
69
+ * Returns anchor node.
70
+ *
71
+ * @see https://w3c.github.io/selection-api/#dom-selection-anchornode
72
+ * @returns Node.
48
73
  */
49
- collapseToStart() {
50
- // Do nothing.
74
+ get anchorNode() {
75
+ if (!this._range) {
76
+ return null;
77
+ }
78
+ return this._direction === SelectionDirectionEnum_1.default.forwards
79
+ ? this._range.startContainer
80
+ : this._range.endContainer;
51
81
  }
52
82
  /**
53
- * Indicates whether a specified node is part of the selection.
83
+ * Returns anchor offset.
54
84
  *
55
- * @param _node Node.
56
- * @param _partialContainer Partial container.
57
- * @returns Always returns "true" for now.
85
+ * @see https://w3c.github.io/selection-api/#dom-selection-anchoroffset
86
+ * @returns Node.
58
87
  */
59
- containsNode(_node, _partialContainer) {
60
- return true;
88
+ get anchorOffset() {
89
+ if (!this._range) {
90
+ return null;
91
+ }
92
+ return this._direction === SelectionDirectionEnum_1.default.forwards
93
+ ? this._range.startOffset
94
+ : this._range.endOffset;
61
95
  }
62
96
  /**
63
- * Deletes the selected text from the document's DOM.
97
+ * Returns anchor node.
98
+ *
99
+ * @deprecated
100
+ * @alias anchorNode
101
+ * @returns Node.
64
102
  */
65
- deleteFromDocument() {
66
- // Do nothing.
103
+ get baseNode() {
104
+ return this.anchorNode;
67
105
  }
68
106
  /**
69
- * Moves the focus of the selection to a specified point.
107
+ * Returns anchor offset.
70
108
  *
71
- * @param _node Node.
72
- * @param _offset Offset.
109
+ * @deprecated
110
+ * @alias anchorOffset
111
+ * @returns Node.
73
112
  */
74
- extend(_node, _offset) {
75
- // Do nothing.
113
+ get baseOffset() {
114
+ return this.anchorOffset;
76
115
  }
77
116
  /**
78
- * Moves the focus of the selection to a specified point.
117
+ * Returns focus node.
118
+ *
119
+ * @see https://w3c.github.io/selection-api/#dom-selection-focusnode
120
+ * @returns Node.
121
+ */
122
+ get focusNode() {
123
+ return this.anchorNode;
124
+ }
125
+ /**
126
+ * Returns focus offset.
79
127
  *
80
- * @param _index Index.
128
+ * @see https://w3c.github.io/selection-api/#dom-selection-focusoffset
129
+ * @returns Node.
81
130
  */
82
- getRangeAt(_index) {
83
- throw new Error('Not a valid index.');
131
+ get focusOffset() {
132
+ return this.anchorOffset;
133
+ }
134
+ /**
135
+ * Returns focus node.
136
+ *
137
+ * @deprecated
138
+ * @alias focusNode
139
+ * @returns Node.
140
+ */
141
+ get extentNode() {
142
+ return this.focusNode;
143
+ }
144
+ /**
145
+ * Returns focus offset.
146
+ *
147
+ * @deprecated
148
+ * @alias focusOffset
149
+ * @returns Node.
150
+ */
151
+ get extentOffset() {
152
+ return this.focusOffset;
153
+ }
154
+ /**
155
+ * Adds a range.
156
+ *
157
+ * @see https://w3c.github.io/selection-api/#dom-selection-addrange
158
+ * @param newRange Range.
159
+ */
160
+ addRange(newRange) {
161
+ if (!newRange) {
162
+ throw new Error('Failed to execute addRange on Selection. Parameter 1 is not of type Range.');
163
+ }
164
+ if (!this._range && newRange._ownerDocument === this._ownerDocument) {
165
+ this._associateRange(newRange);
166
+ }
167
+ }
168
+ /**
169
+ * Returns Range.
170
+ *
171
+ * @see https://w3c.github.io/selection-api/#dom-selection-getrangeat
172
+ * @param index Index.
173
+ * @returns Range.
174
+ */
175
+ getRangeAt(index) {
176
+ if (!this._range || index !== 0) {
177
+ throw new DOMException_1.default('Invalid range index.', DOMExceptionNameEnum_1.default.indexSizeError);
178
+ }
179
+ return this._range;
84
180
  }
85
181
  /**
86
182
  * Removes a range from a selection.
87
183
  *
88
- * @param _range Range.
184
+ * @see https://w3c.github.io/selection-api/#dom-selection-removerange
185
+ * @param range Range.
89
186
  */
90
- removeRange(_range) {
91
- // Do nothing.
187
+ removeRange(range) {
188
+ if (this._range !== range) {
189
+ throw new DOMException_1.default('Invalid range.', DOMExceptionNameEnum_1.default.notFoundError);
190
+ }
191
+ this._associateRange(null);
92
192
  }
93
193
  /**
94
194
  * Removes all ranges.
95
195
  */
96
196
  removeAllRanges() {
97
- // Do nothing.
197
+ this._associateRange(null);
198
+ }
199
+ /**
200
+ * Removes all ranges.
201
+ *
202
+ * @alias removeAllRanges()
203
+ */
204
+ empty() {
205
+ this.removeAllRanges();
206
+ }
207
+ /**
208
+ * Collapses the current selection to a single point.
209
+ *
210
+ * @see https://w3c.github.io/selection-api/#dom-selection-collapse
211
+ * @param node Node.
212
+ * @param offset Offset.
213
+ */
214
+ collapse(node, offset) {
215
+ if (node === null) {
216
+ this.removeAllRanges();
217
+ return;
218
+ }
219
+ if (node.nodeType === NodeTypeEnum_1.default.documentTypeNode) {
220
+ throw new DOMException_1.default("DocumentType Node can't be used as boundary point.", DOMExceptionNameEnum_1.default.invalidNodeTypeError);
221
+ }
222
+ if (offset > NodeUtility_1.default.getNodeLength(node)) {
223
+ throw new DOMException_1.default('Invalid range index.', DOMExceptionNameEnum_1.default.indexSizeError);
224
+ }
225
+ if (node.ownerDocument !== this._ownerDocument) {
226
+ return;
227
+ }
228
+ const newRange = new Range_1.default();
229
+ newRange._start.node = node;
230
+ newRange._start.offset = offset;
231
+ newRange._end.node = node;
232
+ newRange._end.offset = offset;
233
+ this._associateRange(newRange);
234
+ }
235
+ /**
236
+ * Collapses the current selection to a single point.
237
+ *
238
+ * @see https://w3c.github.io/selection-api/#dom-selection-setposition
239
+ * @alias collapse()
240
+ * @param node Node.
241
+ * @param offset Offset.
242
+ */
243
+ setPosition(node, offset) {
244
+ this.collapse(node, offset);
245
+ }
246
+ /**
247
+ * Collapses the selection to the end.
248
+ *
249
+ * @see https://w3c.github.io/selection-api/#dom-selection-collapsetoend
250
+ */
251
+ collapseToEnd() {
252
+ if (this._range === null) {
253
+ throw new DOMException_1.default('There is no selection to collapse.', DOMExceptionNameEnum_1.default.invalidStateError);
254
+ }
255
+ const { node, offset } = this._range._end;
256
+ const newRange = new Range_1.default();
257
+ newRange._start.node = node;
258
+ newRange._start.offset = offset;
259
+ newRange._end.node = node;
260
+ newRange._end.offset = offset;
261
+ this._associateRange(newRange);
262
+ }
263
+ /**
264
+ * Collapses the selection to the start.
265
+ *
266
+ * @see https://w3c.github.io/selection-api/#dom-selection-collapsetostart
267
+ */
268
+ collapseToStart() {
269
+ if (!this._range) {
270
+ throw new DOMException_1.default('There is no selection to collapse.', DOMExceptionNameEnum_1.default.invalidStateError);
271
+ }
272
+ const { node, offset } = this._range._start;
273
+ const newRange = new Range_1.default();
274
+ newRange._start.node = node;
275
+ newRange._start.offset = offset;
276
+ newRange._end.node = node;
277
+ newRange._end.offset = offset;
278
+ this._associateRange(newRange);
279
+ }
280
+ /**
281
+ * Indicates whether a specified node is part of the selection.
282
+ *
283
+ * @see https://w3c.github.io/selection-api/#dom-selection-containsnode
284
+ * @param node Node.
285
+ * @param [allowPartialContainment] Set to "true" to allow partial containment.
286
+ * @returns Always returns "true" for now.
287
+ */
288
+ containsNode(node, allowPartialContainment = false) {
289
+ if (!this._range || node.ownerDocument !== this._ownerDocument) {
290
+ return false;
291
+ }
292
+ const { _start, _end } = this._range;
293
+ const startIsBeforeNode = RangeUtility_1.default.compareBoundaryPointsPosition(_start, { node, offset: 0 }) === -1;
294
+ const endIsAfterNode = RangeUtility_1.default.compareBoundaryPointsPosition(_end, {
295
+ node,
296
+ offset: NodeUtility_1.default.getNodeLength(node)
297
+ }) === 1;
298
+ return allowPartialContainment
299
+ ? startIsBeforeNode || endIsAfterNode
300
+ : startIsBeforeNode && endIsAfterNode;
301
+ }
302
+ /**
303
+ * Deletes the selected text from the document's DOM.
304
+ *
305
+ * @see https://w3c.github.io/selection-api/#dom-selection-deletefromdocument
306
+ */
307
+ deleteFromDocument() {
308
+ if (this._range) {
309
+ this._range.deleteContents();
310
+ }
311
+ }
312
+ /**
313
+ * Moves the focus of the selection to a specified point.
314
+ *
315
+ * @see https://w3c.github.io/selection-api/#dom-selection-extend
316
+ * @param node Node.
317
+ * @param offset Offset.
318
+ */
319
+ extend(node, offset) {
320
+ if (node.ownerDocument !== this._ownerDocument) {
321
+ return;
322
+ }
323
+ if (!this._range) {
324
+ throw new DOMException_1.default('There is no selection to extend.', DOMExceptionNameEnum_1.default.invalidStateError);
325
+ }
326
+ const anchorNode = this.anchorNode;
327
+ const anchorOffset = this.anchorOffset;
328
+ const newRange = new Range_1.default();
329
+ newRange._start.node = node;
330
+ newRange._start.offset = 0;
331
+ newRange._end.node = node;
332
+ newRange._end.offset = 0;
333
+ if (node.ownerDocument !== this._range._ownerDocument) {
334
+ newRange._start.offset = offset;
335
+ newRange._end.offset = offset;
336
+ }
337
+ else if (RangeUtility_1.default.compareBoundaryPointsPosition({ node: anchorNode, offset: anchorOffset }, { node, offset }) <= 0) {
338
+ newRange._start.node = anchorNode;
339
+ newRange._start.offset = anchorOffset;
340
+ newRange._end.node = node;
341
+ newRange._end.offset = offset;
342
+ }
343
+ else {
344
+ newRange._start.node = node;
345
+ newRange._start.offset = offset;
346
+ newRange._end.node = anchorNode;
347
+ newRange._end.offset = anchorOffset;
348
+ }
349
+ this._associateRange(newRange);
350
+ this._direction =
351
+ RangeUtility_1.default.compareBoundaryPointsPosition({ node, offset }, { node: anchorNode, offset: anchorOffset }) === -1
352
+ ? SelectionDirectionEnum_1.default.backwards
353
+ : SelectionDirectionEnum_1.default.forwards;
98
354
  }
99
355
  /**
100
356
  * Selects all children.
101
357
  *
358
+ * @see https://w3c.github.io/selection-api/#dom-selection-selectallchildren
359
+ * @param node
102
360
  * @param _parentNode Parent node.
103
361
  */
104
- selectAllChildren(_parentNode) {
105
- // Do nothing.
362
+ selectAllChildren(node) {
363
+ if (node.nodeType === NodeTypeEnum_1.default.documentTypeNode) {
364
+ throw new DOMException_1.default("DocumentType Node can't be used as boundary point.", DOMExceptionNameEnum_1.default.invalidNodeTypeError);
365
+ }
366
+ if (node.ownerDocument !== this._ownerDocument) {
367
+ return;
368
+ }
369
+ const length = node.childNodes.length;
370
+ const newRange = new Range_1.default();
371
+ newRange._start.node = node;
372
+ newRange._start.offset = 0;
373
+ newRange._end.node = node;
374
+ newRange._end.offset = length;
375
+ this._associateRange(newRange);
106
376
  }
107
377
  /**
108
378
  * Sets the selection to be a range including all or parts of two specified DOM nodes, and any content located between them.
109
379
  *
110
- * @param _anchorNode Anchor node.
111
- * @param _anchorOffset Anchor offset.
112
- * @param _focusNode Focus node.
113
- * @param _focusOffset Focus offset.
380
+ * @see https://w3c.github.io/selection-api/#dom-selection-setbaseandextent
381
+ * @param anchorNode Anchor node.
382
+ * @param anchorOffset Anchor offset.
383
+ * @param focusNode Focus node.
384
+ * @param focusOffset Focus offset.
114
385
  */
115
- setBaseAndExtent(_anchorNode, _anchorOffset, _focusNode, _focusOffset) {
116
- // Do nothing.
386
+ setBaseAndExtent(anchorNode, anchorOffset, focusNode, focusOffset) {
387
+ if (anchorOffset > NodeUtility_1.default.getNodeLength(anchorNode) ||
388
+ focusOffset > NodeUtility_1.default.getNodeLength(focusNode)) {
389
+ throw new DOMException_1.default('Invalid anchor or focus offset.', DOMExceptionNameEnum_1.default.indexSizeError);
390
+ }
391
+ if (anchorNode.ownerDocument !== this._ownerDocument ||
392
+ focusNode.ownerDocument !== this._ownerDocument) {
393
+ return;
394
+ }
395
+ const anchor = { node: anchorNode, offset: anchorOffset };
396
+ const focus = { node: focusNode, offset: focusOffset };
397
+ const newRange = new Range_1.default();
398
+ if (RangeUtility_1.default.compareBoundaryPointsPosition(anchor, focus) === -1) {
399
+ newRange._start = anchor;
400
+ newRange._end = focus;
401
+ }
402
+ else {
403
+ newRange._start = focus;
404
+ newRange._end = anchor;
405
+ }
406
+ this._associateRange(newRange);
407
+ this._direction =
408
+ RangeUtility_1.default.compareBoundaryPointsPosition(focus, anchor) === -1
409
+ ? SelectionDirectionEnum_1.default.backwards
410
+ : SelectionDirectionEnum_1.default.forwards;
117
411
  }
118
412
  /**
119
413
  * Returns string currently being represented by the selection object.
414
+ *
415
+ * @returns Selection as string.
120
416
  */
121
417
  toString() {
122
- return '';
418
+ return this._range ? this._range.toString() : '';
419
+ }
420
+ /**
421
+ * Sets the current range.
422
+ *
423
+ * @param range Range.
424
+ */
425
+ _associateRange(range) {
426
+ const oldRange = this._range;
427
+ this._range = range;
428
+ this._direction =
429
+ range === null ? SelectionDirectionEnum_1.default.directionless : SelectionDirectionEnum_1.default.forwards;
430
+ if (oldRange !== this._range) {
431
+ // https://w3c.github.io/selection-api/#selectionchange-event
432
+ this._ownerDocument.dispatchEvent(new Event_1.default('selectionchange'));
433
+ }
123
434
  }
124
435
  }
125
436
  exports.default = Selection;
@@ -1 +1 @@
1
- {"version":3,"file":"Selection.js","sourceRoot":"","sources":["../../src/selection/Selection.ts"],"names":[],"mappings":";;AAEA;;;;;GAKG;AACH,MAAqB,SAAS;IAA9B;QACiB,eAAU,GAAU,IAAI,CAAC;QACzB,iBAAY,GAAW,CAAC,CAAC;QACzB,aAAQ,GAAU,IAAI,CAAC;QACvB,eAAU,GAAW,CAAC,CAAC;QACvB,eAAU,GAAU,IAAI,CAAC;QACzB,iBAAY,GAAW,CAAC,CAAC;QACzB,cAAS,GAAU,IAAI,CAAC;QACxB,gBAAW,GAAW,CAAC,CAAC;QACxB,gBAAW,GAAY,IAAI,CAAC;QAC5B,eAAU,GAAW,CAAC,CAAC;QACvB,SAAI,GAAW,MAAM,CAAC;IAwHvC,CAAC;IAtHA;;;;OAIG;IACI,QAAQ,CAAC,MAAc;QAC7B,cAAc;IACf,CAAC;IAED;;;;;OAKG;IACI,QAAQ,CAAC,KAAY,EAAE,OAAgB;QAC7C,cAAc;IACf,CAAC;IAED;;OAEG;IACI,aAAa;QACnB,cAAc;IACf,CAAC;IAED;;OAEG;IACI,eAAe;QACrB,cAAc;IACf,CAAC;IAED;;;;;;OAMG;IACI,YAAY,CAAC,KAAY,EAAE,iBAAyB;QAC1D,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;OAEG;IACI,kBAAkB;QACxB,cAAc;IACf,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,KAAY,EAAE,OAAgB;QAC3C,cAAc;IACf,CAAC;IAED;;;;OAIG;IACI,UAAU,CAAC,MAAc;QAC/B,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACI,WAAW,CAAC,MAAc;QAChC,cAAc;IACf,CAAC;IAED;;OAEG;IACI,eAAe;QACrB,cAAc;IACf,CAAC;IAED;;;;OAIG;IACI,iBAAiB,CAAC,WAAkB;QAC1C,cAAc;IACf,CAAC;IAED;;;;;;;OAOG;IACI,gBAAgB,CACtB,WAAkB,EAClB,aAAqB,EACrB,UAAiB,EACjB,YAAoB;QAEpB,cAAc;IACf,CAAC;IAED;;OAEG;IACI,QAAQ;QACd,OAAO,EAAE,CAAC;IACX,CAAC;CACD;AAnID,4BAmIC"}
1
+ {"version":3,"file":"Selection.js","sourceRoot":"","sources":["../../src/selection/Selection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ declare enum SelectionDirectionEnum {
2
+ forwards = 1,
3
+ backwards = -1,
4
+ directionless = 0
5
+ }
6
+ export default SelectionDirectionEnum;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var SelectionDirectionEnum;
4
+ (function (SelectionDirectionEnum) {
5
+ SelectionDirectionEnum[SelectionDirectionEnum["forwards"] = 1] = "forwards";
6
+ SelectionDirectionEnum[SelectionDirectionEnum["backwards"] = -1] = "backwards";
7
+ SelectionDirectionEnum[SelectionDirectionEnum["directionless"] = 0] = "directionless";
8
+ })(SelectionDirectionEnum || (SelectionDirectionEnum = {}));
9
+ exports.default = SelectionDirectionEnum;
10
+ //# sourceMappingURL=SelectionDirectionEnum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectionDirectionEnum.js","sourceRoot":"","sources":["../../src/selection/SelectionDirectionEnum.ts"],"names":[],"mappings":";;AAAA,IAAK,sBAIJ;AAJD,WAAK,sBAAsB;IAC1B,2EAAY,CAAA;IACZ,8EAAc,CAAA;IACd,qFAAiB,CAAA;AAClB,CAAC,EAJI,sBAAsB,KAAtB,sBAAsB,QAI1B;AAED,kBAAe,sBAAsB,CAAC"}
@@ -25,6 +25,7 @@ import HTMLBaseElement from '../nodes/html-base-element/HTMLBaseElement';
25
25
  import SVGSVGElement from '../nodes/svg-element/SVGSVGElement';
26
26
  import SVGElement from '../nodes/svg-element/SVGElement';
27
27
  import HTMLScriptElement from '../nodes/html-script-element/HTMLScriptElement';
28
+ import HTMLDialogElement from '../nodes/html-dialog-element/HTMLDialogElement';
28
29
  import HTMLImageElement from '../nodes/html-image-element/HTMLImageElement';
29
30
  import Image from '../nodes/html-image-element/Image';
30
31
  import DocumentFragment from '../nodes/document-fragment/DocumentFragment';
@@ -80,6 +81,7 @@ import IRequest from '../fetch/IRequest';
80
81
  import IHeaders from '../fetch/IHeaders';
81
82
  import IRequestInit from '../fetch/IRequestInit';
82
83
  import IResponse from '../fetch/IResponse';
84
+ import Range from '../range/Range';
83
85
  import MediaQueryList from '../match-media/MediaQueryList';
84
86
  import DOMRect from '../nodes/element/DOMRect';
85
87
  import Window from './Window';
@@ -109,6 +111,7 @@ export default interface IWindow extends IEventTarget, NodeJS.Global {
109
111
  readonly HTMLLabelElement: typeof HTMLLabelElement;
110
112
  readonly HTMLMetaElement: typeof HTMLMetaElement;
111
113
  readonly HTMLBaseElement: typeof HTMLBaseElement;
114
+ readonly HTMLDialogElement: typeof HTMLDialogElement;
112
115
  readonly SVGSVGElement: typeof SVGSVGElement;
113
116
  readonly SVGElement: typeof SVGElement;
114
117
  readonly Image: typeof Image;
@@ -177,6 +180,7 @@ export default interface IWindow extends IEventTarget, NodeJS.Global {
177
180
  readonly Response: {
178
181
  new (body?: unknown | null, init?: IResponseInit): IResponse;
179
182
  };
183
+ readonly Range: typeof Range;
180
184
  readonly DOMRect: typeof DOMRect;
181
185
  onload: (event: Event) => void;
182
186
  onerror: (event: ErrorEvent) => void;
@@ -295,4 +299,22 @@ export default interface IWindow extends IEventTarget, NodeJS.Global {
295
299
  * @returns Promise.
296
300
  */
297
301
  fetch(url: string, init?: IRequestInit): Promise<IResponse>;
302
+ /**
303
+ * Creates a Base64-encoded ASCII string from a binary string (i.e., a string in which each character in the string is treated as a byte of binary data).
304
+ *
305
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/btoa
306
+ * @param data Binay data.
307
+ * @returns Base64-encoded string.
308
+ */
309
+ btoa(data: unknown): string;
310
+ /**
311
+ * Decodes a string of data which has been encoded using Base64 encoding.
312
+ *
313
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/atob
314
+ * @see https://infra.spec.whatwg.org/#forgiving-base64-encode.
315
+ * @see Https://html.spec.whatwg.org/multipage/webappapis.html#btoa.
316
+ * @param data Binay string.
317
+ * @returns An ASCII string containing decoded data from encodedData.
318
+ */
319
+ atob(data: unknown): string;
298
320
  }