happy-dom 9.10.2 → 9.10.4
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 +12 -0
- package/lib/nodes/element/Element.d.ts.map +1 -1
- package/lib/nodes/element/Element.js +16 -0
- package/lib/nodes/element/Element.js.map +1 -1
- package/lib/nodes/element/IElement.d.ts +1 -0
- package/lib/nodes/element/IElement.d.ts.map +1 -1
- package/lib/nodes/html-input-element/HTMLInputElement.d.ts +6 -0
- package/lib/nodes/html-input-element/HTMLInputElement.d.ts.map +1 -1
- package/lib/nodes/html-input-element/HTMLInputElement.js +19 -11
- package/lib/nodes/html-input-element/HTMLInputElement.js.map +1 -1
- package/lib/query-selector/ISelectorPseudo.d.ts +5 -0
- package/lib/query-selector/ISelectorPseudo.d.ts.map +1 -0
- package/lib/query-selector/ISelectorPseudo.js +3 -0
- package/lib/query-selector/ISelectorPseudo.js.map +1 -0
- package/lib/query-selector/QuerySelector.d.ts.map +1 -1
- package/lib/query-selector/QuerySelector.js +5 -0
- package/lib/query-selector/QuerySelector.js.map +1 -1
- package/lib/query-selector/SelectorItem.d.ts +4 -9
- package/lib/query-selector/SelectorItem.d.ts.map +1 -1
- package/lib/query-selector/SelectorItem.js +84 -78
- package/lib/query-selector/SelectorItem.js.map +1 -1
- package/lib/query-selector/SelectorParser.d.ts.map +1 -1
- package/lib/query-selector/SelectorParser.js +37 -14
- package/lib/query-selector/SelectorParser.js.map +1 -1
- package/package.json +1 -1
- package/src/nodes/element/Element.ts +18 -0
- package/src/nodes/element/IElement.ts +1 -0
- package/src/nodes/html-input-element/HTMLInputElement.ts +22 -13
- package/src/query-selector/ISelectorPseudo.ts +4 -0
- package/src/query-selector/QuerySelector.ts +6 -0
- package/src/query-selector/SelectorItem.ts +99 -92
- package/src/query-selector/SelectorParser.ts +37 -14
@@ -15,22 +15,18 @@ class SelectorItem {
|
|
15
15
|
*
|
16
16
|
* @param [options] Options.
|
17
17
|
* @param [options.combinator] Combinator.
|
18
|
-
* @param [options.all] All.
|
19
18
|
* @param [options.tagName] Tag name.
|
20
19
|
* @param [options.id] ID.
|
21
20
|
* @param [options.classNames] Class names.
|
22
21
|
* @param [options.attributes] Attributes.
|
23
|
-
* @param [options.
|
24
|
-
* @param [options.pseudoArguments] Pseudo arguments.
|
22
|
+
* @param [options.pseudos] Pseudos.
|
25
23
|
*/
|
26
24
|
constructor(options) {
|
27
|
-
this.all = options?.all || null;
|
28
25
|
this.tagName = options?.tagName || null;
|
29
26
|
this.id = options?.id || null;
|
30
27
|
this.classNames = options?.classNames || null;
|
31
28
|
this.attributes = options?.attributes || null;
|
32
|
-
this.
|
33
|
-
this.pseudoArguments = options?.pseudoArguments || null;
|
29
|
+
this.pseudos = options?.pseudos || null;
|
34
30
|
this.combinator = options?.combinator || SelectorCombinatorEnum_1.default.descendant;
|
35
31
|
}
|
36
32
|
/**
|
@@ -43,7 +39,7 @@ class SelectorItem {
|
|
43
39
|
let priorityWeight = 0;
|
44
40
|
// Tag name match
|
45
41
|
if (this.tagName) {
|
46
|
-
if (this.tagName !== element.tagName) {
|
42
|
+
if (this.tagName !== '*' && this.tagName !== element.tagName) {
|
47
43
|
return null;
|
48
44
|
}
|
49
45
|
priorityWeight += 1;
|
@@ -72,7 +68,7 @@ class SelectorItem {
|
|
72
68
|
priorityWeight += result.priorityWeight;
|
73
69
|
}
|
74
70
|
// Pseudo match
|
75
|
-
if (this.
|
71
|
+
if (this.pseudos && !this.matchPsuedo(element)) {
|
76
72
|
return null;
|
77
73
|
}
|
78
74
|
return { priorityWeight };
|
@@ -85,87 +81,93 @@ class SelectorItem {
|
|
85
81
|
*/
|
86
82
|
matchPsuedo(element) {
|
87
83
|
const parent = element.parentNode;
|
88
|
-
|
89
|
-
|
90
|
-
case 'not':
|
91
|
-
case 'nth-child':
|
92
|
-
case 'nth-of-type':
|
93
|
-
case 'nth-last-child':
|
94
|
-
case 'nth-last-of-type':
|
95
|
-
if (!this.pseudoArguments) {
|
96
|
-
throw new DOMException_1.default(`The selector "${this.getSelectorString()}" is not valid.`);
|
97
|
-
}
|
98
|
-
break;
|
84
|
+
if (!this.pseudos) {
|
85
|
+
return true;
|
99
86
|
}
|
100
|
-
|
101
|
-
|
102
|
-
switch (
|
87
|
+
for (const psuedo of this.pseudos) {
|
88
|
+
// Validation
|
89
|
+
switch (psuedo.name) {
|
90
|
+
case 'not':
|
91
|
+
case 'nth-child':
|
92
|
+
case 'nth-of-type':
|
93
|
+
case 'nth-last-child':
|
94
|
+
case 'nth-last-of-type':
|
95
|
+
if (!psuedo.arguments) {
|
96
|
+
throw new DOMException_1.default(`The selector "${this.getSelectorString()}" is not valid.`);
|
97
|
+
}
|
98
|
+
break;
|
99
|
+
}
|
100
|
+
// Check if parent exists
|
101
|
+
if (!parent) {
|
102
|
+
switch (psuedo.name) {
|
103
|
+
case 'first-child':
|
104
|
+
case 'last-child':
|
105
|
+
case 'only-child':
|
106
|
+
case 'first-of-type':
|
107
|
+
case 'last-of-type':
|
108
|
+
case 'only-of-type':
|
109
|
+
case 'nth-child':
|
110
|
+
case 'nth-of-type':
|
111
|
+
case 'nth-last-child':
|
112
|
+
case 'nth-last-of-type':
|
113
|
+
return false;
|
114
|
+
}
|
115
|
+
}
|
116
|
+
switch (psuedo.name) {
|
103
117
|
case 'first-child':
|
118
|
+
return parent.children[0] === element;
|
104
119
|
case 'last-child':
|
120
|
+
return parent.children.length && parent.children[parent.children.length - 1] === element;
|
105
121
|
case 'only-child':
|
122
|
+
return parent.children.length === 1 && parent.children[0] === element;
|
106
123
|
case 'first-of-type':
|
124
|
+
for (const child of parent.children) {
|
125
|
+
if (child.tagName === element.tagName) {
|
126
|
+
return child === element;
|
127
|
+
}
|
128
|
+
}
|
129
|
+
return false;
|
107
130
|
case 'last-of-type':
|
131
|
+
for (let i = parent.children.length - 1; i >= 0; i--) {
|
132
|
+
const child = parent.children[i];
|
133
|
+
if (child.tagName === element.tagName) {
|
134
|
+
return child === element;
|
135
|
+
}
|
136
|
+
}
|
137
|
+
return false;
|
108
138
|
case 'only-of-type':
|
139
|
+
let isFound = false;
|
140
|
+
for (const child of parent.children) {
|
141
|
+
if (child.tagName === element.tagName) {
|
142
|
+
if (isFound || child !== element) {
|
143
|
+
return false;
|
144
|
+
}
|
145
|
+
isFound = true;
|
146
|
+
}
|
147
|
+
}
|
148
|
+
return isFound;
|
149
|
+
case 'checked':
|
150
|
+
return element.tagName === 'INPUT' && element.checked;
|
151
|
+
case 'empty':
|
152
|
+
return !element.children.length;
|
153
|
+
case 'root':
|
154
|
+
return element.tagName === 'HTML';
|
155
|
+
case 'not':
|
156
|
+
return !SelectorParser_1.default.getSelectorItem(psuedo.arguments).match(element);
|
109
157
|
case 'nth-child':
|
158
|
+
return this.matchNthChild(element, parent.children, psuedo.arguments);
|
110
159
|
case 'nth-of-type':
|
160
|
+
if (!element.parentNode) {
|
161
|
+
return false;
|
162
|
+
}
|
163
|
+
return this.matchNthChild(element, parent.children.filter((child) => child.tagName === element.tagName), psuedo.arguments);
|
111
164
|
case 'nth-last-child':
|
165
|
+
return this.matchNthChild(element, parent.children.reverse(), psuedo.arguments);
|
112
166
|
case 'nth-last-of-type':
|
113
|
-
return
|
167
|
+
return this.matchNthChild(element, parent.children.filter((child) => child.tagName === element.tagName).reverse(), psuedo.arguments);
|
114
168
|
}
|
115
169
|
}
|
116
|
-
|
117
|
-
case 'first-child':
|
118
|
-
return parent.children[0] === element;
|
119
|
-
case 'last-child':
|
120
|
-
return parent.children.length && parent.children[parent.children.length - 1] === element;
|
121
|
-
case 'only-child':
|
122
|
-
return parent.children.length === 1 && parent.children[0] === element;
|
123
|
-
case 'first-of-type':
|
124
|
-
for (const child of parent.children) {
|
125
|
-
if (child.tagName === element.tagName) {
|
126
|
-
return child === element;
|
127
|
-
}
|
128
|
-
}
|
129
|
-
return false;
|
130
|
-
case 'last-of-type':
|
131
|
-
for (let i = parent.children.length - 1; i >= 0; i--) {
|
132
|
-
const child = parent.children[i];
|
133
|
-
if (child.tagName === element.tagName) {
|
134
|
-
return child === element;
|
135
|
-
}
|
136
|
-
}
|
137
|
-
return false;
|
138
|
-
case 'only-of-type':
|
139
|
-
let isFound = false;
|
140
|
-
for (const child of parent.children) {
|
141
|
-
if (child.tagName === element.tagName) {
|
142
|
-
if (isFound || child !== element) {
|
143
|
-
return false;
|
144
|
-
}
|
145
|
-
isFound = true;
|
146
|
-
}
|
147
|
-
}
|
148
|
-
return isFound;
|
149
|
-
case 'checked':
|
150
|
-
return element.tagName === 'INPUT' && element.checked;
|
151
|
-
case 'empty':
|
152
|
-
return !element.children.length;
|
153
|
-
case 'root':
|
154
|
-
return element.tagName === 'HTML';
|
155
|
-
case 'not':
|
156
|
-
return !SelectorParser_1.default.getSelectorItem(this.pseudoArguments).match(element);
|
157
|
-
case 'nth-child':
|
158
|
-
return this.matchNthChild(element, parent.children, this.pseudoArguments);
|
159
|
-
case 'nth-of-type':
|
160
|
-
if (!element.parentNode) {
|
161
|
-
return false;
|
162
|
-
}
|
163
|
-
return this.matchNthChild(element, parent.children.filter((child) => child.tagName === element.tagName), this.pseudoArguments);
|
164
|
-
case 'nth-last-child':
|
165
|
-
return this.matchNthChild(element, parent.children.reverse(), this.pseudoArguments);
|
166
|
-
case 'nth-last-of-type':
|
167
|
-
return this.matchNthChild(element, parent.children.filter((child) => child.tagName === element.tagName).reverse(), this.pseudoArguments);
|
168
|
-
}
|
170
|
+
return true;
|
169
171
|
}
|
170
172
|
/**
|
171
173
|
* Matches a nth-child selector.
|
@@ -294,11 +296,15 @@ class SelectorItem {
|
|
294
296
|
* @returns Selector string.
|
295
297
|
*/
|
296
298
|
getSelectorString() {
|
297
|
-
return `${this.
|
299
|
+
return `${this.tagName || ''}${this.id ? `#${this.id}` : ''}${this.classNames ? `.${this.classNames.join('.')}` : ''}${this.attributes
|
298
300
|
? this.attributes
|
299
301
|
.map((attribute) => `[${attribute.name}${attribute.value ? `${attribute.operator || ''}="${attribute.value}"` : ''}]`)
|
300
302
|
.join('')
|
301
|
-
: ''}${this.
|
303
|
+
: ''}${this.pseudos
|
304
|
+
? this.pseudos
|
305
|
+
.map((pseudo) => `:${pseudo.name}${pseudo.arguments ? `(${pseudo.arguments})` : ''}`)
|
306
|
+
.join('')
|
307
|
+
: ''}`;
|
302
308
|
}
|
303
309
|
}
|
304
310
|
exports.default = SelectorItem;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SelectorItem.js","sourceRoot":"","sources":["../../src/query-selector/SelectorItem.ts"],"names":[],"mappings":";;;;;AAAA,6EAAqD;AAIrD,sFAA8D;AAE9D,sEAA8C;
|
1
|
+
{"version":3,"file":"SelectorItem.js","sourceRoot":"","sources":["../../src/query-selector/SelectorItem.ts"],"names":[],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SelectorParser.d.ts","sourceRoot":"","sources":["../../src/query-selector/SelectorParser.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gBAAgB,CAAC;
|
1
|
+
{"version":3,"file":"SelectorParser.d.ts","sourceRoot":"","sources":["../../src/query-selector/SelectorParser.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAwC1C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,cAAc;IAClC;;;;;OAKG;WACW,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY;IAI7D;;;;;OAKG;WACW,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;CA8G7E"}
|
@@ -14,14 +14,18 @@ const DOMException_1 = __importDefault(require("../exception/DOMException"));
|
|
14
14
|
* Group 3: ID (e.g. "#id")
|
15
15
|
* Group 4: Class (e.g. ".class")
|
16
16
|
* Group 5: Attribute name when no value (e.g. "attr1")
|
17
|
-
* Group 6: Attribute name when there is a value (e.g. "attr1")
|
18
|
-
* Group 7: Attribute operator (e.g. "~")
|
19
|
-
* Group 8: Attribute value (e.g. "value1")
|
20
|
-
* Group 9:
|
21
|
-
* Group 10:
|
22
|
-
* Group 11:
|
17
|
+
* Group 6: Attribute name when there is a value using apostrophe (e.g. "attr1")
|
18
|
+
* Group 7: Attribute operator when using apostrophe (e.g. "~")
|
19
|
+
* Group 8: Attribute value when using apostrophe (e.g. "value1")
|
20
|
+
* Group 9: Attribute name when threre is a value not using apostrophe (e.g. "attr1")
|
21
|
+
* Group 10: Attribute operator when not using apostrophe (e.g. "~")
|
22
|
+
* Group 11: Attribute value when notusing apostrophe (e.g. "value1")
|
23
|
+
* Group 12: Pseudo name when arguments (e.g. "nth-child")
|
24
|
+
* Group 13: Arguments of pseudo (e.g. "2n + 1")
|
25
|
+
* Group 14: Pseudo name when no arguments (e.g. "empty")
|
26
|
+
* Group 15: Combinator.
|
23
27
|
*/
|
24
|
-
const SELECTOR_REGEXP = /(\*)|([a-zA-Z0-9-]+)|#((?:[a-zA-Z0-9-_]|\\.)+)|\.((?:[a-zA-Z0-9-_]|\\.)+)|\[([a-zA-Z0-9-_]+)\]|\[([a-zA-Z0-9-_]+)([~|^$*]{0,1}) *= *["']{
|
28
|
+
const SELECTOR_REGEXP = /(\*)|([a-zA-Z0-9-]+)|#((?:[a-zA-Z0-9-_]|\\.)+)|\.((?:[a-zA-Z0-9-_]|\\.)+)|\[([a-zA-Z0-9-_]+)\]|\[([a-zA-Z0-9-_]+)([~|^$*]{0,1}) *= *["']{1}([^"']*)["']{1}\]|\[([a-zA-Z0-9-_]+)([~|^$*]{0,1}) *= *([^\]]*)\]|:([a-zA-Z-]+) *\(([^)]+)\)|:([a-zA-Z-]+)|([ ,+>]*)/g;
|
25
29
|
/**
|
26
30
|
* Escaped Character RegExp.
|
27
31
|
*/
|
@@ -54,6 +58,9 @@ class SelectorParser {
|
|
54
58
|
* @returns Selector groups.
|
55
59
|
*/
|
56
60
|
static getSelectorGroups(selector) {
|
61
|
+
if (selector === '*') {
|
62
|
+
return [[new SelectorItem_1.default({ tagName: '*' })]];
|
63
|
+
}
|
57
64
|
const simpleMatch = selector.match(SIMPLE_SELECTOR_REGEXP);
|
58
65
|
if (simpleMatch) {
|
59
66
|
if (simpleMatch[1]) {
|
@@ -78,7 +85,7 @@ class SelectorParser {
|
|
78
85
|
if (match[0]) {
|
79
86
|
isValid = true;
|
80
87
|
if (match[1]) {
|
81
|
-
currentSelectorItem.
|
88
|
+
currentSelectorItem.tagName = '*';
|
82
89
|
}
|
83
90
|
else if (match[2]) {
|
84
91
|
currentSelectorItem.tagName = match[2].toUpperCase();
|
@@ -106,14 +113,30 @@ class SelectorParser {
|
|
106
113
|
value: match[8]
|
107
114
|
});
|
108
115
|
}
|
109
|
-
else if (match[9]) {
|
110
|
-
currentSelectorItem.
|
116
|
+
else if (match[9] && match[11] !== undefined) {
|
117
|
+
currentSelectorItem.attributes = currentSelectorItem.attributes || [];
|
118
|
+
currentSelectorItem.attributes.push({
|
119
|
+
name: match[9].toLowerCase(),
|
120
|
+
operator: match[10] || null,
|
121
|
+
value: match[11]
|
122
|
+
});
|
111
123
|
}
|
112
|
-
else if (match[
|
113
|
-
currentSelectorItem.
|
124
|
+
else if (match[12] && match[13]) {
|
125
|
+
currentSelectorItem.pseudos = currentSelectorItem.pseudos || [];
|
126
|
+
currentSelectorItem.pseudos.push({
|
127
|
+
name: match[12].toLowerCase(),
|
128
|
+
arguments: match[13]
|
129
|
+
});
|
130
|
+
}
|
131
|
+
else if (match[14]) {
|
132
|
+
currentSelectorItem.pseudos = currentSelectorItem.pseudos || [];
|
133
|
+
currentSelectorItem.pseudos.push({
|
134
|
+
name: match[14].toLowerCase(),
|
135
|
+
arguments: null
|
136
|
+
});
|
114
137
|
}
|
115
|
-
else if (match[
|
116
|
-
switch (match[
|
138
|
+
else if (match[15]) {
|
139
|
+
switch (match[15].trim()) {
|
117
140
|
case ',':
|
118
141
|
currentSelectorItem = new SelectorItem_1.default({
|
119
142
|
combinator: SelectorCombinatorEnum_1.default.descendant
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SelectorParser.js","sourceRoot":"","sources":["../../src/query-selector/SelectorParser.ts"],"names":[],"mappings":";;;;;AAAA,kEAA0C;AAC1C,sFAA8D;AAC9D,6EAAqD;AAErD
|
1
|
+
{"version":3,"file":"SelectorParser.js","sourceRoot":"","sources":["../../src/query-selector/SelectorParser.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -160,6 +160,24 @@ export default class Element extends Node implements IElement {
|
|
160
160
|
return this.tagName ? this.tagName.toLowerCase() : 'unknown';
|
161
161
|
}
|
162
162
|
|
163
|
+
/**
|
164
|
+
* Returns role.
|
165
|
+
*
|
166
|
+
* @returns Role.
|
167
|
+
*/
|
168
|
+
public get role(): string {
|
169
|
+
return this.getAttribute('role') || '';
|
170
|
+
}
|
171
|
+
|
172
|
+
/**
|
173
|
+
* Sets role.
|
174
|
+
*
|
175
|
+
* @param role Role.
|
176
|
+
*/
|
177
|
+
public set role(role: string) {
|
178
|
+
this.setAttribute('role', role);
|
179
|
+
}
|
180
|
+
|
163
181
|
/**
|
164
182
|
* Previous element sibling.
|
165
183
|
*
|
@@ -570,18 +570,7 @@ export default class HTMLInputElement extends HTMLElement implements IHTMLInputE
|
|
570
570
|
* @param checked Checked.
|
571
571
|
*/
|
572
572
|
public set checked(checked: boolean) {
|
573
|
-
this.
|
574
|
-
|
575
|
-
if (checked && this.type === 'radio' && this.name) {
|
576
|
-
const root = <IHTMLElement>(<IHTMLFormElement>this._formNode || this.getRootNode());
|
577
|
-
const radioButtons = root.querySelectorAll(`input[type="radio"][name="${this.name}"]`);
|
578
|
-
|
579
|
-
for (const radioButton of radioButtons) {
|
580
|
-
if (radioButton !== this) {
|
581
|
-
radioButton['_checked'] = false;
|
582
|
-
}
|
583
|
-
}
|
584
|
-
}
|
573
|
+
this._setChecked(checked);
|
585
574
|
}
|
586
575
|
|
587
576
|
/**
|
@@ -1051,7 +1040,7 @@ export default class HTMLInputElement extends HTMLElement implements IHTMLInputE
|
|
1051
1040
|
this.isConnected &&
|
1052
1041
|
(this.type === 'checkbox' || this.type === 'radio')
|
1053
1042
|
) {
|
1054
|
-
this.
|
1043
|
+
this._setChecked(this.type === 'checkbox' ? !this.checked : true);
|
1055
1044
|
}
|
1056
1045
|
|
1057
1046
|
const returnValue = super.dispatchEvent(event);
|
@@ -1148,4 +1137,24 @@ export default class HTMLInputElement extends HTMLElement implements IHTMLInputE
|
|
1148
1137
|
this.type === 'password'
|
1149
1138
|
);
|
1150
1139
|
}
|
1140
|
+
|
1141
|
+
/**
|
1142
|
+
* Sets checked value.
|
1143
|
+
*
|
1144
|
+
* @param checked Checked.
|
1145
|
+
*/
|
1146
|
+
private _setChecked(checked: boolean): void {
|
1147
|
+
this._checked = checked;
|
1148
|
+
|
1149
|
+
if (checked && this.type === 'radio' && this.name) {
|
1150
|
+
const root = <IHTMLElement>(<IHTMLFormElement>this._formNode || this.getRootNode());
|
1151
|
+
const radioButtons = root.querySelectorAll(`input[type="radio"][name="${this.name}"]`);
|
1152
|
+
|
1153
|
+
for (const radioButton of radioButtons) {
|
1154
|
+
if (radioButton !== this) {
|
1155
|
+
radioButton['_checked'] = false;
|
1156
|
+
}
|
1157
|
+
}
|
1158
|
+
}
|
1159
|
+
}
|
1151
1160
|
}
|
@@ -97,6 +97,12 @@ export default class QuerySelector {
|
|
97
97
|
* @returns Result.
|
98
98
|
*/
|
99
99
|
public static match(element: IElement, selector: string): ISelectorMatch | null {
|
100
|
+
if (selector === '*') {
|
101
|
+
return {
|
102
|
+
priorityWeight: 1
|
103
|
+
};
|
104
|
+
}
|
105
|
+
|
100
106
|
for (const items of SelectorParser.getSelectorGroups(selector)) {
|
101
107
|
const result = this.matchSelector(element, element, items.reverse());
|
102
108
|
|