Blame view

node_modules/csso/lib/compressor/clean/Ruleset.js 1.23 KB
aaac7fed   liuqimichale   add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
  var hasOwnProperty = Object.prototype.hasOwnProperty;
  
  function cleanUnused(node, usageData) {
      return node.selector.selectors.each(function(selector, item, list) {
          var hasUnused = selector.sequence.some(function(node) {
              switch (node.type) {
                  case 'Class':
                      return usageData.classes && !hasOwnProperty.call(usageData.classes, node.name);
  
                  case 'Id':
                      return usageData.ids && !hasOwnProperty.call(usageData.ids, node.name);
  
                  case 'Identifier':
                      // ignore universal selector
                      if (node.name !== '*') {
                          // TODO: remove toLowerCase when type selectors will be normalized
                          return usageData.tags && !hasOwnProperty.call(usageData.tags, node.name.toLowerCase());
                      }
  
                      break;
              }
          });
  
          if (hasUnused) {
              list.remove(item);
          }
      });
  }
  
  module.exports = function cleanRuleset(node, item, list, usageData) {
      if (usageData) {
          cleanUnused(node, usageData);
      }
  
      if (node.selector.selectors.isEmpty() ||
          node.block.declarations.isEmpty()) {
          list.remove(item);
      }
  };