src/cm/media/js/lib/yui/yui3.0.0/build/event/event-mouseenter.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 0 40c8f766c9b8
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
/*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
Code licensed under the BSD License:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
http://developer.yahoo.net/yui/license.txt
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
version: 3.0.0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
build: 1549
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
YUI.add('event-mouseenter', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
 * Adds support for mouseenter/mouseleave events
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
 * @module event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
 * @submodule event-mouseenter
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
var Event = Y.Event,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
	Lang = Y.Lang,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
	plugins = Y.Env.evt.plugins,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
	listeners = {},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
	eventConfig = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
    	on: function(type, fn, el) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
		    var args = Y.Array(arguments, 0, true),	    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
				element = el,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
				availHandle;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
			if (Lang.isString(el)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
				//	Need to use Y.all because if el is a string it could be a 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
				//	selector that returns a NodeList
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
				element = Y.all(el);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
				if (element.size() === 0) { // Not found, check using onAvailable
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
		            availHandle = Event.onAvailable(el, function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
		                availHandle.handle = Y.on.apply(Y, args);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
		            }, Event, true, false);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
					return availHandle;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
				}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
			}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
	        var sDOMEvent = (type === "mouseenter") ? "mouseover" : "mouseout",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
				//	The name of the custom event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
				sEventName = type + ":" + Y.stamp(element) + sDOMEvent,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
				listener = listeners[sEventName],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
				domEventHandle,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
				ceHandle,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
				nListeners;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
			//	Bind an actual DOM event listener that will call the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
			//	the custom event				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
			if (!listener) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
				domEventHandle = Y.on(sDOMEvent, Y.rbind(Event._fireMouseEnter, Y, sEventName), element);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
				//	Hook into the _delete method for the Custom Event wrapper of this
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
				//	DOM Event in order to clean up the 'listeners' map and unsubscribe
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
				//	the associated Custom Event listeners fired by this DOM event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
				//	listener if/when the user calls "purgeElement" OR removes all 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
				//	listeners of the Custom Event.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
				Y.after(function (sub) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
					if (domEventHandle.sub == sub) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
						//	Delete this event from the map of known mouseenter 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
						//	and mouseleave listeners
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
						delete listeners[sEventName];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
						//	Unsubscribe all listeners of the Custom Event fired 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
						//	by this DOM event.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
						Y.detachAll(sEventName);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
					}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
				}, domEventHandle.evt, "_delete");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
				listener = {};				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
				listener.handle = domEventHandle;				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
				listeners[sEventName] = listener;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
			}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
			nListeners = listener.count;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
			listener.count = nListeners ? (nListeners + 1) : 1;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
	        args[0] = sEventName;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
	        // Remove the element from the args
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
			args.splice(2, 1);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
	        // Subscribe to the custom event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
	        ceHandle = Y.on.apply(Y, args);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
			//	Hook into the detach method of the handle in order to clean up the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
			//	'listeners' map and remove the associated DOM event handler 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
			//	responsible for firing this Custom Event if all listener for this 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
			//	event have been removed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
			Y.after(function () {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
				listener.count = (listener.count - 1);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
				if (listener.count === 0) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
					listener.handle.detach();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
				}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
			}, ceHandle, "detach");	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
			return ceHandle;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
	    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
Event._fireMouseEnter = function (e, eventName) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
	var relatedTarget = e.relatedTarget,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
		currentTarget = e.currentTarget;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
	if (currentTarget !== relatedTarget && 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
		!currentTarget.contains(relatedTarget)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
		Y.publish(eventName, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
               contextFn: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
                   return currentTarget;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
               }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
           });			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
		Y.fire(eventName, e);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
	}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
};	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
 * Sets up a "mouseenter" listener&#151;a listener that is called the first time 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
 * the user's mouse enters the specified element(s).
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
 * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
 * @event mouseenter
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
 * @param type {string} "mouseenter"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
 * @param fn {function} The method the event invokes.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
 * @param el {string|node} The element(s) to assign the listener to.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
 * @param spec {string} Optional.  String representing a selector that must 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
 * match the target of the event in order for the listener to be called.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
 * @return {EventHandle} the detach handle
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
 * @for YUI
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
plugins.mouseenter = eventConfig;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
* Sets up a "mouseleave" listener&#151;a listener that is called the first time 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
* the user's mouse leaves the specified element(s).
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
* 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
* @event mouseleave
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
* @param type {string} "mouseleave"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
* @param fn {function} The method the event invokes.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
* @param el {string|node} The element(s) to assign the listener to.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
* @param spec {string} Optional.  String representing a selector that must 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
* match the target of the event in order for the listener to be called.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
* @return {EventHandle} the detach handle
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
* @for YUI
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
plugins.mouseleave = eventConfig;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
}, '3.0.0' ,{requires:['node-base']});