File tree Expand file tree Collapse file tree 3 files changed +28
-10
lines changed Expand file tree Collapse file tree 3 files changed +28
-10
lines changed Original file line number Diff line number Diff line change @@ -28,8 +28,8 @@ select(ast, 'paragraph emphasis > text')
28
28
- [x] Sibling selectors: ` paragraph ~ text `
29
29
- [x] Adjacent sibling selectors: ` paragraph + text `
30
30
- [x] Group selectors: ` paragraph, text `
31
+ - [x] Universal selector: ` * `
31
32
- [ ] Attribute selectors: ` text[value*="substr"] `
32
- - [ ] Universal selectors: ` * `
33
33
34
34
## API
35
35
Original file line number Diff line number Diff line change @@ -46,22 +46,24 @@ select.rule = function (selector, ast) {
46
46
return result ;
47
47
48
48
function walk ( node , parent ) {
49
- if ( node . type == selector . tagName ) {
49
+ if ( selector . tagName == '*' || node . type == selector . tagName ) {
50
50
if ( ! selector . rule ) {
51
51
append ( result , [ node ] ) ;
52
52
}
53
53
else if ( ! selector . rule . nestingOperator ||
54
54
selector . rule . nestingOperator == '>' ) {
55
- if ( ! node . children ) return ;
56
- node . children . forEach ( function ( childNode ) {
57
- append ( result , select . rule ( selector . rule , childNode ) ) ;
58
- } ) ;
55
+ if ( node . children ) {
56
+ node . children . forEach ( function ( childNode ) {
57
+ append ( result , select . rule ( selector . rule , childNode ) ) ;
58
+ } ) ;
59
+ }
59
60
}
60
61
else {
61
- if ( ! parent ) return ;
62
- append ( result , select . rule ( selector . rule , {
63
- children : parent . children . slice ( parent . children . indexOf ( node ) + 1 )
64
- } ) ) ;
62
+ if ( parent ) {
63
+ append ( result , select . rule ( selector . rule , {
64
+ children : parent . children . slice ( parent . children . indexOf ( node ) + 1 )
65
+ } ) ) ;
66
+ }
65
67
}
66
68
}
67
69
Original file line number Diff line number Diff line change @@ -83,3 +83,19 @@ test('grouping', function (t) {
83
83
] ) ;
84
84
t . end ( ) ;
85
85
} ) ;
86
+
87
+
88
+ test ( 'universal selector' , function ( t ) {
89
+ t . equal ( select ( ast , '*' ) . length , totalNodes ( ast ) ) ;
90
+ t . deepEqual ( select ( ast , '* ~ heading' ) , select ( ast , 'heading ~ heading' ) ) ;
91
+ t . true ( select ( ast , 'list > *' ) . every ( function ( listItem ) {
92
+ return listItem . type == 'listItem' ;
93
+ } ) ) ;
94
+ t . end ( ) ;
95
+
96
+ function totalNodes ( ast ) {
97
+ return 1 + ( ast . children || [ ] ) . map ( totalNodes ) . reduce ( function ( a , b ) {
98
+ return a + b ;
99
+ } , 0 ) ;
100
+ }
101
+ } ) ;
You can’t perform that action at this time.
0 commit comments