@@ -9,6 +9,7 @@ function verifyOptions(options) {
99
1010 options [ 'sort-order' ] = options [ 'sort-order' ] || 'default' ;
1111 options [ 'empty-lines-between-children-rules' ] = options [ 'empty-lines-between-children-rules' ] || 0 ;
12+ options [ 'empty-lines-between-media-rules' ] = options [ 'empty-lines-between-media-rules' ] || 0 ;
1213
1314 return options ;
1415}
@@ -48,11 +49,11 @@ function getSortOrderFromOptions(options) {
4849 return order ;
4950}
5051
51- function getLinesBetweenChildrenFromOptions ( options ) {
52- var lines = options [ 'empty-lines-between-children -rules' ] ;
52+ function getLinesBetweenRulesFromOptions ( name , options ) {
53+ var lines = options [ 'empty-lines-between-' + name + ' -rules'] ;
5354
5455 if ( typeof lines !== 'number' || isNaN ( lines ) || ! isFinite ( lines ) || lines < 0 || Math . floor ( lines ) !== lines ) {
55- throw new Error ( 'Type of "empty-lines-between-children -rules" option must be integer with positive value.' ) ;
56+ throw new Error ( 'Type of "empty-lines-between-' + name + ' -rules" option must be integer with positive value.') ;
5657 }
5758
5859 return lines ;
@@ -188,6 +189,10 @@ function getApplicableNode(node) {
188189 return node ;
189190 }
190191
192+ if ( prevNode . type === 'atrule' ) {
193+ return node ;
194+ }
195+
191196 if ( prevNode . type === 'comment' ) {
192197 return getApplicableNode ( prevNode ) ;
193198 }
@@ -201,7 +206,8 @@ module.exports = postcss.plugin('postcss-sorting', function (opts) {
201206
202207 return function ( css ) {
203208 var order = getSortOrderFromOptions ( opts ) ;
204- var linesBetweenChildrenRules = getLinesBetweenChildrenFromOptions ( opts ) ;
209+ var linesBetweenChildrenRules = getLinesBetweenRulesFromOptions ( 'children' , opts ) ;
210+ var linesBetweenMediaRules = getLinesBetweenRulesFromOptions ( 'media' , opts ) ;
205211
206212 css . walk ( function ( rule ) {
207213 // Process only rules and atrules with nodes
@@ -275,15 +281,27 @@ module.exports = postcss.plugin('postcss-sorting', function (opts) {
275281 node . raws . before = createLineBreaks ( 1 ) + node . raws . before ;
276282 }
277283
284+ var applicableNode ;
285+
278286 // Insert empty lines between children classes
279287 if ( node . type === 'rule' && linesBetweenChildrenRules > 0 ) {
280- // between child rules can be comments, so empty lines should be added to first comment between rules, rather than to rule
281- var applicableNode = getApplicableNode ( node ) ;
288+ // between rules can be comments, so empty lines should be added to first comment between rules, rather than to rule
289+ applicableNode = getApplicableNode ( node ) ;
282290
283291 if ( applicableNode ) {
284292 applicableNode . raws . before = createLineBreaks ( linesBetweenChildrenRules ) + applicableNode . raws . before ;
285293 }
286294 }
295+
296+ // Insert empty lines between media rules
297+ if ( node . type === 'atrule' && node . name === 'media' && linesBetweenMediaRules > 0 ) {
298+ // between rules can be comments, so empty lines should be added to first comment between rules, rather than to rule
299+ applicableNode = getApplicableNode ( node ) ;
300+
301+ if ( applicableNode ) {
302+ applicableNode . raws . before = createLineBreaks ( linesBetweenMediaRules ) + applicableNode . raws . before ;
303+ }
304+ }
287305 }
288306 } ) ;
289307 }
0 commit comments