|  | define( [ | 
|  | "./core", | 
|  | "./var/document", | 
|  | "./var/documentElement", | 
|  | "./var/isFunction", | 
|  | "./var/rnothtmlwhite", | 
|  | "./var/rcheckableType", | 
|  | "./var/slice", | 
|  | "./data/var/acceptData", | 
|  | "./data/var/dataPriv", | 
|  | "./core/nodeName", | 
|  |  | 
|  | "./core/init", | 
|  | "./selector" | 
|  | ], function( jQuery, document, documentElement, isFunction, rnothtmlwhite, | 
|  | rcheckableType, slice, acceptData, dataPriv, nodeName ) { | 
|  |  | 
|  | "use strict"; | 
|  |  | 
|  | var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; | 
|  |  | 
|  | function returnTrue() { | 
|  | return true; | 
|  | } | 
|  |  | 
|  | function returnFalse() { | 
|  | return false; | 
|  | } | 
|  |  | 
|  | // Support: IE <=9 - 11+ | 
|  | // focus() and blur() are asynchronous, except when they are no-op. | 
|  | // So expect focus to be synchronous when the element is already active, | 
|  | // and blur to be synchronous when the element is not already active. | 
|  | // (focus and blur are always synchronous in other supported browsers, | 
|  | // this just defines when we can count on it). | 
|  | function expectSync( elem, type ) { | 
|  | return ( elem === safeActiveElement() ) === ( type === "focus" ); | 
|  | } | 
|  |  | 
|  | // Support: IE <=9 only | 
|  | // Accessing document.activeElement can throw unexpectedly | 
|  | // https://bugs.jquery.com/ticket/13393 | 
|  | function safeActiveElement() { | 
|  | try { | 
|  | return document.activeElement; | 
|  | } catch ( err ) { } | 
|  | } | 
|  |  | 
|  | function on( elem, types, selector, data, fn, one ) { | 
|  | var origFn, type; | 
|  |  | 
|  | // Types can be a map of types/handlers | 
|  | if ( typeof types === "object" ) { | 
|  |  | 
|  | // ( types-Object, selector, data ) | 
|  | if ( typeof selector !== "string" ) { | 
|  |  | 
|  | // ( types-Object, data ) | 
|  | data = data || selector; | 
|  | selector = undefined; | 
|  | } | 
|  | for ( type in types ) { | 
|  | on( elem, type, selector, data, types[ type ], one ); | 
|  | } | 
|  | return elem; | 
|  | } | 
|  |  | 
|  | if ( data == null && fn == null ) { | 
|  |  | 
|  | // ( types, fn ) | 
|  | fn = selector; | 
|  | data = selector = undefined; | 
|  | } else if ( fn == null ) { | 
|  | if ( typeof selector === "string" ) { | 
|  |  | 
|  | // ( types, selector, fn ) | 
|  | fn = data; | 
|  | data = undefined; | 
|  | } else { | 
|  |  | 
|  | // ( types, data, fn ) | 
|  | fn = data; | 
|  | data = selector; | 
|  | selector = undefined; | 
|  | } | 
|  | } | 
|  | if ( fn === false ) { | 
|  | fn = returnFalse; | 
|  | } else if ( !fn ) { | 
|  | return elem; | 
|  | } | 
|  |  | 
|  | if ( one === 1 ) { | 
|  | origFn = fn; | 
|  | fn = function( event ) { | 
|  |  | 
|  | // Can use an empty set, since event contains the info | 
|  | jQuery().off( event ); | 
|  | return origFn.apply( this, arguments ); | 
|  | }; | 
|  |  | 
|  | // Use same guid so caller can remove using origFn | 
|  | fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); | 
|  | } | 
|  | return elem.each( function() { | 
|  | jQuery.event.add( this, types, fn, data, selector ); | 
|  | } ); | 
|  | } | 
|  |  | 
|  | /* | 
|  | * Helper functions for managing events -- not part of the public interface. | 
|  | * Props to Dean Edwards' addEvent library for many of the ideas. | 
|  | */ | 
|  | jQuery.event = { | 
|  |  | 
|  | global: {}, | 
|  |  | 
|  | add: function( elem, types, handler, data, selector ) { | 
|  |  | 
|  | var handleObjIn, eventHandle, tmp, | 
|  | events, t, handleObj, | 
|  | special, handlers, type, namespaces, origType, | 
|  | elemData = dataPriv.get( elem ); | 
|  |  | 
|  | // Only attach events to objects that accept data | 
|  | if ( !acceptData( elem ) ) { | 
|  | return; | 
|  | } | 
|  |  | 
|  | // Caller can pass in an object of custom data in lieu of the handler | 
|  | if ( handler.handler ) { | 
|  | handleObjIn = handler; | 
|  | handler = handleObjIn.handler; | 
|  | selector = handleObjIn.selector; | 
|  | } | 
|  |  | 
|  | // Ensure that invalid selectors throw exceptions at attach time | 
|  | // Evaluate against documentElement in case elem is a non-element node (e.g., document) | 
|  | if ( selector ) { | 
|  | jQuery.find.matchesSelector( documentElement, selector ); | 
|  | } | 
|  |  | 
|  | // Make sure that the handler has a unique ID, used to find/remove it later | 
|  | if ( !handler.guid ) { | 
|  | handler.guid = jQuery.guid++; | 
|  | } | 
|  |  | 
|  | // Init the element's event structure and main handler, if this is the first | 
|  | if ( !( events = elemData.events ) ) { | 
|  | events = elemData.events = Object.create( null ); | 
|  | } | 
|  | if ( !( eventHandle = elemData.handle ) ) { | 
|  | eventHandle = elemData.handle = function( e ) { | 
|  |  | 
|  | // Discard the second event of a jQuery.event.trigger() and | 
|  | // when an event is called after a page has unloaded | 
|  | return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? | 
|  | jQuery.event.dispatch.apply( elem, arguments ) : undefined; | 
|  | }; | 
|  | } | 
|  |  | 
|  | // Handle multiple events separated by a space | 
|  | types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; | 
|  | t = types.length; | 
|  | while ( t-- ) { | 
|  | tmp = rtypenamespace.exec( types[ t ] ) || []; | 
|  | type = origType = tmp[ 1 ]; | 
|  | namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); | 
|  |  | 
|  | // There *must* be a type, no attaching namespace-only handlers | 
|  | if ( !type ) { | 
|  | continue; | 
|  | } | 
|  |  | 
|  | // If event changes its type, use the special event handlers for the changed type | 
|  | special = jQuery.event.special[ type ] || {}; | 
|  |  | 
|  | // If selector defined, determine special event api type, otherwise given type | 
|  | type = ( selector ? special.delegateType : special.bindType ) || type; | 
|  |  | 
|  | // Update special based on newly reset type | 
|  | special = jQuery.event.special[ type ] || {}; | 
|  |  | 
|  | // handleObj is passed to all event handlers | 
|  | handleObj = jQuery.extend( { | 
|  | type: type, | 
|  | origType: origType, | 
|  | data: data, | 
|  | handler: handler, | 
|  | guid: handler.guid, | 
|  | selector: selector, | 
|  | needsContext: selector && jQuery.expr.match.needsContext.test( selector ), | 
|  | namespace: namespaces.join( "." ) | 
|  | }, handleObjIn ); | 
|  |  | 
|  | // Init the event handler queue if we're the first | 
|  | if ( !( handlers = events[ type ] ) ) { | 
|  | handlers = events[ type ] = []; | 
|  | handlers.delegateCount = 0; | 
|  |  | 
|  | // Only use addEventListener if the special events handler returns false | 
|  | if ( !special.setup || | 
|  | special.setup.call( elem, data, namespaces, eventHandle ) === false ) { | 
|  |  | 
|  | if ( elem.addEventListener ) { | 
|  | elem.addEventListener( type, eventHandle ); | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | if ( special.add ) { | 
|  | special.add.call( elem, handleObj ); | 
|  |  | 
|  | if ( !handleObj.handler.guid ) { | 
|  | handleObj.handler.guid = handler.guid; | 
|  | } | 
|  | } | 
|  |  | 
|  | // Add to the element's handler list, delegates in front | 
|  | if ( selector ) { | 
|  | handlers.splice( handlers.delegateCount++, 0, handleObj ); | 
|  | } else { | 
|  | handlers.push( handleObj ); | 
|  | } | 
|  |  | 
|  | // Keep track of which events have ever been used, for event optimization | 
|  | jQuery.event.global[ type ] = true; | 
|  | } | 
|  |  | 
|  | }, | 
|  |  | 
|  | // Detach an event or set of events from an element | 
|  | remove: function( elem, types, handler, selector, mappedTypes ) { | 
|  |  | 
|  | var j, origCount, tmp, | 
|  | events, t, handleObj, | 
|  | special, handlers, type, namespaces, origType, | 
|  | elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); | 
|  |  | 
|  | if ( !elemData || !( events = elemData.events ) ) { | 
|  | return; | 
|  | } | 
|  |  | 
|  | // Once for each type.namespace in types; type may be omitted | 
|  | types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; | 
|  | t = types.length; | 
|  | while ( t-- ) { | 
|  | tmp = rtypenamespace.exec( types[ t ] ) || []; | 
|  | type = origType = tmp[ 1 ]; | 
|  | namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); | 
|  |  | 
|  | // Unbind all events (on this namespace, if provided) for the element | 
|  | if ( !type ) { | 
|  | for ( type in events ) { | 
|  | jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); | 
|  | } | 
|  | continue; | 
|  | } | 
|  |  | 
|  | special = jQuery.event.special[ type ] || {}; | 
|  | type = ( selector ? special.delegateType : special.bindType ) || type; | 
|  | handlers = events[ type ] || []; | 
|  | tmp = tmp[ 2 ] && | 
|  | new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); | 
|  |  | 
|  | // Remove matching events | 
|  | origCount = j = handlers.length; | 
|  | while ( j-- ) { | 
|  | handleObj = handlers[ j ]; | 
|  |  | 
|  | if ( ( mappedTypes || origType === handleObj.origType ) && | 
|  | ( !handler || handler.guid === handleObj.guid ) && | 
|  | ( !tmp || tmp.test( handleObj.namespace ) ) && | 
|  | ( !selector || selector === handleObj.selector || | 
|  | selector === "**" && handleObj.selector ) ) { | 
|  | handlers.splice( j, 1 ); | 
|  |  | 
|  | if ( handleObj.selector ) { | 
|  | handlers.delegateCount--; | 
|  | } | 
|  | if ( special.remove ) { | 
|  | special.remove.call( elem, handleObj ); | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | // Remove generic event handler if we removed something and no more handlers exist | 
|  | // (avoids potential for endless recursion during removal of special event handlers) | 
|  | if ( origCount && !handlers.length ) { | 
|  | if ( !special.teardown || | 
|  | special.teardown.call( elem, namespaces, elemData.handle ) === false ) { | 
|  |  | 
|  | jQuery.removeEvent( elem, type, elemData.handle ); | 
|  | } | 
|  |  | 
|  | delete events[ type ]; | 
|  | } | 
|  | } | 
|  |  | 
|  | // Remove data and the expando if it's no longer used | 
|  | if ( jQuery.isEmptyObject( events ) ) { | 
|  | dataPriv.remove( elem, "handle events" ); | 
|  | } | 
|  | }, | 
|  |  | 
|  | dispatch: function( nativeEvent ) { | 
|  |  | 
|  | var i, j, ret, matched, handleObj, handlerQueue, | 
|  | args = new Array( arguments.length ), | 
|  |  | 
|  | // Make a writable jQuery.Event from the native event object | 
|  | event = jQuery.event.fix( nativeEvent ), | 
|  |  | 
|  | handlers = ( | 
|  | dataPriv.get( this, "events" ) || Object.create( null ) | 
|  | )[ event.type ] || [], | 
|  | special = jQuery.event.special[ event.type ] || {}; | 
|  |  | 
|  | // Use the fix-ed jQuery.Event rather than the (read-only) native event | 
|  | args[ 0 ] = event; | 
|  |  | 
|  | for ( i = 1; i < arguments.length; i++ ) { | 
|  | args[ i ] = arguments[ i ]; | 
|  | } | 
|  |  | 
|  | event.delegateTarget = this; | 
|  |  | 
|  | // Call the preDispatch hook for the mapped type, and let it bail if desired | 
|  | if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { | 
|  | return; | 
|  | } | 
|  |  | 
|  | // Determine handlers | 
|  | handlerQueue = jQuery.event.handlers.call( this, event, handlers ); | 
|  |  | 
|  | // Run delegates first; they may want to stop propagation beneath us | 
|  | i = 0; | 
|  | while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { | 
|  | event.currentTarget = matched.elem; | 
|  |  | 
|  | j = 0; | 
|  | while ( ( handleObj = matched.handlers[ j++ ] ) && | 
|  | !event.isImmediatePropagationStopped() ) { | 
|  |  | 
|  | // If the event is namespaced, then each handler is only invoked if it is | 
|  | // specially universal or its namespaces are a superset of the event's. | 
|  | if ( !event.rnamespace || handleObj.namespace === false || | 
|  | event.rnamespace.test( handleObj.namespace ) ) { | 
|  |  | 
|  | event.handleObj = handleObj; | 
|  | event.data = handleObj.data; | 
|  |  | 
|  | ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || | 
|  | handleObj.handler ).apply( matched.elem, args ); | 
|  |  | 
|  | if ( ret !== undefined ) { | 
|  | if ( ( event.result = ret ) === false ) { | 
|  | event.preventDefault(); | 
|  | event.stopPropagation(); | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | // Call the postDispatch hook for the mapped type | 
|  | if ( special.postDispatch ) { | 
|  | special.postDispatch.call( this, event ); | 
|  | } | 
|  |  | 
|  | return event.result; | 
|  | }, | 
|  |  | 
|  | handlers: function( event, handlers ) { | 
|  | var i, handleObj, sel, matchedHandlers, matchedSelectors, | 
|  | handlerQueue = [], | 
|  | delegateCount = handlers.delegateCount, | 
|  | cur = event.target; | 
|  |  | 
|  | // Find delegate handlers | 
|  | if ( delegateCount && | 
|  |  | 
|  | // Support: IE <=9 | 
|  | // Black-hole SVG <use> instance trees (trac-13180) | 
|  | cur.nodeType && | 
|  |  | 
|  | // Support: Firefox <=42 | 
|  | // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) | 
|  | // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click | 
|  | // Support: IE 11 only | 
|  | // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) | 
|  | !( event.type === "click" && event.button >= 1 ) ) { | 
|  |  | 
|  | for ( ; cur !== this; cur = cur.parentNode || this ) { | 
|  |  | 
|  | // Don't check non-elements (trac-13208) | 
|  | // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764) | 
|  | if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { | 
|  | matchedHandlers = []; | 
|  | matchedSelectors = {}; | 
|  | for ( i = 0; i < delegateCount; i++ ) { | 
|  | handleObj = handlers[ i ]; | 
|  |  | 
|  | // Don't conflict with Object.prototype properties (trac-13203) | 
|  | sel = handleObj.selector + " "; | 
|  |  | 
|  | if ( matchedSelectors[ sel ] === undefined ) { | 
|  | matchedSelectors[ sel ] = handleObj.needsContext ? | 
|  | jQuery( sel, this ).index( cur ) > -1 : | 
|  | jQuery.find( sel, this, null, [ cur ] ).length; | 
|  | } | 
|  | if ( matchedSelectors[ sel ] ) { | 
|  | matchedHandlers.push( handleObj ); | 
|  | } | 
|  | } | 
|  | if ( matchedHandlers.length ) { | 
|  | handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | // Add the remaining (directly-bound) handlers | 
|  | cur = this; | 
|  | if ( delegateCount < handlers.length ) { | 
|  | handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); | 
|  | } | 
|  |  | 
|  | return handlerQueue; | 
|  | }, | 
|  |  | 
|  | addProp: function( name, hook ) { | 
|  | Object.defineProperty( jQuery.Event.prototype, name, { | 
|  | enumerable: true, | 
|  | configurable: true, | 
|  |  | 
|  | get: isFunction( hook ) ? | 
|  | function() { | 
|  | if ( this.originalEvent ) { | 
|  | return hook( this.originalEvent ); | 
|  | } | 
|  | } : | 
|  | function() { | 
|  | if ( this.originalEvent ) { | 
|  | return this.originalEvent[ name ]; | 
|  | } | 
|  | }, | 
|  |  | 
|  | set: function( value ) { | 
|  | Object.defineProperty( this, name, { | 
|  | enumerable: true, | 
|  | configurable: true, | 
|  | writable: true, | 
|  | value: value | 
|  | } ); | 
|  | } | 
|  | } ); | 
|  | }, | 
|  |  | 
|  | fix: function( originalEvent ) { | 
|  | return originalEvent[ jQuery.expando ] ? | 
|  | originalEvent : | 
|  | new jQuery.Event( originalEvent ); | 
|  | }, | 
|  |  | 
|  | special: { | 
|  | load: { | 
|  |  | 
|  | // Prevent triggered image.load events from bubbling to window.load | 
|  | noBubble: true | 
|  | }, | 
|  | click: { | 
|  |  | 
|  | // Utilize native event to ensure correct state for checkable inputs | 
|  | setup: function( data ) { | 
|  |  | 
|  | // For mutual compressibility with _default, replace `this` access with a local var. | 
|  | // `|| data` is dead code meant only to preserve the variable through minification. | 
|  | var el = this || data; | 
|  |  | 
|  | // Claim the first handler | 
|  | if ( rcheckableType.test( el.type ) && | 
|  | el.click && nodeName( el, "input" ) ) { | 
|  |  | 
|  | // dataPriv.set( el, "click", ... ) | 
|  | leverageNative( el, "click", returnTrue ); | 
|  | } | 
|  |  | 
|  | // Return false to allow normal processing in the caller | 
|  | return false; | 
|  | }, | 
|  | trigger: function( data ) { | 
|  |  | 
|  | // For mutual compressibility with _default, replace `this` access with a local var. | 
|  | // `|| data` is dead code meant only to preserve the variable through minification. | 
|  | var el = this || data; | 
|  |  | 
|  | // Force setup before triggering a click | 
|  | if ( rcheckableType.test( el.type ) && | 
|  | el.click && nodeName( el, "input" ) ) { | 
|  |  | 
|  | leverageNative( el, "click" ); | 
|  | } | 
|  |  | 
|  | // Return non-false to allow normal event-path propagation | 
|  | return true; | 
|  | }, | 
|  |  | 
|  | // For cross-browser consistency, suppress native .click() on links | 
|  | // Also prevent it if we're currently inside a leveraged native-event stack | 
|  | _default: function( event ) { | 
|  | var target = event.target; | 
|  | return rcheckableType.test( target.type ) && | 
|  | target.click && nodeName( target, "input" ) && | 
|  | dataPriv.get( target, "click" ) || | 
|  | nodeName( target, "a" ); | 
|  | } | 
|  | }, | 
|  |  | 
|  | beforeunload: { | 
|  | postDispatch: function( event ) { | 
|  |  | 
|  | // Support: Firefox 20+ | 
|  | // Firefox doesn't alert if the returnValue field is not set. | 
|  | if ( event.result !== undefined && event.originalEvent ) { | 
|  | event.originalEvent.returnValue = event.result; | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | }; | 
|  |  | 
|  | // Ensure the presence of an event listener that handles manually-triggered | 
|  | // synthetic events by interrupting progress until reinvoked in response to | 
|  | // *native* events that it fires directly, ensuring that state changes have | 
|  | // already occurred before other listeners are invoked. | 
|  | function leverageNative( el, type, expectSync ) { | 
|  |  | 
|  | // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add | 
|  | if ( !expectSync ) { | 
|  | if ( dataPriv.get( el, type ) === undefined ) { | 
|  | jQuery.event.add( el, type, returnTrue ); | 
|  | } | 
|  | return; | 
|  | } | 
|  |  | 
|  | // Register the controller as a special universal handler for all event namespaces | 
|  | dataPriv.set( el, type, false ); | 
|  | jQuery.event.add( el, type, { | 
|  | namespace: false, | 
|  | handler: function( event ) { | 
|  | var notAsync, result, | 
|  | saved = dataPriv.get( this, type ); | 
|  |  | 
|  | if ( ( event.isTrigger & 1 ) && this[ type ] ) { | 
|  |  | 
|  | // Interrupt processing of the outer synthetic .trigger()ed event | 
|  | // Saved data should be false in such cases, but might be a leftover capture object | 
|  | // from an async native handler (gh-4350) | 
|  | if ( !saved.length ) { | 
|  |  | 
|  | // Store arguments for use when handling the inner native event | 
|  | // There will always be at least one argument (an event object), so this array | 
|  | // will not be confused with a leftover capture object. | 
|  | saved = slice.call( arguments ); | 
|  | dataPriv.set( this, type, saved ); | 
|  |  | 
|  | // Trigger the native event and capture its result | 
|  | // Support: IE <=9 - 11+ | 
|  | // focus() and blur() are asynchronous | 
|  | notAsync = expectSync( this, type ); | 
|  | this[ type ](); | 
|  | result = dataPriv.get( this, type ); | 
|  | if ( saved !== result || notAsync ) { | 
|  | dataPriv.set( this, type, false ); | 
|  | } else { | 
|  | result = {}; | 
|  | } | 
|  | if ( saved !== result ) { | 
|  |  | 
|  | // Cancel the outer synthetic event | 
|  | event.stopImmediatePropagation(); | 
|  | event.preventDefault(); | 
|  |  | 
|  | // Support: Chrome 86+ | 
|  | // In Chrome, if an element having a focusout handler is blurred by | 
|  | // clicking outside of it, it invokes the handler synchronously. If | 
|  | // that handler calls `.remove()` on the element, the data is cleared, | 
|  | // leaving `result` undefined. We need to guard against this. | 
|  | return result && result.value; | 
|  | } | 
|  |  | 
|  | // If this is an inner synthetic event for an event with a bubbling surrogate | 
|  | // (focus or blur), assume that the surrogate already propagated from triggering the | 
|  | // native event and prevent that from happening again here. | 
|  | // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the | 
|  | // bubbling surrogate propagates *after* the non-bubbling base), but that seems | 
|  | // less bad than duplication. | 
|  | } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { | 
|  | event.stopPropagation(); | 
|  | } | 
|  |  | 
|  | // If this is a native event triggered above, everything is now in order | 
|  | // Fire an inner synthetic event with the original arguments | 
|  | } else if ( saved.length ) { | 
|  |  | 
|  | // ...and capture the result | 
|  | dataPriv.set( this, type, { | 
|  | value: jQuery.event.trigger( | 
|  |  | 
|  | // Support: IE <=9 - 11+ | 
|  | // Extend with the prototype to reset the above stopImmediatePropagation() | 
|  | jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), | 
|  | saved.slice( 1 ), | 
|  | this | 
|  | ) | 
|  | } ); | 
|  |  | 
|  | // Abort handling of the native event | 
|  | event.stopImmediatePropagation(); | 
|  | } | 
|  | } | 
|  | } ); | 
|  | } | 
|  |  | 
|  | jQuery.removeEvent = function( elem, type, handle ) { | 
|  |  | 
|  | // This "if" is needed for plain objects | 
|  | if ( elem.removeEventListener ) { | 
|  | elem.removeEventListener( type, handle ); | 
|  | } | 
|  | }; | 
|  |  | 
|  | jQuery.Event = function( src, props ) { | 
|  |  | 
|  | // Allow instantiation without the 'new' keyword | 
|  | if ( !( this instanceof jQuery.Event ) ) { | 
|  | return new jQuery.Event( src, props ); | 
|  | } | 
|  |  | 
|  | // Event object | 
|  | if ( src && src.type ) { | 
|  | this.originalEvent = src; | 
|  | this.type = src.type; | 
|  |  | 
|  | // Events bubbling up the document may have been marked as prevented | 
|  | // by a handler lower down the tree; reflect the correct value. | 
|  | this.isDefaultPrevented = src.defaultPrevented || | 
|  | src.defaultPrevented === undefined && | 
|  |  | 
|  | // Support: Android <=2.3 only | 
|  | src.returnValue === false ? | 
|  | returnTrue : | 
|  | returnFalse; | 
|  |  | 
|  | // Create target properties | 
|  | // Support: Safari <=6 - 7 only | 
|  | // Target should not be a text node (trac-504, trac-13143) | 
|  | this.target = ( src.target && src.target.nodeType === 3 ) ? | 
|  | src.target.parentNode : | 
|  | src.target; | 
|  |  | 
|  | this.currentTarget = src.currentTarget; | 
|  | this.relatedTarget = src.relatedTarget; | 
|  |  | 
|  | // Event type | 
|  | } else { | 
|  | this.type = src; | 
|  | } | 
|  |  | 
|  | // Put explicitly provided properties onto the event object | 
|  | if ( props ) { | 
|  | jQuery.extend( this, props ); | 
|  | } | 
|  |  | 
|  | // Create a timestamp if incoming event doesn't have one | 
|  | this.timeStamp = src && src.timeStamp || Date.now(); | 
|  |  | 
|  | // Mark it as fixed | 
|  | this[ jQuery.expando ] = true; | 
|  | }; | 
|  |  | 
|  | // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding | 
|  | // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html | 
|  | jQuery.Event.prototype = { | 
|  | constructor: jQuery.Event, | 
|  | isDefaultPrevented: returnFalse, | 
|  | isPropagationStopped: returnFalse, | 
|  | isImmediatePropagationStopped: returnFalse, | 
|  | isSimulated: false, | 
|  |  | 
|  | preventDefault: function() { | 
|  | var e = this.originalEvent; | 
|  |  | 
|  | this.isDefaultPrevented = returnTrue; | 
|  |  | 
|  | if ( e && !this.isSimulated ) { | 
|  | e.preventDefault(); | 
|  | } | 
|  | }, | 
|  | stopPropagation: function() { | 
|  | var e = this.originalEvent; | 
|  |  | 
|  | this.isPropagationStopped = returnTrue; | 
|  |  | 
|  | if ( e && !this.isSimulated ) { | 
|  | e.stopPropagation(); | 
|  | } | 
|  | }, | 
|  | stopImmediatePropagation: function() { | 
|  | var e = this.originalEvent; | 
|  |  | 
|  | this.isImmediatePropagationStopped = returnTrue; | 
|  |  | 
|  | if ( e && !this.isSimulated ) { | 
|  | e.stopImmediatePropagation(); | 
|  | } | 
|  |  | 
|  | this.stopPropagation(); | 
|  | } | 
|  | }; | 
|  |  | 
|  | // Includes all common event props including KeyEvent and MouseEvent specific props | 
|  | jQuery.each( { | 
|  | altKey: true, | 
|  | bubbles: true, | 
|  | cancelable: true, | 
|  | changedTouches: true, | 
|  | ctrlKey: true, | 
|  | detail: true, | 
|  | eventPhase: true, | 
|  | metaKey: true, | 
|  | pageX: true, | 
|  | pageY: true, | 
|  | shiftKey: true, | 
|  | view: true, | 
|  | "char": true, | 
|  | code: true, | 
|  | charCode: true, | 
|  | key: true, | 
|  | keyCode: true, | 
|  | button: true, | 
|  | buttons: true, | 
|  | clientX: true, | 
|  | clientY: true, | 
|  | offsetX: true, | 
|  | offsetY: true, | 
|  | pointerId: true, | 
|  | pointerType: true, | 
|  | screenX: true, | 
|  | screenY: true, | 
|  | targetTouches: true, | 
|  | toElement: true, | 
|  | touches: true, | 
|  | which: true | 
|  | }, jQuery.event.addProp ); | 
|  |  | 
|  | jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { | 
|  | jQuery.event.special[ type ] = { | 
|  |  | 
|  | // Utilize native event if possible so blur/focus sequence is correct | 
|  | setup: function() { | 
|  |  | 
|  | // Claim the first handler | 
|  | // dataPriv.set( this, "focus", ... ) | 
|  | // dataPriv.set( this, "blur", ... ) | 
|  | leverageNative( this, type, expectSync ); | 
|  |  | 
|  | // Return false to allow normal processing in the caller | 
|  | return false; | 
|  | }, | 
|  | trigger: function() { | 
|  |  | 
|  | // Force setup before trigger | 
|  | leverageNative( this, type ); | 
|  |  | 
|  | // Return non-false to allow normal event-path propagation | 
|  | return true; | 
|  | }, | 
|  |  | 
|  | // Suppress native focus or blur if we're currently inside | 
|  | // a leveraged native-event stack | 
|  | _default: function( event ) { | 
|  | return dataPriv.get( event.target, type ); | 
|  | }, | 
|  |  | 
|  | delegateType: delegateType | 
|  | }; | 
|  | } ); | 
|  |  | 
|  | // Create mouseenter/leave events using mouseover/out and event-time checks | 
|  | // so that event delegation works in jQuery. | 
|  | // Do the same for pointerenter/pointerleave and pointerover/pointerout | 
|  | // | 
|  | // Support: Safari 7 only | 
|  | // Safari sends mouseenter too often; see: | 
|  | // https://bugs.chromium.org/p/chromium/issues/detail?id=470258 | 
|  | // for the description of the bug (it existed in older Chrome versions as well). | 
|  | jQuery.each( { | 
|  | mouseenter: "mouseover", | 
|  | mouseleave: "mouseout", | 
|  | pointerenter: "pointerover", | 
|  | pointerleave: "pointerout" | 
|  | }, function( orig, fix ) { | 
|  | jQuery.event.special[ orig ] = { | 
|  | delegateType: fix, | 
|  | bindType: fix, | 
|  |  | 
|  | handle: function( event ) { | 
|  | var ret, | 
|  | target = this, | 
|  | related = event.relatedTarget, | 
|  | handleObj = event.handleObj; | 
|  |  | 
|  | // For mouseenter/leave call the handler if related is outside the target. | 
|  | // NB: No relatedTarget if the mouse left/entered the browser window | 
|  | if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { | 
|  | event.type = handleObj.origType; | 
|  | ret = handleObj.handler.apply( this, arguments ); | 
|  | event.type = fix; | 
|  | } | 
|  | return ret; | 
|  | } | 
|  | }; | 
|  | } ); | 
|  |  | 
|  | jQuery.fn.extend( { | 
|  |  | 
|  | on: function( types, selector, data, fn ) { | 
|  | return on( this, types, selector, data, fn ); | 
|  | }, | 
|  | one: function( types, selector, data, fn ) { | 
|  | return on( this, types, selector, data, fn, 1 ); | 
|  | }, | 
|  | off: function( types, selector, fn ) { | 
|  | var handleObj, type; | 
|  | if ( types && types.preventDefault && types.handleObj ) { | 
|  |  | 
|  | // ( event )  dispatched jQuery.Event | 
|  | handleObj = types.handleObj; | 
|  | jQuery( types.delegateTarget ).off( | 
|  | handleObj.namespace ? | 
|  | handleObj.origType + "." + handleObj.namespace : | 
|  | handleObj.origType, | 
|  | handleObj.selector, | 
|  | handleObj.handler | 
|  | ); | 
|  | return this; | 
|  | } | 
|  | if ( typeof types === "object" ) { | 
|  |  | 
|  | // ( types-object [, selector] ) | 
|  | for ( type in types ) { | 
|  | this.off( type, selector, types[ type ] ); | 
|  | } | 
|  | return this; | 
|  | } | 
|  | if ( selector === false || typeof selector === "function" ) { | 
|  |  | 
|  | // ( types [, fn] ) | 
|  | fn = selector; | 
|  | selector = undefined; | 
|  | } | 
|  | if ( fn === false ) { | 
|  | fn = returnFalse; | 
|  | } | 
|  | return this.each( function() { | 
|  | jQuery.event.remove( this, types, fn, selector ); | 
|  | } ); | 
|  | } | 
|  | } ); | 
|  |  | 
|  | return jQuery; | 
|  | } ); |