]> git.proxmox.com Git - extjs.git/blame - extjs/classic/classic/src/event/publisher/MouseEnterLeave.js
add extjs 6.0.1 sources
[extjs.git] / extjs / classic / classic / src / event / publisher / MouseEnterLeave.js
CommitLineData
6527f429
DM
1/**\r
2 * A publisher that adds support for mousenter and mouseleave events on browsers that do\r
3 * not support those events natively\r
4 * @private\r
5 */\r
6Ext.define('Ext.event.publisher.MouseEnterLeave', {\r
7 extend: 'Ext.event.publisher.Dom',\r
8 type: 'mouseEnterLeave'\r
9}, function(MouseEnterLeave) {\r
10 var eventMap = {\r
11 mouseover: 'mouseenter',\r
12 mouseout: 'mouseleave'\r
13 };\r
14\r
15 if (!Ext.supports.MouseEnterLeave) {\r
16 MouseEnterLeave.override({\r
17 handledDomEvents: ['mouseover', 'mouseout'],\r
18 handledEvents: ['mouseenter', 'mouseleave'],\r
19\r
20 doDelegatedEvent: function(e) {\r
21 var target, relatedTarget, id, el, type, event;\r
22\r
23 // call parent to dispatch the native browser event first (mouseover, mouseout)\r
24 e = this.callParent([e]);\r
25\r
26 target = e.getTarget();\r
27 relatedTarget = e.getRelatedTarget();\r
28\r
29 if (relatedTarget && Ext.fly(target).contains(relatedTarget)) {\r
30 return;\r
31 }\r
32\r
33 id = target.id;\r
34 if (id) {\r
35 el = Ext.cache[id];\r
36\r
37 if (el) {\r
38 type = eventMap[e.type];\r
39 e = e.chain({\r
40 type: type\r
41 });\r
42 if (el.hasListeners[type]) {\r
43 event = el.events[type];\r
44\r
45 if (event) {\r
46 // mouseenter/leave are always tracked by the "directs"\r
47 // Ext.util.Event because they are listed in the directEvents\r
48 // map of Dom publisher\r
49 event = event.directs;\r
50 if (event) {\r
51 e.setCurrentTarget(el.dom);\r
52 event.fire(e, e.target);\r
53 }\r
54 }\r
55 }\r
56 }\r
57 }\r
58 }\r
59 });\r
60 }\r
61\r
62 MouseEnterLeave.instance = new MouseEnterLeave();\r
63});\r