]> git.proxmox.com Git - extjs.git/blame - extjs/classic/classic/src/fx/Queue.js
add extjs 6.0.1 sources
[extjs.git] / extjs / classic / classic / src / fx / Queue.js
CommitLineData
6527f429
DM
1/**\r
2 * @class Ext.fx.Queue\r
3 * Animation Queue mixin to handle chaining and queueing by target.\r
4 * @private\r
5 */\r
6\r
7Ext.define('Ext.fx.Queue', {\r
8\r
9 requires: ['Ext.util.HashMap'],\r
10\r
11 constructor: function() {\r
12 this.targets = new Ext.util.HashMap();\r
13 this.fxQueue = {};\r
14 },\r
15\r
16 /**\r
17 * @private\r
18 */\r
19 getFxDefaults: function(targetId) {\r
20 var target = this.targets.get(targetId);\r
21 if (target) {\r
22 return target.fxDefaults;\r
23 }\r
24 return {};\r
25 },\r
26\r
27 /**\r
28 * @private\r
29 */\r
30 setFxDefaults: function(targetId, obj) {\r
31 var target = this.targets.get(targetId);\r
32 if (target) {\r
33 target.fxDefaults = Ext.apply(target.fxDefaults || {}, obj);\r
34 }\r
35 },\r
36\r
37 /**\r
38 * @private\r
39 */\r
40 stopAnimation: function(targetId) {\r
41 var me = this,\r
42 queue = me.getFxQueue(targetId),\r
43 ln = queue.length,\r
44 item;\r
45 \r
46 while (ln) {\r
47 item = queue[ln - 1];\r
48 \r
49 if (item) {\r
50 item.end();\r
51 }\r
52 \r
53 ln--;\r
54 }\r
55 },\r
56\r
57 /**\r
58 * @private\r
59 * Returns current animation object if the element has any effects actively running or queued, else returns false.\r
60 */\r
61 getActiveAnimation: function(targetId) {\r
62 var queue = this.getFxQueue(targetId);\r
63 return (queue && !!queue.length) ? queue[0] : false;\r
64 },\r
65\r
66 /**\r
67 * @private\r
68 */\r
69 hasFxBlock: function(targetId) {\r
70 var queue = this.getFxQueue(targetId);\r
71 return queue && queue[0] && queue[0].block;\r
72 },\r
73\r
74 /**\r
75 * @private\r
76 * Get fx queue for passed target, create if needed.\r
77 */\r
78 getFxQueue: function(targetId) {\r
79 if (!targetId) {\r
80 return false;\r
81 }\r
82 var me = this,\r
83 queue = me.fxQueue[targetId],\r
84 target = me.targets.get(targetId);\r
85\r
86 if (!target) {\r
87 return false;\r
88 }\r
89\r
90 if (!queue) {\r
91 me.fxQueue[targetId] = [];\r
92 // GarbageCollector will need to clean up Elements since they aren't currently observable\r
93 if (target.type !== 'element') {\r
94 target.target.on('destroy', function() {\r
95 me.fxQueue[targetId] = [];\r
96 });\r
97 }\r
98 }\r
99 return me.fxQueue[targetId];\r
100 },\r
101\r
102 /**\r
103 * @private\r
104 */\r
105 queueFx: function(anim) {\r
106 var me = this,\r
107 target = anim.target,\r
108 queue, ln;\r
109\r
110 if (!target) {\r
111 return;\r
112 }\r
113\r
114 queue = me.getFxQueue(target.getId());\r
115 ln = queue.length;\r
116\r
117 if (ln) {\r
118 if (anim.concurrent) {\r
119 anim.paused = false;\r
120 }\r
121 else {\r
122 queue[ln - 1].on('afteranimate', function() {\r
123 anim.paused = false;\r
124 });\r
125 }\r
126 }\r
127 else {\r
128 anim.paused = false;\r
129 }\r
130 anim.on('afteranimate', function() {\r
131 Ext.Array.remove(queue, anim);\r
132 if (queue.length === 0) {\r
133 me.targets.remove(anim.target);\r
134 }\r
135 if (anim.remove) {\r
136 if (target.type === 'element') {\r
137 var el = Ext.get(target.id);\r
138 if (el) {\r
139 el.destroy();\r
140 }\r
141 }\r
142 }\r
143 }, me, {\r
144 single: true\r
145 });\r
146 queue.push(anim);\r
147 }\r
148});