4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5 <title>The source code</title>
6 <link href="../prettify/prettify.css" type="text/css" rel="stylesheet" />
7 <script type="text/javascript" src="../prettify/prettify.js"></script>
8 <style type="text/css">
9 .highlight { display: block; background-color: #ddd; }
11 <script type="text/javascript">
12 function highlight() {
13 document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
17 <body onload="prettyPrint(); highlight();">
18 <pre class="prettyprint lang-js"><span id='Ext-fx-PropertyHandler'>/**
19 </span> * @class Ext.fx.PropertyHandler
22 Ext.define('Ext.fx.PropertyHandler', {
24 /* Begin Definitions */
26 requires: ['Ext.draw.Draw'],
30 pixelDefaults: ['width', 'height', 'top', 'left'],
31 unitRE: /^(-?\d*\.?\d*){1}(em|ex|px|in|cm|mm|pt|pc|%)*$/,
33 computeDelta: function(from, end, damper, initial, attr) {
34 damper = (typeof damper == 'number') ? damper : 1;
35 var match = this.unitRE.exec(from),
40 if (!units && Ext.Array.contains(this.pixelDefaults, attr)) {
46 match = this.unitRE.exec(end);
49 units = match[2] || units;
52 start = (initial != null) ? initial : from;
55 delta: (end - start) * damper,
60 get: function(from, end, damper, initialFrom, attr) {
63 i, initial, res, j, len;
64 for (i = 0; i < ln; i++) {
66 initial = initialFrom[i][1].from;
68 if (Ext.isArray(from[i][1]) && Ext.isArray(end)) {
71 len = from[i][1].length;
72 for (; j < len; j++) {
73 res.push(this.computeDelta(from[i][1][j], end[j], damper, initial, attr));
75 out.push([from[i][0], res]);
78 out.push([from[i][0], this.computeDelta(from[i][1], end, damper, initial, attr)]);
84 set: function(values, easing) {
85 var ln = values.length,
88 for (i = 0; i < ln; i++) {
90 if (Ext.isArray(val)) {
94 for (; j < len; j++) {
95 res.push(val[j].from + (val[j].delta * easing) + (val[j].units || 0));
97 out.push([values[i][0], res]);
99 out.push([values[i][0], val.from + (val.delta * easing) + (val.units || 0)]);
106 rgbRE: /^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,
107 hexRE: /^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,
108 hex3RE: /^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i,
110 parseColor : function(color, damper) {
111 damper = (typeof damper == 'number') ? damper : 1;
116 Ext.each([this.hexRE, this.rgbRE, this.hex3RE], function(re, idx) {
117 base = (idx % 2 == 0) ? 16 : 10;
118 match = re.exec(color);
119 if (match && match.length == 4) {
121 match[1] += match[1];
122 match[2] += match[2];
123 match[3] += match[3];
126 red: parseInt(match[1], base),
127 green: parseInt(match[2], base),
128 blue: parseInt(match[3], base)
136 computeDelta: function(from, end, damper, initial) {
137 from = this.parseColor(from);
138 end = this.parseColor(end, damper);
139 var start = initial ? initial : from,
140 tfrom = typeof start,
142 //Extra check for when the color string is not recognized.
143 if (tfrom == 'string' || tfrom == 'undefined'
144 || tend == 'string' || tend == 'undefined') {
150 red: Math.round((end.red - start.red) * damper),
151 green: Math.round((end.green - start.green) * damper),
152 blue: Math.round((end.blue - start.blue) * damper)
157 get: function(start, end, damper, initialFrom) {
158 var ln = start.length,
161 for (i = 0; i < ln; i++) {
163 initial = initialFrom[i][1].from;
165 out.push([start[i][0], this.computeDelta(start[i][1], end, damper, initial)]);
170 set: function(values, easing) {
171 var ln = values.length,
173 i, val, parsedString, from, delta;
174 for (i = 0; i < ln; i++) {
179 //multiple checks to reformat the color if it can't recognized by computeDelta.
180 val = (typeof val == 'object' && 'red' in val)?
181 'rgb(' + val.red + ', ' + val.green + ', ' + val.blue + ')' : val;
182 val = (typeof val == 'object' && val.length)? val[0] : val;
183 if (typeof val == 'undefined') {
186 parsedString = typeof val == 'string'? val :
188 (from.red + Math.round(delta.red * easing)) % 256,
189 (from.green + Math.round(delta.green * easing)) % 256,
190 (from.blue + Math.round(delta.blue * easing)) % 256
202 interpolate: function(prop, damper) {
203 damper = (typeof damper == 'number') ? damper : 1;
207 out[p] = parseInt(prop[p], 10) * damper;
212 computeDelta: function(from, end, damper, initial) {
213 from = this.interpolate(from);
214 end = this.interpolate(end, damper);
215 var start = initial ? initial : from,
220 delta[p] = end[p] - start[p];
228 get: function(start, end, damper, initialFrom) {
229 var ln = start.length,
232 for (i = 0; i < ln; i++) {
234 initial = initialFrom[i][1].from;
236 out.push([start[i][0], this.computeDelta(start[i][1], end, damper, initial)]);
241 set: function(values, easing) {
242 var ln = values.length,
245 i, from, delta, val, p;
246 for (i = 0; i < ln; i++) {
251 outObject[p] = Math.round(from[p] + delta[p] * easing);
263 computeDelta: function(from, end, damper, initial) {
264 damper = (typeof damper == 'number') ? damper : 1;
268 start = (initial != null) ? initial : from;
271 delta: (end - start) * damper
275 forcePath: function(path) {
276 if (!Ext.isArray(path) && !Ext.isArray(path[0])) {
277 path = Ext.draw.Draw.parsePathString(path);
282 get: function(start, end, damper, initialFrom) {
283 var endPath = this.forcePath(end),
285 startLn = start.length,
286 startPathLn, pointsLn, i, deltaPath, initial, j, k, path, startPath;
287 for (i = 0; i < startLn; i++) {
288 startPath = this.forcePath(start[i][1]);
290 deltaPath = Ext.draw.Draw.interpolatePaths(startPath, endPath);
291 startPath = deltaPath[0];
292 endPath = deltaPath[1];
294 startPathLn = startPath.length;
296 for (j = 0; j < startPathLn; j++) {
297 deltaPath = [startPath[j][0]];
298 pointsLn = startPath[j].length;
299 for (k = 1; k < pointsLn; k++) {
300 initial = initialFrom && initialFrom[0][1][j][k].from;
301 deltaPath.push(this.computeDelta(startPath[j][k], endPath[j][k], damper, initial));
303 path.push(deltaPath);
305 out.push([start[i][0], path]);
310 set: function(values, easing) {
311 var ln = values.length,
313 i, j, k, newPath, calcPath, deltaPath, deltaPathLn, pointsLn;
314 for (i = 0; i < ln; i++) {
315 deltaPath = values[i][1];
317 deltaPathLn = deltaPath.length;
318 for (j = 0; j < deltaPathLn; j++) {
319 calcPath = [deltaPath[j][0]];
320 pointsLn = deltaPath[j].length;
321 for (k = 1; k < pointsLn; k++) {
322 calcPath.push(deltaPath[j][k].from + deltaPath[j][k].delta * easing);
324 newPath.push(calcPath.join(','));
326 out.push([values[i][0], newPath.join(',')]);
331 /* End Definitions */
345 this[prop] = this.color;