]> git.proxmox.com Git - extjs.git/blame - extjs/classic/classic/src/fx/PropertyHandler.js
add extjs 6.0.1 sources
[extjs.git] / extjs / classic / classic / src / fx / PropertyHandler.js
CommitLineData
6527f429
DM
1/**\r
2 * @private\r
3 */\r
4Ext.define('Ext.fx.PropertyHandler', {\r
5\r
6 /* Begin Definitions */\r
7\r
8 requires: ['Ext.fx.DrawPath'],\r
9\r
10 statics: {\r
11 defaultHandler: {\r
12 pixelDefaultsRE: /width|height|top$|bottom$|left$|right$/i,\r
13 unitRE: /^(-?\d*\.?\d*){1}(em|ex|px|in|cm|mm|pt|pc|%)*$/,\r
14 scrollRE: /^scroll/i,\r
15\r
16 computeDelta: function(from, end, damper, initial, attr) {\r
17 damper = (typeof damper == 'number') ? damper : 1;\r
18 var unitRE = this.unitRE,\r
19 match = unitRE.exec(from),\r
20 start, units;\r
21 if (match) {\r
22 from = match[1];\r
23 units = match[2];\r
24 if (!this.scrollRE.test(attr) && !units && this.pixelDefaultsRE.test(attr)) {\r
25 units = 'px';\r
26 }\r
27 }\r
28 from = +from || 0;\r
29\r
30 match = unitRE.exec(end);\r
31 if (match) {\r
32 end = match[1];\r
33 units = match[2] || units;\r
34 }\r
35 end = +end || 0;\r
36 start = (initial != null) ? initial : from;\r
37 return {\r
38 from: from,\r
39 delta: (end - start) * damper,\r
40 units: units\r
41 };\r
42 },\r
43\r
44 get: function(from, end, damper, initialFrom, attr) {\r
45 var ln = from.length,\r
46 out = [],\r
47 i, initial, res, j, len;\r
48 for (i = 0; i < ln; i++) {\r
49 if (initialFrom) {\r
50 initial = initialFrom[i][1].from;\r
51 }\r
52 if (Ext.isArray(from[i][1]) && Ext.isArray(end)) {\r
53 res = [];\r
54 j = 0;\r
55 len = from[i][1].length;\r
56 for (; j < len; j++) {\r
57 res.push(this.computeDelta(from[i][1][j], end[j], damper, initial, attr));\r
58 }\r
59 out.push([from[i][0], res]);\r
60 }\r
61 else {\r
62 out.push([from[i][0], this.computeDelta(from[i][1], end, damper, initial, attr)]);\r
63 }\r
64 }\r
65 return out;\r
66 },\r
67\r
68 set: function(values, easing) {\r
69 var ln = values.length,\r
70 out = [],\r
71 i, val, res, len, j;\r
72 for (i = 0; i < ln; i++) {\r
73 val = values[i][1];\r
74 if (Ext.isArray(val)) {\r
75 res = [];\r
76 j = 0;\r
77 len = val.length;\r
78 for (; j < len; j++) {\r
79 res.push(val[j].from + val[j].delta * easing + (val[j].units || 0));\r
80 }\r
81 out.push([values[i][0], res]);\r
82 } else {\r
83 out.push([values[i][0], val.from + val.delta * easing + (val.units || 0)]);\r
84 }\r
85 }\r
86 return out;\r
87 }\r
88 },\r
89 stringHandler: {\r
90 computeDelta: function(from, end, damper, initial, attr) {\r
91 return {\r
92 from: from,\r
93 delta: end\r
94 };\r
95 },\r
96\r
97 get: function(from, end, damper, initialFrom, attr) {\r
98 var ln = from.length,\r
99 out = [],\r
100 i, initial;\r
101\r
102 for (i = 0; i < ln; i++) {\r
103 out.push([from[i][0], this.computeDelta(from[i][1], end, damper, initial, attr)]);\r
104 }\r
105\r
106 return out;\r
107 },\r
108\r
109 set: function(values, easing) {\r
110 var ln = values.length,\r
111 out = [],\r
112 i, val;\r
113\r
114 for (i = 0; i < ln; i++) {\r
115 val = values[i][1];\r
116 out.push([values[i][0], val.delta]);\r
117 }\r
118\r
119 return out;\r
120 }\r
121 },\r
122\r
123 color: {\r
124 rgbRE: /^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,\r
125 hexRE: /^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,\r
126 hex3RE: /^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i,\r
127\r
128 parseColor : function(color, damper) {\r
129 damper = (typeof damper == 'number') ? damper : 1;\r
130 var out = false,\r
131 reList = [this.hexRE, this.rgbRE, this.hex3RE],\r
132 length = reList.length,\r
133 match, base, re, i;\r
134\r
135 for (i = 0; i < length; i++) {\r
136 re = reList[i];\r
137\r
138 base = (i % 2 === 0) ? 16 : 10;\r
139 match = re.exec(color);\r
140 if (match && match.length === 4) {\r
141 if (i === 2) {\r
142 match[1] += match[1];\r
143 match[2] += match[2];\r
144 match[3] += match[3];\r
145 }\r
146 out = {\r
147 red: parseInt(match[1], base),\r
148 green: parseInt(match[2], base),\r
149 blue: parseInt(match[3], base)\r
150 };\r
151 break;\r
152 }\r
153 }\r
154\r
155 return out || color;\r
156 },\r
157\r
158 computeDelta: function(from, end, damper, initial) {\r
159 from = this.parseColor(from);\r
160 end = this.parseColor(end, damper);\r
161\r
162 var start = initial ? initial : from,\r
163 tfrom = typeof start,\r
164 tend = typeof end;\r
165\r
166 //Extra check for when the color string is not recognized.\r
167 if (tfrom === 'string' || tfrom === 'undefined' ||\r
168 tend === 'string' || tend === 'undefined') {\r
169 return end || start;\r
170 }\r
171\r
172 return {\r
173 from: from,\r
174 delta: {\r
175 red: Math.round((end.red - start.red) * damper),\r
176 green: Math.round((end.green - start.green) * damper),\r
177 blue: Math.round((end.blue - start.blue) * damper)\r
178 }\r
179 };\r
180 },\r
181\r
182 get: function(start, end, damper, initialFrom) {\r
183 var ln = start.length,\r
184 out = [],\r
185 i, initial;\r
186 for (i = 0; i < ln; i++) {\r
187 if (initialFrom) {\r
188 initial = initialFrom[i][1].from;\r
189 }\r
190 out.push([start[i][0], this.computeDelta(start[i][1], end, damper, initial)]);\r
191 }\r
192 return out;\r
193 },\r
194\r
195 set: function(values, easing) {\r
196 var ln = values.length,\r
197 out = [],\r
198 i, val, parsedString, from, delta;\r
199 for (i = 0; i < ln; i++) {\r
200 val = values[i][1];\r
201 if (val) {\r
202 from = val.from;\r
203 delta = val.delta;\r
204 //multiple checks to reformat the color if it can't recognized by computeDelta.\r
205 val = (typeof val === 'object' && 'red' in val) ?\r
206 'rgb(' + val.red + ', ' + val.green + ', ' + val.blue + ')' : val;\r
207 val = (typeof val === 'object' && val.length)? val[0] : val;\r
208 if (typeof val === 'undefined') {\r
209 return [];\r
210 }\r
211 parsedString = typeof val === 'string'? val :\r
212 'rgb(' + [\r
213 (from.red + Math.round(delta.red * easing)) % 256,\r
214 (from.green + Math.round(delta.green * easing)) % 256,\r
215 (from.blue + Math.round(delta.blue * easing)) % 256\r
216 ].join(',') + ')';\r
217 out.push([\r
218 values[i][0],\r
219 parsedString\r
220 ]);\r
221 }\r
222 }\r
223 return out;\r
224 }\r
225 },\r
226 object: {\r
227 interpolate: function(prop, damper) {\r
228 damper = (typeof damper === 'number') ? damper : 1;\r
229 var out = {},\r
230 p;\r
231 for(p in prop) {\r
232 out[p] = parseFloat(prop[p]) * damper;\r
233 }\r
234 return out;\r
235 },\r
236\r
237 computeDelta: function(from, end, damper, initial) {\r
238 from = this.interpolate(from);\r
239 end = this.interpolate(end, damper);\r
240 var start = initial ? initial : from,\r
241 delta = {},\r
242 p;\r
243\r
244 for(p in end) {\r
245 delta[p] = end[p] - start[p];\r
246 }\r
247 return {\r
248 from: from,\r
249 delta: delta\r
250 };\r
251 },\r
252\r
253 get: function(start, end, damper, initialFrom) {\r
254 var ln = start.length,\r
255 out = [],\r
256 i, initial;\r
257 for (i = 0; i < ln; i++) {\r
258 if (initialFrom) {\r
259 initial = initialFrom[i][1].from;\r
260 }\r
261 out.push([start[i][0], this.computeDelta(start[i][1], end, damper, initial)]);\r
262 }\r
263 return out;\r
264 },\r
265\r
266 set: function(values, easing) {\r
267 var ln = values.length,\r
268 out = [],\r
269 outObject = {},\r
270 i, from, delta, val, p;\r
271 for (i = 0; i < ln; i++) {\r
272 val = values[i][1];\r
273 from = val.from;\r
274 delta = val.delta;\r
275 for (p in from) {\r
276 outObject[p] = from[p] + delta[p] * easing;\r
277 }\r
278 out.push([\r
279 values[i][0],\r
280 outObject\r
281 ]);\r
282 }\r
283 return out;\r
284 }\r
285 },\r
286\r
287 path: {\r
288 computeDelta: function(from, end, damper, initial) {\r
289 damper = (typeof damper === 'number') ? damper : 1;\r
290 var start;\r
291 from = +from || 0;\r
292 end = +end || 0;\r
293 start = (initial != null) ? initial : from;\r
294 return {\r
295 from: from,\r
296 delta: (end - start) * damper\r
297 };\r
298 },\r
299\r
300 forcePath: function(path) {\r
301 if (!Ext.isArray(path) && !Ext.isArray(path[0])) {\r
302 path = Ext.fx.DrawPath.parsePathString(path);\r
303 }\r
304 return path;\r
305 },\r
306\r
307 get: function(start, end, damper, initialFrom) {\r
308 var endPath = this.forcePath(end),\r
309 out = [],\r
310 startLn = start.length,\r
311 startPathLn, pointsLn, i, deltaPath, initial, j, k, path, startPath;\r
312 for (i = 0; i < startLn; i++) {\r
313 startPath = this.forcePath(start[i][1]);\r
314\r
315 deltaPath = Ext.fx.DrawPath.interpolatePaths(startPath, endPath);\r
316 startPath = deltaPath[0];\r
317 endPath = deltaPath[1];\r
318\r
319 startPathLn = startPath.length;\r
320 path = [];\r
321 for (j = 0; j < startPathLn; j++) {\r
322 deltaPath = [startPath[j][0]];\r
323 pointsLn = startPath[j].length;\r
324 for (k = 1; k < pointsLn; k++) {\r
325 initial = initialFrom && initialFrom[0][1][j][k].from;\r
326 deltaPath.push(this.computeDelta(startPath[j][k], endPath[j][k], damper, initial));\r
327 }\r
328 path.push(deltaPath);\r
329 }\r
330 out.push([start[i][0], path]);\r
331 }\r
332 return out;\r
333 },\r
334\r
335 set: function(values, easing) {\r
336 var ln = values.length,\r
337 out = [],\r
338 i, j, k, newPath, calcPath, deltaPath, deltaPathLn, pointsLn;\r
339 for (i = 0; i < ln; i++) {\r
340 deltaPath = values[i][1];\r
341 newPath = [];\r
342 deltaPathLn = deltaPath.length;\r
343 for (j = 0; j < deltaPathLn; j++) {\r
344 calcPath = [deltaPath[j][0]];\r
345 pointsLn = deltaPath[j].length;\r
346 for (k = 1; k < pointsLn; k++) {\r
347 calcPath.push(deltaPath[j][k].from + deltaPath[j][k].delta * easing);\r
348 }\r
349 newPath.push(calcPath.join(','));\r
350 }\r
351 out.push([values[i][0], newPath.join(',')]);\r
352 }\r
353 return out;\r
354 }\r
355 }\r
356 /* End Definitions */\r
357 }\r
358}, function() {\r
359 //set color properties to color interpolator\r
360 var props = [\r
361 'outlineColor',\r
362 'backgroundColor',\r
363 'borderColor',\r
364 'borderTopColor',\r
365 'borderRightColor',\r
366 'borderBottomColor',\r
367 'borderLeftColor',\r
368 'fill',\r
369 'stroke'\r
370 ],\r
371 length = props.length,\r
372 i = 0,\r
373 prop;\r
374\r
375 for (; i<length; i++) {\r
376 prop = props[i];\r
377 this[prop] = this.color;\r
378 }\r
379 \r
380 //set string properties to string\r
381 props = ['cursor'];\r
382 length = props.length;\r
383 i = 0;\r
384\r
385 for (; i<length; i++) {\r
386 prop = props[i];\r
387 this[prop] = this.stringHandler;\r
388 }\r
389});\r