| @@ 5041-5184 (lines=144) @@ | ||
| 5038 | } |
|
| 5039 | }, |
|
| 5040 | ||
| 5041 | trigger: function( event, data, elem, onlyHandlers ) { |
|
| 5042 | var handle, ontype, cur, |
|
| 5043 | bubbleType, special, tmp, i, |
|
| 5044 | eventPath = [ elem || document ], |
|
| 5045 | type = hasOwn.call( event, "type" ) ? event.type : event, |
|
| 5046 | namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; |
|
| 5047 | ||
| 5048 | cur = tmp = elem = elem || document; |
|
| 5049 | ||
| 5050 | // Don't do events on text and comment nodes |
|
| 5051 | if ( elem.nodeType === 3 || elem.nodeType === 8 ) { |
|
| 5052 | return; |
|
| 5053 | } |
|
| 5054 | ||
| 5055 | // focus/blur morphs to focusin/out; ensure we're not firing them right now |
|
| 5056 | if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { |
|
| 5057 | return; |
|
| 5058 | } |
|
| 5059 | ||
| 5060 | if ( type.indexOf( "." ) > -1 ) { |
|
| 5061 | ||
| 5062 | // Namespaced trigger; create a regexp to match event type in handle() |
|
| 5063 | namespaces = type.split( "." ); |
|
| 5064 | type = namespaces.shift(); |
|
| 5065 | namespaces.sort(); |
|
| 5066 | } |
|
| 5067 | ontype = type.indexOf( ":" ) < 0 && "on" + type; |
|
| 5068 | ||
| 5069 | // Caller can pass in a jQuery.Event object, Object, or just an event type string |
|
| 5070 | event = event[ jQuery.expando ] ? |
|
| 5071 | event : |
|
| 5072 | new jQuery.Event( type, typeof event === "object" && event ); |
|
| 5073 | ||
| 5074 | // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) |
|
| 5075 | event.isTrigger = onlyHandlers ? 2 : 3; |
|
| 5076 | event.namespace = namespaces.join( "." ); |
|
| 5077 | event.rnamespace = event.namespace ? |
|
| 5078 | new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : |
|
| 5079 | null; |
|
| 5080 | ||
| 5081 | // Clean up the event in case it is being reused |
|
| 5082 | event.result = undefined; |
|
| 5083 | if ( !event.target ) { |
|
| 5084 | event.target = elem; |
|
| 5085 | } |
|
| 5086 | ||
| 5087 | // Clone any incoming data and prepend the event, creating the handler arg list |
|
| 5088 | data = data == null ? |
|
| 5089 | [ event ] : |
|
| 5090 | jQuery.makeArray( data, [ event ] ); |
|
| 5091 | ||
| 5092 | // Allow special events to draw outside the lines |
|
| 5093 | special = jQuery.event.special[ type ] || {}; |
|
| 5094 | if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { |
|
| 5095 | return; |
|
| 5096 | } |
|
| 5097 | ||
| 5098 | // Determine event propagation path in advance, per W3C events spec (#9951) |
|
| 5099 | // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) |
|
| 5100 | if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { |
|
| 5101 | ||
| 5102 | bubbleType = special.delegateType || type; |
|
| 5103 | if ( !rfocusMorph.test( bubbleType + type ) ) { |
|
| 5104 | cur = cur.parentNode; |
|
| 5105 | } |
|
| 5106 | for ( ; cur; cur = cur.parentNode ) { |
|
| 5107 | eventPath.push( cur ); |
|
| 5108 | tmp = cur; |
|
| 5109 | } |
|
| 5110 | ||
| 5111 | // Only add window if we got to document (e.g., not plain obj or detached DOM) |
|
| 5112 | if ( tmp === ( elem.ownerDocument || document ) ) { |
|
| 5113 | eventPath.push( tmp.defaultView || tmp.parentWindow || window ); |
|
| 5114 | } |
|
| 5115 | } |
|
| 5116 | ||
| 5117 | // Fire handlers on the event path |
|
| 5118 | i = 0; |
|
| 5119 | while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { |
|
| 5120 | ||
| 5121 | event.type = i > 1 ? |
|
| 5122 | bubbleType : |
|
| 5123 | special.bindType || type; |
|
| 5124 | ||
| 5125 | // jQuery handler |
|
| 5126 | handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && |
|
| 5127 | jQuery._data( cur, "handle" ); |
|
| 5128 | ||
| 5129 | if ( handle ) { |
|
| 5130 | handle.apply( cur, data ); |
|
| 5131 | } |
|
| 5132 | ||
| 5133 | // Native handler |
|
| 5134 | handle = ontype && cur[ ontype ]; |
|
| 5135 | if ( handle && handle.apply && acceptData( cur ) ) { |
|
| 5136 | event.result = handle.apply( cur, data ); |
|
| 5137 | if ( event.result === false ) { |
|
| 5138 | event.preventDefault(); |
|
| 5139 | } |
|
| 5140 | } |
|
| 5141 | } |
|
| 5142 | event.type = type; |
|
| 5143 | ||
| 5144 | // If nobody prevented the default action, do it now |
|
| 5145 | if ( !onlyHandlers && !event.isDefaultPrevented() ) { |
|
| 5146 | ||
| 5147 | if ( |
|
| 5148 | ( !special._default || |
|
| 5149 | special._default.apply( eventPath.pop(), data ) === false |
|
| 5150 | ) && acceptData( elem ) |
|
| 5151 | ) { |
|
| 5152 | ||
| 5153 | // Call a native DOM method on the target with the same name name as the event. |
|
| 5154 | // Can't use an .isFunction() check here because IE6/7 fails that test. |
|
| 5155 | // Don't do default actions on window, that's where global variables be (#6170) |
|
| 5156 | if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { |
|
| 5157 | ||
| 5158 | // Don't re-trigger an onFOO event when we call its FOO() method |
|
| 5159 | tmp = elem[ ontype ]; |
|
| 5160 | ||
| 5161 | if ( tmp ) { |
|
| 5162 | elem[ ontype ] = null; |
|
| 5163 | } |
|
| 5164 | ||
| 5165 | // Prevent re-triggering of the same event, since we already bubbled it above |
|
| 5166 | jQuery.event.triggered = type; |
|
| 5167 | try { |
|
| 5168 | elem[ type ](); |
|
| 5169 | } catch ( e ) { |
|
| 5170 | ||
| 5171 | // IE<9 dies on focus/blur to hidden element (#1486,#12518) |
|
| 5172 | // only reproducible on winXP IE8 native, not IE9 in IE8 mode |
|
| 5173 | } |
|
| 5174 | jQuery.event.triggered = undefined; |
|
| 5175 | ||
| 5176 | if ( tmp ) { |
|
| 5177 | elem[ ontype ] = tmp; |
|
| 5178 | } |
|
| 5179 | } |
|
| 5180 | } |
|
| 5181 | } |
|
| 5182 | ||
| 5183 | return event.result; |
|
| 5184 | }, |
|
| 5185 | ||
| 5186 | dispatch: function( event ) { |
|
| 5187 | ||
| @@ 7703-7836 (lines=134) @@ | ||
| 7700 | ||
| 7701 | jQuery.extend( jQuery.event, { |
|
| 7702 | ||
| 7703 | trigger: function( event, data, elem, onlyHandlers ) { |
|
| 7704 | ||
| 7705 | var i, cur, tmp, bubbleType, ontype, handle, special, |
|
| 7706 | eventPath = [ elem || document ], |
|
| 7707 | type = hasOwn.call( event, "type" ) ? event.type : event, |
|
| 7708 | namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; |
|
| 7709 | ||
| 7710 | cur = tmp = elem = elem || document; |
|
| 7711 | ||
| 7712 | // Don't do events on text and comment nodes |
|
| 7713 | if ( elem.nodeType === 3 || elem.nodeType === 8 ) { |
|
| 7714 | return; |
|
| 7715 | } |
|
| 7716 | ||
| 7717 | // focus/blur morphs to focusin/out; ensure we're not firing them right now |
|
| 7718 | if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { |
|
| 7719 | return; |
|
| 7720 | } |
|
| 7721 | ||
| 7722 | if ( type.indexOf( "." ) > -1 ) { |
|
| 7723 | ||
| 7724 | // Namespaced trigger; create a regexp to match event type in handle() |
|
| 7725 | namespaces = type.split( "." ); |
|
| 7726 | type = namespaces.shift(); |
|
| 7727 | namespaces.sort(); |
|
| 7728 | } |
|
| 7729 | ontype = type.indexOf( ":" ) < 0 && "on" + type; |
|
| 7730 | ||
| 7731 | // Caller can pass in a jQuery.Event object, Object, or just an event type string |
|
| 7732 | event = event[ jQuery.expando ] ? |
|
| 7733 | event : |
|
| 7734 | new jQuery.Event( type, typeof event === "object" && event ); |
|
| 7735 | ||
| 7736 | // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) |
|
| 7737 | event.isTrigger = onlyHandlers ? 2 : 3; |
|
| 7738 | event.namespace = namespaces.join( "." ); |
|
| 7739 | event.rnamespace = event.namespace ? |
|
| 7740 | new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : |
|
| 7741 | null; |
|
| 7742 | ||
| 7743 | // Clean up the event in case it is being reused |
|
| 7744 | event.result = undefined; |
|
| 7745 | if ( !event.target ) { |
|
| 7746 | event.target = elem; |
|
| 7747 | } |
|
| 7748 | ||
| 7749 | // Clone any incoming data and prepend the event, creating the handler arg list |
|
| 7750 | data = data == null ? |
|
| 7751 | [ event ] : |
|
| 7752 | jQuery.makeArray( data, [ event ] ); |
|
| 7753 | ||
| 7754 | // Allow special events to draw outside the lines |
|
| 7755 | special = jQuery.event.special[ type ] || {}; |
|
| 7756 | if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { |
|
| 7757 | return; |
|
| 7758 | } |
|
| 7759 | ||
| 7760 | // Determine event propagation path in advance, per W3C events spec (#9951) |
|
| 7761 | // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) |
|
| 7762 | if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { |
|
| 7763 | ||
| 7764 | bubbleType = special.delegateType || type; |
|
| 7765 | if ( !rfocusMorph.test( bubbleType + type ) ) { |
|
| 7766 | cur = cur.parentNode; |
|
| 7767 | } |
|
| 7768 | for ( ; cur; cur = cur.parentNode ) { |
|
| 7769 | eventPath.push( cur ); |
|
| 7770 | tmp = cur; |
|
| 7771 | } |
|
| 7772 | ||
| 7773 | // Only add window if we got to document (e.g., not plain obj or detached DOM) |
|
| 7774 | if ( tmp === ( elem.ownerDocument || document ) ) { |
|
| 7775 | eventPath.push( tmp.defaultView || tmp.parentWindow || window ); |
|
| 7776 | } |
|
| 7777 | } |
|
| 7778 | ||
| 7779 | // Fire handlers on the event path |
|
| 7780 | i = 0; |
|
| 7781 | while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { |
|
| 7782 | ||
| 7783 | event.type = i > 1 ? |
|
| 7784 | bubbleType : |
|
| 7785 | special.bindType || type; |
|
| 7786 | ||
| 7787 | // jQuery handler |
|
| 7788 | handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && |
|
| 7789 | dataPriv.get( cur, "handle" ); |
|
| 7790 | if ( handle ) { |
|
| 7791 | handle.apply( cur, data ); |
|
| 7792 | } |
|
| 7793 | ||
| 7794 | // Native handler |
|
| 7795 | handle = ontype && cur[ ontype ]; |
|
| 7796 | if ( handle && handle.apply && acceptData( cur ) ) { |
|
| 7797 | event.result = handle.apply( cur, data ); |
|
| 7798 | if ( event.result === false ) { |
|
| 7799 | event.preventDefault(); |
|
| 7800 | } |
|
| 7801 | } |
|
| 7802 | } |
|
| 7803 | event.type = type; |
|
| 7804 | ||
| 7805 | // If nobody prevented the default action, do it now |
|
| 7806 | if ( !onlyHandlers && !event.isDefaultPrevented() ) { |
|
| 7807 | ||
| 7808 | if ( ( !special._default || |
|
| 7809 | special._default.apply( eventPath.pop(), data ) === false ) && |
|
| 7810 | acceptData( elem ) ) { |
|
| 7811 | ||
| 7812 | // Call a native DOM method on the target with the same name name as the event. |
|
| 7813 | // Don't do default actions on window, that's where global variables be (#6170) |
|
| 7814 | if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { |
|
| 7815 | ||
| 7816 | // Don't re-trigger an onFOO event when we call its FOO() method |
|
| 7817 | tmp = elem[ ontype ]; |
|
| 7818 | ||
| 7819 | if ( tmp ) { |
|
| 7820 | elem[ ontype ] = null; |
|
| 7821 | } |
|
| 7822 | ||
| 7823 | // Prevent re-triggering of the same event, since we already bubbled it above |
|
| 7824 | jQuery.event.triggered = type; |
|
| 7825 | elem[ type ](); |
|
| 7826 | jQuery.event.triggered = undefined; |
|
| 7827 | ||
| 7828 | if ( tmp ) { |
|
| 7829 | elem[ ontype ] = tmp; |
|
| 7830 | } |
|
| 7831 | } |
|
| 7832 | } |
|
| 7833 | } |
|
| 7834 | ||
| 7835 | return event.result; |
|
| 7836 | }, |
|
| 7837 | ||
| 7838 | // Piggyback on a donor event to simulate a different one |
|
| 7839 | simulate: function( type, elem, event ) { |
|
| @@ 4238-4368 (lines=131) @@ | ||
| 4235 | } |
|
| 4236 | }, |
|
| 4237 | ||
| 4238 | trigger: function( event, data, elem, onlyHandlers ) { |
|
| 4239 | ||
| 4240 | var i, cur, tmp, bubbleType, ontype, handle, special, |
|
| 4241 | eventPath = [ elem || document ], |
|
| 4242 | type = hasOwn.call( event, "type" ) ? event.type : event, |
|
| 4243 | namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; |
|
| 4244 | ||
| 4245 | cur = tmp = elem = elem || document; |
|
| 4246 | ||
| 4247 | // Don't do events on text and comment nodes |
|
| 4248 | if ( elem.nodeType === 3 || elem.nodeType === 8 ) { |
|
| 4249 | return; |
|
| 4250 | } |
|
| 4251 | ||
| 4252 | // focus/blur morphs to focusin/out; ensure we're not firing them right now |
|
| 4253 | if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { |
|
| 4254 | return; |
|
| 4255 | } |
|
| 4256 | ||
| 4257 | if ( type.indexOf(".") >= 0 ) { |
|
| 4258 | // Namespaced trigger; create a regexp to match event type in handle() |
|
| 4259 | namespaces = type.split("."); |
|
| 4260 | type = namespaces.shift(); |
|
| 4261 | namespaces.sort(); |
|
| 4262 | } |
|
| 4263 | ontype = type.indexOf(":") < 0 && "on" + type; |
|
| 4264 | ||
| 4265 | // Caller can pass in a jQuery.Event object, Object, or just an event type string |
|
| 4266 | event = event[ jQuery.expando ] ? |
|
| 4267 | event : |
|
| 4268 | new jQuery.Event( type, typeof event === "object" && event ); |
|
| 4269 | ||
| 4270 | // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) |
|
| 4271 | event.isTrigger = onlyHandlers ? 2 : 3; |
|
| 4272 | event.namespace = namespaces.join("."); |
|
| 4273 | event.namespace_re = event.namespace ? |
|
| 4274 | new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : |
|
| 4275 | null; |
|
| 4276 | ||
| 4277 | // Clean up the event in case it is being reused |
|
| 4278 | event.result = undefined; |
|
| 4279 | if ( !event.target ) { |
|
| 4280 | event.target = elem; |
|
| 4281 | } |
|
| 4282 | ||
| 4283 | // Clone any incoming data and prepend the event, creating the handler arg list |
|
| 4284 | data = data == null ? |
|
| 4285 | [ event ] : |
|
| 4286 | jQuery.makeArray( data, [ event ] ); |
|
| 4287 | ||
| 4288 | // Allow special events to draw outside the lines |
|
| 4289 | special = jQuery.event.special[ type ] || {}; |
|
| 4290 | if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { |
|
| 4291 | return; |
|
| 4292 | } |
|
| 4293 | ||
| 4294 | // Determine event propagation path in advance, per W3C events spec (#9951) |
|
| 4295 | // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) |
|
| 4296 | if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { |
|
| 4297 | ||
| 4298 | bubbleType = special.delegateType || type; |
|
| 4299 | if ( !rfocusMorph.test( bubbleType + type ) ) { |
|
| 4300 | cur = cur.parentNode; |
|
| 4301 | } |
|
| 4302 | for ( ; cur; cur = cur.parentNode ) { |
|
| 4303 | eventPath.push( cur ); |
|
| 4304 | tmp = cur; |
|
| 4305 | } |
|
| 4306 | ||
| 4307 | // Only add window if we got to document (e.g., not plain obj or detached DOM) |
|
| 4308 | if ( tmp === (elem.ownerDocument || document) ) { |
|
| 4309 | eventPath.push( tmp.defaultView || tmp.parentWindow || window ); |
|
| 4310 | } |
|
| 4311 | } |
|
| 4312 | ||
| 4313 | // Fire handlers on the event path |
|
| 4314 | i = 0; |
|
| 4315 | while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { |
|
| 4316 | ||
| 4317 | event.type = i > 1 ? |
|
| 4318 | bubbleType : |
|
| 4319 | special.bindType || type; |
|
| 4320 | ||
| 4321 | // jQuery handler |
|
| 4322 | handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" ); |
|
| 4323 | if ( handle ) { |
|
| 4324 | handle.apply( cur, data ); |
|
| 4325 | } |
|
| 4326 | ||
| 4327 | // Native handler |
|
| 4328 | handle = ontype && cur[ ontype ]; |
|
| 4329 | if ( handle && handle.apply && jQuery.acceptData( cur ) ) { |
|
| 4330 | event.result = handle.apply( cur, data ); |
|
| 4331 | if ( event.result === false ) { |
|
| 4332 | event.preventDefault(); |
|
| 4333 | } |
|
| 4334 | } |
|
| 4335 | } |
|
| 4336 | event.type = type; |
|
| 4337 | ||
| 4338 | // If nobody prevented the default action, do it now |
|
| 4339 | if ( !onlyHandlers && !event.isDefaultPrevented() ) { |
|
| 4340 | ||
| 4341 | if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && |
|
| 4342 | jQuery.acceptData( elem ) ) { |
|
| 4343 | ||
| 4344 | // Call a native DOM method on the target with the same name name as the event. |
|
| 4345 | // Don't do default actions on window, that's where global variables be (#6170) |
|
| 4346 | if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { |
|
| 4347 | ||
| 4348 | // Don't re-trigger an onFOO event when we call its FOO() method |
|
| 4349 | tmp = elem[ ontype ]; |
|
| 4350 | ||
| 4351 | if ( tmp ) { |
|
| 4352 | elem[ ontype ] = null; |
|
| 4353 | } |
|
| 4354 | ||
| 4355 | // Prevent re-triggering of the same event, since we already bubbled it above |
|
| 4356 | jQuery.event.triggered = type; |
|
| 4357 | elem[ type ](); |
|
| 4358 | jQuery.event.triggered = undefined; |
|
| 4359 | ||
| 4360 | if ( tmp ) { |
|
| 4361 | elem[ ontype ] = tmp; |
|
| 4362 | } |
|
| 4363 | } |
|
| 4364 | } |
|
| 4365 | } |
|
| 4366 | ||
| 4367 | return event.result; |
|
| 4368 | }, |
|
| 4369 | ||
| 4370 | dispatch: function( event ) { |
|
| 4371 | ||