(event, type)
| 3837 | |
| 3838 | function createEventHandler(element, events) { |
| 3839 | var eventHandler = function(event, type) { |
| 3840 | // jQuery specific api |
| 3841 | event.isDefaultPrevented = function() { |
| 3842 | return event.defaultPrevented; |
| 3843 | }; |
| 3844 | |
| 3845 | var eventFns = events[type || event.type]; |
| 3846 | var eventFnsLength = eventFns ? eventFns.length : 0; |
| 3847 | |
| 3848 | if (!eventFnsLength) return; |
| 3849 | |
| 3850 | if (isUndefined(event.immediatePropagationStopped)) { |
| 3851 | var originalStopImmediatePropagation = event.stopImmediatePropagation; |
| 3852 | event.stopImmediatePropagation = function() { |
| 3853 | event.immediatePropagationStopped = true; |
| 3854 | |
| 3855 | if (event.stopPropagation) { |
| 3856 | event.stopPropagation(); |
| 3857 | } |
| 3858 | |
| 3859 | if (originalStopImmediatePropagation) { |
| 3860 | originalStopImmediatePropagation.call(event); |
| 3861 | } |
| 3862 | }; |
| 3863 | } |
| 3864 | |
| 3865 | event.isImmediatePropagationStopped = function() { |
| 3866 | return event.immediatePropagationStopped === true; |
| 3867 | }; |
| 3868 | |
| 3869 | // Some events have special handlers that wrap the real handler |
| 3870 | var handlerWrapper = eventFns.specialHandlerWrapper || defaultHandlerWrapper; |
| 3871 | |
| 3872 | // Copy event handlers in case event handlers array is modified during execution. |
| 3873 | if ((eventFnsLength > 1)) { |
| 3874 | eventFns = shallowCopy(eventFns); |
| 3875 | } |
| 3876 | |
| 3877 | for (var i = 0; i < eventFnsLength; i++) { |
| 3878 | if (!event.isImmediatePropagationStopped()) { |
| 3879 | handlerWrapper(element, event, eventFns[i]); |
| 3880 | } |
| 3881 | } |
| 3882 | }; |
| 3883 | |
| 3884 | // TODO: this is a hack for angularMocks/clearDataCache that makes it possible to deregister all |
| 3885 | // events on `element` |
no test coverage detected