| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 | var canReorder = require('./reorderable').canReorder;var extractProperties = require('./extractor');function mergeMediaQueries(tokens) {  var candidates = {};  var reduced = [];  for (var i = tokens.length - 1; i >= 0; i--) {    var token = tokens[i];    if (token[0] != 'block')      continue;    var candidate = candidates[token[1][0]];    if (!candidate) {      candidate = [];      candidates[token[1][0]] = candidate;    }    candidate.push(i);  }  for (var name in candidates) {    var positions = candidates[name];    positionLoop:    for (var j = positions.length - 1; j > 0; j--) {      var positionOne = positions[j];      var tokenOne = tokens[positionOne];      var positionTwo = positions[j - 1];      var tokenTwo = tokens[positionTwo];      directionLoop:      for (var direction = 1; direction >= -1; direction -= 2) {        var topToBottom = direction == 1;        var from = topToBottom ? positionOne + 1 : positionTwo - 1;        var to = topToBottom ? positionTwo : positionOne;        var delta = topToBottom ? 1 : -1;        var source = topToBottom ? tokenOne : tokenTwo;        var target = topToBottom ? tokenTwo : tokenOne;        var movedProperties = extractProperties(source);        while (from != to) {          var traversedProperties = extractProperties(tokens[from]);          from += delta;          if (!canReorder(movedProperties, traversedProperties))            continue directionLoop;        }        target[2] = topToBottom ?          source[2].concat(target[2]) :          target[2].concat(source[2]);        source[2] = [];        reduced.push(target);        continue positionLoop;      }    }  }  return reduced;}module.exports = mergeMediaQueries;
 |