Upgrade to ExtJS 3.0.3 - Released 10/11/2009
[extjs.git] / src / adapter / core / ext-base-anim-extra.js
1 /*!
2  * Ext JS Library 3.0.3
3  * Copyright(c) 2006-2009 Ext JS, LLC
4  * licensing@extjs.com
5  * http://www.extjs.com/license
6  */
7 // Easing functions\r
8 (function(){\r
9         // shortcuts to aid compression\r
10         var abs = Math.abs,\r
11                 pi = Math.PI,\r
12                 asin = Math.asin,\r
13                 pow = Math.pow,\r
14                 sin = Math.sin,\r
15                 EXTLIB = Ext.lib;\r
16                 \r
17     Ext.apply(EXTLIB.Easing, {\r
18         \r
19         easeBoth: function (t, b, c, d) {\r
20                 return ((t /= d / 2) < 1)  ?  c / 2 * t * t + b  :  -c / 2 * ((--t) * (t - 2) - 1) + b;               \r
21         },\r
22         \r
23         easeInStrong: function (t, b, c, d) {\r
24             return c * (t /= d) * t * t * t + b;\r
25         },\r
26 \r
27         easeOutStrong: function (t, b, c, d) {\r
28             return -c * ((t = t / d - 1) * t * t * t - 1) + b;\r
29         },\r
30 \r
31         easeBothStrong: function (t, b, c, d) {\r
32             return ((t /= d / 2) < 1)  ?  c / 2 * t * t * t * t + b  :  -c / 2 * ((t -= 2) * t * t * t - 2) + b;\r
33         },\r
34 \r
35         elasticIn: function (t, b, c, d, a, p) {\r
36                 if (t == 0 || (t /= d) == 1) {\r
37                 return t == 0 ? b : b + c;\r
38             }               \r
39             p = p || (d * .3);              \r
40 \r
41                         var s;\r
42                         if (a >= abs(c)) {\r
43                                 s = p / (2 * pi) * asin(c / a);\r
44                         } else {\r
45                                 a = c;\r
46                                 s = p / 4;\r
47                         }\r
48         \r
49             return -(a * pow(2, 10 * (t -= 1)) * sin((t * d - s) * (2 * pi) / p)) + b;\r
50                       \r
51         },      \r
52         \r
53                 elasticOut: function (t, b, c, d, a, p) {\r
54                 if (t == 0 || (t /= d) == 1) {\r
55                 return t == 0 ? b : b + c;\r
56             }               \r
57             p = p || (d * .3);              \r
58 \r
59                         var s;\r
60                         if (a >= abs(c)) {\r
61                                 s = p / (2 * pi) * asin(c / a);\r
62                         } else {\r
63                                 a = c;\r
64                                 s = p / 4;\r
65                         }\r
66         \r
67             return a * pow(2, -10 * t) * sin((t * d - s) * (2 * pi) / p) + c + b;        \r
68         },      \r
69         \r
70         elasticBoth: function (t, b, c, d, a, p) {\r
71             if (t == 0 || (t /= d / 2) == 2) {\r
72                 return t == 0 ? b : b + c;\r
73             }                           \r
74                     \r
75             p = p || (d * (.3 * 1.5));              \r
76 \r
77             var s;\r
78             if (a >= abs(c)) {\r
79                     s = p / (2 * pi) * asin(c / a);\r
80             } else {\r
81                     a = c;\r
82                 s = p / 4;\r
83             }\r
84 \r
85             return t < 1 ?\r
86                         -.5 * (a * pow(2, 10 * (t -= 1)) * sin((t * d - s) * (2 * pi) / p)) + b :\r
87                     a * pow(2, -10 * (t -= 1)) * sin((t * d - s) * (2 * pi) / p) * .5 + c + b;\r
88         },\r
89 \r
90         backIn: function (t, b, c, d, s) {\r
91             s = s ||  1.70158;              \r
92             return c * (t /= d) * t * ((s + 1) * t - s) + b;\r
93         },\r
94 \r
95 \r
96         backOut: function (t, b, c, d, s) {\r
97             if (!s) {\r
98                 s = 1.70158;\r
99             }\r
100             return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\r
101         },\r
102 \r
103 \r
104         backBoth: function (t, b, c, d, s) {\r
105             s = s || 1.70158;               \r
106 \r
107             return ((t /= d / 2 ) < 1) ?\r
108                     c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b :                  \r
109                         c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;\r
110         },\r
111 \r
112 \r
113         bounceIn: function (t, b, c, d) {\r
114             return c - EXTLIB.Easing.bounceOut(d - t, 0, c, d) + b;\r
115         },\r
116 \r
117 \r
118         bounceOut: function (t, b, c, d) {\r
119         if ((t /= d) < (1 / 2.75)) {\r
120                 return c * (7.5625 * t * t) + b;\r
121             } else if (t < (2 / 2.75)) {\r
122                 return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b;\r
123             } else if (t < (2.5 / 2.75)) {\r
124                 return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b;\r
125             }\r
126             return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b;\r
127         },\r
128 \r
129 \r
130         bounceBoth: function (t, b, c, d) {\r
131             return (t < d / 2) ?\r
132                    EXTLIB.Easing.bounceIn(t * 2, 0, c, d) * .5 + b : \r
133                    EXTLIB.Easing.bounceOut(t * 2 - d, 0, c, d) * .5 + c * .5 + b;\r
134         }\r
135     });\r
136 })();\r
137 \r
138 (function() {\r
139     var EXTLIB = Ext.lib;\r
140         // Color Animation\r
141         EXTLIB.Anim.color = function(el, args, duration, easing, cb, scope) {\r
142             return EXTLIB.Anim.run(el, args, duration, easing, cb, scope, EXTLIB.ColorAnim);\r
143         }\r
144         \r
145     EXTLIB.ColorAnim = function(el, attributes, duration, method) {\r
146         EXTLIB.ColorAnim.superclass.constructor.call(this, el, attributes, duration, method);\r
147     };\r
148 \r
149     Ext.extend(EXTLIB.ColorAnim, EXTLIB.AnimBase);\r
150 \r
151     var superclass = EXTLIB.ColorAnim.superclass,\r
152         colorRE = /color$/i,\r
153         transparentRE = /^transparent|rgba\(0, 0, 0, 0\)$/,\r
154         rgbRE = /^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,\r
155         hexRE= /^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,\r
156         hex3RE = /^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i,\r
157         isset = function(v){\r
158             return typeof v !== 'undefined';\r
159         }\r
160                 \r
161         // private      \r
162     function parseColor(s) {    \r
163         var pi = parseInt,\r
164             base,\r
165             out = null,\r
166             c;\r
167         \r
168             if (s.length == 3) {\r
169             return s;\r
170         }\r
171         \r
172         Ext.each([hexRE, rgbRE, hex3RE], function(re, idx){\r
173             base = (idx % 2 == 0) ? 16 : 10;\r
174             c = re.exec(s);\r
175             if(c && c.length == 4){\r
176                 out = [pi(c[1], base), pi(c[2], base), pi(c[3], base)];\r
177                 return false;\r
178             }\r
179         });\r
180         return out;\r
181     }   \r
182 \r
183     Ext.apply(EXTLIB.ColorAnim.prototype, {\r
184         getAttr : function(attr) {\r
185             var me = this,\r
186                 el = me.el,\r
187                 val;                \r
188             if(colorRE.test(attr)){\r
189                 while(el && transparentRE.test(val = Ext.fly(el).getStyle(attr))){\r
190                     el = el.parentNode;\r
191                     val = "fff";\r
192                 }\r
193             }else{\r
194                 val = superclass.getAttr.call(me, attr);\r
195             }\r
196             return val;\r
197         },\r
198 \r
199         doMethod : function(attr, start, end) {\r
200             var me = this,\r
201                 val,\r
202                 floor = Math.floor;            \r
203 \r
204             if(colorRE.test(attr)){\r
205                 val = [];\r
206              \r
207                     Ext.each(start, function(v, i) {\r
208                     val[i] = superclass.doMethod.call(me, attr, v, end[i]);\r
209                 });\r
210 \r
211                 val = 'rgb(' + floor(val[0]) + ',' + floor(val[1]) + ',' + floor(val[2]) + ')';\r
212             }else{\r
213                 val = superclass.doMethod.call(me, attr, start, end);\r
214             }\r
215             return val;\r
216         },\r
217 \r
218         setRunAttr : function(attr) {\r
219             var me = this,\r
220                 a = me.attributes[attr],\r
221                 to = a.to,\r
222                 by = a.by,\r
223                 ra;\r
224                 \r
225             superclass.setRunAttr.call(me, attr);\r
226             ra = me.runAttrs[attr];\r
227             if(colorRE.test(attr)){\r
228                 var start = parseColor(ra.start),\r
229                     end = parseColor(ra.end);\r
230 \r
231                 if(!isset(to) && isset(by)){\r
232                     end = parseColor(by);\r
233                     Ext.each(start, function(item, i){\r
234                         end[i] = item + end[i];\r
235                     });\r
236                 }\r
237                 ra.start = start;\r
238                 ra.end = end;\r
239             }\r
240         }\r
241         });\r
242 })();   \r
243 \r
244         \r
245 (function() {\r
246             // Scroll Animation \r
247     var EXTLIB = Ext.lib;\r
248         EXTLIB.Anim.scroll = function(el, args, duration, easing, cb, scope) {          \r
249             return EXTLIB.Anim.run(el, args, duration, easing, cb, scope, EXTLIB.Scroll);\r
250         }\r
251         \r
252     EXTLIB.Scroll = function(el, attributes, duration, method) {\r
253         if(el){\r
254             EXTLIB.Scroll.superclass.constructor.call(this, el, attributes, duration, method);\r
255         }\r
256     };\r
257 \r
258     Ext.extend(EXTLIB.Scroll, EXTLIB.ColorAnim);\r
259 \r
260     var superclass = EXTLIB.Scroll.superclass,\r
261         SCROLL = 'scroll';\r
262 \r
263     Ext.apply(EXTLIB.Scroll.prototype, {\r
264 \r
265         doMethod : function(attr, start, end) {\r
266             var val,\r
267                 me = this,\r
268                 curFrame = me.curFrame,\r
269                 totalFrames = me.totalFrames;\r
270 \r
271             if(attr == SCROLL){\r
272                 val = [me.method(curFrame, start[0], end[0] - start[0], totalFrames),\r
273                        me.method(curFrame, start[1], end[1] - start[1], totalFrames)];\r
274             }else{\r
275                 val = superclass.doMethod.call(me, attr, start, end);\r
276             }\r
277             return val;\r
278         },\r
279 \r
280         getAttr : function(attr) {\r
281             var me = this;\r
282 \r
283             if (attr == SCROLL) {\r
284                 return [me.el.scrollLeft, me.el.scrollTop];\r
285             }else{\r
286                 return superclass.getAttr.call(me, attr);\r
287             }\r
288         },\r
289 \r
290         setAttr : function(attr, val, unit) {\r
291             var me = this;\r
292 \r
293             if(attr == SCROLL){\r
294                 me.el.scrollLeft = val[0];\r
295                 me.el.scrollTop = val[1];\r
296             }else{\r
297                 superclass.setAttr.call(me, attr, val, unit);\r
298             }\r
299         }\r
300     });\r
301 })();