| @@ 4964-5039 (lines=76) @@ | ||
| 4961 | }, |
|
| 4962 | ||
| 4963 | // Detach an event or set of events from an element |
|
| 4964 | remove: function( elem, types, handler, selector, mappedTypes ) { |
|
| 4965 | var j, handleObj, tmp, |
|
| 4966 | origCount, t, events, |
|
| 4967 | special, handlers, type, |
|
| 4968 | namespaces, origType, |
|
| 4969 | elemData = jQuery.hasData( elem ) && jQuery._data( elem ); |
|
| 4970 | ||
| 4971 | if ( !elemData || !( events = elemData.events ) ) { |
|
| 4972 | return; |
|
| 4973 | } |
|
| 4974 | ||
| 4975 | // Once for each type.namespace in types; type may be omitted |
|
| 4976 | types = ( types || "" ).match( rnotwhite ) || [ "" ]; |
|
| 4977 | t = types.length; |
|
| 4978 | while ( t-- ) { |
|
| 4979 | tmp = rtypenamespace.exec( types[ t ] ) || []; |
|
| 4980 | type = origType = tmp[ 1 ]; |
|
| 4981 | namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); |
|
| 4982 | ||
| 4983 | // Unbind all events (on this namespace, if provided) for the element |
|
| 4984 | if ( !type ) { |
|
| 4985 | for ( type in events ) { |
|
| 4986 | jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); |
|
| 4987 | } |
|
| 4988 | continue; |
|
| 4989 | } |
|
| 4990 | ||
| 4991 | special = jQuery.event.special[ type ] || {}; |
|
| 4992 | type = ( selector ? special.delegateType : special.bindType ) || type; |
|
| 4993 | handlers = events[ type ] || []; |
|
| 4994 | tmp = tmp[ 2 ] && |
|
| 4995 | new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); |
|
| 4996 | ||
| 4997 | // Remove matching events |
|
| 4998 | origCount = j = handlers.length; |
|
| 4999 | while ( j-- ) { |
|
| 5000 | handleObj = handlers[ j ]; |
|
| 5001 | ||
| 5002 | if ( ( mappedTypes || origType === handleObj.origType ) && |
|
| 5003 | ( !handler || handler.guid === handleObj.guid ) && |
|
| 5004 | ( !tmp || tmp.test( handleObj.namespace ) ) && |
|
| 5005 | ( !selector || selector === handleObj.selector || |
|
| 5006 | selector === "**" && handleObj.selector ) ) { |
|
| 5007 | handlers.splice( j, 1 ); |
|
| 5008 | ||
| 5009 | if ( handleObj.selector ) { |
|
| 5010 | handlers.delegateCount--; |
|
| 5011 | } |
|
| 5012 | if ( special.remove ) { |
|
| 5013 | special.remove.call( elem, handleObj ); |
|
| 5014 | } |
|
| 5015 | } |
|
| 5016 | } |
|
| 5017 | ||
| 5018 | // Remove generic event handler if we removed something and no more handlers exist |
|
| 5019 | // (avoids potential for endless recursion during removal of special event handlers) |
|
| 5020 | if ( origCount && !handlers.length ) { |
|
| 5021 | if ( !special.teardown || |
|
| 5022 | special.teardown.call( elem, namespaces, elemData.handle ) === false ) { |
|
| 5023 | ||
| 5024 | jQuery.removeEvent( elem, type, elemData.handle ); |
|
| 5025 | } |
|
| 5026 | ||
| 5027 | delete events[ type ]; |
|
| 5028 | } |
|
| 5029 | } |
|
| 5030 | ||
| 5031 | // Remove the expando if it's no longer used |
|
| 5032 | if ( jQuery.isEmptyObject( events ) ) { |
|
| 5033 | delete elemData.handle; |
|
| 5034 | ||
| 5035 | // removeData also checks for emptiness and clears the expando if empty |
|
| 5036 | // so use it instead of delete |
|
| 5037 | jQuery._removeData( elem, "events" ); |
|
| 5038 | } |
|
| 5039 | }, |
|
| 5040 | ||
| 5041 | trigger: function( event, data, elem, onlyHandlers ) { |
|
| 5042 | var handle, ontype, cur, |
|
| @@ 4619-4690 (lines=72) @@ | ||
| 4616 | }, |
|
| 4617 | ||
| 4618 | // Detach an event or set of events from an element |
|
| 4619 | remove: function( elem, types, handler, selector, mappedTypes ) { |
|
| 4620 | ||
| 4621 | var j, origCount, tmp, |
|
| 4622 | events, t, handleObj, |
|
| 4623 | special, handlers, type, namespaces, origType, |
|
| 4624 | elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); |
|
| 4625 | ||
| 4626 | if ( !elemData || !( events = elemData.events ) ) { |
|
| 4627 | return; |
|
| 4628 | } |
|
| 4629 | ||
| 4630 | // Once for each type.namespace in types; type may be omitted |
|
| 4631 | types = ( types || "" ).match( rnotwhite ) || [ "" ]; |
|
| 4632 | t = types.length; |
|
| 4633 | while ( t-- ) { |
|
| 4634 | tmp = rtypenamespace.exec( types[ t ] ) || []; |
|
| 4635 | type = origType = tmp[ 1 ]; |
|
| 4636 | namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); |
|
| 4637 | ||
| 4638 | // Unbind all events (on this namespace, if provided) for the element |
|
| 4639 | if ( !type ) { |
|
| 4640 | for ( type in events ) { |
|
| 4641 | jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); |
|
| 4642 | } |
|
| 4643 | continue; |
|
| 4644 | } |
|
| 4645 | ||
| 4646 | special = jQuery.event.special[ type ] || {}; |
|
| 4647 | type = ( selector ? special.delegateType : special.bindType ) || type; |
|
| 4648 | handlers = events[ type ] || []; |
|
| 4649 | tmp = tmp[ 2 ] && |
|
| 4650 | new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); |
|
| 4651 | ||
| 4652 | // Remove matching events |
|
| 4653 | origCount = j = handlers.length; |
|
| 4654 | while ( j-- ) { |
|
| 4655 | handleObj = handlers[ j ]; |
|
| 4656 | ||
| 4657 | if ( ( mappedTypes || origType === handleObj.origType ) && |
|
| 4658 | ( !handler || handler.guid === handleObj.guid ) && |
|
| 4659 | ( !tmp || tmp.test( handleObj.namespace ) ) && |
|
| 4660 | ( !selector || selector === handleObj.selector || |
|
| 4661 | selector === "**" && handleObj.selector ) ) { |
|
| 4662 | handlers.splice( j, 1 ); |
|
| 4663 | ||
| 4664 | if ( handleObj.selector ) { |
|
| 4665 | handlers.delegateCount--; |
|
| 4666 | } |
|
| 4667 | if ( special.remove ) { |
|
| 4668 | special.remove.call( elem, handleObj ); |
|
| 4669 | } |
|
| 4670 | } |
|
| 4671 | } |
|
| 4672 | ||
| 4673 | // Remove generic event handler if we removed something and no more handlers exist |
|
| 4674 | // (avoids potential for endless recursion during removal of special event handlers) |
|
| 4675 | if ( origCount && !handlers.length ) { |
|
| 4676 | if ( !special.teardown || |
|
| 4677 | special.teardown.call( elem, namespaces, elemData.handle ) === false ) { |
|
| 4678 | ||
| 4679 | jQuery.removeEvent( elem, type, elemData.handle ); |
|
| 4680 | } |
|
| 4681 | ||
| 4682 | delete events[ type ]; |
|
| 4683 | } |
|
| 4684 | } |
|
| 4685 | ||
| 4686 | // Remove data and the expando if it's no longer used |
|
| 4687 | if ( jQuery.isEmptyObject( events ) ) { |
|
| 4688 | dataPriv.remove( elem, "handle events" ); |
|
| 4689 | } |
|
| 4690 | }, |
|
| 4691 | ||
| 4692 | dispatch: function( event ) { |
|
| 4693 | ||
| @@ 4168-4236 (lines=69) @@ | ||
| 4165 | }, |
|
| 4166 | ||
| 4167 | // Detach an event or set of events from an element |
|
| 4168 | remove: function( elem, types, handler, selector, mappedTypes ) { |
|
| 4169 | ||
| 4170 | var j, origCount, tmp, |
|
| 4171 | events, t, handleObj, |
|
| 4172 | special, handlers, type, namespaces, origType, |
|
| 4173 | elemData = data_priv.hasData( elem ) && data_priv.get( elem ); |
|
| 4174 | ||
| 4175 | if ( !elemData || !(events = elemData.events) ) { |
|
| 4176 | return; |
|
| 4177 | } |
|
| 4178 | ||
| 4179 | // Once for each type.namespace in types; type may be omitted |
|
| 4180 | types = ( types || "" ).match( rnotwhite ) || [ "" ]; |
|
| 4181 | t = types.length; |
|
| 4182 | while ( t-- ) { |
|
| 4183 | tmp = rtypenamespace.exec( types[t] ) || []; |
|
| 4184 | type = origType = tmp[1]; |
|
| 4185 | namespaces = ( tmp[2] || "" ).split( "." ).sort(); |
|
| 4186 | ||
| 4187 | // Unbind all events (on this namespace, if provided) for the element |
|
| 4188 | if ( !type ) { |
|
| 4189 | for ( type in events ) { |
|
| 4190 | jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); |
|
| 4191 | } |
|
| 4192 | continue; |
|
| 4193 | } |
|
| 4194 | ||
| 4195 | special = jQuery.event.special[ type ] || {}; |
|
| 4196 | type = ( selector ? special.delegateType : special.bindType ) || type; |
|
| 4197 | handlers = events[ type ] || []; |
|
| 4198 | tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); |
|
| 4199 | ||
| 4200 | // Remove matching events |
|
| 4201 | origCount = j = handlers.length; |
|
| 4202 | while ( j-- ) { |
|
| 4203 | handleObj = handlers[ j ]; |
|
| 4204 | ||
| 4205 | if ( ( mappedTypes || origType === handleObj.origType ) && |
|
| 4206 | ( !handler || handler.guid === handleObj.guid ) && |
|
| 4207 | ( !tmp || tmp.test( handleObj.namespace ) ) && |
|
| 4208 | ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { |
|
| 4209 | handlers.splice( j, 1 ); |
|
| 4210 | ||
| 4211 | if ( handleObj.selector ) { |
|
| 4212 | handlers.delegateCount--; |
|
| 4213 | } |
|
| 4214 | if ( special.remove ) { |
|
| 4215 | special.remove.call( elem, handleObj ); |
|
| 4216 | } |
|
| 4217 | } |
|
| 4218 | } |
|
| 4219 | ||
| 4220 | // Remove generic event handler if we removed something and no more handlers exist |
|
| 4221 | // (avoids potential for endless recursion during removal of special event handlers) |
|
| 4222 | if ( origCount && !handlers.length ) { |
|
| 4223 | if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { |
|
| 4224 | jQuery.removeEvent( elem, type, elemData.handle ); |
|
| 4225 | } |
|
| 4226 | ||
| 4227 | delete events[ type ]; |
|
| 4228 | } |
|
| 4229 | } |
|
| 4230 | ||
| 4231 | // Remove the expando if it's no longer used |
|
| 4232 | if ( jQuery.isEmptyObject( events ) ) { |
|
| 4233 | delete elemData.handle; |
|
| 4234 | data_priv.remove( elem, "events" ); |
|
| 4235 | } |
|
| 4236 | }, |
|
| 4237 | ||
| 4238 | trigger: function( event, data, elem, onlyHandlers ) { |
|
| 4239 | ||