happy-dom 5.0.0 → 5.3.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 (77) hide show
  1. package/lib/config/ElementTag.d.ts +6 -3
  2. package/lib/config/ElementTag.js +6 -3
  3. package/lib/config/ElementTag.js.map +1 -1
  4. package/lib/config/NonImplemenetedElementClasses.js +0 -3
  5. package/lib/config/NonImplemenetedElementClasses.js.map +1 -1
  6. package/lib/dom-token-list/DOMTokenList.d.ts +4 -0
  7. package/lib/dom-token-list/DOMTokenList.js +6 -0
  8. package/lib/dom-token-list/DOMTokenList.js.map +1 -1
  9. package/lib/dom-token-list/IDOMTokenList.d.ts +1 -0
  10. package/lib/exception/DOMExceptionNameEnum.d.ts +2 -1
  11. package/lib/exception/DOMExceptionNameEnum.js +1 -0
  12. package/lib/exception/DOMExceptionNameEnum.js.map +1 -1
  13. package/lib/nodes/html-input-element/HTMLInputElement.d.ts +1 -1
  14. package/lib/nodes/html-input-element/HTMLInputElement.js +1 -1
  15. package/lib/nodes/html-input-element/HTMLInputElement.js.map +1 -1
  16. package/lib/nodes/html-input-element/IHTMLInputElement.d.ts +1 -1
  17. package/lib/nodes/html-opt-group-element/HTMLOptGroupElement.d.ts +34 -0
  18. package/lib/nodes/html-opt-group-element/HTMLOptGroupElement.js +58 -0
  19. package/lib/nodes/html-opt-group-element/HTMLOptGroupElement.js.map +1 -0
  20. package/lib/nodes/html-opt-group-element/IHTMLOptGroupElement.d.ts +11 -0
  21. package/lib/nodes/html-opt-group-element/IHTMLOptGroupElement.js +3 -0
  22. package/lib/nodes/html-opt-group-element/IHTMLOptGroupElement.js.map +1 -0
  23. package/lib/nodes/html-option-element/HTMLOptionElement.d.ts +72 -0
  24. package/lib/nodes/html-option-element/HTMLOptionElement.js +111 -0
  25. package/lib/nodes/html-option-element/HTMLOptionElement.js.map +1 -0
  26. package/lib/nodes/html-option-element/HTMLOptionElementValueSanitizer.d.ts +11 -0
  27. package/lib/nodes/html-option-element/HTMLOptionElementValueSanitizer.js +18 -0
  28. package/lib/nodes/html-option-element/HTMLOptionElementValueSanitizer.js.map +1 -0
  29. package/lib/nodes/html-option-element/HTMLOptionsCollection.d.ts +43 -0
  30. package/lib/nodes/html-option-element/HTMLOptionsCollection.js +80 -0
  31. package/lib/nodes/html-option-element/HTMLOptionsCollection.js.map +1 -0
  32. package/lib/nodes/html-option-element/IHTMLOptionElement.d.ts +16 -0
  33. package/lib/nodes/html-option-element/IHTMLOptionElement.js +3 -0
  34. package/lib/nodes/html-option-element/IHTMLOptionElement.js.map +1 -0
  35. package/lib/nodes/html-option-element/IHTMLOptionsCollection.d.ts +26 -0
  36. package/lib/nodes/html-option-element/IHTMLOptionsCollection.js +3 -0
  37. package/lib/nodes/html-option-element/IHTMLOptionsCollection.js.map +1 -0
  38. package/lib/nodes/html-select-element/HTMLSelectElement.d.ts +128 -0
  39. package/lib/nodes/html-select-element/HTMLSelectElement.js +215 -0
  40. package/lib/nodes/html-select-element/HTMLSelectElement.js.map +1 -0
  41. package/lib/nodes/html-select-element/HTMLSelectElementValueSanitizer.d.ts +11 -0
  42. package/lib/nodes/html-select-element/HTMLSelectElementValueSanitizer.js +18 -0
  43. package/lib/nodes/html-select-element/HTMLSelectElementValueSanitizer.js.map +1 -0
  44. package/lib/nodes/html-select-element/IHTMLSelectElement.d.ts +26 -0
  45. package/lib/nodes/html-select-element/IHTMLSelectElement.js +3 -0
  46. package/lib/nodes/html-select-element/IHTMLSelectElement.js.map +1 -0
  47. package/lib/nodes/{html-input-element → validity-state}/ValidityState.d.ts +3 -2
  48. package/lib/nodes/{html-input-element → validity-state}/ValidityState.js +12 -2
  49. package/lib/nodes/validity-state/ValidityState.js.map +1 -0
  50. package/lib/window/Window.d.ts +2 -0
  51. package/lib/window/Window.js +4 -0
  52. package/lib/window/Window.js.map +1 -1
  53. package/lib/window/WindowBase64.d.ts +19 -0
  54. package/lib/window/WindowBase64.js +88 -0
  55. package/lib/window/WindowBase64.js.map +1 -0
  56. package/package.json +2 -2
  57. package/src/config/ElementTag.ts +6 -3
  58. package/src/config/NonImplemenetedElementClasses.ts +0 -3
  59. package/src/dom-token-list/DOMTokenList.ts +7 -0
  60. package/src/dom-token-list/IDOMTokenList.ts +1 -0
  61. package/src/exception/DOMExceptionNameEnum.ts +2 -1
  62. package/src/nodes/html-input-element/HTMLInputElement.ts +1 -1
  63. package/src/nodes/html-input-element/IHTMLInputElement.ts +1 -1
  64. package/src/nodes/html-opt-group-element/HTMLOptGroupElement.ts +54 -0
  65. package/src/nodes/html-opt-group-element/IHTMLOptGroupElement.ts +12 -0
  66. package/src/nodes/html-option-element/HTMLOptionElement.ts +117 -0
  67. package/src/nodes/html-option-element/HTMLOptionElementValueSanitizer.ts +15 -0
  68. package/src/nodes/html-option-element/HTMLOptionsCollection.ts +94 -0
  69. package/src/nodes/html-option-element/IHTMLOptionElement.ts +17 -0
  70. package/src/nodes/html-option-element/IHTMLOptionsCollection.ts +33 -0
  71. package/src/nodes/html-select-element/HTMLSelectElement.ts +239 -0
  72. package/src/nodes/html-select-element/HTMLSelectElementValueSanitizer.ts +15 -0
  73. package/src/nodes/html-select-element/IHTMLSelectElement.ts +27 -0
  74. package/src/nodes/{html-input-element → validity-state}/ValidityState.ts +13 -5
  75. package/src/window/Window.ts +5 -0
  76. package/src/window/WindowBase64.ts +95 -0
  77. package/lib/nodes/html-input-element/ValidityState.js.map +0 -1
@@ -0,0 +1,43 @@
1
+ import HTMLCollection from '../element/HTMLCollection';
2
+ import HTMLOptGroupElement from '../html-opt-group-element/HTMLOptGroupElement';
3
+ import HTMLOptionElement from './HTMLOptionElement';
4
+ import IHTMLOptionsCollection from './IHTMLOptionsCollection';
5
+ /**
6
+ * HTML Options Collection.
7
+ *
8
+ * Reference:
9
+ * https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionsCollection.
10
+ */
11
+ export default class HTMLOptionsCollection extends HTMLCollection implements IHTMLOptionsCollection {
12
+ _selectedIndex: number;
13
+ /**
14
+ * Returns selectedIndex.
15
+ *
16
+ * @returns SelectedIndex.
17
+ */
18
+ get selectedIndex(): number;
19
+ /**
20
+ * Sets selectedIndex.
21
+ *
22
+ * @param selectedIndex SelectedIndex.
23
+ */
24
+ set selectedIndex(selectedIndex: number);
25
+ /**
26
+ * Returns item by index.
27
+ *
28
+ * @param index Index.
29
+ */
30
+ item(index: number): HTMLOptionElement | HTMLOptGroupElement;
31
+ /**
32
+ *
33
+ * @param element
34
+ * @param before
35
+ */
36
+ add(element: HTMLOptionElement | HTMLOptGroupElement, before?: number | HTMLOptionElement | HTMLOptGroupElement): void;
37
+ /**
38
+ * Removes indexed element from collection.
39
+ *
40
+ * @param index Index.
41
+ */
42
+ remove(index: number): void;
43
+ }
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const DOMException_1 = __importDefault(require("../../exception/DOMException"));
7
+ const HTMLCollection_1 = __importDefault(require("../element/HTMLCollection"));
8
+ /**
9
+ * HTML Options Collection.
10
+ *
11
+ * Reference:
12
+ * https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionsCollection.
13
+ */
14
+ class HTMLOptionsCollection extends HTMLCollection_1.default {
15
+ /**
16
+ * Returns selectedIndex.
17
+ *
18
+ * @returns SelectedIndex.
19
+ */
20
+ get selectedIndex() {
21
+ return this._selectedIndex;
22
+ }
23
+ /**
24
+ * Sets selectedIndex.
25
+ *
26
+ * @param selectedIndex SelectedIndex.
27
+ */
28
+ set selectedIndex(selectedIndex) {
29
+ this._selectedIndex = selectedIndex;
30
+ }
31
+ /**
32
+ * Returns item by index.
33
+ *
34
+ * @param index Index.
35
+ */
36
+ item(index) {
37
+ return this[index];
38
+ }
39
+ /**
40
+ *
41
+ * @param element
42
+ * @param before
43
+ */
44
+ add(element, before) {
45
+ if (!before && before !== 0) {
46
+ this.push(element);
47
+ return;
48
+ }
49
+ if (!Number.isNaN(Number(before))) {
50
+ if (before < 0) {
51
+ return;
52
+ }
53
+ this.splice(before, 0, element);
54
+ return;
55
+ }
56
+ const idx = this.findIndex((element) => element === before);
57
+ if (idx === -1) {
58
+ throw new DOMException_1.default("Failed to execute 'add' on 'DOMException': The node before which the new node is to be inserted is not a child of this node.");
59
+ }
60
+ this.splice(idx, 0, element);
61
+ }
62
+ /**
63
+ * Removes indexed element from collection.
64
+ *
65
+ * @param index Index.
66
+ */
67
+ remove(index) {
68
+ this.splice(index, 1);
69
+ if (index === this.selectedIndex) {
70
+ if (this.length) {
71
+ this.selectedIndex = 0;
72
+ }
73
+ else {
74
+ this.selectedIndex = -1;
75
+ }
76
+ }
77
+ }
78
+ }
79
+ exports.default = HTMLOptionsCollection;
80
+ //# sourceMappingURL=HTMLOptionsCollection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HTMLOptionsCollection.js","sourceRoot":"","sources":["../../../src/nodes/html-option-element/HTMLOptionsCollection.ts"],"names":[],"mappings":";;;;;AAAA,gFAAwD;AACxD,+EAAuD;AAKvD;;;;;GAKG;AACH,MAAqB,qBACpB,SAAQ,wBAAc;IAKtB;;;;OAIG;IACH,IAAW,aAAa;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,IAAW,aAAa,CAAC,aAAqB;QAC7C,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;IACrC,CAAC;IAED;;;;OAIG;IACI,IAAI,CAAC,KAAa;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACI,GAAG,CACT,OAAgD,EAChD,MAAyD;QAEzD,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,CAAC,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO;SACP;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE;YAClC,IAAI,MAAM,GAAG,CAAC,EAAE;gBACf,OAAO;aACP;YAED,IAAI,CAAC,MAAM,CAAS,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YACxC,OAAO;SACP;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC;QAC5D,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;YACf,MAAM,IAAI,sBAAY,CACrB,8HAA8H,CAC9H,CAAC;SACF;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,KAAa;QAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACtB,IAAI,KAAK,KAAK,IAAI,CAAC,aAAa,EAAE;YACjC,IAAI,IAAI,CAAC,MAAM,EAAE;gBAChB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;aACvB;iBAAM;gBACN,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;aACxB;SACD;IACF,CAAC;CACD;AAjFD,wCAiFC"}
@@ -0,0 +1,16 @@
1
+ import IHTMLElement from '../html-element/IHTMLElement';
2
+ import IHTMLFormElement from '../html-form-element/IHTMLFormElement';
3
+ /**
4
+ * HTML Option Element.
5
+ *
6
+ * Reference:
7
+ * https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionElement.
8
+ */
9
+ export default interface IHTMLOptionElement extends IHTMLElement {
10
+ readonly form: IHTMLFormElement;
11
+ readonly index: number;
12
+ selected: boolean;
13
+ value: string;
14
+ text: string;
15
+ disabled: boolean;
16
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IHTMLOptionElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IHTMLOptionElement.js","sourceRoot":"","sources":["../../../src/nodes/html-option-element/IHTMLOptionElement.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import IHTMLCollection from '../element/IHTMLCollection';
2
+ import IHTMLOptGroupElement from '../html-opt-group-element/IHTMLOptGroupElement';
3
+ import IHTMLOptionElement from './IHTMLOptionElement';
4
+ /**
5
+ * HTML Options Collection.
6
+ *
7
+ * Reference:
8
+ * https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionsCollection.
9
+ */
10
+ export default interface IHTMLOptionsCollection extends IHTMLCollection<IHTMLOptionElement | IHTMLOptGroupElement> {
11
+ selectedIndex: number;
12
+ length: number;
13
+ /**
14
+ * Adds new option to collection.
15
+ *
16
+ * @param element HTMLOptionElement or HTMLOptGroupElement to add.
17
+ * @param before HTMLOptionElement or index number.
18
+ */
19
+ add(element: IHTMLOptionElement | IHTMLOptGroupElement, before?: number | IHTMLOptionElement | IHTMLOptGroupElement): void;
20
+ /**
21
+ * Removes option element from the collection.
22
+ *
23
+ * @param index Index.
24
+ */
25
+ remove(index: number): void;
26
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IHTMLOptionsCollection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IHTMLOptionsCollection.js","sourceRoot":"","sources":["../../../src/nodes/html-option-element/IHTMLOptionsCollection.ts"],"names":[],"mappings":""}
@@ -0,0 +1,128 @@
1
+ import HTMLElement from '../html-element/HTMLElement';
2
+ import IHTMLFormElement from '../html-form-element/IHTMLFormElement';
3
+ import ValidityState from '../validity-state/ValidityState';
4
+ import IHTMLLabelElement from '../html-label-element/IHTMLLabelElement';
5
+ import IHTMLOptionsCollection from '../html-option-element/IHTMLOptionsCollection';
6
+ import INodeList from '../node/INodeList';
7
+ import IHTMLSelectElement from './IHTMLSelectElement';
8
+ /**
9
+ * HTML Select Element.
10
+ *
11
+ * Reference:
12
+ * https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.
13
+ */
14
+ export default class HTMLSelectElement extends HTMLElement implements IHTMLSelectElement {
15
+ type: string;
16
+ labels: INodeList<IHTMLLabelElement>;
17
+ _value: any;
18
+ _selectedIndex: number;
19
+ _options: IHTMLOptionsCollection;
20
+ /**
21
+ * Returns name.
22
+ *
23
+ * @returns Name.
24
+ */
25
+ get name(): string;
26
+ /**
27
+ * Sets name.
28
+ *
29
+ * @param name Name.
30
+ */
31
+ set name(name: string);
32
+ /**
33
+ * Returns disabled.
34
+ *
35
+ * @returns Disabled.
36
+ */
37
+ get disabled(): boolean;
38
+ /**
39
+ * Sets disabled.
40
+ *
41
+ * @param disabled Disabled.
42
+ */
43
+ set disabled(disabled: boolean);
44
+ /**
45
+ * Returns multiple.
46
+ *
47
+ * @returns Multiple.
48
+ */
49
+ get multiple(): boolean;
50
+ /**
51
+ * Sets multiple.
52
+ *
53
+ * @param multiple Multiple.
54
+ */
55
+ set multiple(multiple: boolean);
56
+ /**
57
+ * Returns autofocus.
58
+ *
59
+ * @returns Autofocus.
60
+ */
61
+ get autofocus(): boolean;
62
+ /**
63
+ * Sets autofocus.
64
+ *
65
+ * @param autofocus Autofocus.
66
+ */
67
+ set autofocus(autofocus: boolean);
68
+ /**
69
+ * Returns required.
70
+ *
71
+ * @returns Required.
72
+ */
73
+ get required(): boolean;
74
+ /**
75
+ * Sets required.
76
+ *
77
+ * @param required Required.
78
+ */
79
+ set required(required: boolean);
80
+ /**
81
+ * Returns value.
82
+ *
83
+ * @returns Value.
84
+ */
85
+ get value(): string;
86
+ /**
87
+ * Sets value.
88
+ *
89
+ * @param value Value.
90
+ */
91
+ set value(value: string);
92
+ /**
93
+ * Returns value.
94
+ *
95
+ * @returns Value.
96
+ */
97
+ get selectedIndex(): number;
98
+ /**
99
+ * Sets value.
100
+ *
101
+ * @param value Value.
102
+ */
103
+ set selectedIndex(value: number);
104
+ /**
105
+ * Returns the parent form element.
106
+ *
107
+ * @returns Form.
108
+ */
109
+ get form(): IHTMLFormElement;
110
+ /**
111
+ * Returns validity state.
112
+ *
113
+ * @returns Validity state.
114
+ */
115
+ get validity(): ValidityState;
116
+ /**
117
+ * Returns "true" if it will validate.
118
+ *
119
+ * @returns "true" if it will validate.
120
+ */
121
+ get willValidate(): boolean;
122
+ /**
123
+ * Returns options.
124
+ *
125
+ * @returns Options.
126
+ */
127
+ get options(): IHTMLOptionsCollection;
128
+ }
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const DOMException_1 = __importDefault(require("../../exception/DOMException"));
7
+ const DOMExceptionNameEnum_1 = __importDefault(require("../../exception/DOMExceptionNameEnum"));
8
+ const HTMLElement_1 = __importDefault(require("../html-element/HTMLElement"));
9
+ const ValidityState_1 = __importDefault(require("../validity-state/ValidityState"));
10
+ const HTMLOptionsCollection_1 = __importDefault(require("../html-option-element/HTMLOptionsCollection"));
11
+ const HTMLSelectElementValueSanitizer_1 = __importDefault(require("./HTMLSelectElementValueSanitizer"));
12
+ /**
13
+ * HTML Select Element.
14
+ *
15
+ * Reference:
16
+ * https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.
17
+ */
18
+ class HTMLSelectElement extends HTMLElement_1.default {
19
+ constructor() {
20
+ super(...arguments);
21
+ this._value = null;
22
+ this._selectedIndex = -1;
23
+ this._options = null;
24
+ }
25
+ /**
26
+ * Returns name.
27
+ *
28
+ * @returns Name.
29
+ */
30
+ get name() {
31
+ return this.getAttributeNS(null, 'name') || '';
32
+ }
33
+ /**
34
+ * Sets name.
35
+ *
36
+ * @param name Name.
37
+ */
38
+ set name(name) {
39
+ this.setAttributeNS(null, 'name', name);
40
+ }
41
+ /**
42
+ * Returns disabled.
43
+ *
44
+ * @returns Disabled.
45
+ */
46
+ get disabled() {
47
+ return this.getAttributeNS(null, 'disabled') !== null;
48
+ }
49
+ /**
50
+ * Sets disabled.
51
+ *
52
+ * @param disabled Disabled.
53
+ */
54
+ set disabled(disabled) {
55
+ if (!disabled) {
56
+ this.removeAttributeNS(null, 'disabled');
57
+ }
58
+ else {
59
+ this.setAttributeNS(null, 'disabled', '');
60
+ }
61
+ }
62
+ /**
63
+ * Returns multiple.
64
+ *
65
+ * @returns Multiple.
66
+ */
67
+ get multiple() {
68
+ return this.getAttributeNS(null, 'multiple') !== null;
69
+ }
70
+ /**
71
+ * Sets multiple.
72
+ *
73
+ * @param multiple Multiple.
74
+ */
75
+ set multiple(multiple) {
76
+ if (!multiple) {
77
+ this.removeAttributeNS(null, 'multiple');
78
+ }
79
+ else {
80
+ this.setAttributeNS(null, 'multiple', '');
81
+ }
82
+ }
83
+ /**
84
+ * Returns autofocus.
85
+ *
86
+ * @returns Autofocus.
87
+ */
88
+ get autofocus() {
89
+ return this.getAttributeNS(null, 'autofocus') !== null;
90
+ }
91
+ /**
92
+ * Sets autofocus.
93
+ *
94
+ * @param autofocus Autofocus.
95
+ */
96
+ set autofocus(autofocus) {
97
+ if (!autofocus) {
98
+ this.removeAttributeNS(null, 'autofocus');
99
+ }
100
+ else {
101
+ this.setAttributeNS(null, 'autofocus', '');
102
+ }
103
+ }
104
+ /**
105
+ * Returns required.
106
+ *
107
+ * @returns Required.
108
+ */
109
+ get required() {
110
+ return this.getAttributeNS(null, 'required') !== null;
111
+ }
112
+ /**
113
+ * Sets required.
114
+ *
115
+ * @param required Required.
116
+ */
117
+ set required(required) {
118
+ if (!required) {
119
+ this.removeAttributeNS(null, 'required');
120
+ }
121
+ else {
122
+ this.setAttributeNS(null, 'required', '');
123
+ }
124
+ }
125
+ /**
126
+ * Returns value.
127
+ *
128
+ * @returns Value.
129
+ */
130
+ get value() {
131
+ return this._value;
132
+ }
133
+ /**
134
+ * Sets value.
135
+ *
136
+ * @param value Value.
137
+ */
138
+ set value(value) {
139
+ this._value = HTMLSelectElementValueSanitizer_1.default.sanitize(value);
140
+ const idx = this.options.findIndex((o) => o.nodeValue === value);
141
+ if (idx > -1) {
142
+ this._selectedIndex = idx;
143
+ }
144
+ }
145
+ /**
146
+ * Returns value.
147
+ *
148
+ * @returns Value.
149
+ */
150
+ get selectedIndex() {
151
+ return this._options ? this._options.selectedIndex : -1;
152
+ }
153
+ /**
154
+ * Sets value.
155
+ *
156
+ * @param value Value.
157
+ */
158
+ set selectedIndex(value) {
159
+ if (this.options.length - 1 > value || value < 0) {
160
+ throw new DOMException_1.default('Select elements selected index must be valid', DOMExceptionNameEnum_1.default.indexSizeError);
161
+ }
162
+ this._options.selectedIndex = value;
163
+ }
164
+ /**
165
+ * Returns the parent form element.
166
+ *
167
+ * @returns Form.
168
+ */
169
+ get form() {
170
+ let parent = this.parentNode;
171
+ while (parent && parent.tagName !== 'FORM') {
172
+ parent = parent.parentNode;
173
+ }
174
+ return parent;
175
+ }
176
+ /**
177
+ * Returns validity state.
178
+ *
179
+ * @returns Validity state.
180
+ */
181
+ get validity() {
182
+ return new ValidityState_1.default(this);
183
+ }
184
+ /**
185
+ * Returns "true" if it will validate.
186
+ *
187
+ * @returns "true" if it will validate.
188
+ */
189
+ get willValidate() {
190
+ return (this.type !== 'hidden' &&
191
+ this.type !== 'reset' &&
192
+ this.type !== 'button' &&
193
+ !this.disabled &&
194
+ !this['readOnly']);
195
+ }
196
+ /**
197
+ * Returns options.
198
+ *
199
+ * @returns Options.
200
+ */
201
+ get options() {
202
+ if (this._options === null) {
203
+ this._options = new HTMLOptionsCollection_1.default();
204
+ const childs = this.childNodes;
205
+ for (const child of childs) {
206
+ if (child.tagName === 'OPTION') {
207
+ this._options.add(child);
208
+ }
209
+ }
210
+ }
211
+ return this._options;
212
+ }
213
+ }
214
+ exports.default = HTMLSelectElement;
215
+ //# sourceMappingURL=HTMLSelectElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HTMLSelectElement.js","sourceRoot":"","sources":["../../../src/nodes/html-select-element/HTMLSelectElement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * HTML select element value sanitizer.
3
+ */
4
+ export default class HTMLSelectElementValueSanitizer {
5
+ /**
6
+ * Sanitizes a value.
7
+ *
8
+ * @param value Value.
9
+ */
10
+ static sanitize(value: string): string;
11
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const NEW_LINES_REGEXP = /[\n\r]/gm;
4
+ /**
5
+ * HTML select element value sanitizer.
6
+ */
7
+ class HTMLSelectElementValueSanitizer {
8
+ /**
9
+ * Sanitizes a value.
10
+ *
11
+ * @param value Value.
12
+ */
13
+ static sanitize(value) {
14
+ return value.replace(NEW_LINES_REGEXP, '');
15
+ }
16
+ }
17
+ exports.default = HTMLSelectElementValueSanitizer;
18
+ //# sourceMappingURL=HTMLSelectElementValueSanitizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HTMLSelectElementValueSanitizer.js","sourceRoot":"","sources":["../../../src/nodes/html-select-element/HTMLSelectElementValueSanitizer.ts"],"names":[],"mappings":";;AAAA,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAEpC;;GAEG;AACH,MAAqB,+BAA+B;IACnD;;;;OAIG;IACI,MAAM,CAAC,QAAQ,CAAC,KAAa;QACnC,OAAO,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAC5C,CAAC;CACD;AATD,kDASC"}
@@ -0,0 +1,26 @@
1
+ import IHTMLElement from '../html-element/IHTMLElement';
2
+ import IHTMLFormElement from '../html-form-element/IHTMLFormElement';
3
+ import IHTMLLabelElement from '../html-label-element/IHTMLLabelElement';
4
+ import INodeList from '../node/INodeList';
5
+ import IHTMLOptionsCollection from '../html-option-element/IHTMLOptionsCollection';
6
+ import ValidityState from '../validity-state/ValidityState';
7
+ /**
8
+ * HTML Select Element.
9
+ *
10
+ * Reference:
11
+ * https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.
12
+ */
13
+ export default interface IHTMLSelectElement extends IHTMLElement {
14
+ readonly form: IHTMLFormElement;
15
+ readonly labels: INodeList<IHTMLLabelElement>;
16
+ type: string;
17
+ autofocus: boolean;
18
+ disabled: boolean;
19
+ options: IHTMLOptionsCollection;
20
+ selectedIndex: number;
21
+ validity: ValidityState;
22
+ value: string;
23
+ willValidate: boolean;
24
+ name: string;
25
+ multiple: boolean;
26
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IHTMLSelectElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IHTMLSelectElement.js","sourceRoot":"","sources":["../../../src/nodes/html-select-element/IHTMLSelectElement.ts"],"names":[],"mappings":""}
@@ -1,4 +1,5 @@
1
- import HTMLInputElement from './HTMLInputElement';
1
+ import HTMLInputElement from '../html-input-element/HTMLInputElement';
2
+ import HTMLSelectElement from '../html-select-element/HTMLSelectElement';
2
3
  /**
3
4
  * Input validity state.
4
5
  *
@@ -17,7 +18,7 @@ export default class ValidityState {
17
18
  *
18
19
  * @param element Input element.
19
20
  */
20
- constructor(element: HTMLInputElement);
21
+ constructor(element: HTMLInputElement | HTMLSelectElement);
21
22
  /**
22
23
  * Returns validity.
23
24
  *
@@ -1,5 +1,9 @@
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 HTMLInputElement_1 = __importDefault(require("../html-input-element/HTMLInputElement"));
3
7
  /**
4
8
  * Input validity state.
5
9
  *
@@ -27,7 +31,10 @@ class ValidityState {
27
31
  * @returns "true" if valid.
28
32
  */
29
33
  get tooLong() {
30
- return this.element.maxLength && this.element.value.length > this.element.maxLength;
34
+ if (this.element instanceof HTMLInputElement_1.default) {
35
+ return this.element.maxLength && this.element.value.length > this.element.maxLength;
36
+ }
37
+ return false;
31
38
  }
32
39
  /**
33
40
  * Returns validity.
@@ -35,7 +42,10 @@ class ValidityState {
35
42
  * @returns "true" if valid.
36
43
  */
37
44
  get tooShort() {
38
- return this.element.minLength && this.element.value.length < this.element.minLength;
45
+ if (this.element instanceof HTMLInputElement_1.default) {
46
+ return this.element.minLength && this.element.value.length < this.element.minLength;
47
+ }
48
+ return false;
39
49
  }
40
50
  /**
41
51
  * Returns validity.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidityState.js","sourceRoot":"","sources":["../../../src/nodes/validity-state/ValidityState.ts"],"names":[],"mappings":";;;;;AAAA,8FAAsE;AAGtE;;;;GAIG;AACH,MAAqB,aAAa;IASjC;;;;OAIG;IACH,YAAY,OAA6C;QAblD,aAAQ,GAAG,KAAK,CAAC;QACjB,gBAAW,GAAG,KAAK,CAAC;QACpB,oBAAe,GAAG,KAAK,CAAC;QACxB,kBAAa,GAAG,KAAK,CAAC;QACtB,mBAAc,GAAG,KAAK,CAAC;QACvB,iBAAY,GAAG,KAAK,CAAC;QACpB,YAAO,GAAyC,IAAI,CAAC;QAQ5D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,IAAW,OAAO;QACjB,IAAI,IAAI,CAAC,OAAO,YAAY,0BAAgB,EAAE;YAC7C,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;SACpF;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,IAAW,QAAQ;QAClB,IAAI,IAAI,CAAC,OAAO,YAAY,0BAAgB,EAAE;YAC7C,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;SACpF;QAED,OAAO,KAAK,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,IAAW,YAAY;QACtB,OAAO,KAAK,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,IAAW,YAAY;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IACrD,CAAC;IAED;;;;OAIG;IACH,IAAW,KAAK;QACf,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACpC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE;gBACd,OAAO,KAAK,CAAC;aACb;SACD;QAED,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;IACpF,CAAC;CACD;AA3ED,gCA2EC"}
@@ -218,6 +218,8 @@ export default class Window extends EventTarget implements IWindow {
218
218
  readonly sessionStorage: Storage;
219
219
  readonly localStorage: Storage;
220
220
  readonly performance: PerfHooks.Performance;
221
+ atob: (data: unknown) => string;
222
+ btoa: (data: unknown) => string;
221
223
  ArrayBuffer: any;
222
224
  Boolean: any;
223
225
  Buffer: typeof globalThis.Buffer;