@@ 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 |