36 lines
1.3 KiB
JavaScript
36 lines
1.3 KiB
JavaScript
|
var optimizeProperties = require('../properties/optimizer');
|
||
|
|
||
|
var stringifyBody = require('../stringifier/one-time').body;
|
||
|
var stringifySelectors = require('../stringifier/one-time').selectors;
|
||
|
var cleanUpSelectors = require('./clean-up').selectors;
|
||
|
var isSpecial = require('./is-special');
|
||
|
|
||
|
function mergeAdjacent(tokens, options, context) {
|
||
|
var lastToken = [null, [], []];
|
||
|
var adjacentSpace = options.compatibility.selectors.adjacentSpace;
|
||
|
|
||
|
for (var i = 0, l = tokens.length; i < l; i++) {
|
||
|
var token = tokens[i];
|
||
|
|
||
|
if (token[0] != 'selector') {
|
||
|
lastToken = [null, [], []];
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
if (lastToken[0] == 'selector' && stringifySelectors(token[1]) == stringifySelectors(lastToken[1])) {
|
||
|
var joinAt = [lastToken[2].length];
|
||
|
Array.prototype.push.apply(lastToken[2], token[2]);
|
||
|
optimizeProperties(token[1], lastToken[2], joinAt, true, options, context);
|
||
|
token[2] = [];
|
||
|
} else if (lastToken[0] == 'selector' && stringifyBody(token[2]) == stringifyBody(lastToken[2]) &&
|
||
|
!isSpecial(options, stringifySelectors(token[1])) && !isSpecial(options, stringifySelectors(lastToken[1]))) {
|
||
|
lastToken[1] = cleanUpSelectors(lastToken[1].concat(token[1]), false, adjacentSpace);
|
||
|
token[2] = [];
|
||
|
} else {
|
||
|
lastToken = token;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = mergeAdjacent;
|