happy-dom 7.6.4 → 7.6.6
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.
- package/lib/nodes/element/Element.d.ts +4 -2
- package/lib/nodes/element/Element.js +8 -1
- package/lib/nodes/element/Element.js.map +1 -1
- package/lib/nodes/element/IElement.d.ts +4 -2
- package/lib/nodes/html-element/HTMLElement.d.ts +1 -12
- package/lib/nodes/html-element/HTMLElement.js +1 -11
- package/lib/nodes/html-element/HTMLElement.js.map +1 -1
- package/lib/nodes/html-option-element/HTMLOptionElement.d.ts +17 -0
- package/lib/nodes/html-option-element/HTMLOptionElement.js +55 -32
- package/lib/nodes/html-option-element/HTMLOptionElement.js.map +1 -1
- package/lib/nodes/html-option-element/HTMLOptionsCollection.d.ts +0 -1
- package/lib/nodes/html-option-element/HTMLOptionsCollection.js +2 -10
- package/lib/nodes/html-option-element/HTMLOptionsCollection.js.map +1 -1
- package/lib/nodes/html-select-element/HTMLSelectElement.d.ts +18 -2
- package/lib/nodes/html-select-element/HTMLSelectElement.js +99 -22
- package/lib/nodes/html-select-element/HTMLSelectElement.js.map +1 -1
- package/lib/nodes/svg-element/SVGElement.d.ts +1 -8
- package/lib/nodes/svg-element/SVGElement.js +1 -7
- package/lib/nodes/svg-element/SVGElement.js.map +1 -1
- package/lib/xml-parser/XMLParser.js +57 -54
- package/lib/xml-parser/XMLParser.js.map +1 -1
- package/package.json +2 -2
- package/src/nodes/element/Element.ts +15 -3
- package/src/nodes/element/IElement.ts +4 -2
- package/src/nodes/html-element/HTMLElement.ts +3 -12
- package/src/nodes/html-option-element/HTMLOptionElement.ts +69 -35
- package/src/nodes/html-option-element/HTMLOptionsCollection.ts +2 -9
- package/src/nodes/html-select-element/HTMLSelectElement.ts +109 -27
- package/src/nodes/svg-element/SVGElement.ts +3 -8
- package/src/xml-parser/XMLParser.ts +62 -58
@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
6
|
const HTMLElement_1 = __importDefault(require("../html-element/HTMLElement"));
|
7
7
|
const ValidityState_1 = __importDefault(require("../validity-state/ValidityState"));
|
8
|
-
const HTMLOptionElement_1 = __importDefault(require("../html-option-element/HTMLOptionElement"));
|
9
8
|
const HTMLOptionsCollection_1 = __importDefault(require("../html-option-element/HTMLOptionsCollection"));
|
10
9
|
const NodeTypeEnum_1 = __importDefault(require("../node/NodeTypeEnum"));
|
11
10
|
/**
|
@@ -152,11 +151,13 @@ class HTMLSelectElement extends HTMLElement_1.default {
|
|
152
151
|
* @returns Value.
|
153
152
|
*/
|
154
153
|
get value() {
|
155
|
-
|
156
|
-
|
154
|
+
for (let i = 0, max = this.options.length; i < max; i++) {
|
155
|
+
const option = this.options[i];
|
156
|
+
if (option._selectedness) {
|
157
|
+
return option.value;
|
158
|
+
}
|
157
159
|
}
|
158
|
-
|
159
|
-
return option instanceof HTMLOptionElement_1.default ? option.value : '';
|
160
|
+
return '';
|
160
161
|
}
|
161
162
|
/**
|
162
163
|
* Sets value.
|
@@ -164,7 +165,16 @@ class HTMLSelectElement extends HTMLElement_1.default {
|
|
164
165
|
* @param value Value.
|
165
166
|
*/
|
166
167
|
set value(value) {
|
167
|
-
|
168
|
+
for (let i = 0, max = this.options.length; i < max; i++) {
|
169
|
+
const option = this.options[i];
|
170
|
+
if (option.value === value) {
|
171
|
+
option._selectedness = true;
|
172
|
+
option._dirtyness = true;
|
173
|
+
}
|
174
|
+
else {
|
175
|
+
option._selectedness = false;
|
176
|
+
}
|
177
|
+
}
|
168
178
|
}
|
169
179
|
/**
|
170
180
|
* Returns value.
|
@@ -172,15 +182,29 @@ class HTMLSelectElement extends HTMLElement_1.default {
|
|
172
182
|
* @returns Value.
|
173
183
|
*/
|
174
184
|
get selectedIndex() {
|
175
|
-
|
185
|
+
for (let i = 0, max = this.options.length; i < max; i++) {
|
186
|
+
if (this.options[i]._selectedness) {
|
187
|
+
return i;
|
188
|
+
}
|
189
|
+
}
|
190
|
+
return -1;
|
176
191
|
}
|
177
192
|
/**
|
178
193
|
* Sets value.
|
179
194
|
*
|
180
|
-
* @param
|
195
|
+
* @param selectedIndex Selected index.
|
181
196
|
*/
|
182
|
-
set selectedIndex(
|
183
|
-
|
197
|
+
set selectedIndex(selectedIndex) {
|
198
|
+
if (typeof selectedIndex === 'number' && !isNaN(selectedIndex)) {
|
199
|
+
for (let i = 0, max = this.options.length; i < max; i++) {
|
200
|
+
this.options[i]._selectedness = false;
|
201
|
+
}
|
202
|
+
const selectedOption = this.options[selectedIndex];
|
203
|
+
if (selectedOption) {
|
204
|
+
selectedOption._selectedness = true;
|
205
|
+
selectedOption._dirtyness = true;
|
206
|
+
}
|
207
|
+
}
|
184
208
|
}
|
185
209
|
/**
|
186
210
|
* Returns the parent form element.
|
@@ -253,11 +277,9 @@ class HTMLSelectElement extends HTMLElement_1.default {
|
|
253
277
|
const previousLength = this.options.length;
|
254
278
|
if (element.tagName === 'OPTION' || element.tagName === 'OPTGROUP') {
|
255
279
|
this.options.push(element);
|
256
|
-
if (this.options.length === 1) {
|
257
|
-
this.options.selectedIndex = 0;
|
258
|
-
}
|
259
280
|
}
|
260
281
|
this._updateIndexProperties(previousLength, this.options.length);
|
282
|
+
this._resetOptionSelectednes();
|
261
283
|
}
|
262
284
|
return super.appendChild(node);
|
263
285
|
}
|
@@ -282,12 +304,12 @@ class HTMLSelectElement extends HTMLElement_1.default {
|
|
282
304
|
else {
|
283
305
|
this.options.push(newElement);
|
284
306
|
}
|
285
|
-
if (this.options.length === 1) {
|
286
|
-
this.options.selectedIndex = 0;
|
287
|
-
}
|
288
307
|
}
|
289
308
|
this._updateIndexProperties(previousLength, this.options.length);
|
290
309
|
}
|
310
|
+
if (newNode.nodeType === NodeTypeEnum_1.default.elementNode) {
|
311
|
+
this._resetOptionSelectednes();
|
312
|
+
}
|
291
313
|
return returnValue;
|
292
314
|
}
|
293
315
|
/**
|
@@ -302,17 +324,72 @@ class HTMLSelectElement extends HTMLElement_1.default {
|
|
302
324
|
if (index !== -1) {
|
303
325
|
this.options.splice(index, 1);
|
304
326
|
}
|
305
|
-
if (this.options.selectedIndex >= this.options.length) {
|
306
|
-
this.options.selectedIndex = this.options.length - 1;
|
307
|
-
}
|
308
|
-
if (!this.options.length) {
|
309
|
-
this.options.selectedIndex = -1;
|
310
|
-
}
|
311
327
|
}
|
312
328
|
this._updateIndexProperties(previousLength, this.options.length);
|
329
|
+
this._resetOptionSelectednes();
|
313
330
|
}
|
314
331
|
return super.removeChild(node);
|
315
332
|
}
|
333
|
+
/**
|
334
|
+
* Resets the option selectedness.
|
335
|
+
*
|
336
|
+
* Based on:
|
337
|
+
* https://github.com/jsdom/jsdom/blob/master/lib/jsdom/living/nodes/HTMLSelectElement-impl.js
|
338
|
+
*
|
339
|
+
* @param [newOption] Optional new option element to be selected.
|
340
|
+
* @see https://html.spec.whatwg.org/multipage/form-elements.html#selectedness-setting-algorithm
|
341
|
+
*/
|
342
|
+
_resetOptionSelectednes(newOption) {
|
343
|
+
if (this.hasAttributeNS(null, 'multiple')) {
|
344
|
+
return;
|
345
|
+
}
|
346
|
+
const selected = [];
|
347
|
+
for (let i = 0, max = this.options.length; i < max; i++) {
|
348
|
+
if (newOption) {
|
349
|
+
this.options[i]._selectedness = this.options[i] === newOption;
|
350
|
+
}
|
351
|
+
if (this.options[i]._selectedness) {
|
352
|
+
selected.push(this.options[i]);
|
353
|
+
}
|
354
|
+
}
|
355
|
+
const size = this._getDisplaySize();
|
356
|
+
if (size === 1 && !selected.length) {
|
357
|
+
for (let i = 0, max = this.options.length; i < max; i++) {
|
358
|
+
const option = this.options[i];
|
359
|
+
let disabled = option.hasAttributeNS(null, 'disabled');
|
360
|
+
const parentNode = option.parentNode;
|
361
|
+
if (parentNode &&
|
362
|
+
parentNode.nodeType === NodeTypeEnum_1.default.elementNode &&
|
363
|
+
parentNode.tagName === 'OPTGROUP' &&
|
364
|
+
parentNode.hasAttributeNS(null, 'disabled')) {
|
365
|
+
disabled = true;
|
366
|
+
}
|
367
|
+
if (!disabled) {
|
368
|
+
option._selectedness = true;
|
369
|
+
break;
|
370
|
+
}
|
371
|
+
}
|
372
|
+
}
|
373
|
+
else if (selected.length >= 2) {
|
374
|
+
for (let i = 0, max = this.options.length; i < max; i++) {
|
375
|
+
this.options[i]._selectedness = i === selected.length - 1;
|
376
|
+
}
|
377
|
+
}
|
378
|
+
}
|
379
|
+
/**
|
380
|
+
* Returns display size.
|
381
|
+
*
|
382
|
+
* @returns Display size.
|
383
|
+
*/
|
384
|
+
_getDisplaySize() {
|
385
|
+
if (this.hasAttributeNS(null, 'size')) {
|
386
|
+
const size = parseInt(this.getAttributeNS(null, 'size'));
|
387
|
+
if (!isNaN(size) && size >= 0) {
|
388
|
+
return size;
|
389
|
+
}
|
390
|
+
}
|
391
|
+
return this.hasAttributeNS(null, 'multiple') ? 4 : 1;
|
392
|
+
}
|
316
393
|
/**
|
317
394
|
* Updates index properties.
|
318
395
|
*
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"HTMLSelectElement.js","sourceRoot":"","sources":["../../../src/nodes/html-select-element/HTMLSelectElement.ts"],"names":[],"mappings":";;;;;AAAA,8EAAsD;AAGtD,oFAA4D;
|
1
|
+
{"version":3,"file":"HTMLSelectElement.js","sourceRoot":"","sources":["../../../src/nodes/html-select-element/HTMLSelectElement.ts"],"names":[],"mappings":"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"}
|
@@ -45,18 +45,11 @@ export default class SVGElement extends Element implements ISVGElement {
|
|
45
45
|
*/
|
46
46
|
get style(): CSSStyleDeclaration;
|
47
47
|
/**
|
48
|
-
* The setAttributeNode() method adds a new Attr node to the specified element.
|
49
|
-
*
|
50
48
|
* @override
|
51
|
-
* @param attribute Attribute.
|
52
|
-
* @returns Replaced attribute.
|
53
49
|
*/
|
54
50
|
setAttributeNode(attribute: IAttr): IAttr;
|
55
51
|
/**
|
56
|
-
* Removes an Attr node.
|
57
|
-
*
|
58
52
|
* @override
|
59
|
-
* @param attribute Attribute.
|
60
53
|
*/
|
61
|
-
removeAttributeNode(attribute: IAttr):
|
54
|
+
removeAttributeNode(attribute: IAttr): IAttr;
|
62
55
|
}
|
@@ -71,11 +71,7 @@ class SVGElement extends Element_1.default {
|
|
71
71
|
return this._style;
|
72
72
|
}
|
73
73
|
/**
|
74
|
-
* The setAttributeNode() method adds a new Attr node to the specified element.
|
75
|
-
*
|
76
74
|
* @override
|
77
|
-
* @param attribute Attribute.
|
78
|
-
* @returns Replaced attribute.
|
79
75
|
*/
|
80
76
|
setAttributeNode(attribute) {
|
81
77
|
const replacedAttribute = super.setAttributeNode(attribute);
|
@@ -85,16 +81,14 @@ class SVGElement extends Element_1.default {
|
|
85
81
|
return replacedAttribute;
|
86
82
|
}
|
87
83
|
/**
|
88
|
-
* Removes an Attr node.
|
89
|
-
*
|
90
84
|
* @override
|
91
|
-
* @param attribute Attribute.
|
92
85
|
*/
|
93
86
|
removeAttributeNode(attribute) {
|
94
87
|
super.removeAttributeNode(attribute);
|
95
88
|
if (attribute.name === 'style' && this._style) {
|
96
89
|
this._style.cssText = '';
|
97
90
|
}
|
91
|
+
return attribute;
|
98
92
|
}
|
99
93
|
}
|
100
94
|
exports.default = SVGElement;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SVGElement.js","sourceRoot":"","sources":["../../../src/nodes/svg-element/SVGElement.ts"],"names":[],"mappings":";;;;;AAAA,oGAA4E;AAC5E,iEAAyC;AAMzC;;;;;GAKG;AACH,MAAqB,UAAW,SAAQ,iBAAO;IAA/C;;QACC,SAAS;QACF,YAAO,GAAkC,IAAI,CAAC;QAC9C,YAAO,GAAkC,IAAI,CAAC;QAC9C,WAAM,GAAkC,IAAI,CAAC;QAC7C,aAAQ,GAAkC,IAAI,CAAC;QAC/C,aAAQ,GAAkC,IAAI,CAAC;QAC/C,aAAQ,GAAkC,IAAI,CAAC;QAE9C,WAAM,GAAwB,IAAI,CAAC;
|
1
|
+
{"version":3,"file":"SVGElement.js","sourceRoot":"","sources":["../../../src/nodes/svg-element/SVGElement.ts"],"names":[],"mappings":";;;;;AAAA,oGAA4E;AAC5E,iEAAyC;AAMzC;;;;;GAKG;AACH,MAAqB,UAAW,SAAQ,iBAAO;IAA/C;;QACC,SAAS;QACF,YAAO,GAAkC,IAAI,CAAC;QAC9C,YAAO,GAAkC,IAAI,CAAC;QAC9C,WAAM,GAAkC,IAAI,CAAC;QAC7C,aAAQ,GAAkC,IAAI,CAAC;QAC/C,aAAQ,GAAkC,IAAI,CAAC;QAC/C,aAAQ,GAAkC,IAAI,CAAC;QAE9C,WAAM,GAAwB,IAAI,CAAC;IA8E5C,CAAC;IA5EA;;;;OAIG;IACH,IAAW,eAAe;QACzB,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;OAIG;IACH,IAAW,eAAe;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;QAC/B,OAAO,MAAM,EAAE;YACd,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,KAAK,EAAE;gBAChC,OAAuB,MAAM,CAAC;aAC9B;SACD;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;OAIG;IACH,IAAW,OAAO;QACjB,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YACjD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;gBAC7B,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;aAClE;SACD;QACD,OAAO,OAAO,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,IAAW,KAAK;QACf,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACjB,IAAI,CAAC,MAAM,GAAG,IAAI,6BAAmB,CAAC,IAAI,CAAC,CAAC;SAC5C;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED;;OAEG;IACI,gBAAgB,CAAC,SAAgB;QACvC,MAAM,iBAAiB,GAAG,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAE5D,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE;YAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC;SACtC;QAED,OAAO,iBAAiB,CAAC;IAC1B,CAAC;IAED;;OAEG;IACI,mBAAmB,CAAC,SAAgB;QAC1C,KAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAErC,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE;YAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;SACzB;QAED,OAAO,SAAS,CAAC;IAClB,CAAC;CACD;AAvFD,6BAuFC"}
|
@@ -32,68 +32,71 @@ class XMLParser {
|
|
32
32
|
let parentUnnestableTagName = null;
|
33
33
|
let lastTextIndex = 0;
|
34
34
|
let match;
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
const
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
const namespaceURI = tagName === 'svg'
|
44
|
-
? NamespaceURI_1.default.svg
|
45
|
-
: parent.namespaceURI || NamespaceURI_1.default.html;
|
46
|
-
const newElement = document.createElementNS(namespaceURI, tagName);
|
47
|
-
// Scripts are not allowed to be executed when they are parsed using innerHTML, outerHTML, replaceWith() etc.
|
48
|
-
// However, they are allowed to be executed when document.write() is used.
|
49
|
-
// See: https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement
|
50
|
-
if (tagName === 'script') {
|
51
|
-
newElement._evaluateScript = evaluateScripts;
|
52
|
-
}
|
53
|
-
// An assumption that the same rule should be applied for the HTMLLinkElement is made here.
|
54
|
-
if (tagName === 'link') {
|
55
|
-
newElement._evaluateCSS = evaluateScripts;
|
35
|
+
if (data !== null && data !== undefined) {
|
36
|
+
data = String(data);
|
37
|
+
while ((match = markupRegexp.exec(data))) {
|
38
|
+
const tagName = match[2].toLowerCase();
|
39
|
+
const isStartTag = !match[1];
|
40
|
+
if (parent && match.index !== lastTextIndex) {
|
41
|
+
const text = data.substring(lastTextIndex, match.index);
|
42
|
+
this.appendTextAndCommentNodes(document, parent, text);
|
56
43
|
}
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
44
|
+
if (isStartTag) {
|
45
|
+
const namespaceURI = tagName === 'svg'
|
46
|
+
? NamespaceURI_1.default.svg
|
47
|
+
: parent.namespaceURI || NamespaceURI_1.default.html;
|
48
|
+
const newElement = document.createElementNS(namespaceURI, tagName);
|
49
|
+
// Scripts are not allowed to be executed when they are parsed using innerHTML, outerHTML, replaceWith() etc.
|
50
|
+
// However, they are allowed to be executed when document.write() is used.
|
51
|
+
// See: https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement
|
52
|
+
if (tagName === 'script') {
|
53
|
+
newElement._evaluateScript = evaluateScripts;
|
64
54
|
}
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
55
|
+
// An assumption that the same rule should be applied for the HTMLLinkElement is made here.
|
56
|
+
if (tagName === 'link') {
|
57
|
+
newElement._evaluateCSS = evaluateScripts;
|
58
|
+
}
|
59
|
+
this.setAttributes(newElement, match[3]);
|
60
|
+
if (!match[4] && !VoidElements_1.default.includes(tagName)) {
|
61
|
+
// Some elements are not allowed to be nested (e.g. "<a><a></a></a>" is not allowed.).
|
62
|
+
// Therefore we will auto-close the tag.
|
63
|
+
if (parentUnnestableTagName === tagName) {
|
64
|
+
stack.pop();
|
65
|
+
parent = parent.parentNode || root;
|
66
|
+
}
|
67
|
+
parent = parent.appendChild(newElement);
|
68
|
+
parentUnnestableTagName = this.getUnnestableTagName(parent);
|
69
|
+
stack.push(parent);
|
70
|
+
}
|
71
|
+
else {
|
72
|
+
parent.appendChild(newElement);
|
73
|
+
}
|
74
|
+
lastTextIndex = markupRegexp.lastIndex;
|
75
|
+
// Tags which contain non-parsed content
|
76
|
+
// For example: <script> JavaScript should not be parsed
|
77
|
+
if (ChildLessElements_1.default.includes(tagName)) {
|
78
|
+
let childLessMatch = null;
|
79
|
+
while ((childLessMatch = markupRegexp.exec(data))) {
|
80
|
+
if (childLessMatch[2].toLowerCase() === tagName && childLessMatch[1]) {
|
81
|
+
markupRegexp.lastIndex -= childLessMatch[0].length;
|
82
|
+
break;
|
83
|
+
}
|
81
84
|
}
|
82
85
|
}
|
83
86
|
}
|
87
|
+
else {
|
88
|
+
stack.pop();
|
89
|
+
parent = stack[stack.length - 1] || root;
|
90
|
+
parentUnnestableTagName = this.getUnnestableTagName(parent);
|
91
|
+
lastTextIndex = markupRegexp.lastIndex;
|
92
|
+
}
|
84
93
|
}
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
lastTextIndex = markupRegexp.lastIndex;
|
94
|
+
// Text after last element
|
95
|
+
if ((!match && data.length > 0) || (match && lastTextIndex !== match.index)) {
|
96
|
+
const text = data.substring(lastTextIndex);
|
97
|
+
this.appendTextAndCommentNodes(document, parent || root, text);
|
90
98
|
}
|
91
99
|
}
|
92
|
-
// Text after last element
|
93
|
-
if ((!match && data.length > 0) || (match && lastTextIndex !== match.index)) {
|
94
|
-
const text = data.substring(lastTextIndex);
|
95
|
-
this.appendTextAndCommentNodes(document, parent || root, text);
|
96
|
-
}
|
97
100
|
return root;
|
98
101
|
}
|
99
102
|
/**
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"XMLParser.js","sourceRoot":"","sources":["../../src/xml-parser/XMLParser.ts"],"names":[],"mappings":";;;;;AAGA,0EAAkD;AAClD,sFAA8D;AAC9D,oFAA4D;AAC5D,2BAA4B;AAC5B,0EAAkD;AAOlD,MAAM,aAAa,GAAG,+CAA+C,CAAC;AACtE,MAAM,cAAc,GAAG,gCAAgC,CAAC;AACxD,MAAM,8BAA8B,GAAG,aAAa,CAAC;AACrD,MAAM,gBAAgB,GAAG,sDAAsD,CAAC;AAEhF;;GAEG;AACH,MAAqB,SAAS;IAC7B;;;;;;;OAOG;IACI,MAAM,CAAC,KAAK,CAClB,QAAmB,EACnB,IAAY,EACZ,eAAe,GAAG,KAAK;QAEvB,MAAM,IAAI,GAAG,QAAQ,CAAC,sBAAsB,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAwC,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QACrD,IAAI,MAAM,GAAiC,IAAI,CAAC;QAChD,IAAI,uBAAuB,GAAG,IAAI,CAAC;QACnC,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,KAAsB,CAAC;QAE3B,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;
|
1
|
+
{"version":3,"file":"XMLParser.js","sourceRoot":"","sources":["../../src/xml-parser/XMLParser.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "happy-dom",
|
3
|
-
"version": "7.6.
|
3
|
+
"version": "7.6.6",
|
4
4
|
"license": "MIT",
|
5
5
|
"homepage": "https://github.com/capricorn86/happy-dom",
|
6
6
|
"repository": "https://github.com/capricorn86/happy-dom",
|
@@ -75,5 +75,5 @@
|
|
75
75
|
"ts-jest": "^27.1.3",
|
76
76
|
"typescript": "^4.6.2"
|
77
77
|
},
|
78
|
-
"gitHead": "
|
78
|
+
"gitHead": "e4072902f23440d68bd104027b65bf67685d4396"
|
79
79
|
}
|
@@ -919,8 +919,17 @@ export default class Element extends Node implements IElement {
|
|
919
919
|
* Removes an Attr node.
|
920
920
|
*
|
921
921
|
* @param attribute Attribute.
|
922
|
+
* @returns Removed attribute.
|
922
923
|
*/
|
923
|
-
public removeAttributeNode(attribute: IAttr):
|
924
|
+
public removeAttributeNode(attribute: IAttr): IAttr {
|
925
|
+
const removedAttribute = this._attributes[attribute.name];
|
926
|
+
|
927
|
+
if (removedAttribute !== attribute) {
|
928
|
+
throw new DOMException(
|
929
|
+
`Failed to execute 'removeAttributeNode' on 'Element': The node provided is owned by another element.`
|
930
|
+
);
|
931
|
+
}
|
932
|
+
|
924
933
|
delete this._attributes[attribute.name];
|
925
934
|
|
926
935
|
if (this.isConnected) {
|
@@ -954,15 +963,18 @@ export default class Element extends Node implements IElement {
|
|
954
963
|
}
|
955
964
|
}
|
956
965
|
}
|
966
|
+
|
967
|
+
return attribute;
|
957
968
|
}
|
958
969
|
|
959
970
|
/**
|
960
971
|
* Removes an Attr node.
|
961
972
|
*
|
962
973
|
* @param attribute Attribute.
|
974
|
+
* @returns Removed attribute.
|
963
975
|
*/
|
964
|
-
public removeAttributeNodeNS(attribute: IAttr):
|
965
|
-
this.removeAttributeNode(attribute);
|
976
|
+
public removeAttributeNodeNS(attribute: IAttr): IAttr {
|
977
|
+
return this.removeAttributeNode(attribute);
|
966
978
|
}
|
967
979
|
|
968
980
|
/**
|
@@ -260,15 +260,17 @@ export default interface IElement extends IChildNode, INonDocumentTypeChildNode,
|
|
260
260
|
* Removes an Attr node.
|
261
261
|
*
|
262
262
|
* @param attribute Attribute.
|
263
|
+
* @returns Removed attribute.
|
263
264
|
*/
|
264
|
-
removeAttributeNode(attribute: IAttr):
|
265
|
+
removeAttributeNode(attribute: IAttr): IAttr;
|
265
266
|
|
266
267
|
/**
|
267
268
|
* Removes an Attr node.
|
268
269
|
*
|
269
270
|
* @param attribute Attribute.
|
271
|
+
* @returns Removed attribute.
|
270
272
|
*/
|
271
|
-
removeAttributeNodeNS(attribute: IAttr):
|
273
|
+
removeAttributeNodeNS(attribute: IAttr): IAttr;
|
272
274
|
|
273
275
|
/**
|
274
276
|
* Clones a node.
|
@@ -421,11 +421,7 @@ export default class HTMLElement extends Element implements IHTMLElement {
|
|
421
421
|
}
|
422
422
|
|
423
423
|
/**
|
424
|
-
* The setAttributeNode() method adds a new Attr node to the specified element.
|
425
|
-
*
|
426
424
|
* @override
|
427
|
-
* @param attribute Attribute.
|
428
|
-
* @returns Replaced attribute.
|
429
425
|
*/
|
430
426
|
public setAttributeNode(attribute: IAttr): IAttr {
|
431
427
|
const replacedAttribute = super.setAttributeNode(attribute);
|
@@ -438,25 +434,20 @@ export default class HTMLElement extends Element implements IHTMLElement {
|
|
438
434
|
}
|
439
435
|
|
440
436
|
/**
|
441
|
-
* Removes an Attr node.
|
442
|
-
*
|
443
437
|
* @override
|
444
|
-
* @param attribute Attribute.
|
445
438
|
*/
|
446
|
-
public removeAttributeNode(attribute: IAttr):
|
439
|
+
public removeAttributeNode(attribute: IAttr): IAttr {
|
447
440
|
super.removeAttributeNode(attribute);
|
448
441
|
|
449
442
|
if (attribute.name === 'style' && this._style) {
|
450
443
|
this._style.cssText = '';
|
451
444
|
}
|
445
|
+
|
446
|
+
return attribute;
|
452
447
|
}
|
453
448
|
|
454
449
|
/**
|
455
|
-
* Clones a node.
|
456
|
-
*
|
457
450
|
* @override
|
458
|
-
* @param [deep=false] "true" to clone deep.
|
459
|
-
* @returns Cloned node.
|
460
451
|
*/
|
461
452
|
public cloneNode(deep = false): IHTMLElement {
|
462
453
|
const clone = <HTMLElement>super.cloneNode(deep);
|