happy-dom 9.11.0 → 9.13.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.
- package/lib/query-selector/ISelectorPseudo.d.ts +3 -0
- package/lib/query-selector/ISelectorPseudo.d.ts.map +1 -1
- package/lib/query-selector/QuerySelector.d.ts.map +1 -1
- package/lib/query-selector/QuerySelector.js +22 -14
- package/lib/query-selector/QuerySelector.js.map +1 -1
- package/lib/query-selector/SelectorItem.d.ts +0 -9
- package/lib/query-selector/SelectorItem.d.ts.map +1 -1
- package/lib/query-selector/SelectorItem.js +21 -44
- package/lib/query-selector/SelectorItem.js.map +1 -1
- package/lib/query-selector/SelectorParser.d.ts +18 -0
- package/lib/query-selector/SelectorParser.d.ts.map +1 -1
- package/lib/query-selector/SelectorParser.js +102 -8
- package/lib/query-selector/SelectorParser.js.map +1 -1
- package/package.json +1 -1
- package/src/query-selector/ISelectorPseudo.ts +4 -0
- package/src/query-selector/QuerySelector.ts +34 -18
- package/src/query-selector/SelectorItem.ts +21 -56
- package/src/query-selector/SelectorParser.ts +117 -8
@@ -1,5 +1,8 @@
|
|
1
|
+
import SelectorItem from './SelectorItem';
|
1
2
|
export default interface ISelectorPseudo {
|
2
3
|
name: string;
|
3
4
|
arguments: string | null;
|
5
|
+
selectorItem: SelectorItem | null;
|
6
|
+
nthFunction: ((n: number) => boolean) | null;
|
4
7
|
}
|
5
8
|
//# sourceMappingURL=ISelectorPseudo.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ISelectorPseudo.d.ts","sourceRoot":"","sources":["../../src/query-selector/ISelectorPseudo.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,WAAW,eAAe;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;
|
1
|
+
{"version":3,"file":"ISelectorPseudo.d.ts","sourceRoot":"","sources":["../../src/query-selector/ISelectorPseudo.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAE1C,MAAM,CAAC,OAAO,WAAW,eAAe;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,IAAI,CAAC;CAC7C"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"QuerySelector.d.ts","sourceRoot":"","sources":["../../src/query-selector/QuerySelector.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AACjD,OAAO,SAAS,MAAM,yBAAyB,CAAC;AAKhD,OAAO,SAAS,MAAM,6BAA6B,CAAC;AACpD,OAAO,iBAAiB,MAAM,8CAA8C,CAAC;AAE7E,OAAO,cAAc,MAAM,kBAAkB,CAAC;
|
1
|
+
{"version":3,"file":"QuerySelector.d.ts","sourceRoot":"","sources":["../../src/query-selector/QuerySelector.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AACjD,OAAO,SAAS,MAAM,yBAAyB,CAAC;AAKhD,OAAO,SAAS,MAAM,6BAA6B,CAAC;AACpD,OAAO,iBAAiB,MAAM,8CAA8C,CAAC;AAE7E,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAO9C;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,aAAa;IACjC;;;;;;OAMG;WACW,gBAAgB,CAC7B,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,iBAAiB,EAC9C,QAAQ,EAAE,MAAM,GACd,SAAS,CAAC,QAAQ,CAAC;IAqCtB;;;;;;OAMG;WACW,aAAa,CAC1B,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,iBAAiB,EAC9C,QAAQ,EAAE,MAAM,GACd,QAAQ;IAyBX;;;;;;OAMG;WACW,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAkB/E;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAgE5B;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,OAAO;IAwDtB;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;CAkDxB"}
|
@@ -21,22 +21,27 @@ class QuerySelector {
|
|
21
21
|
* @returns HTML elements.
|
22
22
|
*/
|
23
23
|
static querySelectorAll(node, selector) {
|
24
|
-
const nodeList = new NodeList_1.default();
|
25
|
-
const allMatches = {};
|
26
24
|
if (selector === '') {
|
27
25
|
throw new Error("Failed to execute 'querySelectorAll' on 'Element': The provided selector is empty.");
|
28
26
|
}
|
29
27
|
if (selector === null || selector === undefined) {
|
30
|
-
return
|
28
|
+
return new NodeList_1.default();
|
31
29
|
}
|
32
|
-
|
33
|
-
|
30
|
+
const groups = SelectorParser_1.default.getSelectorGroups(selector);
|
31
|
+
let matches = [];
|
32
|
+
for (const items of groups) {
|
33
|
+
matches = matches.concat(node.nodeType === NodeTypeEnum_1.default.elementNode
|
34
34
|
? this.findAll(node, [node], items)
|
35
|
-
: this.findAll(null, node.children, items);
|
36
|
-
|
35
|
+
: this.findAll(null, node.children, items));
|
36
|
+
}
|
37
|
+
const nodeList = new NodeList_1.default();
|
38
|
+
const matchesMap = {};
|
39
|
+
for (let i = 0, max = matches.length; i < max; i++) {
|
40
|
+
matchesMap[matches[i].documentPosition] = matches[i].element;
|
37
41
|
}
|
38
|
-
|
39
|
-
|
42
|
+
const keys = Object.keys(matchesMap).sort();
|
43
|
+
for (let i = 0, max = keys.length; i < max; i++) {
|
44
|
+
nodeList.push(matchesMap[keys[i]]);
|
40
45
|
}
|
41
46
|
return nodeList;
|
42
47
|
}
|
@@ -142,32 +147,35 @@ class QuerySelector {
|
|
142
147
|
static findAll(rootElement, children, selectorItems, documentPosition) {
|
143
148
|
const selectorItem = selectorItems[0];
|
144
149
|
const nextSelectorItem = selectorItems[1];
|
145
|
-
|
150
|
+
let matched = [];
|
146
151
|
for (let i = 0, max = children.length; i < max; i++) {
|
147
152
|
const child = children[i];
|
148
153
|
const position = (documentPosition ? documentPosition + '>' : '') + i;
|
149
154
|
if (selectorItem.match(child)) {
|
150
155
|
if (!nextSelectorItem) {
|
151
156
|
if (rootElement !== child) {
|
152
|
-
matched
|
157
|
+
matched.push({
|
158
|
+
documentPosition: position,
|
159
|
+
element: child
|
160
|
+
});
|
153
161
|
}
|
154
162
|
}
|
155
163
|
else {
|
156
164
|
switch (nextSelectorItem.combinator) {
|
157
165
|
case SelectorCombinatorEnum_1.default.adjacentSibling:
|
158
166
|
if (child.nextElementSibling) {
|
159
|
-
|
167
|
+
matched = matched.concat(this.findAll(rootElement, [child.nextElementSibling], selectorItems.slice(1), position));
|
160
168
|
}
|
161
169
|
break;
|
162
170
|
case SelectorCombinatorEnum_1.default.descendant:
|
163
171
|
case SelectorCombinatorEnum_1.default.child:
|
164
|
-
|
172
|
+
matched = matched.concat(this.findAll(rootElement, child.children, selectorItems.slice(1), position));
|
165
173
|
break;
|
166
174
|
}
|
167
175
|
}
|
168
176
|
}
|
169
177
|
if (selectorItem.combinator === SelectorCombinatorEnum_1.default.descendant && child.children.length) {
|
170
|
-
|
178
|
+
matched = matched.concat(this.findAll(rootElement, child.children, selectorItems, position));
|
171
179
|
}
|
172
180
|
}
|
173
181
|
return matched;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"QuerySelector.js","sourceRoot":"","sources":["../../src/query-selector/QuerySelector.ts"],"names":[],"mappings":";;;;;AAGA,sEAA8C;AAC9C,8EAAsD;AACtD,sFAA8D;AAG9D,sEAA8C;
|
1
|
+
{"version":3,"file":"QuerySelector.js","sourceRoot":"","sources":["../../src/query-selector/QuerySelector.ts"],"names":[],"mappings":"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"}
|
@@ -46,15 +46,6 @@ export default class SelectorItem {
|
|
46
46
|
* @returns Result.
|
47
47
|
*/
|
48
48
|
private matchPsuedo;
|
49
|
-
/**
|
50
|
-
* Matches a nth-child selector.
|
51
|
-
*
|
52
|
-
* @param element Element.
|
53
|
-
* @param parentChildren Parent children.
|
54
|
-
* @param placement Placement.
|
55
|
-
* @returns True if it is a match.
|
56
|
-
*/
|
57
|
-
private matchNthChild;
|
58
49
|
/**
|
59
50
|
* Matches attribute.
|
60
51
|
*
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SelectorItem.d.ts","sourceRoot":"","sources":["../../src/query-selector/SelectorItem.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AAGjD,OAAO,sBAAsB,MAAM,0BAA0B,CAAC;AAC9D,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;
|
1
|
+
{"version":3,"file":"SelectorItem.d.ts","sourceRoot":"","sources":["../../src/query-selector/SelectorItem.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AAGjD,OAAO,sBAAsB,MAAM,0BAA0B,CAAC;AAC9D,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAEhD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,YAAY;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC;IACxC,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IAClC,UAAU,EAAE,sBAAsB,CAAC;IAE1C;;;;;;;;;;OAUG;gBACS,OAAO,CAAC,EAAE;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,UAAU,CAAC,EAAE,kBAAkB,EAAE,CAAC;QAClC,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;QAC5B,UAAU,CAAC,EAAE,sBAAsB,CAAC;KACpC;IASD;;;;;OAKG;IACI,KAAK,CAAC,OAAO,EAAE,QAAQ,GAAG,cAAc,GAAG,IAAI;IA6CtD;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAgHnB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAiEvB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAkBlB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;CAsBzB"}
|
@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
6
|
const DOMException_1 = __importDefault(require("../exception/DOMException"));
|
7
7
|
const SelectorCombinatorEnum_1 = __importDefault(require("./SelectorCombinatorEnum"));
|
8
|
-
const SelectorParser_1 = __importDefault(require("./SelectorParser"));
|
9
8
|
/**
|
10
9
|
* Selector item.
|
11
10
|
*/
|
@@ -153,60 +152,38 @@ class SelectorItem {
|
|
153
152
|
case 'root':
|
154
153
|
return element.tagName === 'HTML';
|
155
154
|
case 'not':
|
156
|
-
return !
|
155
|
+
return !psuedo.selectorItem.match(element);
|
157
156
|
case 'nth-child':
|
158
|
-
|
157
|
+
const nthChildIndex = psuedo.selectorItem
|
158
|
+
? parent.children.filter((child) => psuedo.selectorItem.match(child)).indexOf(element)
|
159
|
+
: parent.children.indexOf(element);
|
160
|
+
return nthChildIndex !== -1 && psuedo.nthFunction(nthChildIndex + 1);
|
159
161
|
case 'nth-of-type':
|
160
162
|
if (!element.parentNode) {
|
161
163
|
return false;
|
162
164
|
}
|
163
|
-
|
165
|
+
const nthOfTypeIndex = parent.children
|
166
|
+
.filter((child) => child.tagName === element.tagName)
|
167
|
+
.indexOf(element);
|
168
|
+
return nthOfTypeIndex !== -1 && psuedo.nthFunction(nthOfTypeIndex + 1);
|
164
169
|
case 'nth-last-child':
|
165
|
-
|
170
|
+
const nthLastChildIndex = psuedo.selectorItem
|
171
|
+
? parent.children
|
172
|
+
.filter((child) => psuedo.selectorItem.match(child))
|
173
|
+
.reverse()
|
174
|
+
.indexOf(element)
|
175
|
+
: parent.children.reverse().indexOf(element);
|
176
|
+
return nthLastChildIndex !== -1 && psuedo.nthFunction(nthLastChildIndex + 1);
|
166
177
|
case 'nth-last-of-type':
|
167
|
-
|
178
|
+
const nthLastOfTypeIndex = parent.children
|
179
|
+
.filter((child) => child.tagName === element.tagName)
|
180
|
+
.reverse()
|
181
|
+
.indexOf(element);
|
182
|
+
return nthLastOfTypeIndex !== -1 && psuedo.nthFunction(nthLastOfTypeIndex + 1);
|
168
183
|
}
|
169
184
|
}
|
170
185
|
return true;
|
171
186
|
}
|
172
|
-
/**
|
173
|
-
* Matches a nth-child selector.
|
174
|
-
*
|
175
|
-
* @param element Element.
|
176
|
-
* @param parentChildren Parent children.
|
177
|
-
* @param placement Placement.
|
178
|
-
* @returns True if it is a match.
|
179
|
-
*/
|
180
|
-
matchNthChild(element, parentChildren, placement) {
|
181
|
-
if (placement === 'odd') {
|
182
|
-
const index = parentChildren.indexOf(element);
|
183
|
-
return index !== -1 && (index + 1) % 2 !== 0;
|
184
|
-
}
|
185
|
-
else if (placement === 'even') {
|
186
|
-
const index = parentChildren.indexOf(element);
|
187
|
-
return index !== -1 && (index + 1) % 2 === 0;
|
188
|
-
}
|
189
|
-
else if (placement.includes('n')) {
|
190
|
-
const [a, b] = placement.replace(/ /g, '').split('n');
|
191
|
-
const childIndex = parentChildren.indexOf(element);
|
192
|
-
const aNumber = a !== '' ? Number(a) : 1;
|
193
|
-
const bNumber = b !== undefined ? Number(b) : 0;
|
194
|
-
if (isNaN(aNumber) || isNaN(bNumber)) {
|
195
|
-
throw new DOMException_1.default(`The selector "${this.getSelectorString()}" is not valid.`);
|
196
|
-
}
|
197
|
-
for (let i = 0, max = parentChildren.length; i <= max; i += aNumber) {
|
198
|
-
if (childIndex === i + bNumber - 1) {
|
199
|
-
return true;
|
200
|
-
}
|
201
|
-
}
|
202
|
-
return false;
|
203
|
-
}
|
204
|
-
const number = Number(placement);
|
205
|
-
if (isNaN(number)) {
|
206
|
-
throw new DOMException_1.default(`The selector "${this.getSelectorString()}" is not valid.`);
|
207
|
-
}
|
208
|
-
return parentChildren[number - 1] === element;
|
209
|
-
}
|
210
187
|
/**
|
211
188
|
* Matches attribute.
|
212
189
|
*
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SelectorItem.js","sourceRoot":"","sources":["../../src/query-selector/SelectorItem.ts"],"names":[],"mappings":";;;;;AAAA,6EAAqD;AAIrD,sFAA8D;
|
1
|
+
{"version":3,"file":"SelectorItem.js","sourceRoot":"","sources":["../../src/query-selector/SelectorItem.ts"],"names":[],"mappings":"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"}
|
@@ -17,5 +17,23 @@ export default class SelectorParser {
|
|
17
17
|
* @returns Selector groups.
|
18
18
|
*/
|
19
19
|
static getSelectorGroups(selector: string): Array<Array<SelectorItem>>;
|
20
|
+
/**
|
21
|
+
* Returns pseudo.
|
22
|
+
*
|
23
|
+
* @param name Pseudo name.
|
24
|
+
* @param args Pseudo arguments.
|
25
|
+
* @returns Pseudo.
|
26
|
+
*/
|
27
|
+
private static getPseudo;
|
28
|
+
/**
|
29
|
+
* Returns pseudo nth function.
|
30
|
+
*
|
31
|
+
* Based on:
|
32
|
+
* https://github.com/dperini/nwsapi/blob/master/src/nwsapi.js
|
33
|
+
*
|
34
|
+
* @param args Pseudo arguments.
|
35
|
+
* @returns Pseudo nth function.
|
36
|
+
*/
|
37
|
+
private static getPseudoNthFunction;
|
20
38
|
}
|
21
39
|
//# sourceMappingURL=SelectorParser.d.ts.map
|
@@ -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;AAuD1C;;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;IAyG7E;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;IAwCxB;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;CA2CnC"}
|
@@ -30,6 +30,18 @@ const SELECTOR_REGEXP = /(\*)|([a-zA-Z0-9-]+)|#((?:[a-zA-Z0-9-_]|\\.)+)|\.((?:[a
|
|
30
30
|
* Escaped Character RegExp.
|
31
31
|
*/
|
32
32
|
const CLASS_ESCAPED_CHARACTER_REGEXP = /\\/g;
|
33
|
+
/**
|
34
|
+
* Nth Function.
|
35
|
+
*/
|
36
|
+
const NTH_FUNCTION = {
|
37
|
+
odd: (n) => (n + 1) % 2 === 0,
|
38
|
+
even: (n) => (n + 1) % 2 !== 0,
|
39
|
+
alwaysFalse: () => false
|
40
|
+
};
|
41
|
+
/**
|
42
|
+
* Space RegExp.
|
43
|
+
*/
|
44
|
+
const SPACE_REGEXP = / /g;
|
33
45
|
/**
|
34
46
|
* Simple Selector RegExp.
|
35
47
|
*
|
@@ -123,17 +135,11 @@ class SelectorParser {
|
|
123
135
|
}
|
124
136
|
else if (match[12] && match[13]) {
|
125
137
|
currentSelectorItem.pseudos = currentSelectorItem.pseudos || [];
|
126
|
-
currentSelectorItem.pseudos.push(
|
127
|
-
name: match[12].toLowerCase(),
|
128
|
-
arguments: match[13]
|
129
|
-
});
|
138
|
+
currentSelectorItem.pseudos.push(this.getPseudo(match[12], match[13]));
|
130
139
|
}
|
131
140
|
else if (match[14]) {
|
132
141
|
currentSelectorItem.pseudos = currentSelectorItem.pseudos || [];
|
133
|
-
currentSelectorItem.pseudos.push(
|
134
|
-
name: match[14].toLowerCase(),
|
135
|
-
arguments: null
|
136
|
-
});
|
142
|
+
currentSelectorItem.pseudos.push(this.getPseudo(match[14]));
|
137
143
|
}
|
138
144
|
else if (match[15]) {
|
139
145
|
switch (match[15].trim()) {
|
@@ -172,6 +178,94 @@ class SelectorParser {
|
|
172
178
|
}
|
173
179
|
return groups;
|
174
180
|
}
|
181
|
+
/**
|
182
|
+
* Returns pseudo.
|
183
|
+
*
|
184
|
+
* @param name Pseudo name.
|
185
|
+
* @param args Pseudo arguments.
|
186
|
+
* @returns Pseudo.
|
187
|
+
*/
|
188
|
+
static getPseudo(name, args) {
|
189
|
+
const lowerName = name.toLowerCase();
|
190
|
+
if (!args) {
|
191
|
+
return { name: lowerName, arguments: null, selectorItem: null, nthFunction: null };
|
192
|
+
}
|
193
|
+
switch (lowerName) {
|
194
|
+
case 'nth-last-child':
|
195
|
+
case 'nth-child':
|
196
|
+
const nthOfIndex = args.indexOf(' of ');
|
197
|
+
const nthFunction = nthOfIndex !== -1 ? args.substring(0, nthOfIndex) : args;
|
198
|
+
const selectorItem = nthOfIndex !== -1 ? this.getSelectorItem(args.substring(nthOfIndex + 4).trim()) : null;
|
199
|
+
return {
|
200
|
+
name: lowerName,
|
201
|
+
arguments: args,
|
202
|
+
selectorItem,
|
203
|
+
nthFunction: this.getPseudoNthFunction(nthFunction)
|
204
|
+
};
|
205
|
+
case 'nth-of-type':
|
206
|
+
case 'nth-last-of-type':
|
207
|
+
return {
|
208
|
+
name: lowerName,
|
209
|
+
arguments: args,
|
210
|
+
selectorItem: null,
|
211
|
+
nthFunction: this.getPseudoNthFunction(args)
|
212
|
+
};
|
213
|
+
case 'not':
|
214
|
+
return {
|
215
|
+
name: lowerName,
|
216
|
+
arguments: args,
|
217
|
+
selectorItem: this.getSelectorItem(args),
|
218
|
+
nthFunction: null
|
219
|
+
};
|
220
|
+
default:
|
221
|
+
return { name: lowerName, arguments: args, selectorItem: null, nthFunction: null };
|
222
|
+
}
|
223
|
+
}
|
224
|
+
/**
|
225
|
+
* Returns pseudo nth function.
|
226
|
+
*
|
227
|
+
* Based on:
|
228
|
+
* https://github.com/dperini/nwsapi/blob/master/src/nwsapi.js
|
229
|
+
*
|
230
|
+
* @param args Pseudo arguments.
|
231
|
+
* @returns Pseudo nth function.
|
232
|
+
*/
|
233
|
+
static getPseudoNthFunction(args) {
|
234
|
+
if (args === 'odd') {
|
235
|
+
return NTH_FUNCTION.odd;
|
236
|
+
}
|
237
|
+
else if (args === 'even') {
|
238
|
+
return NTH_FUNCTION.even;
|
239
|
+
}
|
240
|
+
const parts = args.replace(SPACE_REGEXP, '').split('n');
|
241
|
+
let partA = parseInt(parts[0], 10) || 0;
|
242
|
+
if (parts[0] == '-') {
|
243
|
+
partA = -1;
|
244
|
+
}
|
245
|
+
if (parts.length === 1) {
|
246
|
+
return (n) => n == partA;
|
247
|
+
}
|
248
|
+
let partB = parseInt(parts[1], 10) || 0;
|
249
|
+
if (parts[0] == '+') {
|
250
|
+
partB = 1;
|
251
|
+
}
|
252
|
+
if (partA >= 1 || partA <= -1) {
|
253
|
+
if (partA >= 1) {
|
254
|
+
if (Math.abs(partA) === 1) {
|
255
|
+
return (n) => n > partB - 1;
|
256
|
+
}
|
257
|
+
return (n) => n > partB - 1 && (n + -1 * partB) % partA === 0;
|
258
|
+
}
|
259
|
+
if (Math.abs(partA) === 1) {
|
260
|
+
return (n) => n < partB + 1;
|
261
|
+
}
|
262
|
+
return (n) => n < partB + 1 && (n + -1 * partB) % partA === 0;
|
263
|
+
}
|
264
|
+
if (parts[0]) {
|
265
|
+
return (n) => n === partB;
|
266
|
+
}
|
267
|
+
return (n) => n > partB - 1;
|
268
|
+
}
|
175
269
|
}
|
176
270
|
exports.default = SelectorParser;
|
177
271
|
//# sourceMappingURL=SelectorParser.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SelectorParser.js","sourceRoot":"","sources":["../../src/query-selector/SelectorParser.ts"],"names":[],"mappings":";;;;;AAAA,kEAA0C;AAC1C,sFAA8D;AAC9D,6EAAqD;
|
1
|
+
{"version":3,"file":"SelectorParser.js","sourceRoot":"","sources":["../../src/query-selector/SelectorParser.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -9,6 +9,11 @@ import IDocumentFragment from '../nodes/document-fragment/IDocumentFragment';
|
|
9
9
|
import SelectorParser from './SelectorParser';
|
10
10
|
import ISelectorMatch from './ISelectorMatch';
|
11
11
|
|
12
|
+
type IDocumentPositionAndElement = {
|
13
|
+
documentPosition: string;
|
14
|
+
element: IElement;
|
15
|
+
};
|
16
|
+
|
12
17
|
/**
|
13
18
|
* Utility for query selection in an HTML element.
|
14
19
|
*
|
@@ -26,9 +31,6 @@ export default class QuerySelector {
|
|
26
31
|
node: IElement | IDocument | IDocumentFragment,
|
27
32
|
selector: string
|
28
33
|
): INodeList<IElement> {
|
29
|
-
const nodeList = new NodeList<IElement>();
|
30
|
-
const allMatches = {};
|
31
|
-
|
32
34
|
if (selector === '') {
|
33
35
|
throw new Error(
|
34
36
|
"Failed to execute 'querySelectorAll' on 'Element': The provided selector is empty."
|
@@ -36,19 +38,30 @@ export default class QuerySelector {
|
|
36
38
|
}
|
37
39
|
|
38
40
|
if (selector === null || selector === undefined) {
|
39
|
-
return
|
41
|
+
return new NodeList<IElement>();
|
40
42
|
}
|
41
43
|
|
42
|
-
|
43
|
-
|
44
|
+
const groups = SelectorParser.getSelectorGroups(selector);
|
45
|
+
let matches: IDocumentPositionAndElement[] = [];
|
46
|
+
|
47
|
+
for (const items of groups) {
|
48
|
+
matches = matches.concat(
|
44
49
|
node.nodeType === NodeTypeEnum.elementNode
|
45
50
|
? this.findAll(<IElement>node, [<IElement>node], items)
|
46
|
-
: this.findAll(null, node.children, items)
|
47
|
-
|
51
|
+
: this.findAll(null, node.children, items)
|
52
|
+
);
|
53
|
+
}
|
54
|
+
|
55
|
+
const nodeList = new NodeList<IElement>();
|
56
|
+
const matchesMap: { [position: string]: IElement } = {};
|
57
|
+
|
58
|
+
for (let i = 0, max = matches.length; i < max; i++) {
|
59
|
+
matchesMap[matches[i].documentPosition] = matches[i].element;
|
48
60
|
}
|
49
61
|
|
50
|
-
|
51
|
-
|
62
|
+
const keys = Object.keys(matchesMap).sort();
|
63
|
+
for (let i = 0, max = keys.length; i < max; i++) {
|
64
|
+
nodeList.push(matchesMap[keys[i]]);
|
52
65
|
}
|
53
66
|
|
54
67
|
return nodeList;
|
@@ -201,10 +214,10 @@ export default class QuerySelector {
|
|
201
214
|
children: IElement[],
|
202
215
|
selectorItems: SelectorItem[],
|
203
216
|
documentPosition?: string
|
204
|
-
):
|
217
|
+
): IDocumentPositionAndElement[] {
|
205
218
|
const selectorItem = selectorItems[0];
|
206
219
|
const nextSelectorItem = selectorItems[1];
|
207
|
-
|
220
|
+
let matched: IDocumentPositionAndElement[] = [];
|
208
221
|
|
209
222
|
for (let i = 0, max = children.length; i < max; i++) {
|
210
223
|
const child = children[i];
|
@@ -213,14 +226,16 @@ export default class QuerySelector {
|
|
213
226
|
if (selectorItem.match(child)) {
|
214
227
|
if (!nextSelectorItem) {
|
215
228
|
if (rootElement !== child) {
|
216
|
-
matched
|
229
|
+
matched.push({
|
230
|
+
documentPosition: position,
|
231
|
+
element: child
|
232
|
+
});
|
217
233
|
}
|
218
234
|
} else {
|
219
235
|
switch (nextSelectorItem.combinator) {
|
220
236
|
case SelectorCombinatorEnum.adjacentSibling:
|
221
237
|
if (child.nextElementSibling) {
|
222
|
-
|
223
|
-
matched,
|
238
|
+
matched = matched.concat(
|
224
239
|
this.findAll(
|
225
240
|
rootElement,
|
226
241
|
[child.nextElementSibling],
|
@@ -232,8 +247,7 @@ export default class QuerySelector {
|
|
232
247
|
break;
|
233
248
|
case SelectorCombinatorEnum.descendant:
|
234
249
|
case SelectorCombinatorEnum.child:
|
235
|
-
|
236
|
-
matched,
|
250
|
+
matched = matched.concat(
|
237
251
|
this.findAll(rootElement, child.children, selectorItems.slice(1), position)
|
238
252
|
);
|
239
253
|
break;
|
@@ -242,7 +256,9 @@ export default class QuerySelector {
|
|
242
256
|
}
|
243
257
|
|
244
258
|
if (selectorItem.combinator === SelectorCombinatorEnum.descendant && child.children.length) {
|
245
|
-
|
259
|
+
matched = matched.concat(
|
260
|
+
this.findAll(rootElement, child.children, selectorItems, position)
|
261
|
+
);
|
246
262
|
}
|
247
263
|
}
|
248
264
|
|
@@ -4,7 +4,6 @@ import Element from '../nodes/element/Element';
|
|
4
4
|
import IHTMLInputElement from '../nodes/html-input-element/IHTMLInputElement';
|
5
5
|
import SelectorCombinatorEnum from './SelectorCombinatorEnum';
|
6
6
|
import ISelectorAttribute from './ISelectorAttribute';
|
7
|
-
import SelectorParser from './SelectorParser';
|
8
7
|
import ISelectorMatch from './ISelectorMatch';
|
9
8
|
import ISelectorPseudo from './ISelectorPseudo';
|
10
9
|
|
@@ -181,74 +180,40 @@ export default class SelectorItem {
|
|
181
180
|
case 'root':
|
182
181
|
return element.tagName === 'HTML';
|
183
182
|
case 'not':
|
184
|
-
return !
|
183
|
+
return !psuedo.selectorItem.match(element);
|
185
184
|
case 'nth-child':
|
186
|
-
|
185
|
+
const nthChildIndex = psuedo.selectorItem
|
186
|
+
? parent.children.filter((child) => psuedo.selectorItem.match(child)).indexOf(element)
|
187
|
+
: parent.children.indexOf(element);
|
188
|
+
return nthChildIndex !== -1 && psuedo.nthFunction(nthChildIndex + 1);
|
187
189
|
case 'nth-of-type':
|
188
190
|
if (!element.parentNode) {
|
189
191
|
return false;
|
190
192
|
}
|
191
|
-
|
192
|
-
element
|
193
|
-
|
194
|
-
|
195
|
-
);
|
193
|
+
const nthOfTypeIndex = parent.children
|
194
|
+
.filter((child) => child.tagName === element.tagName)
|
195
|
+
.indexOf(element);
|
196
|
+
return nthOfTypeIndex !== -1 && psuedo.nthFunction(nthOfTypeIndex + 1);
|
196
197
|
case 'nth-last-child':
|
197
|
-
|
198
|
+
const nthLastChildIndex = psuedo.selectorItem
|
199
|
+
? parent.children
|
200
|
+
.filter((child) => psuedo.selectorItem.match(child))
|
201
|
+
.reverse()
|
202
|
+
.indexOf(element)
|
203
|
+
: parent.children.reverse().indexOf(element);
|
204
|
+
return nthLastChildIndex !== -1 && psuedo.nthFunction(nthLastChildIndex + 1);
|
198
205
|
case 'nth-last-of-type':
|
199
|
-
|
200
|
-
element
|
201
|
-
|
202
|
-
|
203
|
-
);
|
206
|
+
const nthLastOfTypeIndex = parent.children
|
207
|
+
.filter((child) => child.tagName === element.tagName)
|
208
|
+
.reverse()
|
209
|
+
.indexOf(element);
|
210
|
+
return nthLastOfTypeIndex !== -1 && psuedo.nthFunction(nthLastOfTypeIndex + 1);
|
204
211
|
}
|
205
212
|
}
|
206
213
|
|
207
214
|
return true;
|
208
215
|
}
|
209
216
|
|
210
|
-
/**
|
211
|
-
* Matches a nth-child selector.
|
212
|
-
*
|
213
|
-
* @param element Element.
|
214
|
-
* @param parentChildren Parent children.
|
215
|
-
* @param placement Placement.
|
216
|
-
* @returns True if it is a match.
|
217
|
-
*/
|
218
|
-
private matchNthChild(element: IElement, parentChildren: IElement[], placement: string): boolean {
|
219
|
-
if (placement === 'odd') {
|
220
|
-
const index = parentChildren.indexOf(element);
|
221
|
-
return index !== -1 && (index + 1) % 2 !== 0;
|
222
|
-
} else if (placement === 'even') {
|
223
|
-
const index = parentChildren.indexOf(element);
|
224
|
-
return index !== -1 && (index + 1) % 2 === 0;
|
225
|
-
} else if (placement.includes('n')) {
|
226
|
-
const [a, b] = placement.replace(/ /g, '').split('n');
|
227
|
-
const childIndex = parentChildren.indexOf(element);
|
228
|
-
const aNumber = a !== '' ? Number(a) : 1;
|
229
|
-
const bNumber = b !== undefined ? Number(b) : 0;
|
230
|
-
if (isNaN(aNumber) || isNaN(bNumber)) {
|
231
|
-
throw new DOMException(`The selector "${this.getSelectorString()}" is not valid.`);
|
232
|
-
}
|
233
|
-
|
234
|
-
for (let i = 0, max = parentChildren.length; i <= max; i += aNumber) {
|
235
|
-
if (childIndex === i + bNumber - 1) {
|
236
|
-
return true;
|
237
|
-
}
|
238
|
-
}
|
239
|
-
|
240
|
-
return false;
|
241
|
-
}
|
242
|
-
|
243
|
-
const number = Number(placement);
|
244
|
-
|
245
|
-
if (isNaN(number)) {
|
246
|
-
throw new DOMException(`The selector "${this.getSelectorString()}" is not valid.`);
|
247
|
-
}
|
248
|
-
|
249
|
-
return parentChildren[number - 1] === element;
|
250
|
-
}
|
251
|
-
|
252
217
|
/**
|
253
218
|
* Matches attribute.
|
254
219
|
*
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import SelectorItem from './SelectorItem';
|
2
2
|
import SelectorCombinatorEnum from './SelectorCombinatorEnum';
|
3
3
|
import DOMException from '../exception/DOMException';
|
4
|
+
import ISelectorPseudo from './ISelectorPseudo';
|
4
5
|
|
5
6
|
/**
|
6
7
|
* Selector RegExp.
|
@@ -29,6 +30,20 @@ const SELECTOR_REGEXP =
|
|
29
30
|
*/
|
30
31
|
const CLASS_ESCAPED_CHARACTER_REGEXP = /\\/g;
|
31
32
|
|
33
|
+
/**
|
34
|
+
* Nth Function.
|
35
|
+
*/
|
36
|
+
const NTH_FUNCTION = {
|
37
|
+
odd: (n: number) => (n + 1) % 2 === 0,
|
38
|
+
even: (n: number) => (n + 1) % 2 !== 0,
|
39
|
+
alwaysFalse: () => false
|
40
|
+
};
|
41
|
+
|
42
|
+
/**
|
43
|
+
* Space RegExp.
|
44
|
+
*/
|
45
|
+
const SPACE_REGEXP = / /g;
|
46
|
+
|
32
47
|
/**
|
33
48
|
* Simple Selector RegExp.
|
34
49
|
*
|
@@ -120,16 +135,10 @@ export default class SelectorParser {
|
|
120
135
|
});
|
121
136
|
} else if (match[12] && match[13]) {
|
122
137
|
currentSelectorItem.pseudos = currentSelectorItem.pseudos || [];
|
123
|
-
currentSelectorItem.pseudos.push(
|
124
|
-
name: match[12].toLowerCase(),
|
125
|
-
arguments: match[13]
|
126
|
-
});
|
138
|
+
currentSelectorItem.pseudos.push(this.getPseudo(match[12], match[13]));
|
127
139
|
} else if (match[14]) {
|
128
140
|
currentSelectorItem.pseudos = currentSelectorItem.pseudos || [];
|
129
|
-
currentSelectorItem.pseudos.push(
|
130
|
-
name: match[14].toLowerCase(),
|
131
|
-
arguments: null
|
132
|
-
});
|
141
|
+
currentSelectorItem.pseudos.push(this.getPseudo(match[14]));
|
133
142
|
} else if (match[15]) {
|
134
143
|
switch (match[15].trim()) {
|
135
144
|
case ',':
|
@@ -168,4 +177,104 @@ export default class SelectorParser {
|
|
168
177
|
|
169
178
|
return groups;
|
170
179
|
}
|
180
|
+
|
181
|
+
/**
|
182
|
+
* Returns pseudo.
|
183
|
+
*
|
184
|
+
* @param name Pseudo name.
|
185
|
+
* @param args Pseudo arguments.
|
186
|
+
* @returns Pseudo.
|
187
|
+
*/
|
188
|
+
private static getPseudo(name: string, args?: string): ISelectorPseudo {
|
189
|
+
const lowerName = name.toLowerCase();
|
190
|
+
|
191
|
+
if (!args) {
|
192
|
+
return { name: lowerName, arguments: null, selectorItem: null, nthFunction: null };
|
193
|
+
}
|
194
|
+
|
195
|
+
switch (lowerName) {
|
196
|
+
case 'nth-last-child':
|
197
|
+
case 'nth-child':
|
198
|
+
const nthOfIndex = args.indexOf(' of ');
|
199
|
+
const nthFunction = nthOfIndex !== -1 ? args.substring(0, nthOfIndex) : args;
|
200
|
+
const selectorItem =
|
201
|
+
nthOfIndex !== -1 ? this.getSelectorItem(args.substring(nthOfIndex + 4).trim()) : null;
|
202
|
+
return {
|
203
|
+
name: lowerName,
|
204
|
+
arguments: args,
|
205
|
+
selectorItem,
|
206
|
+
nthFunction: this.getPseudoNthFunction(nthFunction)
|
207
|
+
};
|
208
|
+
case 'nth-of-type':
|
209
|
+
case 'nth-last-of-type':
|
210
|
+
return {
|
211
|
+
name: lowerName,
|
212
|
+
arguments: args,
|
213
|
+
selectorItem: null,
|
214
|
+
nthFunction: this.getPseudoNthFunction(args)
|
215
|
+
};
|
216
|
+
case 'not':
|
217
|
+
return {
|
218
|
+
name: lowerName,
|
219
|
+
arguments: args,
|
220
|
+
selectorItem: this.getSelectorItem(args),
|
221
|
+
nthFunction: null
|
222
|
+
};
|
223
|
+
default:
|
224
|
+
return { name: lowerName, arguments: args, selectorItem: null, nthFunction: null };
|
225
|
+
}
|
226
|
+
}
|
227
|
+
|
228
|
+
/**
|
229
|
+
* Returns pseudo nth function.
|
230
|
+
*
|
231
|
+
* Based on:
|
232
|
+
* https://github.com/dperini/nwsapi/blob/master/src/nwsapi.js
|
233
|
+
*
|
234
|
+
* @param args Pseudo arguments.
|
235
|
+
* @returns Pseudo nth function.
|
236
|
+
*/
|
237
|
+
private static getPseudoNthFunction(args?: string): ((n: number) => boolean) | null {
|
238
|
+
if (args === 'odd') {
|
239
|
+
return NTH_FUNCTION.odd;
|
240
|
+
} else if (args === 'even') {
|
241
|
+
return NTH_FUNCTION.even;
|
242
|
+
}
|
243
|
+
|
244
|
+
const parts = args.replace(SPACE_REGEXP, '').split('n');
|
245
|
+
let partA = parseInt(parts[0], 10) || 0;
|
246
|
+
|
247
|
+
if (parts[0] == '-') {
|
248
|
+
partA = -1;
|
249
|
+
}
|
250
|
+
|
251
|
+
if (parts.length === 1) {
|
252
|
+
return (n) => n == partA;
|
253
|
+
}
|
254
|
+
|
255
|
+
let partB = parseInt(parts[1], 10) || 0;
|
256
|
+
|
257
|
+
if (parts[0] == '+') {
|
258
|
+
partB = 1;
|
259
|
+
}
|
260
|
+
|
261
|
+
if (partA >= 1 || partA <= -1) {
|
262
|
+
if (partA >= 1) {
|
263
|
+
if (Math.abs(partA) === 1) {
|
264
|
+
return (n: number): boolean => n > partB - 1;
|
265
|
+
}
|
266
|
+
return (n: number): boolean => n > partB - 1 && (n + -1 * partB) % partA === 0;
|
267
|
+
}
|
268
|
+
if (Math.abs(partA) === 1) {
|
269
|
+
return (n: number): boolean => n < partB + 1;
|
270
|
+
}
|
271
|
+
return (n) => n < partB + 1 && (n + -1 * partB) % partA === 0;
|
272
|
+
}
|
273
|
+
|
274
|
+
if (parts[0]) {
|
275
|
+
return (n) => n === partB;
|
276
|
+
}
|
277
|
+
|
278
|
+
return (n) => n > partB - 1;
|
279
|
+
}
|
171
280
|
}
|