Blame view

node_modules/autoprefixer/lib/hacks/transform-decl.js 2.32 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
  (function() {
    var Declaration, TransformDecl,
      extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
      hasProp = {}.hasOwnProperty;
  
    Declaration = require('../declaration');
  
    TransformDecl = (function(superClass) {
      extend(TransformDecl, superClass);
  
      function TransformDecl() {
        return TransformDecl.__super__.constructor.apply(this, arguments);
      }
  
      TransformDecl.names = ['transform', 'transform-origin'];
  
      TransformDecl.functions3d = ['matrix3d', 'translate3d', 'translateZ', 'scale3d', 'scaleZ', 'rotate3d', 'rotateX', 'rotateY', 'perspective'];
  
      TransformDecl.prototype.keyframeParents = function(decl) {
        var parent;
        parent = decl.parent;
        while (parent) {
          if (parent.type === 'atrule' && parent.name === 'keyframes') {
            return true;
          }
          parent = parent.parent;
        }
        return false;
      };
  
      TransformDecl.prototype.contain3d = function(decl) {
        var func, i, len, ref;
        if (decl.prop === 'transform-origin') {
          return false;
        }
        ref = TransformDecl.functions3d;
        for (i = 0, len = ref.length; i < len; i++) {
          func = ref[i];
          if (decl.value.indexOf(func + "(") !== -1) {
            return true;
          }
        }
        return false;
      };
  
      TransformDecl.prototype.set = function(decl, prefix) {
        decl = TransformDecl.__super__.set.apply(this, arguments);
        if (prefix === '-ms-') {
          decl.value = decl.value.replace(/rotateZ/gi, 'rotate');
        }
        return decl;
      };
  
      TransformDecl.prototype.insert = function(decl, prefix, prefixes) {
        if (prefix === '-ms-') {
          if (!this.contain3d(decl) && !this.keyframeParents(decl)) {
            return TransformDecl.__super__.insert.apply(this, arguments);
          }
        } else if (prefix === '-o-') {
          if (!this.contain3d(decl)) {
            return TransformDecl.__super__.insert.apply(this, arguments);
          }
        } else {
          return TransformDecl.__super__.insert.apply(this, arguments);
        }
      };
  
      return TransformDecl;
  
    })(Declaration);
  
    module.exports = TransformDecl;
  
  }).call(this);