-
Notifications
You must be signed in to change notification settings - Fork 68
/
jquery-css-transform.js
112 lines (104 loc) · 4.01 KB
/
jquery-css-transform.js
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
(function ($) {
// Monkey patch jQuery 1.3.1+ css() method to support CSS 'transform'
// property uniformly across Safari/Chrome/Webkit, Firefox 3.5+, IE 9+, and Opera 11+.
// 2009-2011 Zachary Johnson www.zachstronaut.com
// Updated 2011.05.04 (May the fourth be with you!)
function getTransformProperty(element)
{
// Try transform first for forward compatibility
// In some versions of IE9, it is critical for msTransform to be in
// this list before MozTranform.
var properties = ['transform', 'WebkitTransform', 'msTransform', 'MozTransform', 'OTransform'];
var p;
while (p = properties.shift())
{
if (typeof element.style[p] != 'undefined')
{
return p;
}
}
// Default to transform also
return 'transform';
}
var _propsObj = null;
var proxied = $.fn.css;
$.fn.css = function (arg, val)
{
// Temporary solution for current 1.6.x incompatibility, while
// preserving 1.3.x compatibility, until I can rewrite using CSS Hooks
if (_propsObj === null)
{
if (typeof $.cssProps != 'undefined')
{
_propsObj = $.cssProps;
}
else if (typeof $.props != 'undefined')
{
_propsObj = $.props;
}
else
{
_propsObj = {}
}
}
// Find the correct browser specific property and setup the mapping using
// $.props which is used internally by jQuery.attr() when setting CSS
// properties via either the css(name, value) or css(properties) method.
// The problem with doing this once outside of css() method is that you
// need a DOM node to find the right CSS property, and there is some risk
// that somebody would call the css() method before body has loaded or any
// DOM-is-ready events have fired.
if
(
typeof _propsObj['transform'] == 'undefined'
&&
(
arg == 'transform'
||
(
typeof arg == 'object'
&& typeof arg['transform'] != 'undefined'
)
)
)
{
_propsObj['transform'] = getTransformProperty(this.get(0));
}
// We force the property mapping here because jQuery.attr() does
// property mapping with jQuery.props when setting a CSS property,
// but curCSS() does *not* do property mapping when *getting* a
// CSS property. (It probably should since it manually does it
// for 'float' now anyway... but that'd require more testing.)
//
// But, only do the forced mapping if the correct CSS property
// is not 'transform' and is something else.
if (_propsObj['transform'] != 'transform')
{
// Call in form of css('transform' ...)
if (arg == 'transform')
{
arg = _propsObj['transform'];
// User wants to GET the transform CSS, and in jQuery 1.4.3
// calls to css() for transforms return a matrix rather than
// the actual string specified by the user... avoid that
// behavior and return the string by calling jQuery.style()
// directly
if (typeof val == 'undefined' && jQuery.style)
{
return jQuery.style(this.get(0), arg);
}
}
// Call in form of css({'transform': ...})
else if
(
typeof arg == 'object'
&& typeof arg['transform'] != 'undefined'
)
{
arg[_propsObj['transform']] = arg['transform'];
delete arg['transform'];
}
}
return proxied.apply(this, arguments);
};
})(jQuery);