Blame view

node_modules/svgo/plugins/removeUselessStrokeAndFill.js 2.37 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
  'use strict';
  
  exports.type = 'perItem';
  
  exports.active = true;
  
  exports.description = 'removes useless stroke and fill attributes';
  
  exports.params = {
      stroke: true,
      fill: true
  };
  
  var shape = require('./_collections').elemsGroups.shape,
      regStrokeProps = /^stroke/,
      regFillProps = /^fill-/,
      styleOrScript = ['style', 'script'],
      hasStyleOrScript = false;
  
  /**
   * Remove useless stroke and fill attrs.
   *
   * @param {Object} item current iteration item
   * @param {Object} params plugin params
   * @return {Boolean} if false, item will be filtered out
   *
   * @author Kir Belevich
   */
  exports.fn = function(item, params) {
  
      if (item.isElem(styleOrScript)) {
          hasStyleOrScript = true;
      }
  
      if (!hasStyleOrScript && item.isElem(shape) && !item.computedAttr('id')) {
  
          var stroke = params.stroke && item.computedAttr('stroke'),
              fill = params.fill && !item.computedAttr('fill', 'none');
  
          // remove stroke*
          if (
              params.stroke &&
              (!stroke ||
                  stroke == 'none' ||
                  item.computedAttr('stroke-opacity', '0') ||
                  item.computedAttr('stroke-width', '0')
              )
          ) {
              var parentStroke = item.parentNode.computedAttr('stroke'),
                  declineStroke = parentStroke && parentStroke != 'none';
  
              item.eachAttr(function(attr) {
                  if (regStrokeProps.test(attr.name)) {
                      item.removeAttr(attr.name);
                  }
              });
  
              if (declineStroke) item.addAttr({
                  name: 'stroke',
                  value: 'none',
                  prefix: '',
                  local: 'stroke'
              });
          }
  
          // remove fill*
          if (
              params.fill &&
              (!fill || item.computedAttr('fill-opacity', '0'))
          ) {
              item.eachAttr(function(attr) {
                  if (regFillProps.test(attr.name)) {
                      item.removeAttr(attr.name);
                  }
              });
  
              if (fill) {
                  if (item.hasAttr('fill'))
                      item.attr('fill').value = 'none';
                  else
                      item.addAttr({
                          name: 'fill',
                          value: 'none',
                          prefix: '',
                          local: 'fill'
                      });
              }
          }
  
      }
  
  };