1 |
efrain |
1 |
YUI.add('yui2-event-mouseenter', function(Y) {
|
|
|
2 |
var YAHOO = Y.YUI2;
|
|
|
3 |
/*
|
|
|
4 |
Copyright (c) 2011, Yahoo! Inc. All rights reserved.
|
|
|
5 |
Code licensed under the BSD License:
|
|
|
6 |
http://developer.yahoo.com/yui/license.html
|
|
|
7 |
version: 2.9.0
|
|
|
8 |
*/
|
|
|
9 |
/**
|
|
|
10 |
* Augments the Event Utility with support for the mouseenter and mouseleave
|
|
|
11 |
* events: A mouseenter event fires the first time the mouse enters an
|
|
|
12 |
* element; a mouseleave event first the first time the mouse leaves an
|
|
|
13 |
* element.
|
|
|
14 |
*
|
|
|
15 |
* @module event-mouseenter
|
|
|
16 |
* @title Event Utility mouseenter and mouseout Module
|
|
|
17 |
* @namespace YAHOO.util
|
|
|
18 |
* @requires event
|
|
|
19 |
*/
|
|
|
20 |
|
|
|
21 |
(function () {
|
|
|
22 |
|
|
|
23 |
var Event = YAHOO.util.Event,
|
|
|
24 |
Lang = YAHOO.lang,
|
|
|
25 |
|
|
|
26 |
addListener = Event.addListener,
|
|
|
27 |
removeListener = Event.removeListener,
|
|
|
28 |
getListeners = Event.getListeners,
|
|
|
29 |
|
|
|
30 |
delegates = [],
|
|
|
31 |
|
|
|
32 |
specialTypes = {
|
|
|
33 |
mouseenter: "mouseover",
|
|
|
34 |
mouseleave: "mouseout"
|
|
|
35 |
},
|
|
|
36 |
|
|
|
37 |
remove = function(el, type, fn) {
|
|
|
38 |
|
|
|
39 |
var index = Event._getCacheIndex(delegates, el, type, fn),
|
|
|
40 |
cacheItem,
|
|
|
41 |
returnVal;
|
|
|
42 |
|
|
|
43 |
if (index >= 0) {
|
|
|
44 |
cacheItem = delegates[index];
|
|
|
45 |
}
|
|
|
46 |
|
|
|
47 |
if (el && cacheItem) {
|
|
|
48 |
|
|
|
49 |
// removeListener will translate the value of type
|
|
|
50 |
returnVal = removeListener.call(Event, cacheItem[0], type, cacheItem[3]);
|
|
|
51 |
|
|
|
52 |
if (returnVal) {
|
|
|
53 |
delete delegates[index][2];
|
|
|
54 |
delete delegates[index][3];
|
|
|
55 |
delegates.splice(index, 1);
|
|
|
56 |
}
|
|
|
57 |
|
|
|
58 |
}
|
|
|
59 |
|
|
|
60 |
return returnVal;
|
|
|
61 |
|
|
|
62 |
};
|
|
|
63 |
|
|
|
64 |
|
|
|
65 |
Lang.augmentObject(Event._specialTypes, specialTypes);
|
|
|
66 |
|
|
|
67 |
Lang.augmentObject(Event, {
|
|
|
68 |
|
|
|
69 |
/**
|
|
|
70 |
* Creates a delegate function used to call mouseover and mouseleave
|
|
|
71 |
* event listeners specified via the
|
|
|
72 |
* <code>YAHOO.util.Event.addListener</code>
|
|
|
73 |
* or <code>YAHOO.util.Event.on</code> method.
|
|
|
74 |
*
|
|
|
75 |
* @method _createMouseDelegate
|
|
|
76 |
*
|
|
|
77 |
* @param {Function} fn The method (event listener) to call
|
|
|
78 |
* @param {Object} obj An arbitrary object that will be
|
|
|
79 |
* passed as a parameter to the listener
|
|
|
80 |
* @param {Boolean|object} overrideContext If true, the value of the
|
|
|
81 |
* obj parameter becomes the execution context
|
|
|
82 |
* of the listener. If an object, this object
|
|
|
83 |
* becomes the execution context.
|
|
|
84 |
* @return {Function} Function that will call the event listener
|
|
|
85 |
* specified by either the <code>YAHOO.util.Event.addListener</code>
|
|
|
86 |
* or <code>YAHOO.util.Event.on</code> method.
|
|
|
87 |
* @private
|
|
|
88 |
* @static
|
|
|
89 |
* @for Event
|
|
|
90 |
*/
|
|
|
91 |
_createMouseDelegate: function (fn, obj, overrideContext) {
|
|
|
92 |
|
|
|
93 |
return function (event, container) {
|
|
|
94 |
|
|
|
95 |
var el = this,
|
|
|
96 |
relatedTarget = Event.getRelatedTarget(event),
|
|
|
97 |
context,
|
|
|
98 |
args;
|
|
|
99 |
|
|
|
100 |
if (el != relatedTarget && !YAHOO.util.Dom.isAncestor(el, relatedTarget)) {
|
|
|
101 |
|
|
|
102 |
context = el;
|
|
|
103 |
|
|
|
104 |
if (overrideContext) {
|
|
|
105 |
if (overrideContext === true) {
|
|
|
106 |
context = obj;
|
|
|
107 |
} else {
|
|
|
108 |
context = overrideContext;
|
|
|
109 |
}
|
|
|
110 |
}
|
|
|
111 |
|
|
|
112 |
// The default args passed back to a mouseenter or
|
|
|
113 |
// mouseleave listener are: the event, and any object
|
|
|
114 |
// the user passed when subscribing
|
|
|
115 |
|
|
|
116 |
args = [event, obj];
|
|
|
117 |
|
|
|
118 |
// Add the element and delegation container as arguments
|
|
|
119 |
// when delegating mouseenter and mouseleave
|
|
|
120 |
|
|
|
121 |
if (container) {
|
|
|
122 |
args.splice(1, 0, el, container);
|
|
|
123 |
}
|
|
|
124 |
|
|
|
125 |
return fn.apply(context, args);
|
|
|
126 |
|
|
|
127 |
}
|
|
|
128 |
|
|
|
129 |
};
|
|
|
130 |
|
|
|
131 |
},
|
|
|
132 |
|
|
|
133 |
addListener: function (el, type, fn, obj, overrideContext) {
|
|
|
134 |
|
|
|
135 |
var fnDelegate,
|
|
|
136 |
returnVal;
|
|
|
137 |
|
|
|
138 |
if (specialTypes[type]) {
|
|
|
139 |
|
|
|
140 |
fnDelegate = Event._createMouseDelegate(fn, obj, overrideContext);
|
|
|
141 |
|
|
|
142 |
fnDelegate.mouseDelegate = true;
|
|
|
143 |
|
|
|
144 |
delegates.push([el, type, fn, fnDelegate]);
|
|
|
145 |
|
|
|
146 |
// addListener will translate the value of type
|
|
|
147 |
returnVal = addListener.call(Event, el, type, fnDelegate);
|
|
|
148 |
|
|
|
149 |
}
|
|
|
150 |
else {
|
|
|
151 |
returnVal = addListener.apply(Event, arguments);
|
|
|
152 |
}
|
|
|
153 |
|
|
|
154 |
return returnVal;
|
|
|
155 |
|
|
|
156 |
},
|
|
|
157 |
|
|
|
158 |
removeListener: function (el, type, fn) {
|
|
|
159 |
|
|
|
160 |
var returnVal;
|
|
|
161 |
|
|
|
162 |
if (specialTypes[type]) {
|
|
|
163 |
returnVal = remove.apply(Event, arguments);
|
|
|
164 |
}
|
|
|
165 |
else {
|
|
|
166 |
returnVal = removeListener.apply(Event, arguments);
|
|
|
167 |
}
|
|
|
168 |
|
|
|
169 |
return returnVal;
|
|
|
170 |
|
|
|
171 |
},
|
|
|
172 |
|
|
|
173 |
getListeners: function (el, type) {
|
|
|
174 |
|
|
|
175 |
// If the user specified the type as mouseover or mouseout,
|
|
|
176 |
// need to filter out those used by mouseenter and mouseleave.
|
|
|
177 |
// If the user specified the type as mouseenter or mouseleave,
|
|
|
178 |
// need to filter out the true mouseover and mouseout listeners.
|
|
|
179 |
|
|
|
180 |
var listeners = [],
|
|
|
181 |
elListeners,
|
|
|
182 |
bMouseOverOrOut = (type === "mouseover" || type === "mouseout"),
|
|
|
183 |
bMouseDelegate,
|
|
|
184 |
i,
|
|
|
185 |
l;
|
|
|
186 |
|
|
|
187 |
if (type && (bMouseOverOrOut || specialTypes[type])) {
|
|
|
188 |
|
|
|
189 |
elListeners = getListeners.call(Event, el, this._getType(type));
|
|
|
190 |
|
|
|
191 |
if (elListeners) {
|
|
|
192 |
|
|
|
193 |
for (i=elListeners.length-1; i>-1; i--) {
|
|
|
194 |
|
|
|
195 |
l = elListeners[i];
|
|
|
196 |
bMouseDelegate = l.fn.mouseDelegate;
|
|
|
197 |
|
|
|
198 |
if ((specialTypes[type] && bMouseDelegate) || (bMouseOverOrOut && !bMouseDelegate)) {
|
|
|
199 |
listeners.push(l);
|
|
|
200 |
}
|
|
|
201 |
|
|
|
202 |
}
|
|
|
203 |
|
|
|
204 |
}
|
|
|
205 |
|
|
|
206 |
}
|
|
|
207 |
else {
|
|
|
208 |
listeners = getListeners.apply(Event, arguments);
|
|
|
209 |
}
|
|
|
210 |
|
|
|
211 |
return (listeners && listeners.length) ? listeners : null;
|
|
|
212 |
|
|
|
213 |
}
|
|
|
214 |
|
|
|
215 |
}, true);
|
|
|
216 |
|
|
|
217 |
Event.on = Event.addListener;
|
|
|
218 |
|
|
|
219 |
}());
|
|
|
220 |
YAHOO.register("event-mouseenter", YAHOO.util.Event, {version: "2.9.0", build: "2800"});
|
|
|
221 |
|
|
|
222 |
}, '2.9.0' ,{"requires": ["yui2-yahoo", "yui2-dom", "yui2-event"]});
|