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.

Files changed (55) hide show
  1. package/lib/config/ChildLessElements.js +1 -1
  2. package/lib/config/ChildLessElements.js.map +1 -1
  3. package/lib/cookie/Cookie.js +1 -1
  4. package/lib/cookie/Cookie.js.map +1 -1
  5. package/lib/css/declaration/utilities/CSSStyleDeclarationPropertyManager.js +1 -1
  6. package/lib/css/declaration/utilities/CSSStyleDeclarationPropertyManager.js.map +1 -1
  7. package/lib/event/Event.d.ts +7 -0
  8. package/lib/event/Event.js +12 -1
  9. package/lib/event/Event.js.map +1 -1
  10. package/lib/event/EventTarget.js +4 -0
  11. package/lib/event/EventTarget.js.map +1 -1
  12. package/lib/event/IEventTarget.d.ts +2 -1
  13. package/lib/event/UIEvent.d.ts +0 -21
  14. package/lib/event/UIEvent.js +0 -31
  15. package/lib/event/UIEvent.js.map +1 -1
  16. package/lib/form-data/FormData.js +22 -16
  17. package/lib/form-data/FormData.js.map +1 -1
  18. package/lib/nodes/element/Element.d.ts +4 -0
  19. package/lib/nodes/element/Element.js +11 -0
  20. package/lib/nodes/element/Element.js.map +1 -1
  21. package/lib/nodes/element/ElementUtility.js +6 -2
  22. package/lib/nodes/element/ElementUtility.js.map +1 -1
  23. package/lib/nodes/html-button-element/HTMLButtonElement.d.ts +1 -2
  24. package/lib/nodes/html-button-element/HTMLButtonElement.js +3 -7
  25. package/lib/nodes/html-button-element/HTMLButtonElement.js.map +1 -1
  26. package/lib/nodes/html-button-element/IHTMLButtonElement.d.ts +2 -0
  27. package/lib/nodes/html-input-element/HTMLInputElement.d.ts +1 -2
  28. package/lib/nodes/html-input-element/IHTMLInputElement.d.ts +5 -10
  29. package/lib/nodes/html-template-element/HTMLTemplateElement.d.ts +0 -8
  30. package/lib/nodes/html-template-element/HTMLTemplateElement.js +0 -12
  31. package/lib/nodes/html-template-element/HTMLTemplateElement.js.map +1 -1
  32. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.d.ts +5 -2
  33. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js +9 -0
  34. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js.map +1 -1
  35. package/lib/nodes/html-text-area-element/IHTMLTextAreaElement.d.ts +7 -1
  36. package/lib/nodes/node/Node.js +1 -1
  37. package/lib/nodes/node/Node.js.map +1 -1
  38. package/package.json +1 -1
  39. package/src/config/ChildLessElements.ts +1 -1
  40. package/src/cookie/Cookie.ts +1 -1
  41. package/src/css/declaration/utilities/CSSStyleDeclarationPropertyManager.ts +1 -1
  42. package/src/event/Event.ts +13 -1
  43. package/src/event/EventTarget.ts +6 -0
  44. package/src/event/IEventTarget.ts +6 -1
  45. package/src/event/UIEvent.ts +0 -35
  46. package/src/form-data/FormData.ts +24 -23
  47. package/src/nodes/element/Element.ts +14 -0
  48. package/src/nodes/element/ElementUtility.ts +12 -5
  49. package/src/nodes/html-button-element/HTMLButtonElement.ts +3 -7
  50. package/src/nodes/html-button-element/IHTMLButtonElement.ts +2 -0
  51. package/src/nodes/html-input-element/IHTMLInputElement.ts +6 -16
  52. package/src/nodes/html-template-element/HTMLTemplateElement.ts +0 -14
  53. package/src/nodes/html-text-area-element/HTMLTextAreaElement.ts +11 -0
  54. package/src/nodes/html-text-area-element/IHTMLTextAreaElement.ts +8 -1
  55. 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>>parentElement.children)._removeNamedItem(
33
- <IHTMLElement>node,
34
- (<Element>node)._attributes[attribute].value
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>>parentElement.children)._removeNamedItem(
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.isConnected && !this.disabled) {
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
- if (form) {
224
- form.requestSubmit();
225
- }
223
+ form.requestSubmit();
226
224
  break;
227
225
  case 'reset':
228
- if (form) {
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: HTMLInputElementSelectionModeEnum
70
+ selectionMode?: HTMLInputElementSelectionModeEnum
64
71
  ): void;
65
72
 
66
73
  /**
@@ -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
  }