]>
Commit | Line | Data |
---|---|---|
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 | |
6 | Ext.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 |