Blame view

node_modules/postcss-colormin/dist/index.js 2.39 KB
ce4c83ff   wxy   初始提交
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
  'use strict';
  
  exports.__esModule = true;
  
  var _postcss = require('postcss');
  
  var _postcss2 = _interopRequireDefault(_postcss);
  
  var _postcssValueParser = require('postcss-value-parser');
  
  var _postcssValueParser2 = _interopRequireDefault(_postcssValueParser);
  
  var _colormin = require('colormin');
  
  var _colormin2 = _interopRequireDefault(_colormin);
  
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  
  function reduceWhitespaces(decl) {
      decl.value = (0, _postcssValueParser2.default)(decl.value).walk(function (node) {
          if (node.type === 'function' || node.type === 'div') {
              node.before = node.after = '';
          }
      }).toString();
  }
  
  function walk(parent, callback) {
      parent.nodes.forEach(function (node, index) {
          var bubble = callback(node, index, parent);
          if (node.nodes && bubble !== false) {
              walk(node, callback);
          }
      });
  }
  
  function transform(decl, opts) {
      if (decl.prop === '-webkit-tap-highlight-color') {
          if (decl.value === 'inherit' || decl.value === 'transparent') {
              return;
          }
          reduceWhitespaces(decl);
          return;
      }
      if (/^(composes|font|filter)/i.test(decl.prop)) {
          return;
      }
      var ast = (0, _postcssValueParser2.default)(decl.value);
      walk(ast, function (node, index, parent) {
          if (node.type === 'function') {
              if (/^(rgb|hsl)a?$/.test(node.value)) {
                  var value = node.value;
  
                  node.value = (0, _colormin2.default)((0, _postcssValueParser.stringify)(node), opts);
                  node.type = 'word';
                  var next = parent.nodes[index + 1];
                  if (node.value !== value && next && next.type === 'word') {
                      parent.nodes.splice(index + 1, 0, { type: 'space', value: ' ' });
                  }
              } else if (node.value === 'calc') {
                  return false;
              }
          } else {
              node.value = (0, _colormin2.default)(node.value, opts);
          }
      });
      decl.value = ast.toString();
  }
  
  exports.default = _postcss2.default.plugin('postcss-colormin', function () {
      var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  
      return function (css) {
          return css.walkDecls(function (node) {
              return transform(node, opts);
          });
      };
  });
  module.exports = exports['default'];