source: trip-planner-front/node_modules/csso/lib/restructure/2-initialMergeRuleset.js

Last change on this file was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 1.6 KB
Line 
1var walk = require('css-tree').walk;
2var utils = require('./utils');
3
4function processRule(node, item, list) {
5 var selectors = node.prelude.children;
6 var declarations = node.block.children;
7
8 list.prevUntil(item.prev, function(prev) {
9 // skip non-ruleset node if safe
10 if (prev.type !== 'Rule') {
11 return utils.unsafeToSkipNode.call(selectors, prev);
12 }
13
14 var prevSelectors = prev.prelude.children;
15 var prevDeclarations = prev.block.children;
16
17 // try to join rulesets with equal pseudo signature
18 if (node.pseudoSignature === prev.pseudoSignature) {
19 // try to join by selectors
20 if (utils.isEqualSelectors(prevSelectors, selectors)) {
21 prevDeclarations.appendList(declarations);
22 list.remove(item);
23 return true;
24 }
25
26 // try to join by declarations
27 if (utils.isEqualDeclarations(declarations, prevDeclarations)) {
28 utils.addSelectors(prevSelectors, selectors);
29 list.remove(item);
30 return true;
31 }
32 }
33
34 // go to prev ruleset if has no selector similarities
35 return utils.hasSimilarSelectors(selectors, prevSelectors);
36 });
37}
38
39// NOTE: direction should be left to right, since rulesets merge to left
40// ruleset. When direction right to left unmerged rulesets may prevent lookup
41// TODO: remove initial merge
42module.exports = function initialMergeRule(ast) {
43 walk(ast, {
44 visit: 'Rule',
45 enter: processRule
46 });
47};
Note: See TracBrowser for help on using the repository browser.