@@ -6,54 +6,34 @@ module.exports = postcss.plugin('postcss-prefix', postcssPrefix)
6
6
function postcssPrefix ( prefix , options ) {
7
7
options = options || { }
8
8
9
- return function ( root ) {
9
+ return function walk ( root ) {
10
10
root . walkRules ( function ( rule ) {
11
- if ( rule . parent && rule . parent . type === 'atrule' &&
12
- rule . parent . name . indexOf ( 'keyframes' ) !== - 1 ) {
13
- return
14
- }
15
-
16
- const selector = Selector (
17
- transformSelectors
18
- ) . process ( rule . selector ) . result
11
+ const selector = Selector ( transformSelectors )
12
+ . process ( rule . selector ) . result
19
13
20
14
rule . selector = selector
21
15
} )
22
16
}
23
17
24
18
function transformSelectors ( selectors ) {
25
19
selectors . eachInside ( function ( selector ) {
26
- if (
27
- // if parent is not selector and
28
- selector . parent . type !== 'selector' ||
29
- // if not first node in container
30
- selector . parent . nodes [ 0 ] !== selector ||
31
- // don't prefix pseudo selector args unless it's `:not`
32
- ( selector . parent . parent . type === 'pseudo' && selector . parent . parent . value !== ':not' )
33
- ) return
20
+ // don't prefix if parent is not selector
21
+ if ( selector . parent . type !== 'selector' ) return
34
22
35
- const prefixNode = getPrefixNode ( prefix )
23
+ // don't prefix if not first node in container
24
+ if ( selector . parent . nodes [ 0 ] !== selector ) return
36
25
37
- if ( selector . type === 'pseudo' ) {
38
- switch ( selector . value ) {
39
- case ':root' :
40
- return
41
- case ':host' :
42
- const replacement = Selector . selector ( )
43
- replacement . nodes = [ prefixNode ] . concat ( selector . clone ( ) . nodes )
44
- selector . replaceWith ( replacement )
45
- return
46
- }
26
+ // don't prefix pseudo selector args unless it's `:not`
27
+ if ( selector . parent . parent . type === 'pseudo' && selector . parent . parent . value !== ':not' ) {
28
+ return
47
29
}
48
30
49
- // prefix
50
- //
51
- // start by prepending a space combinator
52
- selector . parent . prepend ( Selector . combinator ( { value : ' ' } ) )
53
- // then prepend the prefix node, preserving spacing
54
- prefixNode . spaces . before = selector . spaces . before
55
- selector . spaces . before = ''
56
- selector . parent . prepend ( prefixNode )
31
+ if ( selector . type === 'pseudo' && selector . value === ':host' ) {
32
+ const prefixNode = getPrefixNode ( prefix )
33
+ const replacement = Selector . selector ( )
34
+ replacement . nodes = [ prefixNode ] . concat ( selector . clone ( ) . nodes )
35
+ selector . replaceWith ( replacement )
36
+ }
57
37
} )
58
38
}
59
39
}
0 commit comments