nexus site path corrected
[portal.git] / ecomp-portal-FE / client / bower_components / jquery / src / event / trigger.js
1 define( [
2         "../core",
3         "../var/document",
4         "../data/var/dataPriv",
5         "../data/var/acceptData",
6         "../var/hasOwn",
7
8         "../event"
9 ], function( jQuery, document, dataPriv, acceptData, hasOwn ) {
10
11 var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
12
13 jQuery.extend( jQuery.event, {
14
15         trigger: function( event, data, elem, onlyHandlers ) {
16
17                 var i, cur, tmp, bubbleType, ontype, handle, special,
18                         eventPath = [ elem || document ],
19                         type = hasOwn.call( event, "type" ) ? event.type : event,
20                         namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
21
22                 cur = tmp = elem = elem || document;
23
24                 // Don't do events on text and comment nodes
25                 if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
26                         return;
27                 }
28
29                 // focus/blur morphs to focusin/out; ensure we're not firing them right now
30                 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
31                         return;
32                 }
33
34                 if ( type.indexOf( "." ) > -1 ) {
35
36                         // Namespaced trigger; create a regexp to match event type in handle()
37                         namespaces = type.split( "." );
38                         type = namespaces.shift();
39                         namespaces.sort();
40                 }
41                 ontype = type.indexOf( ":" ) < 0 && "on" + type;
42
43                 // Caller can pass in a jQuery.Event object, Object, or just an event type string
44                 event = event[ jQuery.expando ] ?
45                         event :
46                         new jQuery.Event( type, typeof event === "object" && event );
47
48                 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
49                 event.isTrigger = onlyHandlers ? 2 : 3;
50                 event.namespace = namespaces.join( "." );
51                 event.rnamespace = event.namespace ?
52                         new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
53                         null;
54
55                 // Clean up the event in case it is being reused
56                 event.result = undefined;
57                 if ( !event.target ) {
58                         event.target = elem;
59                 }
60
61                 // Clone any incoming data and prepend the event, creating the handler arg list
62                 data = data == null ?
63                         [ event ] :
64                         jQuery.makeArray( data, [ event ] );
65
66                 // Allow special events to draw outside the lines
67                 special = jQuery.event.special[ type ] || {};
68                 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
69                         return;
70                 }
71
72                 // Determine event propagation path in advance, per W3C events spec (#9951)
73                 // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
74                 if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
75
76                         bubbleType = special.delegateType || type;
77                         if ( !rfocusMorph.test( bubbleType + type ) ) {
78                                 cur = cur.parentNode;
79                         }
80                         for ( ; cur; cur = cur.parentNode ) {
81                                 eventPath.push( cur );
82                                 tmp = cur;
83                         }
84
85                         // Only add window if we got to document (e.g., not plain obj or detached DOM)
86                         if ( tmp === ( elem.ownerDocument || document ) ) {
87                                 eventPath.push( tmp.defaultView || tmp.parentWindow || window );
88                         }
89                 }
90
91                 // Fire handlers on the event path
92                 i = 0;
93                 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
94
95                         event.type = i > 1 ?
96                                 bubbleType :
97                                 special.bindType || type;
98
99                         // jQuery handler
100                         handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
101                                 dataPriv.get( cur, "handle" );
102                         if ( handle ) {
103                                 handle.apply( cur, data );
104                         }
105
106                         // Native handler
107                         handle = ontype && cur[ ontype ];
108                         if ( handle && handle.apply && acceptData( cur ) ) {
109                                 event.result = handle.apply( cur, data );
110                                 if ( event.result === false ) {
111                                         event.preventDefault();
112                                 }
113                         }
114                 }
115                 event.type = type;
116
117                 // If nobody prevented the default action, do it now
118                 if ( !onlyHandlers && !event.isDefaultPrevented() ) {
119
120                         if ( ( !special._default ||
121                                 special._default.apply( eventPath.pop(), data ) === false ) &&
122                                 acceptData( elem ) ) {
123
124                                 // Call a native DOM method on the target with the same name name as the event.
125                                 // Don't do default actions on window, that's where global variables be (#6170)
126                                 if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
127
128                                         // Don't re-trigger an onFOO event when we call its FOO() method
129                                         tmp = elem[ ontype ];
130
131                                         if ( tmp ) {
132                                                 elem[ ontype ] = null;
133                                         }
134
135                                         // Prevent re-triggering of the same event, since we already bubbled it above
136                                         jQuery.event.triggered = type;
137                                         elem[ type ]();
138                                         jQuery.event.triggered = undefined;
139
140                                         if ( tmp ) {
141                                                 elem[ ontype ] = tmp;
142                                         }
143                                 }
144                         }
145                 }
146
147                 return event.result;
148         },
149
150         // Piggyback on a donor event to simulate a different one
151         // Used only for `focus(in | out)` events
152         simulate: function( type, elem, event ) {
153                 var e = jQuery.extend(
154                         new jQuery.Event(),
155                         event,
156                         {
157                                 type: type,
158                                 isSimulated: true
159                         }
160                 );
161
162                 jQuery.event.trigger( e, null, elem );
163         }
164
165 } );
166
167 jQuery.fn.extend( {
168
169         trigger: function( type, data ) {
170                 return this.each( function() {
171                         jQuery.event.trigger( type, data, this );
172                 } );
173         },
174         triggerHandler: function( type, data ) {
175                 var elem = this[ 0 ];
176                 if ( elem ) {
177                         return jQuery.event.trigger( type, data, elem, true );
178                 }
179         }
180 } );
181
182 return jQuery;
183 } );