File tree 4 files changed +81
-16
lines changed
4 files changed +81
-16
lines changed Original file line number Diff line number Diff line change @@ -4,7 +4,9 @@ var path = require('path');
4
4
5
5
// vendor
6
6
var resolve = require ( 'resolve' ) ;
7
- var cssprefix = require ( 'css-prefix' ) ;
7
+
8
+ // local
9
+ var prefix = require ( './lib/prefix' ) ;
8
10
9
11
module . exports = npmcss ;
10
12
@@ -35,15 +37,8 @@ function npmcss(file) {
35
37
}
36
38
} ) ;
37
39
38
- var prefix_opt = {
39
- parentClass : name ,
40
- prefix : ''
41
- } ;
42
-
43
- var cssstr = cssprefix ( prefix_opt , npmcss ( res ) ) ;
44
-
45
40
// run resolution on the required css file
46
- return '*/\n' + cssstr + '\n/*' ;
41
+ return '*/\n' + prefix ( name , npmcss ( res ) ) + '\n/*' ;
47
42
} ) ;
48
43
49
44
return src ;
Original file line number Diff line number Diff line change
1
+ // vendor
2
+ var cssp = require ( 'cssp' ) ;
3
+ var traverse = require ( 'traverse' ) ;
4
+
5
+ module . exports = function ( name , src ) {
6
+ if ( typeof opts === 'string' ) {
7
+ opts = { prefix : opts } ;
8
+ }
9
+
10
+ var tree = cssp . parse ( src ) ;
11
+
12
+ traverse ( tree ) . forEach ( function ( node ) {
13
+ if ( node !== 'simpleselector' ) {
14
+ return ;
15
+ }
16
+
17
+ var nodes = this . parent . node ;
18
+
19
+ // don't prefix if any of the following conditions are met:
20
+ // .module exists as a parent then ok
21
+ // .module exists in a set of classes right after an element
22
+ // .module exists in the first set of classes
23
+ for ( var i = 1 ; i < nodes . length ; ++ i ) {
24
+ var node = nodes [ i ] ;
25
+
26
+ // first space exists search
27
+ if ( node [ 0 ] === 's' ) {
28
+ break ;
29
+ }
30
+
31
+ if ( node [ 0 ] === 'clazz' && node [ 1 ] [ 0 ] === 'ident' &&
32
+ node [ 1 ] [ 1 ] === name ) {
33
+ return ;
34
+ }
35
+ }
36
+
37
+ // prefix the css rule
38
+ this . parent . node . splice ( 1 , 0 ,
39
+ [ 'clazz' , [ 'ident' , name ] ] ,
40
+ [ 's' , ' ' ]
41
+ ) ;
42
+ } ) ;
43
+
44
+ return cssp . translate ( tree ) ;
45
+ } ;
46
+
Original file line number Diff line number Diff line change 17
17
"email" : " raynos2@gmail.com"
18
18
},
19
19
"dependencies" : {
20
- "resolve" : " 0.2.3"
20
+ "resolve" : " 0.2.3" ,
21
+ "traverse" : " 0.6.3" ,
22
+ "cssp" : " 1.0.6"
21
23
},
22
24
"devDependencies" : {
23
25
"tap" : " ~0.3.1" ,
Original file line number Diff line number Diff line change 7
7
/* */
8
8
/* foobar stuff */
9
9
10
- .foobar p {
11
- color : blue;
12
- }
10
+ /* .foobar */
11
+ .foobar {}
13
12
14
- .foobar .bar {
15
- color : white;
16
- }
13
+ /* p.foobar */
14
+ p .foobar {}
15
+
16
+ /* .foobar p .foobar */
17
+ .foobar p .foobar {}
18
+
19
+ /* .foorbar p */
20
+ .foobar p {}
21
+
22
+ /* .foobar p */
23
+ .foobar p {}
24
+
25
+ /* .foobar.baz */
26
+ .foobar .baz {}
27
+
28
+ /* .foobar .baz */
29
+ .foobar .baz {}
30
+
31
+ /* .foobar .baz */
32
+ .foobar .baz {}
33
+
34
+ /* .baz.foobar */
35
+ .baz .foobar {}
36
+
37
+ /* .foobar .baz .foobar */
38
+ .foobar .baz .foobar {}
17
39
18
40
/**/
19
41
You can’t perform that action at this time.
0 commit comments