(event, type)
| 3772 | |
| 3773 | function createEventHandler(element, events) { |
| 3774 | var eventHandler = function(event, type) { |
| 3775 | // jQuery specific api |
| 3776 | event.isDefaultPrevented = function() { |
| 3777 | return event.defaultPrevented; |
| 3778 | }; |
| 3779 | |
| 3780 | var eventFns = events[type || event.type]; |
| 3781 | var eventFnsLength = eventFns ? eventFns.length : 0; |
| 3782 | |
| 3783 | if (!eventFnsLength) return; |
| 3784 | |
| 3785 | if (isUndefined(event.immediatePropagationStopped)) { |
| 3786 | var originalStopImmediatePropagation = event.stopImmediatePropagation; |
| 3787 | event.stopImmediatePropagation = function() { |
| 3788 | event.immediatePropagationStopped = true; |
| 3789 | |
| 3790 | if (event.stopPropagation) { |
| 3791 | event.stopPropagation(); |
| 3792 | } |
| 3793 | |
| 3794 | if (originalStopImmediatePropagation) { |
| 3795 | originalStopImmediatePropagation.call(event); |
| 3796 | } |
| 3797 | }; |
| 3798 | } |
| 3799 | |
| 3800 | event.isImmediatePropagationStopped = function() { |
| 3801 | return event.immediatePropagationStopped === true; |
| 3802 | }; |
| 3803 | |
| 3804 | // Some events have special handlers that wrap the real handler |
| 3805 | var handlerWrapper = eventFns.specialHandlerWrapper || defaultHandlerWrapper; |
| 3806 | |
| 3807 | // Copy event handlers in case event handlers array is modified during execution. |
| 3808 | if ((eventFnsLength > 1)) { |
| 3809 | eventFns = shallowCopy(eventFns); |
| 3810 | } |
| 3811 | |
| 3812 | for (var i = 0; i < eventFnsLength; i++) { |
| 3813 | if (!event.isImmediatePropagationStopped()) { |
| 3814 | handlerWrapper(element, event, eventFns[i]); |
| 3815 | } |
| 3816 | } |
| 3817 | }; |
| 3818 | |
| 3819 | // TODO: this is a hack for angularMocks/clearDataCache that makes it possible to deregister all |
| 3820 | // events on `element` |
no test coverage detected