license fileoverview suppress import { isBrowser , isIE , isMix , isNode , ObjectGetPrototypeOf , patchOnProperties } from '../common/utils' ; const globalEventHandlersEventNames = [ 'abort' , 'animationcancel' , 'animationend' , 'animationiteration' , 'auxclick' , 'beforeinput' , 'blur' , 'cancel' , 'canplay' , 'canplaythrough' , 'change' , 'compositionstart' , 'compositionupdate' , 'compositionend' , 'cuechange' , 'click' , 'close' , 'contextmenu' , 'curechange' , 'dblclick' , 'drag' , 'dragend' , 'dragenter' , 'dragexit' , 'dragleave' , 'dragover' , 'drop' , 'durationchange' , 'emptied' , 'ended' , 'error' , 'focus' , 'focusin' , 'focusout' , 'gotpointercapture' , 'input' , 'invalid' , 'keydown' , 'keypress' , 'keyup' , 'load' , 'loadstart' , 'loadeddata' , 'loadedmetadata' , 'lostpointercapture' , 'mousedown' , 'mouseenter' , 'mouseleave' , 'mousemove' , 'mouseout' , 'mouseover' , 'mouseup' , 'mousewheel' , 'orientationchange' , 'pause' , 'play' , 'playing' , 'pointercancel' , 'pointerdown' , 'pointerenter' , 'pointerleave' , 'pointerlockchange' , 'mozpointerlockchange' , 'webkitpointerlockerchange' , 'pointerlockerror' , 'mozpointerlockerror' , 'webkitpointerlockerror' , 'pointermove' , 'pointout' , 'pointerover' , 'pointerup' , 'progress' , 'ratechange' , 'reset' , 'resize' , 'scroll' , 'seeked' , 'seeking' , 'select' , 'selectionchange' , 'selectstart' , 'show' , 'sort' , 'stalled' , 'submit' , 'suspend' , 'timeupdate' , 'volumechange' , 'touchcancel' , 'touchmove' , 'touchstart' , 'touchend' , 'transitioncancel' , 'transitionend' , 'waiting' , 'wheel' ] ; const documentEventNames = [ 'afterscriptexecute' , 'beforescriptexecute' , 'DOMContentLoaded' , 'freeze' , 'fullscreenchange' , 'mozfullscreenchange' , 'webkitfullscreenchange' , 'msfullscreenchange' , 'fullscreenerror' , 'mozfullscreenerror' , 'webkitfullscreenerror' , 'msfullscreenerror' , 'readystatechange' , 'visibilitychange' , 'resume' ] ; const windowEventNames = [ 'absolutedeviceorientation' , 'afterinput' , 'afterprint' , 'appinstalled' , 'beforeinstallprompt' , 'beforeprint' , 'beforeunload' , 'devicelight' , 'devicemotion' , 'deviceorientation' , 'deviceorientationabsolute' , 'deviceproximity' , 'hashchange' , 'languagechange' , 'message' , 'mozbeforepaint' , 'offline' , 'online' , 'paint' , 'pageshow' , 'pagehide' , 'popstate' , 'rejectionhandled' , 'storage' , 'unhandledrejection' , 'unload' , 'userproximity' , 'vrdisplyconnected' , 'vrdisplaydisconnected' , 'vrdisplaypresentchange' ] ; const htmlElementEventNames = [ 'beforecopy' , 'beforecut' , 'beforepaste' , 'copy' , 'cut' , 'paste' , 'dragstart' , 'loadend' , 'animationstart' , 'search' , 'transitionrun' , 'transitionstart' , 'webkitanimationend' , 'webkitanimationiteration' , 'webkitanimationstart' , 'webkittransitionend' ] ; const mediaElementEventNames = [ 'encrypted' , 'waitingforkey' , 'msneedkey' , 'mozinterruptbegin' , 'mozinterruptend' ] ; const ieElementEventNames = [ 'activate' , 'afterupdate' , 'ariarequest' , 'beforeactivate' , 'beforedeactivate' , 'beforeeditfocus' , 'beforeupdate' , 'cellchange' , 'controlselect' , 'dataavailable' , 'datasetchanged' , 'datasetcomplete' , 'errorupdate' , 'filterchange' , 'layoutcomplete' , 'losecapture' , 'move' , 'moveend' , 'movestart' , 'propertychange' , 'resizeend' , 'resizestart' , 'rowenter' , 'rowexit' , 'rowsdelete' , 'rowsinserted' , 'command' , 'compassneedscalibration' , 'deactivate' , 'help' , 'mscontentzoom' , 'msmanipulationstatechanged' , 'msgesturechange' , 'msgesturedoubletap' , 'msgestureend' , 'msgesturehold' , 'msgesturestart' , 'msgesturetap' , 'msgotpointercapture' , 'msinertiastart' , 'mslostpointercapture' , 'mspointercancel' , 'mspointerdown' , 'mspointerenter' , 'mspointerhover' , 'mspointerleave' , 'mspointermove' , 'mspointerout' , 'mspointerover' , 'mspointerup' , 'pointerout' , 'mssitemodejumplistitemremoved' , 'msthumbnailclick' , 'stop' , 'storagecommit' ] ; const webglEventNames = [ 'webglcontextrestored' , 'webglcontextlost' , 'webglcontextcreationerror' ] ; const formEventNames = [ 'autocomplete' , 'autocompleteerror' ] ; const detailEventNames = [ 'toggle' ] ; const frameEventNames = [ 'load' ] ; const frameSetEventNames = [ 'blur' , 'error' , 'focus' , 'load' , 'resize' , 'scroll' , 'messageerror' ] ; const marqueeEventNames = [ 'bounce' , 'finish' , 'start' ] ; const XMLHttpRequestEventNames = [ 'loadstart' , 'progress' , 'abort' , 'error' , 'load' , 'progress' , 'timeout' , 'loadend' , 'readystatechange' ] ; const IDBIndexEventNames = [ 'upgradeneeded' , 'complete' , 'abort' , 'success' , 'error' , 'blocked' , 'versionchange' , 'close' ] ; const websocketEventNames = [ 'close' , 'error' , 'open' , 'message' ] ; const workerEventNames = [ 'error' , 'message' ] ; export const eventNames = globalEventHandlersEventNames . concat ( webglEventNames , formEventNames , detailEventNames , documentEventNames , windowEventNames , htmlElementEventNames , ieElementEventNames ) ; export interface IgnoreProperty { target : any ; ignoreProperties : string [ ] ; } export function filterProperties ( target , onProperties , ignoreProperties ) { if ( ! ignoreProperties || ignoreProperties . length === 0 ) { return onProperties ; } const tip = ignoreProperties . filter ( ip => ip . target === target ) ; if ( ! tip || tip . length === 0 ) { return onProperties ; } const targetIgnoreProperties = tip [ 0 ] . ignoreProperties ; return onProperties . filter ( op => targetIgnoreProperties . indexOf ( op ) === - 1 ) ; } export function patchFilteredProperties ( target , onProperties , ignoreProperties , prototype ? ) { if ( ! target ) { return ; } const filteredProperties = filterProperties ( target , onProperties , ignoreProperties ) ; patchOnProperties ( target , filteredProperties , prototype ) ; } export function propertyDescriptorPatch ( api , _global ) { if ( isNode && ! isMix ) { return ; } if ( ( Zone as any ) [ api . symbol ( 'patchEvents' ) ] ) { return ; } const supportsWebSocket = typeof WebSocket !== 'undefined' ; const ignoreProperties = _global [ '__Zone_ignore_on_properties' ] ; if ( isBrowser ) { const internalWindow = window ; const ignoreErrorProperties = isIE ? [ { target : internalWindow , ignoreProperties : [ 'error' ] } ] : [ ] ; patchFilteredProperties ( internalWindow , eventNames . concat ( [ 'messageerror' ] ) , ignoreProperties ? ignoreProperties . concat ( ignoreErrorProperties ) : ignoreProperties , ObjectGetPrototypeOf ( internalWindow ) ) ; patchFilteredProperties ( Document . prototype , eventNames , ignoreProperties ) ; if ( typeof internalWindow [ 'SVGElement' ] !== 'undefined' ) { patchFilteredProperties ( internalWindow [ 'SVGElement' ] . prototype , eventNames , ignoreProperties ) ; } patchFilteredProperties ( Element . prototype , eventNames , ignoreProperties ) ; patchFilteredProperties ( HTMLElement . prototype , eventNames , ignoreProperties ) ; patchFilteredProperties ( HTMLMediaElement . prototype , mediaElementEventNames , ignoreProperties ) ; patchFilteredProperties ( HTMLFrameSetElement . prototype , windowEventNames . concat ( frameSetEventNames ) , ignoreProperties ) ; patchFilteredProperties ( HTMLBodyElement . prototype , windowEventNames . concat ( frameSetEventNames ) , ignoreProperties ) ; patchFilteredProperties ( HTMLFrameElement . prototype , frameEventNames , ignoreProperties ) ; patchFilteredProperties ( HTMLIFrameElement . prototype , frameEventNames , ignoreProperties ) ; const HTMLMarqueeElement = internalWindow [ 'HTMLMarqueeElement' ] ; if ( HTMLMarqueeElement ) { patchFilteredProperties ( HTMLMarqueeElement . prototype , marqueeEventNames , ignoreProperties ) ; } const Worker = internalWindow [ 'Worker' ] ; if ( Worker ) { patchFilteredProperties ( Worker . prototype , workerEventNames , ignoreProperties ) ; } } const XMLHttpRequest = _global [ 'XMLHttpRequest' ] ; if ( XMLHttpRequest ) { patchFilteredProperties ( XMLHttpRequest . prototype , XMLHttpRequestEventNames , ignoreProperties ) ; } const XMLHttpRequestEventTarget = _global [ 'XMLHttpRequestEventTarget' ] ; if ( XMLHttpRequestEventTarget ) { patchFilteredProperties ( XMLHttpRequestEventTarget && XMLHttpRequestEventTarget . prototype , XMLHttpRequestEventNames , ignoreProperties ) ; } if ( typeof IDBIndex !== 'undefined' ) { patchFilteredProperties ( IDBIndex . prototype , IDBIndexEventNames , ignoreProperties ) ; patchFilteredProperties ( IDBRequest . prototype , IDBIndexEventNames , ignoreProperties ) ; patchFilteredProperties ( IDBOpenDBRequest . prototype , IDBIndexEventNames , ignoreProperties ) ; patchFilteredProperties ( IDBDatabase . prototype , IDBIndexEventNames , ignoreProperties ) ; patchFilteredProperties ( IDBTransaction . prototype , IDBIndexEventNames , ignoreProperties ) ; patchFilteredProperties ( IDBCursor . prototype , IDBIndexEventNames , ignoreProperties ) ; } if ( supportsWebSocket ) { patchFilteredProperties ( WebSocket . prototype , websocketEventNames , ignoreProperties ) ; } }