]>
Commit | Line | Data |
---|---|---|
6527f429 DM |
1 | /**\r |
2 | * @class Ext.EventManager\r | |
3 | * Registers event handlers on DOM elements.\r | |
4 | * \r | |
5 | * This class is deprecated. Please use the Ext.dom.Element api to attach listeners to\r | |
6 | * DOM Elements. For example:\r | |
7 | * \r | |
8 | * var element = Ext.get('myId');\r | |
9 | * \r | |
10 | * element.on('click', function(e) {\r | |
11 | * // event handling logic here\r | |
12 | * });\r | |
13 | *\r | |
14 | * @singleton\r | |
15 | * @deprecated 5.0.0\r | |
16 | */\r | |
17 | Ext.define('Ext.EventManager', {\r | |
18 | singleton: true,\r | |
19 | \r | |
20 | mouseLeaveRe: /(mouseout|mouseleave)/,\r | |
21 | mouseEnterRe: /(mouseover|mouseenter)/,\r | |
22 | \r | |
23 | /**\r | |
24 | * Appends an event handler to an element. The shorthand version {@link #on} is equivalent.\r | |
25 | * Typically you will use {@link Ext.dom.Element#addListener} directly on an Element in favor of\r | |
26 | * calling this version.\r | |
27 | *\r | |
28 | * {@link Ext.EventManager#on} is an alias for {@link Ext.EventManager#addListener}.\r | |
29 | *\r | |
30 | * @param {String/Ext.dom.Element/HTMLElement/Window} el The html element or id to assign the event handler to.\r | |
31 | *\r | |
32 | * @param {String} eventName The name of the event to listen for.\r | |
33 | * May also be an object who's property names are event names.\r | |
34 | *\r | |
35 | * @param {Function/String} [handler] The handler function the event invokes. A String parameter\r | |
36 | * is assumed to be method name in `scope` object, or Element object if no scope is provided.\r | |
37 | * @param {Ext.event.Event} handler.event The {@link Ext.event.Event EventObject} describing the event.\r | |
38 | * @param {Ext.dom.Element} handler.target The Element which was the target of the event.\r | |
39 | * Note that this may be filtered by using the `delegate` option.\r | |
40 | * @param {Object} handler.options The options object from the addListener call.\r | |
41 | *\r | |
42 | * @param {Object} [scope] The scope (`this` reference) in which the handler function is executed.\r | |
43 | * Defaults to the Element.\r | |
44 | *\r | |
45 | * @param {Object} [options] An object containing handler configuration properties.\r | |
46 | * This may contain any of the following properties (See {@link Ext.dom.Element#addListener}\r | |
47 | * for examples of how to use these options.):\r | |
48 | * @param {Object} options.scope The scope (`this` reference) in which the handler function is executed. Defaults to the Element.\r | |
49 | * @param {String} options.delegate A simple selector to filter the target or look for a descendant of the target. See {@link Ext.dom.Query} for\r | |
50 | * information about simple selectors.\r | |
51 | * @param {Boolean} options.stopEvent True to stop the event. That is stop propagation, and prevent the default action.\r | |
52 | * @param {Boolean} options.preventDefault True to prevent the default action\r | |
53 | * @param {Boolean} options.stopPropagation True to prevent event propagation\r | |
54 | * @param {Boolean} options.normalized False to pass a browser event to the handler function instead of an Ext.event.Event\r | |
55 | * @param {Number} options.delay The number of milliseconds to delay the invocation of the handler after te event fires.\r | |
56 | * @param {Boolean} options.single True to add a handler to handle just the next firing of the event, and then remove itself.\r | |
57 | * @param {Number} options.buffer Causes the handler to be scheduled to run in an {@link Ext.util.DelayedTask} delayed\r | |
58 | * by the specified number of milliseconds. If the event fires again within that time, the original\r | |
59 | * handler is *not* invoked, but the new handler is scheduled in its place.\r | |
60 | * @param {Ext.dom.Element} options.target Only call the handler if the event was fired on the target Element,\r | |
61 | * *not* if the event was bubbled up from a child node.\r | |
62 | * @param {Boolean} options.capture `true` to initiate capture which will fire the listeners on the target Element *before* any descendant Elements.\r | |
63 | * Normal events start with the target element and propagate upward to ancestor elements, whereas captured events propagate from the top of the DOM\r | |
64 | * downward to descendant elements. This option is the same as the useCapture parameter in the javascript addEventListener method.\r | |
65 | */\r | |
66 | addListener: function(element, eventName, fn, scope, options) {\r | |
67 | //<debug>\r | |
68 | Ext.log.warn("Ext.EventManager is deprecated. " +\r | |
69 | "Use Ext.dom.Element#addListener to attach an event listener.");\r | |
70 | //</debug>\r | |
71 | Ext.get(element).addListener(eventName, fn, scope, options);\r | |
72 | },\r | |
73 | \r | |
74 | /**\r | |
75 | * Adds a listener to be notified when the browser window is resized and provides resize event buffering (100 milliseconds),\r | |
76 | * passes new viewport width and height to handlers.\r | |
77 | * @param {Function} fn The handler function the window resize event invokes.\r | |
78 | * @param {Object} scope The scope (<code>this</code> reference) in which the handler function executes. Defaults to the browser window.\r | |
79 | * @param {Boolean} [options] Options object as passed to {@link Ext.dom.Element#addListener}\r | |
80 | * @deprecated 5.0.0 Use {@link Ext#method-on Ext.on}('resize', fn) to attach a window resize listener.\r | |
81 | */\r | |
82 | onWindowResize: function(fn, scope, options) {\r | |
83 | //<debug>\r | |
84 | Ext.log.warn("Ext.EventManager is deprecated. " +\r | |
85 | "Use Ext.on('resize', fn) to attach a window resize listener.");\r | |
86 | //</debug>\r | |
87 | Ext.GlobalEvents.on('resize', fn, scope, options);\r | |
88 | },\r | |
89 | \r | |
90 | /**\r | |
91 | * Adds a listener to be notified when the browser window is unloaded.\r | |
92 | * @param {Function} fn The handler function the window unload event invokes.\r | |
93 | * @param {Object} scope The scope (<code>this</code> reference) in which the handler function executes. Defaults to the browser window.\r | |
94 | * @param {Boolean} options Options object as passed to {@link Ext.dom.Element#addListener}\r | |
95 | * @deprecated 5.0.0\r | |
96 | */\r | |
97 | onWindowUnload: function(fn, scope, options) {\r | |
98 | //<debug>\r | |
99 | Ext.log.warn("Ext.EventManager is deprecated. " +\r | |
100 | "Use Ext.getWin().on('unload', fn) to attach a window unload listener.");\r | |
101 | //</debug>\r | |
102 | Ext.getWin().on('unload', fn, scope, options);\r | |
103 | },\r | |
104 | \r | |
105 | /**\r | |
106 | * Recursively removes all previous added listeners from an element and its children.\r | |
107 | * Typically you will use {@link Ext.dom.Element#clearListeners} directly on an Element\r | |
108 | * in favor of calling this method.\r | |
109 | * @param {String/Ext.dom.Element/HTMLElement/Window} el The id or html element from which\r | |
110 | * to remove all event handlers.\r | |
111 | * @param {String} eventName (optional) The name of the event.\r | |
112 | * @deprecated 5.0.0\r | |
113 | */\r | |
114 | purgeElement: function(element, eventName) {\r | |
115 | //<debug>\r | |
116 | Ext.log.warn("Ext.EventManager is deprecated. " +\r | |
117 | "Call clearListeners() on a Ext.dom.Element to remove all listeners.");\r | |
118 | //</debug>\r | |
119 | Ext.get(element).clearListeners();\r | |
120 | },\r | |
121 | \r | |
122 | /**\r | |
123 | * Removes all event handers from an element. Typically you will use {@link\r | |
124 | * Ext.dom.Element#clearListeners} directly on an Element in favor of calling this method.\r | |
125 | * @param {String/Ext.dom.Element/HTMLElement/Window} el The id or html element from which\r | |
126 | * to remove all event handlers.\r | |
127 | * @deprecated 5.0.0\r | |
128 | */\r | |
129 | removeAll: function(element) {\r | |
130 | //<debug>\r | |
131 | Ext.log.warn("Ext.EventManager is deprecated. " +\r | |
132 | "Call clearListeners() on a Ext.dom.Element to remove all listeners.");\r | |
133 | //</debug>\r | |
134 | Ext.get(element).clearListeners();\r | |
135 | },\r | |
136 | \r | |
137 | /**\r | |
138 | * Removes an event handler from an element. The shorthand version {@link #un} is equivalent. Typically\r | |
139 | * you will use {@link Ext.dom.Element#removeListener} directly on an Element in favor of calling this version.\r | |
140 | *\r | |
141 | * {@link Ext.EventManager#on} is an alias for {@link Ext.EventManager#addListener}.\r | |
142 | *\r | |
143 | * @param {String/Ext.dom.Element/HTMLElement/Window} el The id or html element from which to remove the listener.\r | |
144 | * @param {String} eventName The name of the event.\r | |
145 | * @param {Function} fn The handler function to remove. **This must be a reference to the function passed\r | |
146 | * into the {@link #addListener} call.**\r | |
147 | * @param {Object} scope If a scope (`this` reference) was specified when the listener was added,\r | |
148 | * then this must refer to the same object.\r | |
149 | */\r | |
150 | removeListener: function(element, eventName, fn, scope, options) {\r | |
151 | //<debug>\r | |
152 | Ext.log.warn("Ext.EventManager is deprecated. " +\r | |
153 | "Use Ext.dom.Element#removeListener to remove an event listener.");\r | |
154 | //</debug>\r | |
155 | Ext.get(element).removeListener(eventName, fn, scope, options);\r | |
156 | },\r | |
157 | \r | |
158 | /**\r | |
159 | * Removes the passed window resize listener.\r | |
160 | * @param {Function} fn The method the event invokes\r | |
161 | * @param {Object} scope The scope of handler\r | |
162 | * @deprecated 5.0.0\r | |
163 | */\r | |
164 | removeResizeListener: function(fn, scope) {\r | |
165 | //<debug>\r | |
166 | Ext.log.warn("Ext.EventManager is deprecated. " +\r | |
167 | "Use Ext.on('resize', fn) to detach a window resize listener.");\r | |
168 | //</debug>\r | |
169 | Ext.GlobalEvents.un('resize', fn, scope);\r | |
170 | },\r | |
171 | \r | |
172 | /**\r | |
173 | * Removes the passed window unload listener.\r | |
174 | * @param {Function} fn The method the event invokes\r | |
175 | * @param {Object} scope The scope of handler\r | |
176 | * @deprecated 5.0.0\r | |
177 | */\r | |
178 | removeUnloadListener: function(fn, scope) {\r | |
179 | //<debug>\r | |
180 | Ext.log.warn("Ext.EventManager is deprecated. " +\r | |
181 | "Use Ext.getWin().un('unload', fn) to detach a window unload listener.");\r | |
182 | //</debug>\r | |
183 | Ext.getWin().un('unload', fn, scope);\r | |
184 | },\r | |
185 | \r | |
186 | /**\r | |
187 | * Stop the event (preventDefault and stopPropagation)\r | |
188 | * @param {Event} event The event to stop\r | |
189 | * @deprecated 5.0.0\r | |
190 | */\r | |
191 | stopEvent: function(event) {\r | |
192 | //<debug>\r | |
193 | Ext.log.warn("Ext.EventManager.stopEvent() is deprecated. " +\r | |
194 | "Call stopEvent() directly on the Ext.event.Event instance instead.");\r | |
195 | //</debug>\r | |
196 | this.stopPropagation(event);\r | |
197 | this.preventDefault(event);\r | |
198 | },\r | |
199 | \r | |
200 | /**\r | |
201 | * Cancels bubbling of the event.\r | |
202 | * @param {Event} event The event to stop bubbling.\r | |
203 | * @deprecated 5.0.0\r | |
204 | */\r | |
205 | stopPropagation: function(event) {\r | |
206 | //<debug>\r | |
207 | Ext.log.warn("Ext.EventManager.stopPropagation() is deprecated. " +\r | |
208 | "Call stopPropagation() directly on the Ext.event.Event instance instead.");\r | |
209 | //</debug>\r | |
210 | event = event.browserEvent || event;\r | |
211 | if (event.stopPropagation) {\r | |
212 | event.stopPropagation();\r | |
213 | } else {\r | |
214 | event.cancelBubble = true;\r | |
215 | }\r | |
216 | },\r | |
217 | \r | |
218 | /**\r | |
219 | * Prevents the browsers default handling of the event.\r | |
220 | * @param {Event} event The event to prevent the default\r | |
221 | * @deprecated 5.0.0\r | |
222 | */\r | |
223 | preventDefault: function(event) {\r | |
224 | //<debug>\r | |
225 | Ext.log.warn("Ext.EventManager.preventDefault() is deprecated. " +\r | |
226 | "Call preventDefault() directly on the Ext.event.Event instance instead.");\r | |
227 | //</debug>\r | |
228 | event = event.browserEvent || event;\r | |
229 | if (event.preventDefault) {\r | |
230 | event.preventDefault();\r | |
231 | } else {\r | |
232 | event.returnValue = false;\r | |
233 | // Some keys events require setting the keyCode to -1 to be prevented\r | |
234 | try {\r | |
235 | // all ctrl + X and F1 -> F12\r | |
236 | if (event.ctrlKey || event.keyCode > 111 && event.keyCode < 124) {\r | |
237 | event.keyCode = -1;\r | |
238 | }\r | |
239 | } catch (e) {\r | |
240 | // see this outdated document http://support.microsoft.com/kb/934364/en-us for more info\r | |
241 | }\r | |
242 | }\r | |
243 | },\r | |
244 | \r | |
245 | /**\r | |
246 | * Get the id of the element. If one has not been assigned, automatically assign it.\r | |
247 | * @param {HTMLElement/Ext.dom.Element} element The element to get the id for.\r | |
248 | * @return {String} id\r | |
249 | * @deprecated 5.0.0\r | |
250 | */\r | |
251 | getId: function(element) {\r | |
252 | //<debug>\r | |
253 | Ext.log.warn("Ext.EventManager.getId() is deprecated. " +\r | |
254 | "Call Ext.get() to assign ids to elements.");\r | |
255 | //</debug>\r | |
256 | element = Ext.get(element);\r | |
257 | return element.id;\r | |
258 | },\r | |
259 | \r | |
260 | /**\r | |
261 | * Gets the related target from the event.\r | |
262 | * @param {Object} event The event\r | |
263 | * @return {HTMLElement} The related target.\r | |
264 | * @deprecated 5.0.0\r | |
265 | */\r | |
266 | getRelatedTarget: function(event) {\r | |
267 | //<debug>\r | |
268 | Ext.log.warn("Ext.EventManager.getRelatedTarget() is deprecated. " +\r | |
269 | "Call getRelatedTarget() directly on the Ext.event.Event instance instead.");\r | |
270 | //</debug>\r | |
271 | event = event.browserEvent || event;\r | |
272 | var target = event.relatedTarget;\r | |
273 | if (!target) {\r | |
274 | if (this.mouseLeaveRe.test(event.type)) {\r | |
275 | target = event.toElement;\r | |
276 | } else if (this.mouseEnterRe.test(event.type)) {\r | |
277 | target = event.fromElement;\r | |
278 | }\r | |
279 | }\r | |
280 | return this.resolveTextNode(target);\r | |
281 | },\r | |
282 | \r | |
283 | /**\r | |
284 | * Gets the x coordinate from the event\r | |
285 | * @param {Object} event The event\r | |
286 | * @return {Number} The x coordinate\r | |
287 | * @deprecated 5.0.0\r | |
288 | */\r | |
289 | getPageX: function(event) {\r | |
290 | //<debug>\r | |
291 | Ext.log.warn("Ext.EventManager.getPageX() is deprecated. " +\r | |
292 | "Call getX() directly on the Ext.event.Event instance instead.");\r | |
293 | //</debug>\r | |
294 | return this.getPageXY(event)[0];\r | |
295 | },\r | |
296 | \r | |
297 | /**\r | |
298 | * Gets the x & y coordinate from the event\r | |
299 | * @param {Object} event The event\r | |
300 | * @return {Number[]} The x/y coordinate\r | |
301 | * @deprecated 5.0.0\r | |
302 | */\r | |
303 | getPageXY: function(event) {\r | |
304 | //<debug>\r | |
305 | Ext.log.warn("Ext.EventManager.getPageXY() is deprecated. " +\r | |
306 | "Call getXY() directly on the Ext.event.Event instance instead.");\r | |
307 | //</debug>\r | |
308 | event = event.browserEvent || event;\r | |
309 | var x = event.pageX,\r | |
310 | y = event.pageY,\r | |
311 | docEl = document.documentElement,\r | |
312 | body = document.body;\r | |
313 | \r | |
314 | // pageX/pageY not available (undefined, not null), use clientX/clientY instead\r | |
315 | if (!x && x !== 0) {\r | |
316 | x = event.clientX + (docEl && docEl.scrollLeft || body && body.scrollLeft || 0) - (docEl && docEl.clientLeft || body && body.clientLeft || 0);\r | |
317 | y = event.clientY + (docEl && docEl.scrollTop || body && body.scrollTop || 0) - (docEl && docEl.clientTop || body && body.clientTop || 0);\r | |
318 | }\r | |
319 | return [x, y];\r | |
320 | },\r | |
321 | \r | |
322 | /**\r | |
323 | * Gets the y coordinate from the event\r | |
324 | * @param {Object} event The event\r | |
325 | * @return {Number} The y coordinate\r | |
326 | * @deprecated 5.0.0\r | |
327 | */\r | |
328 | getPageY: function(event) {\r | |
329 | //<debug>\r | |
330 | Ext.log.warn("Ext.EventManager.getPageY() is deprecated. " +\r | |
331 | "Call getY() directly on the Ext.event.Event instance instead.");\r | |
332 | //</debug>\r | |
333 | return this.getPageXY(event)[1];\r | |
334 | },\r | |
335 | \r | |
336 | /**\r | |
337 | * Gets the target of the event.\r | |
338 | * @param {Object} event The event\r | |
339 | * @return {HTMLElement} target\r | |
340 | * @deprecated 5.0.0\r | |
341 | */\r | |
342 | getTarget: function(event) {\r | |
343 | //<debug>\r | |
344 | Ext.log.warn("Ext.EventManager.getTarget() is deprecated. " +\r | |
345 | "Call getTarget() directly on the Ext.event.Event instance instead.");\r | |
346 | //</debug>\r | |
347 | event = event.browserEvent || event;\r | |
348 | return Ext.EventManager.resolveTextNode(event.target || event.srcElement);\r | |
349 | },\r | |
350 | \r | |
351 | // technically no need to browser sniff this, however it makes\r | |
352 | // no sense to check this every time, for every event, whether\r | |
353 | // the string is equal.\r | |
354 | /**\r | |
355 | * @method\r | |
356 | * Resolve any text nodes accounting for browser differences.\r | |
357 | * @private\r | |
358 | * @param {HTMLElement} node The node\r | |
359 | * @return {HTMLElement} The resolved node\r | |
360 | * @deprecated 5.0.0\r | |
361 | */\r | |
362 | resolveTextNode: Ext.isGecko ?\r | |
363 | function(node) {\r | |
364 | if (node) {\r | |
365 | // work around firefox bug, https://bugzilla.mozilla.org/show_bug.cgi?id=101197\r | |
366 | var s = HTMLElement.prototype.toString.call(node);\r | |
367 | if (s !== '[xpconnect wrapped native prototype]' && s !== '[object XULElement]') {\r | |
368 | return node.nodeType === 3 ? node.parentNode: node;\r | |
369 | }\r | |
370 | }\r | |
371 | }\r | |
372 | :\r | |
373 | function(node) {\r | |
374 | return node && node.nodeType === 3 ? node.parentNode: node;\r | |
375 | }\r | |
376 | }, function(EventManager) {\r | |
377 | /**\r | |
378 | * @member Ext.EventManager\r | |
379 | * @method on\r | |
380 | * @inheritdoc Ext.EventManager#addListener\r | |
381 | */\r | |
382 | EventManager.on = EventManager.addListener;\r | |
383 | \r | |
384 | /**\r | |
385 | * @member Ext.EventManager\r | |
386 | * @method un\r | |
387 | * @inheritdoc Ext.EventManager#removeListener\r | |
388 | */\r | |
389 | EventManager.un = EventManager.removeListener;\r | |
390 | }); |