75 lines
2.3 KiB
JavaScript
75 lines
2.3 KiB
JavaScript
|
(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);
|