@@ -89,18 +89,42 @@ function atruleChilds (rule, atrule, bubbling) {
8989 }
9090}
9191
92+ function pickDeclarations ( selector , declarations , after ) {
93+ var parent = postcss . rule ( {
94+ selector : selector ,
95+ nodes : [ ]
96+ } )
97+
98+ for ( var i = 0 ; i < declarations . length ; i ++ ) {
99+ parent . append ( declarations [ i ] )
100+ }
101+
102+ after . after ( parent )
103+ return parent
104+ }
105+
92106function processRule ( rule , bubble , unwrap , preserveEmpty ) {
93107 var unwrapped = false
94108 var after = rule
109+ var copyDeclarations = false
110+ var declarations = [ ]
95111
96112 rule . each ( function ( child ) {
97113 if ( child . type === 'rule' ) {
114+ if ( declarations . length ) {
115+ after = pickDeclarations ( rule . selector , declarations , after )
116+ declarations = [ ]
117+ }
118+
119+ copyDeclarations = true
98120 unwrapped = true
99121 child . selectors = selectors ( rule , child )
100122 after = pickComment ( child . prev ( ) , after )
101123 after . after ( child )
102124 after = child
103125 } else if ( child . type === 'atrule' ) {
126+ copyDeclarations = false
127+
104128 if ( child . name === 'at-root' ) {
105129 unwrapped = true
106130 atruleChilds ( rule , child , false )
@@ -129,8 +153,15 @@ function processRule (rule, bubble, unwrap, preserveEmpty) {
129153 after . after ( child )
130154 after = child
131155 }
156+ } else if ( child . type === 'decl' && copyDeclarations ) {
157+ declarations . push ( child )
132158 }
133159 } )
160+
161+ if ( declarations . length ) {
162+ after = pickDeclarations ( rule . selector , declarations , after )
163+ }
164+
134165 if ( unwrapped && preserveEmpty !== true ) {
135166 rule . raws . semicolon = true
136167 if ( rule . nodes . length === 0 ) rule . remove ( )
0 commit comments