@@ -6,54 +6,34 @@ module.exports = postcss.plugin('postcss-prefix', postcssPrefix)
66function postcssPrefix ( prefix , options ) {
77 options = options || { }
88
9- return function ( root ) {
9+ return function walk ( root ) {
1010 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
1913
2014 rule . selector = selector
2115 } )
2216 }
2317
2418 function transformSelectors ( selectors ) {
2519 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
3422
35- const prefixNode = getPrefixNode ( prefix )
23+ // don't prefix if not first node in container
24+ if ( selector . parent . nodes [ 0 ] !== selector ) return
3625
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
4729 }
4830
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+ }
5737 } )
5838 }
5939}
0 commit comments