Skip to content

Commit f331e78

Browse files
committed
fix: querySelfOrSelector (#47)
close #47
1 parent 25c6c67 commit f331e78

File tree

3 files changed

+18
-13
lines changed

3 files changed

+18
-13
lines changed

src/utils/selector.ts

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ export const transform = Transform.Companion.multiplatformBuild<RawNode>(
117117
},
118118
(node) => node.attr.name,
119119
(node) => node.children,
120-
(node) => node.parent,
120+
(node) => node.parent || null,
121121
);
122122

123123
export interface ResolvedSelector {
@@ -129,12 +129,12 @@ export interface ResolvedSelector {
129129
canQf: boolean;
130130
canCopy: boolean;
131131
toString: () => string;
132+
findAst: <T>(v: T) => AstNode<T>;
132133
match: (node: RawNode) => RawNode | undefined;
133-
querySelectorAll: (node: RawNode | undefined) => RawNode[];
134-
querySelectorAllContext: (
134+
querySelfOrSelectorAll: (node: RawNode | undefined) => RawNode[];
135+
querySelfOrSelectorAllContext: (
135136
node: RawNode | undefined,
136137
) => QueryResult<RawNode>[];
137-
findAst: <T>(v: T) => AstNode<T>;
138138
}
139139

140140
const typeInfo = initDefaultTypeInfo(true).globalType;
@@ -183,18 +183,23 @@ export const parseSelector = (source: string): ResolvedSelector => {
183183
toString() {
184184
return value.toString();
185185
},
186+
findAst,
186187
match(node) {
187188
return value.match(node, transform, matchOption) ?? undefined;
188189
},
189-
querySelectorAll(node) {
190+
querySelfOrSelectorAll(node) {
190191
if (!node) return [];
191-
return transform.querySelectorAllArray(node, value);
192+
return (selector.match(node) ? [node] : []).concat(
193+
transform.querySelectorAllArray(node, value),
194+
);
192195
},
193-
querySelectorAllContext(node) {
196+
querySelfOrSelectorAllContext(node) {
194197
if (!node) return [];
195-
return transform.querySelectorAllContextArray(node, value);
198+
const r = value.matchContext(node, transform, matchOption);
199+
return (r.matched ? [r] : []).concat(
200+
transform.querySelectorAllContextArray(node, value),
201+
);
196202
},
197-
findAst,
198203
};
199204
for (const exp of binaryExpressionList) {
200205
if (exp.operator.key == '~=' && !useGlobalStore().wasmSupported) {

src/views/snapshot/RuleCard.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ const checkRule = (obj: ResolvedData): string | RawNode => {
6161
}
6262
}
6363
const matchesResult = resolvedMatches.map((s) =>
64-
s.querySelectorAll(rootNode.value),
64+
s.querySelfOrSelectorAll(rootNode.value),
6565
);
6666
if (resolvedMatches.length) {
6767
const notIndex = matchesResult.findIndex((s) => s.length === 0);
@@ -81,7 +81,7 @@ const checkRule = (obj: ResolvedData): string | RawNode => {
8181
}
8282
}
8383
const anyMatchesResult = resolvedAnyMatches.map((s) =>
84-
s.querySelectorAll(rootNode.value),
84+
s.querySelfOrSelectorAll(rootNode.value),
8585
);
8686
if (resolvedAnyMatches.length) {
8787
if (anyMatchesResult.every((s) => s.length === 0)) {
@@ -104,7 +104,7 @@ const checkRule = (obj: ResolvedData): string | RawNode => {
104104
}
105105
}
106106
const excludeMatchesResult = resolvedExcludeMatches.map((s) =>
107-
s.querySelectorAll(rootNode.value),
107+
s.querySelfOrSelectorAll(rootNode.value),
108108
);
109109
if (resolvedExcludeMatches.length) {
110110
const index = excludeMatchesResult.findIndex((s) => s.length !== 0);

src/views/snapshot/SearchCard.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ const searchSelector = (text: string) => {
6767
return;
6868
}
6969
70-
const results = selector.querySelectorAllContext(rootNode.value);
70+
const results = selector.querySelfOrSelectorAllContext(rootNode.value);
7171
if (results.length == 0) {
7272
message.success(`没有选择到节点`);
7373
return;

0 commit comments

Comments
 (0)