happy-dom 9.0.1 → 9.1.3
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/config/ChildLessElements.js +1 -1
- package/lib/config/ChildLessElements.js.map +1 -1
- package/lib/cookie/Cookie.js +1 -1
- package/lib/cookie/Cookie.js.map +1 -1
- package/lib/css/declaration/utilities/CSSStyleDeclarationPropertyManager.js +1 -1
- package/lib/css/declaration/utilities/CSSStyleDeclarationPropertyManager.js.map +1 -1
- package/lib/event/Event.d.ts +7 -0
- package/lib/event/Event.js +12 -1
- package/lib/event/Event.js.map +1 -1
- package/lib/event/EventTarget.js +4 -0
- package/lib/event/EventTarget.js.map +1 -1
- package/lib/event/IEventTarget.d.ts +2 -1
- package/lib/event/UIEvent.d.ts +0 -21
- package/lib/event/UIEvent.js +0 -31
- package/lib/event/UIEvent.js.map +1 -1
- package/lib/form-data/FormData.js +22 -16
- package/lib/form-data/FormData.js.map +1 -1
- package/lib/nodes/element/Element.d.ts +4 -0
- package/lib/nodes/element/Element.js +11 -0
- package/lib/nodes/element/Element.js.map +1 -1
- package/lib/nodes/element/ElementUtility.js +6 -2
- package/lib/nodes/element/ElementUtility.js.map +1 -1
- package/lib/nodes/html-button-element/HTMLButtonElement.d.ts +1 -2
- package/lib/nodes/html-button-element/HTMLButtonElement.js +3 -7
- package/lib/nodes/html-button-element/HTMLButtonElement.js.map +1 -1
- package/lib/nodes/html-button-element/IHTMLButtonElement.d.ts +2 -0
- package/lib/nodes/html-input-element/HTMLInputElement.d.ts +1 -2
- package/lib/nodes/html-input-element/IHTMLInputElement.d.ts +5 -10
- package/lib/nodes/html-template-element/HTMLTemplateElement.d.ts +0 -8
- package/lib/nodes/html-template-element/HTMLTemplateElement.js +0 -12
- package/lib/nodes/html-template-element/HTMLTemplateElement.js.map +1 -1
- package/lib/nodes/html-text-area-element/HTMLTextAreaElement.d.ts +5 -2
- package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js +9 -0
- package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js.map +1 -1
- package/lib/nodes/html-text-area-element/IHTMLTextAreaElement.d.ts +7 -1
- package/lib/nodes/node/Node.js +1 -1
- package/lib/nodes/node/Node.js.map +1 -1
- package/package.json +1 -1
- package/src/config/ChildLessElements.ts +1 -1
- package/src/cookie/Cookie.ts +1 -1
- package/src/css/declaration/utilities/CSSStyleDeclarationPropertyManager.ts +1 -1
- package/src/event/Event.ts +13 -1
- package/src/event/EventTarget.ts +6 -0
- package/src/event/IEventTarget.ts +6 -1
- package/src/event/UIEvent.ts +0 -35
- package/src/form-data/FormData.ts +24 -23
- package/src/nodes/element/Element.ts +14 -0
- package/src/nodes/element/ElementUtility.ts +12 -5
- package/src/nodes/html-button-element/HTMLButtonElement.ts +3 -7
- package/src/nodes/html-button-element/IHTMLButtonElement.ts +2 -0
- package/src/nodes/html-input-element/IHTMLInputElement.ts +6 -16
- package/src/nodes/html-template-element/HTMLTemplateElement.ts +0 -14
- package/src/nodes/html-text-area-element/HTMLTextAreaElement.ts +11 -0
- package/src/nodes/html-text-area-element/IHTMLTextAreaElement.ts +8 -1
- package/src/nodes/node/Node.ts +2 -2
@@ -29,10 +29,9 @@ export default class ElementUtility {
|
|
29
29
|
if (index !== -1) {
|
30
30
|
for (const attribute of NAMED_ITEM_ATTRIBUTES) {
|
31
31
|
if ((<Element>node)._attributes[attribute]) {
|
32
|
-
(<HTMLCollection<IHTMLElement, IHTMLElement>>
|
33
|
-
<
|
34
|
-
|
35
|
-
);
|
32
|
+
(<HTMLCollection<IHTMLElement, IHTMLElement>>(
|
33
|
+
(<IElement>node.parentNode).children
|
34
|
+
))._removeNamedItem(<IHTMLElement>node, (<Element>node)._attributes[attribute].value);
|
36
35
|
}
|
37
36
|
}
|
38
37
|
(<IHTMLElement>node.parentNode).children.splice(index, 1);
|
@@ -97,15 +96,21 @@ export default class ElementUtility {
|
|
97
96
|
if (index !== -1) {
|
98
97
|
for (const attribute of NAMED_ITEM_ATTRIBUTES) {
|
99
98
|
if ((<Element>newNode)._attributes[attribute]) {
|
100
|
-
(<HTMLCollection<IHTMLElement, IHTMLElement>>
|
99
|
+
(<HTMLCollection<IHTMLElement, IHTMLElement>>(
|
100
|
+
(<IElement>newNode.parentNode).children
|
101
|
+
))._removeNamedItem(
|
101
102
|
<IHTMLElement>newNode,
|
102
103
|
(<Element>newNode)._attributes[attribute].value
|
103
104
|
);
|
104
105
|
}
|
105
106
|
}
|
107
|
+
|
108
|
+
(<IElement>newNode.parentNode).children.splice(index, 1);
|
106
109
|
}
|
107
110
|
}
|
108
111
|
|
112
|
+
// Node.ts will call appendChild() for the scenario where "referenceNode" is "null"
|
113
|
+
|
109
114
|
if (referenceNode) {
|
110
115
|
if (referenceNode.nodeType === NodeTypeEnum.elementNode) {
|
111
116
|
const index = parentElement.children.indexOf(<IElement>referenceNode);
|
@@ -122,7 +127,9 @@ export default class ElementUtility {
|
|
122
127
|
}
|
123
128
|
}
|
124
129
|
}
|
130
|
+
}
|
125
131
|
|
132
|
+
if (referenceNode || referenceNode === null) {
|
126
133
|
for (const attribute of NAMED_ITEM_ATTRIBUTES) {
|
127
134
|
if ((<Element>newNode)._attributes[attribute]) {
|
128
135
|
(<HTMLCollection<IHTMLElement, IHTMLElement>>parentElement.children)._appendNamedItem(
|
@@ -216,18 +216,14 @@ export default class HTMLButtonElement extends HTMLElement implements IHTMLButto
|
|
216
216
|
|
217
217
|
const returnValue = super.dispatchEvent(event);
|
218
218
|
|
219
|
-
if (event.type === 'click' && this.
|
219
|
+
if (event.type === 'click' && this._formNode && this.isConnected) {
|
220
220
|
const form = <IHTMLFormElement>this._formNode;
|
221
221
|
switch (this.type) {
|
222
222
|
case 'submit':
|
223
|
-
|
224
|
-
form.requestSubmit();
|
225
|
-
}
|
223
|
+
form.requestSubmit();
|
226
224
|
break;
|
227
225
|
case 'reset':
|
228
|
-
|
229
|
-
form.reset();
|
230
|
-
}
|
226
|
+
form.reset();
|
231
227
|
break;
|
232
228
|
}
|
233
229
|
}
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import ValidityState from '../../validity-state/ValidityState';
|
1
2
|
import IHTMLElement from '../html-element/IHTMLElement';
|
2
3
|
import IHTMLFormElement from '../html-form-element/IHTMLFormElement';
|
3
4
|
import IHTMLLabelElement from '../html-label-element/IHTMLLabelElement';
|
@@ -15,6 +16,7 @@ export default interface IHTMLButtonElement extends IHTMLElement {
|
|
15
16
|
disabled: boolean;
|
16
17
|
type: string;
|
17
18
|
formNoValidate: boolean;
|
19
|
+
readonly validity: ValidityState;
|
18
20
|
readonly form: IHTMLFormElement;
|
19
21
|
readonly validationMessage: string;
|
20
22
|
readonly labels: INodeList<IHTMLLabelElement>;
|
@@ -17,6 +17,7 @@ import IHTMLLabelElement from '../html-label-element/IHTMLLabelElement';
|
|
17
17
|
export default interface IHTMLInputElement extends IHTMLElement {
|
18
18
|
readonly form: IHTMLFormElement;
|
19
19
|
readonly labels: INodeList<IHTMLLabelElement>;
|
20
|
+
readonly validity: ValidityState;
|
20
21
|
formAction: string;
|
21
22
|
formMethod: string;
|
22
23
|
formNoValidate: boolean;
|
@@ -52,7 +53,6 @@ export default interface IHTMLInputElement extends IHTMLElement {
|
|
52
53
|
selectionStart: number;
|
53
54
|
selectionEnd: number;
|
54
55
|
selectionDirection: string;
|
55
|
-
validity: ValidityState;
|
56
56
|
willValidate: boolean;
|
57
57
|
valueAsDate: Date;
|
58
58
|
valueAsNumber: number;
|
@@ -75,6 +75,11 @@ export default interface IHTMLInputElement extends IHTMLElement {
|
|
75
75
|
*/
|
76
76
|
reportValidity(): void;
|
77
77
|
|
78
|
+
/**
|
79
|
+
* Selects the text.
|
80
|
+
*/
|
81
|
+
select(): void;
|
82
|
+
|
78
83
|
/**
|
79
84
|
* Set selection range.
|
80
85
|
*
|
@@ -100,21 +105,6 @@ export default interface IHTMLInputElement extends IHTMLElement {
|
|
100
105
|
selectionMode?: HTMLInputElementSelectionModeEnum
|
101
106
|
): void;
|
102
107
|
|
103
|
-
/**
|
104
|
-
* Set range text.
|
105
|
-
*
|
106
|
-
* @param replacement Replacement.
|
107
|
-
* @param [start] Start.
|
108
|
-
* @param [end] End.
|
109
|
-
* @param [direction] Direction.
|
110
|
-
*/
|
111
|
-
setRangeText(
|
112
|
-
replacement: string,
|
113
|
-
start: number,
|
114
|
-
end: number,
|
115
|
-
selectionMode: HTMLInputElementSelectionModeEnum
|
116
|
-
): void;
|
117
|
-
|
118
108
|
/**
|
119
109
|
* Checks validity.
|
120
110
|
*
|
@@ -34,20 +34,6 @@ export default class HTMLTemplateElement extends HTMLElement implements IHTMLTem
|
|
34
34
|
}
|
35
35
|
}
|
36
36
|
|
37
|
-
/**
|
38
|
-
* @override
|
39
|
-
*/
|
40
|
-
public get previousSibling(): INode {
|
41
|
-
return null;
|
42
|
-
}
|
43
|
-
|
44
|
-
/**
|
45
|
-
* @override
|
46
|
-
*/
|
47
|
-
public get nextSibling(): INode {
|
48
|
-
return null;
|
49
|
-
}
|
50
|
-
|
51
37
|
/**
|
52
38
|
* @override
|
53
39
|
*/
|
@@ -429,6 +429,17 @@ export default class HTMLTextAreaElement extends HTMLElement implements IHTMLTex
|
|
429
429
|
return new NodeList<IHTMLLabelElement>();
|
430
430
|
}
|
431
431
|
|
432
|
+
/**
|
433
|
+
* Selects the text.
|
434
|
+
*/
|
435
|
+
public select(): void {
|
436
|
+
this._selectionStart = 0;
|
437
|
+
this._selectionEnd = this.value.length;
|
438
|
+
this._selectionDirection = HTMLInputElementSelectionDirectionEnum.none;
|
439
|
+
|
440
|
+
this.dispatchEvent(new Event('select', { bubbles: true, cancelable: true }));
|
441
|
+
}
|
442
|
+
|
432
443
|
/**
|
433
444
|
* Set selection range.
|
434
445
|
*
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import Event from '../../event/Event';
|
2
|
+
import ValidityState from '../../validity-state/ValidityState';
|
2
3
|
import IHTMLElement from '../html-element/IHTMLElement';
|
3
4
|
import IHTMLFormElement from '../html-form-element/IHTMLFormElement';
|
4
5
|
import HTMLInputElementSelectionModeEnum from '../html-input-element/HTMLInputElementSelectionModeEnum';
|
@@ -16,6 +17,7 @@ export default interface IHTMLTextAreaElement extends IHTMLElement {
|
|
16
17
|
readonly form: IHTMLFormElement;
|
17
18
|
readonly validationMessage: string;
|
18
19
|
readonly labels: INodeList<IHTMLLabelElement>;
|
20
|
+
readonly validity: ValidityState;
|
19
21
|
defaultValue: string;
|
20
22
|
minLength: number;
|
21
23
|
maxLength: number;
|
@@ -39,6 +41,11 @@ export default interface IHTMLTextAreaElement extends IHTMLElement {
|
|
39
41
|
oninput: (event: Event) => void | null;
|
40
42
|
onselectionchange: (event: Event) => void | null;
|
41
43
|
|
44
|
+
/**
|
45
|
+
* Selects the text.
|
46
|
+
*/
|
47
|
+
select(): void;
|
48
|
+
|
42
49
|
/**
|
43
50
|
* Set selection range.
|
44
51
|
*
|
@@ -60,7 +67,7 @@ export default interface IHTMLTextAreaElement extends IHTMLElement {
|
|
60
67
|
replacement: string,
|
61
68
|
start: number,
|
62
69
|
end: number,
|
63
|
-
selectionMode
|
70
|
+
selectionMode?: HTMLInputElementSelectionModeEnum
|
64
71
|
): void;
|
65
72
|
|
66
73
|
/**
|
package/src/nodes/node/Node.ts
CHANGED
@@ -491,10 +491,10 @@ export default class Node extends EventTarget implements INode {
|
|
491
491
|
/**
|
492
492
|
* @override
|
493
493
|
*/
|
494
|
-
public dispatchEvent(event: Event): boolean {
|
494
|
+
public override dispatchEvent(event: Event): boolean {
|
495
495
|
const returnValue = super.dispatchEvent(event);
|
496
496
|
|
497
|
-
if (event.bubbles && !event._propagationStopped) {
|
497
|
+
if (event.bubbles && !event._propagationStopped && !event._immediatePropagationStopped) {
|
498
498
|
if (this.parentNode) {
|
499
499
|
return this.parentNode.dispatchEvent(event);
|
500
500
|
}
|