File tree Expand file tree Collapse file tree 5 files changed +59
-24
lines changed
Expand file tree Collapse file tree 5 files changed +59
-24
lines changed Original file line number Diff line number Diff line change 11'use strict' ;
22
3-
4- function select ( ast , selector ) {
5- var result = [ ] ;
6-
7- ( function walk ( node ) {
8- if ( node . type == selector [ 0 ] ) {
9- if ( selector . length == 1 ) {
10- result . push ( node ) ;
11- }
12- else if ( node . children ) {
13- node . children . forEach ( function ( child ) {
14- [ ] . push . apply ( result , select ( child , selector . slice ( 1 ) ) ) ;
15- } ) ;
16- }
17- }
18- if ( node . children ) {
19- node . children . forEach ( walk ) ;
20- }
21- } ( ast ) ) ;
22-
23- return result ;
24- }
3+ var parseSelector = require ( './lib/selector' ) ( ) ,
4+ select = require ( './lib/select' ) ;
255
266
277module . exports = function ( ast , selector ) {
28- return select ( ast , selector . split ( / \s + / g) ) ;
8+ selector = parseSelector ( selector ) ;
9+ return selector ? select [ selector . type ] ( selector , ast ) : [ ] ;
2910} ;
Original file line number Diff line number Diff line change 1+ 'use strict' ;
2+
3+
4+ var select = exports ;
5+
6+
7+ select . ruleSet = function ( selector , ast ) {
8+ return select . rule ( selector . rule , ast ) ;
9+ } ;
10+
11+
12+ select . rule = function ( selector , ast ) {
13+ var result = [ ] ;
14+
15+ ( function walk ( node ) {
16+ if ( node . type == selector . tagName ) {
17+ if ( ! selector . rule ) {
18+ return result . push ( node ) ;
19+ }
20+ if ( ! node . children ) {
21+ return ;
22+ }
23+
24+ node . children . forEach ( function ( childNode ) {
25+ [ ] . push . apply ( result , select . rule ( selector . rule , childNode ) ) ;
26+ } ) ;
27+ }
28+
29+ if ( node . children ) {
30+ node . children . forEach ( walk ) ;
31+ }
32+ } ( ast ) ) ;
33+
34+ return result ;
35+ } ;
Original file line number Diff line number Diff line change 1+ 'use strict' ;
2+
3+ var Parser = require ( 'css-selector-parser' ) . CssSelectorParser ;
4+
5+
6+ module . exports = function SelectorParser ( ) {
7+ var parser = new Parser ;
8+ parser . registerNestingOperators ( '>' ) ;
9+ return parser . parse . bind ( parser ) ;
10+ } ;
Original file line number Diff line number Diff line change 3030 " visit" ,
3131 " walk"
3232 ],
33- "dependencies" : {},
33+ "dependencies" : {
34+ "css-selector-parser" : " ^1.1.0"
35+ },
3436 "devDependencies" : {
3537 "tape" : " ^4.2.0"
3638 }
Original file line number Diff line number Diff line change @@ -6,6 +6,13 @@ var select = require('..'),
66var test = require ( 'tape' ) ;
77
88
9+ test ( 'edge cases' , function ( t ) {
10+ t . deepEqual ( select ( ast , '' ) , [ ] ) ;
11+ t . deepEqual ( select ( ast , '\t ' ) , [ ] ) ;
12+ t . end ( ) ;
13+ } ) ;
14+
15+
916test ( 'type selector' , function ( t ) {
1017 t . equal ( select ( ast , 'root' ) . length , 1 ) ;
1118 t . equal ( select ( ast , 'root' ) [ 0 ] , ast ) ;
You can’t perform that action at this time.
0 commit comments