(event, type)
| 3492 | |
| 3493 | function createEventHandler(element, events) { |
| 3494 | var eventHandler = function(event, type) { |
| 3495 | // jQuery specific api |
| 3496 | event.isDefaultPrevented = function() { |
| 3497 | return event.defaultPrevented; |
| 3498 | }; |
| 3499 | |
| 3500 | var eventFns = events[type || event.type]; |
| 3501 | var eventFnsLength = eventFns ? eventFns.length : 0; |
| 3502 | |
| 3503 | if (!eventFnsLength) return; |
| 3504 | |
| 3505 | if (isUndefined(event.immediatePropagationStopped)) { |
| 3506 | var originalStopImmediatePropagation = event.stopImmediatePropagation; |
| 3507 | event.stopImmediatePropagation = function() { |
| 3508 | event.immediatePropagationStopped = true; |
| 3509 | |
| 3510 | if (event.stopPropagation) { |
| 3511 | event.stopPropagation(); |
| 3512 | } |
| 3513 | |
| 3514 | if (originalStopImmediatePropagation) { |
| 3515 | originalStopImmediatePropagation.call(event); |
| 3516 | } |
| 3517 | }; |
| 3518 | } |
| 3519 | |
| 3520 | event.isImmediatePropagationStopped = function() { |
| 3521 | return event.immediatePropagationStopped === true; |
| 3522 | }; |
| 3523 | |
| 3524 | // Some events have special handlers that wrap the real handler |
| 3525 | var handlerWrapper = eventFns.specialHandlerWrapper || defaultHandlerWrapper; |
| 3526 | |
| 3527 | // Copy event handlers in case event handlers array is modified during execution. |
| 3528 | if ((eventFnsLength > 1)) { |
| 3529 | eventFns = shallowCopy(eventFns); |
| 3530 | } |
| 3531 | |
| 3532 | for (var i = 0; i < eventFnsLength; i++) { |
| 3533 | if (!event.isImmediatePropagationStopped()) { |
| 3534 | handlerWrapper(element, event, eventFns[i]); |
| 3535 | } |
| 3536 | } |
| 3537 | }; |
| 3538 | |
| 3539 | // TODO: this is a hack for angularMocks/clearDataCache that makes it possible to deregister all |
| 3540 | // events on `element` |
no test coverage detected