Sha256: 62be6c747e28acc10085bb2942db9a64e1fcaf5edba4de1b3c3ce4fe06ff8ab3
Contents?: true
Size: 1.55 KB
Versions: 28
Compression:
Stored size: 1.55 KB
Contents
var walk = require('css-tree').walk; var utils = require('./utils'); function processRule(node, item, list) { var selectors = node.prelude.children; var declarations = node.block.children; list.prevUntil(item.prev, function(prev) { // skip non-ruleset node if safe if (prev.type !== 'Rule') { return utils.unsafeToSkipNode.call(selectors, prev); } var prevSelectors = prev.prelude.children; var prevDeclarations = prev.block.children; // try to join rulesets with equal pseudo signature if (node.pseudoSignature === prev.pseudoSignature) { // try to join by selectors if (utils.isEqualSelectors(prevSelectors, selectors)) { prevDeclarations.appendList(declarations); list.remove(item); return true; } // try to join by declarations if (utils.isEqualDeclarations(declarations, prevDeclarations)) { utils.addSelectors(prevSelectors, selectors); list.remove(item); return true; } } // go to prev ruleset if has no selector similarities return utils.hasSimilarSelectors(selectors, prevSelectors); }); } // NOTE: direction should be left to right, since rulesets merge to left // ruleset. When direction right to left unmerged rulesets may prevent lookup // TODO: remove initial merge module.exports = function initialMergeRule(ast) { walk(ast, { visit: 'Rule', enter: processRule }); };
Version data entries
28 entries across 27 versions & 9 rubygems