Blame view

node_modules/cssnano/dist/lib/reduceBackgroundRepeat.js 2.87 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
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
  'use strict';
  
  exports.__esModule = true;
  
  var _postcss = require('postcss');
  
  var _postcss2 = _interopRequireDefault(_postcss);
  
  var _postcssValueParser = require('postcss-value-parser');
  
  var _postcssValueParser2 = _interopRequireDefault(_postcssValueParser);
  
  var _evenValues = require('./evenValues');
  
  var _evenValues2 = _interopRequireDefault(_evenValues);
  
  var _getArguments = require('./getArguments');
  
  var _getArguments2 = _interopRequireDefault(_getArguments);
  
  var _getMatch = require('./getMatch');
  
  var _getMatch2 = _interopRequireDefault(_getMatch);
  
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  
  var mappings = [['repeat-x', ['repeat', 'no-repeat']], ['repeat-y', ['no-repeat', 'repeat']], ['repeat', ['repeat', 'repeat']], ['space', ['space', 'space']], ['round', ['round', 'round']], ['no-repeat', ['no-repeat', 'no-repeat']]];
  
  var repeat = [mappings[0][0], mappings[1][0], mappings[2][0], mappings[3][0], mappings[4][0], mappings[5][0]];
  
  var getMatch = (0, _getMatch2.default)(mappings);
  
  function transform(decl) {
      var values = (0, _postcssValueParser2.default)(decl.value);
      if (values.nodes.length === 1) {
          return;
      }
      var args = (0, _getArguments2.default)(values);
      var relevant = [];
      args.forEach(function (arg) {
          relevant.push({
              start: null,
              end: null
          });
          arg.forEach(function (part, index) {
              var isRepeat = ~repeat.indexOf(part.value);
              var len = relevant.length - 1;
              if (relevant[len].start === null && isRepeat) {
                  relevant[len].start = index;
                  relevant[len].end = index;
                  return;
              }
              if (relevant[len].start !== null) {
                  if (part.type === 'space') {
                      return;
                  } else if (isRepeat) {
                      relevant[len].end = index;
                      return;
                  }
                  return;
              }
          });
      });
      relevant.forEach(function (range, index) {
          if (range.start === null) {
              return;
          }
          var val = args[index].slice(range.start, range.end + 1);
          if (val.length !== 3) {
              return;
          }
          var match = getMatch(val.filter(_evenValues2.default).map(function (n) {
              return n.value;
          }));
          if (match.length) {
              args[index][range.start].value = match[0][0];
              args[index][range.start + 1].value = '';
              args[index][range.end].value = '';
          }
      });
      decl.value = values.toString();
  }
  
  var plugin = _postcss2.default.plugin('cssnano-reduce-background-repeat', function () {
      return function (css) {
          return css.walkDecls(/background(-repeat|$)/, transform);
      };
  });
  
  plugin.mappings = mappings;
  
  exports.default = plugin;
  module.exports = exports['default'];