MCPcopy
hub / github.com/css/csso / processRule

Function processRule

lib/restructure/8-restructRuleset.js:26–168  ·  view source on GitHub ↗
(node, item, list)

Source from the content-addressed store, hash-verified

24}
25
26function processRule(node, item, list) {
27 const avoidRulesMerge = this.block !== null ? this.block.avoidRulesMerge : false;
28 const selectors = node.prelude.children;
29 const block = node.block;
30 const disallowDownMarkers = Object.create(null);
31 let allowMergeUp = true;
32 let allowMergeDown = true;
33
34 list.prevUntil(item.prev, function(prev, prevItem) {
35 const prevBlock = prev.block;
36 const prevType = prev.type;
37
38 if (prevType !== 'Rule') {
39 const unsafe = unsafeToSkipNode.call(selectors, prev);
40
41 if (!unsafe && prevType === 'Atrule' && prevBlock) {
42 walk(prevBlock, {
43 visit: 'Rule',
44 enter(node) {
45 node.prelude.children.forEach((data) => {
46 disallowDownMarkers[data.compareMarker] = true;
47 });
48 }
49 });
50 }
51
52 return unsafe;
53 }
54
55 if (node.pseudoSignature !== prev.pseudoSignature) {
56 return true;
57 }
58
59 const prevSelectors = prev.prelude.children;
60
61 allowMergeDown = !prevSelectors.some((selector) =>
62 selector.compareMarker in disallowDownMarkers
63 );
64
65 // try prev ruleset if simpleselectors has no equal specifity and element selector
66 if (!allowMergeDown && !allowMergeUp) {
67 return true;
68 }
69
70 // try to join by selectors
71 if (allowMergeUp && isEqualSelectors(prevSelectors, selectors)) {
72 prevBlock.children.appendList(block.children);
73 list.remove(item);
74
75 return true;
76 }
77
78 // try to join by properties
79 const diff = compareDeclarations(block.children, prevBlock.children);
80
81 // console.log(diff.eq, diff.ne1, diff.ne2);
82
83 if (diff.eq.length) {

Callers

nothing calls this directly

Calls 5

isEqualSelectorsFunction · 0.90
compareDeclarationsFunction · 0.90
addSelectorsFunction · 0.90
calcSelectorLengthFunction · 0.85
calcDeclarationsLengthFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…