scratch – Diff between revs 58 and 125
?pathlinks?
Rev 58 | Rev 125 | |||
---|---|---|---|---|
Line 1... | Line 1... | |||
1 | define( [ |
1 | define([ |
|
2 | "./core", |
2 | "./core", |
|
3 | "./var/document", |
3 | "./var/strundefined", |
|
4 | "./var/documentElement", |
4 | "./var/rnotwhite", |
|
5 | "./var/rnothtmlwhite", |
5 | "./var/hasOwn", |
|
6 | "./var/slice", |
6 | "./var/slice", |
|
- | 7 | "./event/support", |
||
7 | "./data/var/dataPriv", |
8 | "./data/var/data_priv", |
|
Line 8... | Line 9... | |||
8 | |
9 | |
|
- | 10 | "./core/init", |
||
9 | "./core/init", |
11 | "./data/accepts", |
|
10 | "./selector" |
12 | "./selector" |
|
11 | ], function( jQuery, document, documentElement, rnothtmlwhite, slice, dataPriv ) { |
- | ||
12 | |
- | ||
Line 13... | Line 13... | |||
13 | "use strict"; |
13 | ], function( jQuery, strundefined, rnotwhite, hasOwn, slice, support, data_priv ) { |
|
14 | |
14 | |
|
15 | var |
15 | var |
|
- | 16 | rkeyEvent = /^key/, |
||
16 | rkeyEvent = /^key/, |
17 | rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, |
|
Line 17... | Line 18... | |||
17 | rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, |
18 | rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, |
|
18 | rtypenamespace = /^([^.]*)(?:\.(.+)|)/; |
19 | rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; |
|
19 | |
20 | |
|
Line 20... | Line 21... | |||
20 | function returnTrue() { |
21 | function returnTrue() { |
|
21 | return true; |
22 | return true; |
|
22 | } |
23 | } |
|
Line 23... | Line -... | |||
23 | |
- | ||
24 | function returnFalse() { |
- | ||
25 | return false; |
24 | |
|
26 | } |
25 | function returnFalse() { |
|
27 | |
26 | return false; |
|
28 | // Support: IE <=9 only |
27 | } |
|
29 | // See #13393 for more info |
28 | |
|
Line 30... | Line -... | |||
30 | function safeActiveElement() { |
- | ||
31 | try { |
- | ||
32 | return document.activeElement; |
- | ||
33 | } catch ( err ) { } |
- | ||
34 | } |
- | ||
35 | |
- | ||
36 | function on( elem, types, selector, data, fn, one ) { |
- | ||
37 | var origFn, type; |
- | ||
38 | |
- | ||
39 | // Types can be a map of types/handlers |
- | ||
40 | if ( typeof types === "object" ) { |
- | ||
41 | |
- | ||
42 | // ( types-Object, selector, data ) |
- | ||
43 | if ( typeof selector !== "string" ) { |
- | ||
44 | |
- | ||
45 | // ( types-Object, data ) |
- | ||
46 | data = data || selector; |
- | ||
47 | selector = undefined; |
- | ||
48 | } |
- | ||
49 | for ( type in types ) { |
- | ||
50 | on( elem, type, selector, data, types[ type ], one ); |
- | ||
51 | } |
- | ||
52 | return elem; |
- | ||
53 | } |
- | ||
54 | |
- | ||
55 | if ( data == null && fn == null ) { |
- | ||
56 | |
- | ||
57 | // ( types, fn ) |
- | ||
58 | fn = selector; |
- | ||
59 | data = selector = undefined; |
- | ||
60 | } else if ( fn == null ) { |
- | ||
61 | if ( typeof selector === "string" ) { |
- | ||
62 | |
- | ||
63 | // ( types, selector, fn ) |
- | ||
64 | fn = data; |
- | ||
65 | data = undefined; |
- | ||
66 | } else { |
- | ||
67 | |
- | ||
68 | // ( types, data, fn ) |
- | ||
69 | fn = data; |
- | ||
70 | data = selector; |
- | ||
71 | selector = undefined; |
- | ||
72 | } |
- | ||
73 | } |
- | ||
74 | if ( fn === false ) { |
- | ||
75 | fn = returnFalse; |
- | ||
76 | } else if ( !fn ) { |
- | ||
77 | return elem; |
- | ||
78 | } |
- | ||
79 | |
- | ||
80 | if ( one === 1 ) { |
- | ||
81 | origFn = fn; |
- | ||
82 | fn = function( event ) { |
- | ||
83 | |
- | ||
84 | // Can use an empty set, since event contains the info |
- | ||
85 | jQuery().off( event ); |
- | ||
86 | return origFn.apply( this, arguments ); |
- | ||
87 | }; |
- | ||
88 | |
- | ||
89 | // Use same guid so caller can remove using origFn |
- | ||
90 | fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); |
- | ||
91 | } |
29 | function safeActiveElement() { |
|
92 | return elem.each( function() { |
30 | try { |
|
93 | jQuery.event.add( this, types, fn, data, selector ); |
31 | return document.activeElement; |
|
94 | } ); |
32 | } catch ( err ) { } |
|
95 | } |
33 | } |
|
Line 105... | Line 43... | |||
105 | add: function( elem, types, handler, data, selector ) { |
43 | add: function( elem, types, handler, data, selector ) { |
|
Line 106... | Line 44... | |||
106 | |
44 | |
|
107 | var handleObjIn, eventHandle, tmp, |
45 | var handleObjIn, eventHandle, tmp, |
|
108 | events, t, handleObj, |
46 | events, t, handleObj, |
|
109 | special, handlers, type, namespaces, origType, |
47 | special, handlers, type, namespaces, origType, |
|
Line 110... | Line 48... | |||
110 | elemData = dataPriv.get( elem ); |
48 | elemData = data_priv.get( elem ); |
|
111 | |
49 | |
|
112 | // Don't attach events to noData or text/comment nodes (but allow plain objects) |
50 | // Don't attach events to noData or text/comment nodes (but allow plain objects) |
|
113 | if ( !elemData ) { |
51 | if ( !elemData ) { |
|
Line 119... | Line 57... | |||
119 | handleObjIn = handler; |
57 | handleObjIn = handler; |
|
120 | handler = handleObjIn.handler; |
58 | handler = handleObjIn.handler; |
|
121 | selector = handleObjIn.selector; |
59 | selector = handleObjIn.selector; |
|
122 | } |
60 | } |
|
Line 123... | Line -... | |||
123 | |
- | ||
124 | // Ensure that invalid selectors throw exceptions at attach time |
- | ||
125 | // Evaluate against documentElement in case elem is a non-element node (e.g., document) |
- | ||
126 | if ( selector ) { |
- | ||
127 | jQuery.find.matchesSelector( documentElement, selector ); |
- | ||
128 | } |
- | ||
129 | |
61 | |
|
130 | // Make sure that the handler has a unique ID, used to find/remove it later |
62 | // Make sure that the handler has a unique ID, used to find/remove it later |
|
131 | if ( !handler.guid ) { |
63 | if ( !handler.guid ) { |
|
132 | handler.guid = jQuery.guid++; |
64 | handler.guid = jQuery.guid++; |
|
Line 133... | Line 65... | |||
133 | } |
65 | } |
|
134 | |
66 | |
|
135 | // Init the element's event structure and main handler, if this is the first |
67 | // Init the element's event structure and main handler, if this is the first |
|
136 | if ( !( events = elemData.events ) ) { |
68 | if ( !(events = elemData.events) ) { |
|
137 | events = elemData.events = {}; |
69 | events = elemData.events = {}; |
|
138 | } |
70 | } |
|
139 | if ( !( eventHandle = elemData.handle ) ) { |
- | ||
140 | eventHandle = elemData.handle = function( e ) { |
71 | if ( !(eventHandle = elemData.handle) ) { |
|
141 | |
72 | eventHandle = elemData.handle = function( e ) { |
|
142 | // Discard the second event of a jQuery.event.trigger() and |
73 | // Discard the second event of a jQuery.event.trigger() and |
|
143 | // when an event is called after a page has unloaded |
74 | // when an event is called after a page has unloaded |
|
144 | return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? |
75 | return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ? |
|
145 | jQuery.event.dispatch.apply( elem, arguments ) : undefined; |
76 | jQuery.event.dispatch.apply( elem, arguments ) : undefined; |
|
Line 146... | Line 77... | |||
146 | }; |
77 | }; |
|
147 | } |
78 | } |
|
148 | |
79 | |
|
149 | // Handle multiple events separated by a space |
80 | // Handle multiple events separated by a space |
|
150 | types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; |
81 | types = ( types || "" ).match( rnotwhite ) || [ "" ]; |
|
151 | t = types.length; |
82 | t = types.length; |
|
152 | while ( t-- ) { |
83 | while ( t-- ) { |
|
Line 153... | Line 84... | |||
153 | tmp = rtypenamespace.exec( types[ t ] ) || []; |
84 | tmp = rtypenamespace.exec( types[t] ) || []; |
|
154 | type = origType = tmp[ 1 ]; |
85 | type = origType = tmp[1]; |
|
155 | namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); |
86 | namespaces = ( tmp[2] || "" ).split( "." ).sort(); |
|
156 | |
87 | |
|
Line 167... | Line 98... | |||
167 | |
98 | |
|
168 | // Update special based on newly reset type |
99 | // Update special based on newly reset type |
|
Line 169... | Line 100... | |||
169 | special = jQuery.event.special[ type ] || {}; |
100 | special = jQuery.event.special[ type ] || {}; |
|
170 | |
101 | |
|
171 | // handleObj is passed to all event handlers |
102 | // handleObj is passed to all event handlers |
|
172 | handleObj = jQuery.extend( { |
103 | handleObj = jQuery.extend({ |
|
173 | type: type, |
104 | type: type, |
|
174 | origType: origType, |
105 | origType: origType, |
|
175 | data: data, |
106 | data: data, |
|
176 | handler: handler, |
107 | handler: handler, |
|
177 | guid: handler.guid, |
108 | guid: handler.guid, |
|
178 | selector: selector, |
109 | selector: selector, |
|
179 | needsContext: selector && jQuery.expr.match.needsContext.test( selector ), |
110 | needsContext: selector && jQuery.expr.match.needsContext.test( selector ), |
|
Line 180... | Line 111... | |||
180 | namespace: namespaces.join( "." ) |
111 | namespace: namespaces.join(".") |
|
181 | }, handleObjIn ); |
112 | }, handleObjIn ); |
|
182 | |
113 | |
|
183 | // Init the event handler queue if we're the first |
114 | // Init the event handler queue if we're the first |
|
Line 184... | Line 115... | |||
184 | if ( !( handlers = events[ type ] ) ) { |
115 | if ( !(handlers = events[ type ]) ) { |
|
185 | handlers = events[ type ] = []; |
- | ||
186 | handlers.delegateCount = 0; |
116 | handlers = events[ type ] = []; |
|
187 | |
- | ||
188 | // Only use addEventListener if the special events handler returns false |
117 | handlers.delegateCount = 0; |
|
189 | if ( !special.setup || |
118 | |
|
190 | special.setup.call( elem, data, namespaces, eventHandle ) === false ) { |
119 | // Only use addEventListener if the special events handler returns false |
|
191 | |
120 | if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { |
|
192 | if ( elem.addEventListener ) { |
121 | if ( elem.addEventListener ) { |
|
Line 193... | Line 122... | |||
193 | elem.addEventListener( type, eventHandle ); |
122 | elem.addEventListener( type, eventHandle, false ); |
|
Line 220... | Line 149... | |||
220 | remove: function( elem, types, handler, selector, mappedTypes ) { |
149 | remove: function( elem, types, handler, selector, mappedTypes ) { |
|
Line 221... | Line 150... | |||
221 | |
150 | |
|
222 | var j, origCount, tmp, |
151 | var j, origCount, tmp, |
|
223 | events, t, handleObj, |
152 | events, t, handleObj, |
|
224 | special, handlers, type, namespaces, origType, |
153 | special, handlers, type, namespaces, origType, |
|
Line 225... | Line 154... | |||
225 | elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); |
154 | elemData = data_priv.hasData( elem ) && data_priv.get( elem ); |
|
226 | |
155 | |
|
227 | if ( !elemData || !( events = elemData.events ) ) { |
156 | if ( !elemData || !(events = elemData.events) ) { |
|
Line 228... | Line 157... | |||
228 | return; |
157 | return; |
|
229 | } |
158 | } |
|
230 | |
159 | |
|
231 | // Once for each type.namespace in types; type may be omitted |
160 | // Once for each type.namespace in types; type may be omitted |
|
232 | types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; |
161 | types = ( types || "" ).match( rnotwhite ) || [ "" ]; |
|
233 | t = types.length; |
162 | t = types.length; |
|
234 | while ( t-- ) { |
163 | while ( t-- ) { |
|
Line 235... | Line 164... | |||
235 | tmp = rtypenamespace.exec( types[ t ] ) || []; |
164 | tmp = rtypenamespace.exec( types[t] ) || []; |
|
236 | type = origType = tmp[ 1 ]; |
165 | type = origType = tmp[1]; |
|
237 | namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); |
166 | namespaces = ( tmp[2] || "" ).split( "." ).sort(); |
|
238 | |
167 | |
|
Line 245... | Line 174... | |||
245 | } |
174 | } |
|
Line 246... | Line 175... | |||
246 | |
175 | |
|
247 | special = jQuery.event.special[ type ] || {}; |
176 | special = jQuery.event.special[ type ] || {}; |
|
248 | type = ( selector ? special.delegateType : special.bindType ) || type; |
177 | type = ( selector ? special.delegateType : special.bindType ) || type; |
|
249 | handlers = events[ type ] || []; |
- | ||
250 | tmp = tmp[ 2 ] && |
178 | handlers = events[ type ] || []; |
|
Line 251... | Line 179... | |||
251 | new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); |
179 | tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); |
|
252 | |
180 | |
|
253 | // Remove matching events |
181 | // Remove matching events |
|
254 | origCount = j = handlers.length; |
182 | origCount = j = handlers.length; |
|
Line 255... | Line 183... | |||
255 | while ( j-- ) { |
183 | while ( j-- ) { |
|
256 | handleObj = handlers[ j ]; |
184 | handleObj = handlers[ j ]; |
|
257 | |
185 | |
|
258 | if ( ( mappedTypes || origType === handleObj.origType ) && |
186 | if ( ( mappedTypes || origType === handleObj.origType ) && |
|
259 | ( !handler || handler.guid === handleObj.guid ) && |
- | ||
260 | ( !tmp || tmp.test( handleObj.namespace ) ) && |
187 | ( !handler || handler.guid === handleObj.guid ) && |
|
Line 261... | Line 188... | |||
261 | ( !selector || selector === handleObj.selector || |
188 | ( !tmp || tmp.test( handleObj.namespace ) ) && |
|
262 | selector === "**" && handleObj.selector ) ) { |
189 | ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { |
|
263 | handlers.splice( j, 1 ); |
190 | handlers.splice( j, 1 ); |
|
Line 272... | Line 199... | |||
272 | } |
199 | } |
|
Line 273... | Line 200... | |||
273 | |
200 | |
|
274 | // Remove generic event handler if we removed something and no more handlers exist |
201 | // Remove generic event handler if we removed something and no more handlers exist |
|
275 | // (avoids potential for endless recursion during removal of special event handlers) |
202 | // (avoids potential for endless recursion during removal of special event handlers) |
|
276 | if ( origCount && !handlers.length ) { |
- | ||
277 | if ( !special.teardown || |
203 | if ( origCount && !handlers.length ) { |
|
278 | special.teardown.call( elem, namespaces, elemData.handle ) === false ) { |
- | ||
279 | |
204 | if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { |
|
280 | jQuery.removeEvent( elem, type, elemData.handle ); |
205 | jQuery.removeEvent( elem, type, elemData.handle ); |
|
Line 281... | Line 206... | |||
281 | } |
206 | } |
|
282 | |
207 | |
|
283 | delete events[ type ]; |
208 | delete events[ type ]; |
|
Line 284... | Line 209... | |||
284 | } |
209 | } |
|
285 | } |
210 | } |
|
- | 211 | |
||
286 | |
212 | // Remove the expando if it's no longer used |
|
287 | // Remove data and the expando if it's no longer used |
213 | if ( jQuery.isEmptyObject( events ) ) { |
|
288 | if ( jQuery.isEmptyObject( events ) ) { |
214 | delete elemData.handle; |
|
Line 289... | Line 215... | |||
289 | dataPriv.remove( elem, "handle events" ); |
215 | data_priv.remove( elem, "events" ); |
|
Line 290... | Line 216... | |||
290 | } |
216 | } |
|
291 | }, |
217 | }, |
|
- | 218 | |
||
- | 219 | trigger: function( event, data, elem, onlyHandlers ) { |
||
Line 292... | Line -... | |||
292 | |
- | ||
293 | dispatch: function( nativeEvent ) { |
220 | |
|
294 | |
- | ||
295 | // Make a writable jQuery.Event from the native event object |
- | ||
Line 296... | Line 221... | |||
296 | var event = jQuery.event.fix( nativeEvent ); |
221 | var i, cur, tmp, bubbleType, ontype, handle, special, |
|
- | 222 | eventPath = [ elem || document ], |
||
297 | |
223 | type = hasOwn.call( event, "type" ) ? event.type : event, |
|
- | 224 | namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; |
||
Line -... | Line 225... | |||
- | 225 | |
||
- | 226 | cur = tmp = elem = elem || document; |
||
- | 227 | |
||
- | 228 | // Don't do events on text and comment nodes |
||
- | 229 | if ( elem.nodeType === 3 || elem.nodeType === 8 ) { |
||
- | 230 | return; |
||
- | 231 | } |
||
- | 232 | |
||
- | 233 | // focus/blur morphs to focusin/out; ensure we're not firing them right now |
||
- | 234 | if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { |
||
- | 235 | return; |
||
- | 236 | } |
||
- | 237 | |
||
- | 238 | if ( type.indexOf(".") >= 0 ) { |
||
- | 239 | // Namespaced trigger; create a regexp to match event type in handle() |
||
- | 240 | namespaces = type.split("."); |
||
- | 241 | type = namespaces.shift(); |
||
- | 242 | namespaces.sort(); |
||
- | 243 | } |
||
- | 244 | ontype = type.indexOf(":") < 0 && "on" + type; |
||
- | 245 | |
||
- | 246 | // Caller can pass in a jQuery.Event object, Object, or just an event type string |
||
- | 247 | event = event[ jQuery.expando ] ? |
||
- | 248 | event : |
||
- | 249 | new jQuery.Event( type, typeof event === "object" && event ); |
||
- | 250 | |
||
- | 251 | // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) |
||
- | 252 | event.isTrigger = onlyHandlers ? 2 : 3; |
||
- | 253 | event.namespace = namespaces.join("."); |
||
- | 254 | event.namespace_re = event.namespace ? |
||
- | 255 | new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : |
||
- | 256 | null; |
||
- | 257 | |
||
- | 258 | // Clean up the event in case it is being reused |
||
- | 259 | event.result = undefined; |
||
- | 260 | if ( !event.target ) { |
||
- | 261 | event.target = elem; |
||
- | 262 | } |
||
- | 263 | |
||
- | 264 | // Clone any incoming data and prepend the event, creating the handler arg list |
||
- | 265 | data = data == null ? |
||
- | 266 | [ event ] : |
||
- | 267 | jQuery.makeArray( data, [ event ] ); |
||
- | 268 | |
||
- | 269 | // Allow special events to draw outside the lines |
||
- | 270 | special = jQuery.event.special[ type ] || {}; |
||
- | 271 | if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { |
||
- | 272 | return; |
||
- | 273 | } |
||
- | 274 | |
||
298 | var i, j, ret, matched, handleObj, handlerQueue, |
275 | // Determine event propagation path in advance, per W3C events spec (#9951) |
|
299 | args = new Array( arguments.length ), |
276 | // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) |
|
- | 277 | if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { |
||
- | 278 | |
||
- | 279 | bubbleType = special.delegateType || type; |
||
- | 280 | if ( !rfocusMorph.test( bubbleType + type ) ) { |
||
- | 281 | cur = cur.parentNode; |
||
- | 282 | } |
||
- | 283 | for ( ; cur; cur = cur.parentNode ) { |
||
300 | handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], |
284 | eventPath.push( cur ); |
|
Line -... | Line 285... | |||
- | 285 | tmp = cur; |
||
- | 286 | } |
||
- | 287 | |
||
- | 288 | // Only add window if we got to document (e.g., not plain obj or detached DOM) |
||
- | 289 | if ( tmp === (elem.ownerDocument || document) ) { |
||
- | 290 | eventPath.push( tmp.defaultView || tmp.parentWindow || window ); |
||
- | 291 | } |
||
- | 292 | } |
||
- | 293 | |
||
- | 294 | // Fire handlers on the event path |
||
- | 295 | i = 0; |
||
- | 296 | while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { |
||
- | 297 | |
||
- | 298 | event.type = i > 1 ? |
||
- | 299 | bubbleType : |
||
- | 300 | special.bindType || type; |
||
- | 301 | |
||
- | 302 | // jQuery handler |
||
- | 303 | handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" ); |
||
- | 304 | if ( handle ) { |
||
- | 305 | handle.apply( cur, data ); |
||
- | 306 | } |
||
- | 307 | |
||
- | 308 | // Native handler |
||
- | 309 | handle = ontype && cur[ ontype ]; |
||
- | 310 | if ( handle && handle.apply && jQuery.acceptData( cur ) ) { |
||
- | 311 | event.result = handle.apply( cur, data ); |
||
- | 312 | if ( event.result === false ) { |
||
- | 313 | event.preventDefault(); |
||
- | 314 | } |
||
- | 315 | } |
||
- | 316 | } |
||
- | 317 | event.type = type; |
||
- | 318 | |
||
- | 319 | // If nobody prevented the default action, do it now |
||
- | 320 | if ( !onlyHandlers && !event.isDefaultPrevented() ) { |
||
- | 321 | |
||
- | 322 | if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && |
||
- | 323 | jQuery.acceptData( elem ) ) { |
||
- | 324 | |
||
- | 325 | // Call a native DOM method on the target with the same name name as the event. |
||
- | 326 | // Don't do default actions on window, that's where global variables be (#6170) |
||
- | 327 | if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { |
||
- | 328 | |
||
- | 329 | // Don't re-trigger an onFOO event when we call its FOO() method |
||
- | 330 | tmp = elem[ ontype ]; |
||
- | 331 | |
||
- | 332 | if ( tmp ) { |
||
- | 333 | elem[ ontype ] = null; |
||
- | 334 | } |
||
- | 335 | |
||
- | 336 | // Prevent re-triggering of the same event, since we already bubbled it above |
||
- | 337 | jQuery.event.triggered = type; |
||
- | 338 | elem[ type ](); |
||
- | 339 | jQuery.event.triggered = undefined; |
||
- | 340 | |
||
- | 341 | if ( tmp ) { |
||
- | 342 | elem[ ontype ] = tmp; |
||
- | 343 | } |
||
- | 344 | } |
||
- | 345 | } |
||
- | 346 | } |
||
- | 347 | |
||
- | 348 | return event.result; |
||
- | 349 | }, |
||
- | 350 | |
||
- | 351 | dispatch: function( event ) { |
||
- | 352 | |
||
- | 353 | // Make a writable jQuery.Event from the native event object |
||
- | 354 | event = jQuery.event.fix( event ); |
||
301 | special = jQuery.event.special[ event.type ] || {}; |
355 | |
|
Line 302... | Line 356... | |||
302 | |
356 | var i, j, ret, matched, handleObj, |
|
303 | // Use the fix-ed jQuery.Event rather than the (read-only) native event |
357 | handlerQueue = [], |
|
304 | args[ 0 ] = event; |
358 | args = slice.call( arguments ), |
|
Line 317... | Line 371... | |||
317 | // Determine handlers |
371 | // Determine handlers |
|
318 | handlerQueue = jQuery.event.handlers.call( this, event, handlers ); |
372 | handlerQueue = jQuery.event.handlers.call( this, event, handlers ); |
|
Line 319... | Line 373... | |||
319 | |
373 | |
|
320 | // Run delegates first; they may want to stop propagation beneath us |
374 | // Run delegates first; they may want to stop propagation beneath us |
|
321 | i = 0; |
375 | i = 0; |
|
322 | while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { |
376 | while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { |
|
Line 323... | Line 377... | |||
323 | event.currentTarget = matched.elem; |
377 | event.currentTarget = matched.elem; |
|
324 | |
378 | |
|
325 | j = 0; |
- | ||
Line 326... | Line 379... | |||
326 | while ( ( handleObj = matched.handlers[ j++ ] ) && |
379 | j = 0; |
|
327 | !event.isImmediatePropagationStopped() ) { |
380 | while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { |
|
328 | |
381 | |
|
Line 329... | Line 382... | |||
329 | // Triggered event must either 1) have no namespace, or 2) have namespace(s) |
382 | // Triggered event must either 1) have no namespace, or 2) have namespace(s) |
|
330 | // a subset or equal to those in the bound event (both can have no namespace). |
383 | // a subset or equal to those in the bound event (both can have no namespace). |
|
Line 331... | Line 384... | |||
331 | if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { |
384 | if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { |
|
332 | |
385 | |
|
Line 333... | Line 386... | |||
333 | event.handleObj = handleObj; |
386 | event.handleObj = handleObj; |
|
334 | event.data = handleObj.data; |
387 | event.data = handleObj.data; |
|
335 | |
388 | |
|
336 | ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || |
389 | ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) |
|
337 | handleObj.handler ).apply( matched.elem, args ); |
390 | .apply( matched.elem, args ); |
|
338 | |
391 | |
|
339 | if ( ret !== undefined ) { |
392 | if ( ret !== undefined ) { |
|
Line 353... | Line 406... | |||
353 | |
406 | |
|
354 | return event.result; |
407 | return event.result; |
|
Line 355... | Line 408... | |||
355 | }, |
408 | }, |
|
356 | |
409 | |
|
357 | handlers: function( event, handlers ) { |
410 | handlers: function( event, handlers ) { |
|
358 | var i, handleObj, sel, matchedHandlers, matchedSelectors, |
411 | var i, matches, sel, handleObj, |
|
359 | handlerQueue = [], |
412 | handlerQueue = [], |
|
Line 360... | Line 413... | |||
360 | delegateCount = handlers.delegateCount, |
413 | delegateCount = handlers.delegateCount, |
|
361 | cur = event.target; |
- | ||
362 | |
- | ||
363 | // Find delegate handlers |
- | ||
364 | if ( delegateCount && |
414 | cur = event.target; |
|
365 | |
- | ||
366 | // Support: IE <=9 |
- | ||
367 | // Black-hole SVG <use> instance trees (trac-13180) |
- | ||
368 | cur.nodeType && |
415 | |
|
369 | |
- | ||
370 | // Support: Firefox <=42 |
- | ||
371 | // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) |
- | ||
372 | // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click |
416 | // Find delegate handlers |
|
Line 373... | Line 417... | |||
373 | // Support: IE 11 only |
417 | // Black-hole SVG <use> instance trees (#13180) |
|
Line 374... | Line -... | |||
374 | // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) |
- | ||
375 | !( event.type === "click" && event.button >= 1 ) ) { |
418 | // Avoid non-left-click bubbling in Firefox (#3861) |
|
376 | |
419 | if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { |
|
377 | for ( ; cur !== this; cur = cur.parentNode || this ) { |
420 | |
|
378 | |
- | ||
379 | // Don't check non-elements (#13208) |
421 | for ( ; cur !== this; cur = cur.parentNode || this ) { |
|
380 | // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) |
422 | |
|
Line 381... | Line 423... | |||
381 | if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { |
423 | // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) |
|
382 | matchedHandlers = []; |
424 | if ( cur.disabled !== true || event.type !== "click" ) { |
|
Line 383... | Line 425... | |||
383 | matchedSelectors = {}; |
425 | matches = []; |
|
384 | for ( i = 0; i < delegateCount; i++ ) { |
426 | for ( i = 0; i < delegateCount; i++ ) { |
|
385 | handleObj = handlers[ i ]; |
427 | handleObj = handlers[ i ]; |
|
386 | |
428 | |
|
387 | // Don't conflict with Object.prototype properties (#13203) |
429 | // Don't conflict with Object.prototype properties (#13203) |
|
388 | sel = handleObj.selector + " "; |
430 | sel = handleObj.selector + " "; |
|
389 | |
431 | |
|
390 | if ( matchedSelectors[ sel ] === undefined ) { |
432 | if ( matches[ sel ] === undefined ) { |
|
391 | matchedSelectors[ sel ] = handleObj.needsContext ? |
433 | matches[ sel ] = handleObj.needsContext ? |
|
392 | jQuery( sel, this ).index( cur ) > -1 : |
434 | jQuery( sel, this ).index( cur ) >= 0 : |
|
393 | jQuery.find( sel, this, null, [ cur ] ).length; |
435 | jQuery.find( sel, this, null, [ cur ] ).length; |
|
394 | } |
436 | } |
|
395 | if ( matchedSelectors[ sel ] ) { |
437 | if ( matches[ sel ] ) { |
|
396 | matchedHandlers.push( handleObj ); |
438 | matches.push( handleObj ); |
|
397 | } |
439 | } |
|
Line 398... | Line 440... | |||
398 | } |
440 | } |
|
399 | if ( matchedHandlers.length ) { |
- | ||
400 | handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); |
441 | if ( matches.length ) { |
|
401 | } |
442 | handlerQueue.push({ elem: cur, handlers: matches }); |
|
402 | } |
443 | } |
|
Line 403... | Line 444... | |||
403 | } |
444 | } |
|
404 | } |
445 | } |
|
Line 405... | Line 446... | |||
405 | |
446 | } |
|
406 | // Add the remaining (directly-bound) handlers |
447 | |
|
407 | cur = this; |
- | ||
- | 448 | // Add the remaining (directly-bound) handlers |
||
408 | if ( delegateCount < handlers.length ) { |
449 | if ( delegateCount < handlers.length ) { |
|
409 | handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); |
450 | handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); |
|
410 | } |
- | ||
411 | |
451 | } |
|
412 | return handlerQueue; |
452 | |
|
413 | }, |
453 | return handlerQueue; |
|
414 | |
454 | }, |
|
415 | addProp: function( name, hook ) { |
- | ||
416 | Object.defineProperty( jQuery.Event.prototype, name, { |
455 | |
|
417 | enumerable: true, |
456 | // Includes some event props shared by KeyEvent and MouseEvent |
|
418 | configurable: true, |
457 | props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), |
|
419 | |
- | ||
420 | get: jQuery.isFunction( hook ) ? |
458 | |
|
Line 421... | Line 459... | |||
421 | function() { |
459 | fixHooks: {}, |
|
- | 460 | |
||
- | 461 | keyHooks: { |
||
- | 462 | props: "char charCode key keyCode".split(" "), |
||
- | 463 | filter: function( event, original ) { |
||
- | 464 | |
||
422 | if ( this.originalEvent ) { |
465 | // Add which for key events |
|
423 | return hook( this.originalEvent ); |
466 | if ( event.which == null ) { |
|
424 | } |
467 | event.which = original.charCode != null ? original.charCode : original.keyCode; |
|
- | 468 | } |
||
- | 469 | |
||
- | 470 | return event; |
||
- | 471 | } |
||
425 | } : |
472 | }, |
|
426 | function() { |
473 | |
|
- | 474 | mouseHooks: { |
||
- | 475 | props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "), |
||
- | 476 | filter: function( event, original ) { |
||
427 | if ( this.originalEvent ) { |
477 | var eventDoc, doc, body, |
|
- | 478 | button = original.button; |
||
- | 479 | |
||
- | 480 | // Calculate pageX/Y if missing and clientX/Y available |
||
- | 481 | if ( event.pageX == null && original.clientX != null ) { |
||
- | 482 | eventDoc = event.target.ownerDocument || document; |
||
428 | return this.originalEvent[ name ]; |
483 | doc = eventDoc.documentElement; |
|
- | 484 | body = eventDoc.body; |
||
- | 485 | |
||
429 | } |
486 | event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); |
|
430 | }, |
487 | event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); |
|
431 | |
488 | } |
|
432 | set: function( value ) { |
489 | |
|
433 | Object.defineProperty( this, name, { |
490 | // Add which for click: 1 === left; 2 === middle; 3 === right |
|
- | 491 | // Note: button is not normalized, so don't use it |
||
- | 492 | if ( !event.which && button !== undefined ) { |
||
- | 493 | event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); |
||
- | 494 | } |
||
- | 495 | |
||
- | 496 | return event; |
||
434 | enumerable: true, |
497 | } |
|
- | 498 | }, |
||
- | 499 | |
||
- | 500 | fix: function( event ) { |
||
- | 501 | if ( event[ jQuery.expando ] ) { |
||
- | 502 | return event; |
||
- | 503 | } |
||
- | 504 | |
||
- | 505 | // Create a writable copy of the event object and normalize some properties |
||
- | 506 | var i, prop, copy, |
||
- | 507 | type = event.type, |
||
435 | configurable: true, |
508 | originalEvent = event, |
|
- | 509 | fixHook = this.fixHooks[ type ]; |
||
- | 510 | |
||
- | 511 | if ( !fixHook ) { |
||
- | 512 | this.fixHooks[ type ] = fixHook = |
||
- | 513 | rmouseEvent.test( type ) ? this.mouseHooks : |
||
- | 514 | rkeyEvent.test( type ) ? this.keyHooks : |
||
- | 515 | {}; |
||
- | 516 | } |
||
- | 517 | copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; |
||
- | 518 | |
||
- | 519 | event = new jQuery.Event( originalEvent ); |
||
- | 520 | |
||
- | 521 | i = copy.length; |
||
- | 522 | while ( i-- ) { |
||
- | 523 | prop = copy[ i ]; |
||
- | 524 | event[ prop ] = originalEvent[ prop ]; |
||
- | 525 | } |
||
- | 526 | |
||
- | 527 | // Support: Cordova 2.5 (WebKit) (#13255) |
||
- | 528 | // All events should have a target; Cordova deviceready doesn't |
||
436 | writable: true, |
529 | if ( !event.target ) { |
|
Line 437... | Line 530... | |||
437 | value: value |
530 | event.target = document; |
|
438 | } ); |
531 | } |
|
439 | } |
- | ||
440 | } ); |
532 | |
|
441 | }, |
533 | // Support: Safari 6.0+, Chrome<28 |
|
442 | |
534 | // Target should not be a text node (#504, #13143) |
|
443 | fix: function( originalEvent ) { |
535 | if ( event.target.nodeType === 3 ) { |
|
444 | return originalEvent[ jQuery.expando ] ? |
- | ||
445 | originalEvent : |
536 | event.target = event.target.parentNode; |
|
446 | new jQuery.Event( originalEvent ); |
537 | } |
|
447 | }, |
538 | |
|
448 | |
539 | return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; |
|
449 | special: { |
540 | }, |
|
Line 471... | Line 562... | |||
471 | } |
562 | } |
|
472 | }, |
563 | }, |
|
473 | delegateType: "focusout" |
564 | delegateType: "focusout" |
|
474 | }, |
565 | }, |
|
475 | click: { |
566 | click: { |
|
476 | |
- | ||
477 | // For checkbox, fire native event so checked state will be right |
567 | // For checkbox, fire native event so checked state will be right |
|
478 | trigger: function() { |
568 | trigger: function() { |
|
479 | if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { |
569 | if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { |
|
480 | this.click(); |
570 | this.click(); |
|
481 | return false; |
571 | return false; |
|
Line 496... | Line 586... | |||
496 | if ( event.result !== undefined && event.originalEvent ) { |
586 | if ( event.result !== undefined && event.originalEvent ) { |
|
497 | event.originalEvent.returnValue = event.result; |
587 | event.originalEvent.returnValue = event.result; |
|
498 | } |
588 | } |
|
499 | } |
589 | } |
|
500 | } |
590 | } |
|
- | 591 | }, |
||
- | 592 | |
||
- | 593 | simulate: function( type, elem, event, bubble ) { |
||
- | 594 | // Piggyback on a donor event to simulate a different one. |
||
- | 595 | // Fake originalEvent to avoid donor's stopPropagation, but if the |
||
- | 596 | // simulated event prevents default then we do the same on the donor. |
||
- | 597 | var e = jQuery.extend( |
||
- | 598 | new jQuery.Event(), |
||
- | 599 | event, |
||
- | 600 | { |
||
- | 601 | type: type, |
||
- | 602 | isSimulated: true, |
||
- | 603 | originalEvent: {} |
||
- | 604 | } |
||
- | 605 | ); |
||
- | 606 | if ( bubble ) { |
||
- | 607 | jQuery.event.trigger( e, null, elem ); |
||
- | 608 | } else { |
||
- | 609 | jQuery.event.dispatch.call( elem, e ); |
||
- | 610 | } |
||
- | 611 | if ( e.isDefaultPrevented() ) { |
||
- | 612 | event.preventDefault(); |
||
- | 613 | } |
||
501 | } |
614 | } |
|
502 | }; |
615 | }; |
|
Line 503... | Line 616... | |||
503 | |
616 | |
|
504 | jQuery.removeEvent = function( elem, type, handle ) { |
- | ||
505 | |
- | ||
506 | // This "if" is needed for plain objects |
617 | jQuery.removeEvent = function( elem, type, handle ) { |
|
507 | if ( elem.removeEventListener ) { |
618 | if ( elem.removeEventListener ) { |
|
508 | elem.removeEventListener( type, handle ); |
619 | elem.removeEventListener( type, handle, false ); |
|
509 | } |
620 | } |
|
Line 510... | Line 621... | |||
510 | }; |
621 | }; |
|
511 | |
- | ||
512 | jQuery.Event = function( src, props ) { |
622 | |
|
513 | |
623 | jQuery.Event = function( src, props ) { |
|
514 | // Allow instantiation without the 'new' keyword |
624 | // Allow instantiation without the 'new' keyword |
|
515 | if ( !( this instanceof jQuery.Event ) ) { |
625 | if ( !(this instanceof jQuery.Event) ) { |
|
Line 516... | Line 626... | |||
516 | return new jQuery.Event( src, props ); |
626 | return new jQuery.Event( src, props ); |
|
517 | } |
627 | } |
|
Line 523... | Line 633... | |||
523 | |
633 | |
|
524 | // Events bubbling up the document may have been marked as prevented |
634 | // Events bubbling up the document may have been marked as prevented |
|
525 | // by a handler lower down the tree; reflect the correct value. |
635 | // by a handler lower down the tree; reflect the correct value. |
|
526 | this.isDefaultPrevented = src.defaultPrevented || |
636 | this.isDefaultPrevented = src.defaultPrevented || |
|
527 | src.defaultPrevented === undefined && |
- | ||
528 | |
637 | src.defaultPrevented === undefined && |
|
529 | // Support: Android <=2.3 only |
638 | // Support: Android<4.0 |
|
530 | src.returnValue === false ? |
639 | src.returnValue === false ? |
|
531 | returnTrue : |
640 | returnTrue : |
|
Line 532... | Line -... | |||
532 | returnFalse; |
- | ||
533 | |
- | ||
534 | // Create target properties |
- | ||
535 | // Support: Safari <=6 - 7 only |
- | ||
536 | // Target should not be a text node (#504, #13143) |
- | ||
537 | this.target = ( src.target && src.target.nodeType === 3 ) ? |
- | ||
538 | src.target.parentNode : |
- | ||
539 | src.target; |
- | ||
540 | |
- | ||
541 | this.currentTarget = src.currentTarget; |
- | ||
542 | this.relatedTarget = src.relatedTarget; |
641 | returnFalse; |
|
543 | |
642 | |
|
544 | // Event type |
643 | // Event type |
|
545 | } else { |
644 | } else { |
|
Line 557... | Line 656... | |||
557 | // Mark it as fixed |
656 | // Mark it as fixed |
|
558 | this[ jQuery.expando ] = true; |
657 | this[ jQuery.expando ] = true; |
|
559 | }; |
658 | }; |
|
Line 560... | Line 659... | |||
560 | |
659 | |
|
561 | // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding |
660 | // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding |
|
562 | // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html |
661 | // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html |
|
563 | jQuery.Event.prototype = { |
- | ||
564 | constructor: jQuery.Event, |
662 | jQuery.Event.prototype = { |
|
565 | isDefaultPrevented: returnFalse, |
663 | isDefaultPrevented: returnFalse, |
|
566 | isPropagationStopped: returnFalse, |
664 | isPropagationStopped: returnFalse, |
|
567 | isImmediatePropagationStopped: returnFalse, |
- | ||
Line 568... | Line 665... | |||
568 | isSimulated: false, |
665 | isImmediatePropagationStopped: returnFalse, |
|
569 | |
666 | |
|
Line 570... | Line 667... | |||
570 | preventDefault: function() { |
667 | preventDefault: function() { |
|
Line 571... | Line 668... | |||
571 | var e = this.originalEvent; |
668 | var e = this.originalEvent; |
|
572 | |
669 | |
|
573 | this.isDefaultPrevented = returnTrue; |
670 | this.isDefaultPrevented = returnTrue; |
|
574 | |
671 | |
|
575 | if ( e && !this.isSimulated ) { |
672 | if ( e && e.preventDefault ) { |
|
576 | e.preventDefault(); |
673 | e.preventDefault(); |
|
Line 577... | Line 674... | |||
577 | } |
674 | } |
|
Line 578... | Line 675... | |||
578 | }, |
675 | }, |
|
579 | stopPropagation: function() { |
676 | stopPropagation: function() { |
|
580 | var e = this.originalEvent; |
677 | var e = this.originalEvent; |
|
581 | |
678 | |
|
582 | this.isPropagationStopped = returnTrue; |
679 | this.isPropagationStopped = returnTrue; |
|
583 | |
680 | |
|
Line 584... | Line 681... | |||
584 | if ( e && !this.isSimulated ) { |
681 | if ( e && e.stopPropagation ) { |
|
Line 585... | Line 682... | |||
585 | e.stopPropagation(); |
682 | e.stopPropagation(); |
|
586 | } |
683 | } |
|
587 | }, |
684 | }, |
|
Line 588... | Line 685... | |||
588 | stopImmediatePropagation: function() { |
685 | stopImmediatePropagation: function() { |
|
589 | var e = this.originalEvent; |
686 | var e = this.originalEvent; |
|
590 | |
687 | |
|
Line 591... | Line -... | |||
591 | this.isImmediatePropagationStopped = returnTrue; |
- | ||
592 | |
- | ||
593 | if ( e && !this.isSimulated ) { |
- | ||
594 | e.stopImmediatePropagation(); |
- | ||
595 | } |
- | ||
596 | |
- | ||
597 | this.stopPropagation(); |
- | ||
598 | } |
- | ||
599 | }; |
- | ||
600 | |
- | ||
601 | // Includes all common event props including KeyEvent and MouseEvent specific props |
- | ||
602 | jQuery.each( { |
- | ||
603 | altKey: true, |
- | ||
604 | bubbles: true, |
- | ||
605 | cancelable: true, |
- | ||
606 | changedTouches: true, |
- | ||
607 | ctrlKey: true, |
- | ||
608 | detail: true, |
- | ||
609 | eventPhase: true, |
- | ||
610 | metaKey: true, |
- | ||
611 | pageX: true, |
- | ||
612 | pageY: true, |
- | ||
613 | shiftKey: true, |
- | ||
614 | view: true, |
- | ||
615 | "char": true, |
- | ||
616 | charCode: true, |
- | ||
617 | key: true, |
- | ||
618 | keyCode: true, |
- | ||
619 | button: true, |
- | ||
620 | buttons: true, |
- | ||
621 | clientX: true, |
- | ||
622 | clientY: true, |
- | ||
623 | offsetX: true, |
- | ||
624 | offsetY: true, |
- | ||
625 | pointerId: true, |
- | ||
626 | pointerType: true, |
- | ||
627 | screenX: true, |
- | ||
628 | screenY: true, |
- | ||
629 | targetTouches: true, |
- | ||
630 | toElement: true, |
- | ||
631 | touches: true, |
- | ||
632 | |
- | ||
633 | which: function( event ) { |
- | ||
634 | var button = event.button; |
- | ||
635 | |
- | ||
636 | // Add which for key events |
- | ||
637 | if ( event.which == null && rkeyEvent.test( event.type ) ) { |
- | ||
638 | return event.charCode != null ? event.charCode : event.keyCode; |
- | ||
639 | } |
- | ||
640 | |
- | ||
641 | // Add which for click: 1 === left; 2 === middle; 3 === right |
- | ||
642 | if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { |
- | ||
643 | if ( button & 1 ) { |
- | ||
644 | return 1; |
- | ||
645 | } |
- | ||
646 | |
- | ||
647 | if ( button & 2 ) { |
- | ||
648 | return 3; |
- | ||
649 | } |
- | ||
650 | |
- | ||
651 | if ( button & 4 ) { |
- | ||
652 | return 2; |
688 | this.isImmediatePropagationStopped = returnTrue; |
|
653 | } |
- | ||
654 | |
- | ||
655 | return 0; |
- | ||
656 | } |
689 | |
|
657 | |
- | ||
658 | return event.which; |
- | ||
659 | } |
- | ||
660 | }, jQuery.event.addProp ); |
690 | if ( e && e.stopImmediatePropagation ) { |
|
661 | |
691 | e.stopImmediatePropagation(); |
|
662 | // Create mouseenter/leave events using mouseover/out and event-time checks |
692 | } |
|
663 | // so that event delegation works in jQuery. |
693 | |
|
664 | // Do the same for pointerenter/pointerleave and pointerover/pointerout |
694 | this.stopPropagation(); |
|
665 | // |
695 | } |
|
Line 681... | Line 711... | |||
681 | var ret, |
711 | var ret, |
|
682 | target = this, |
712 | target = this, |
|
683 | related = event.relatedTarget, |
713 | related = event.relatedTarget, |
|
684 | handleObj = event.handleObj; |
714 | handleObj = event.handleObj; |
|
Line 685... | Line 715... | |||
685 | |
715 | |
|
686 | // For mouseenter/leave call the handler if related is outside the target. |
716 | // For mousenter/leave call the handler if related is outside the target. |
|
687 | // NB: No relatedTarget if the mouse left/entered the browser window |
717 | // NB: No relatedTarget if the mouse left/entered the browser window |
|
688 | if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { |
718 | if ( !related || (related !== target && !jQuery.contains( target, related )) ) { |
|
689 | event.type = handleObj.origType; |
719 | event.type = handleObj.origType; |
|
690 | ret = handleObj.handler.apply( this, arguments ); |
720 | ret = handleObj.handler.apply( this, arguments ); |
|
691 | event.type = fix; |
721 | event.type = fix; |
|
692 | } |
722 | } |
|
693 | return ret; |
723 | return ret; |
|
694 | } |
724 | } |
|
695 | }; |
725 | }; |
|
- | 726 | }); |
||
- | 727 | |
||
- | 728 | // Support: Firefox, Chrome, Safari |
||
- | 729 | // Create "bubbling" focus and blur events |
||
- | 730 | if ( !support.focusinBubbles ) { |
||
- | 731 | jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { |
||
- | 732 | |
||
- | 733 | // Attach a single capturing handler on the document while someone wants focusin/focusout |
||
- | 734 | var handler = function( event ) { |
||
- | 735 | jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); |
||
- | 736 | }; |
||
- | 737 | |
||
- | 738 | jQuery.event.special[ fix ] = { |
||
- | 739 | setup: function() { |
||
- | 740 | var doc = this.ownerDocument || this, |
||
- | 741 | attaches = data_priv.access( doc, fix ); |
||
- | 742 | |
||
- | 743 | if ( !attaches ) { |
||
- | 744 | doc.addEventListener( orig, handler, true ); |
||
- | 745 | } |
||
- | 746 | data_priv.access( doc, fix, ( attaches || 0 ) + 1 ); |
||
- | 747 | }, |
||
- | 748 | teardown: function() { |
||
- | 749 | var doc = this.ownerDocument || this, |
||
- | 750 | attaches = data_priv.access( doc, fix ) - 1; |
||
- | 751 | |
||
- | 752 | if ( !attaches ) { |
||
- | 753 | doc.removeEventListener( orig, handler, true ); |
||
- | 754 | data_priv.remove( doc, fix ); |
||
- | 755 | |
||
- | 756 | } else { |
||
- | 757 | data_priv.access( doc, fix, attaches ); |
||
- | 758 | } |
||
- | 759 | } |
||
- | 760 | }; |
||
- | 761 | }); |
||
- | 762 | } |
||
- | 763 | |
||
- | 764 | jQuery.fn.extend({ |
||
- | 765 | |
||
- | 766 | on: function( types, selector, data, fn, /*INTERNAL*/ one ) { |
||
- | 767 | var origFn, type; |
||
- | 768 | |
||
- | 769 | // Types can be a map of types/handlers |
||
- | 770 | if ( typeof types === "object" ) { |
||
- | 771 | // ( types-Object, selector, data ) |
||
- | 772 | if ( typeof selector !== "string" ) { |
||
- | 773 | // ( types-Object, data ) |
||
- | 774 | data = data || selector; |
||
- | 775 | selector = undefined; |
||
- | 776 | } |
||
- | 777 | for ( type in types ) { |
||
- | 778 | this.on( type, selector, data, types[ type ], one ); |
||
- | 779 | } |
||
- | 780 | return this; |
||
Line -... | Line 781... | |||
- | 781 | } |
||
- | 782 | |
||
- | 783 | if ( data == null && fn == null ) { |
||
- | 784 | // ( types, fn ) |
||
- | 785 | fn = selector; |
||
- | 786 | data = selector = undefined; |
||
- | 787 | } else if ( fn == null ) { |
||
- | 788 | if ( typeof selector === "string" ) { |
||
- | 789 | // ( types, selector, fn ) |
||
- | 790 | fn = data; |
||
- | 791 | data = undefined; |
||
- | 792 | } else { |
||
- | 793 | // ( types, data, fn ) |
||
- | 794 | fn = data; |
||
- | 795 | data = selector; |
||
- | 796 | selector = undefined; |
||
- | 797 | } |
||
- | 798 | } |
||
696 | } ); |
799 | if ( fn === false ) { |
|
- | 800 | fn = returnFalse; |
||
- | 801 | } else if ( !fn ) { |
||
Line -... | Line 802... | |||
- | 802 | return this; |
||
- | 803 | } |
||
697 | |
804 | |
|
- | 805 | if ( one === 1 ) { |
||
- | 806 | origFn = fn; |
||
- | 807 | fn = function( event ) { |
||
- | 808 | // Can use an empty set, since event contains the info |
||
- | 809 | jQuery().off( event ); |
||
- | 810 | return origFn.apply( this, arguments ); |
||
- | 811 | }; |
||
- | 812 | // Use same guid so caller can remove using origFn |
||
698 | jQuery.fn.extend( { |
813 | fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); |
|
- | 814 | } |
||
699 | |
815 | return this.each( function() { |
|
700 | on: function( types, selector, data, fn ) { |
816 | jQuery.event.add( this, types, fn, data, selector ); |
|
701 | return on( this, types, selector, data, fn ); |
817 | }); |
|
702 | }, |
818 | }, |
|
703 | one: function( types, selector, data, fn ) { |
819 | one: function( types, selector, data, fn ) { |
|
704 | return on( this, types, selector, data, fn, 1 ); |
820 | return this.on( types, selector, data, fn, 1 ); |
|
705 | }, |
821 | }, |
|
706 | off: function( types, selector, fn ) { |
- | ||
707 | var handleObj, type; |
822 | off: function( types, selector, fn ) { |
|
708 | if ( types && types.preventDefault && types.handleObj ) { |
823 | var handleObj, type; |
|
709 | |
824 | if ( types && types.preventDefault && types.handleObj ) { |
|
710 | // ( event ) dispatched jQuery.Event |
- | ||
711 | handleObj = types.handleObj; |
825 | // ( event ) dispatched jQuery.Event |
|
712 | jQuery( types.delegateTarget ).off( |
- | ||
713 | handleObj.namespace ? |
826 | handleObj = types.handleObj; |
|
714 | handleObj.origType + "." + handleObj.namespace : |
827 | jQuery( types.delegateTarget ).off( |
|
715 | handleObj.origType, |
828 | handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, |
|
716 | handleObj.selector, |
829 | handleObj.selector, |
|
717 | handleObj.handler |
830 | handleObj.handler |
|
718 | ); |
831 | ); |
|
719 | return this; |
- | ||
720 | } |
832 | return this; |
|
721 | if ( typeof types === "object" ) { |
833 | } |
|
722 | |
834 | if ( typeof types === "object" ) { |
|
723 | // ( types-object [, selector] ) |
835 | // ( types-object [, selector] ) |
|
724 | for ( type in types ) { |
836 | for ( type in types ) { |
|
725 | this.off( type, selector, types[ type ] ); |
837 | this.off( type, selector, types[ type ] ); |
|
726 | } |
838 | } |
|
727 | return this; |
- | ||
728 | } |
839 | return this; |
|
729 | if ( selector === false || typeof selector === "function" ) { |
840 | } |
|
730 | |
841 | if ( selector === false || typeof selector === "function" ) { |
|
731 | // ( types [, fn] ) |
842 | // ( types [, fn] ) |
|
732 | fn = selector; |
843 | fn = selector; |
|
733 | selector = undefined; |
844 | selector = undefined; |
|
734 | } |
845 | } |
|
735 | if ( fn === false ) { |
846 | if ( fn === false ) { |
|
736 | fn = returnFalse; |
847 | fn = returnFalse; |
|
737 | } |
848 | } |
|
- | 849 | return this.each(function() { |
||
- | 850 | jQuery.event.remove( this, types, fn, selector ); |
||
- | 851 | }); |
||
- | 852 | }, |
||
- | 853 | |
||
- | 854 | trigger: function( type, data ) { |
||
- | 855 | return this.each(function() { |
||
- | 856 | jQuery.event.trigger( type, data, this ); |
||
- | 857 | }); |
||
- | 858 | }, |
||
- | 859 | triggerHandler: function( type, data ) { |
||
- | 860 | var elem = this[0]; |
||
738 | return this.each( function() { |
861 | if ( elem ) { |
|
739 | jQuery.event.remove( this, types, fn, selector ); |
862 | return jQuery.event.trigger( type, data, elem, true ); |
|
Line 740... | Line 863... | |||
740 | } ); |
863 | } |
|
741 | } |
864 | } |