Comparing version 0.8.13 to 0.8.14
@@ -0,1 +1,13 @@ | ||
<a name="0.8.14"></a> | ||
## [0.8.14](https://github.com/angular/zone.js/compare/v0.8.13...0.8.14) (2017-07-18) | ||
### Bug Fixes | ||
* **event:** fix [#836](https://github.com/angular/zone.js/issues/836), handle event callback call removeEventListener case ([#839](https://github.com/angular/zone.js/issues/839)) ([f301fa2](https://github.com/angular/zone.js/commit/f301fa2)) | ||
* **event:** fix memory leak for once, add more test cases ([#841](https://github.com/angular/zone.js/issues/841)) ([2143d9c](https://github.com/angular/zone.js/commit/2143d9c)) | ||
* **task:** fix [#832](https://github.com/angular/zone.js/issues/832), fix [#835](https://github.com/angular/zone.js/issues/835), task.data should be an object ([#834](https://github.com/angular/zone.js/issues/834)) ([3a4bfbd](https://github.com/angular/zone.js/commit/3a4bfbd)) | ||
<a name="0.8.13"></a> | ||
@@ -2,0 +14,0 @@ ## [0.8.13](https://github.com/angular/zone.js/compare/v0.8.12...0.8.13) (2017-07-12) |
@@ -25,5 +25,5 @@ /** | ||
} | ||
api.patchEventTargetMethods(global['MediaQueryList'].prototype, { addEventListenerFnName: 'addListener', removeEventListenerFnName: 'removeListener' }); | ||
api.patchEventTarget(global, [global['MediaQueryList'].prototype], { addEventListenerFnName: 'addListener', removeEventListenerFnName: 'removeListener' }); | ||
}); | ||
}))); |
@@ -1,1 +0,1 @@ | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t():"function"==typeof define&&define.amd?define(t):t()}(this,function(){"use strict";Zone.__load_patch("mediaQuery",function(e,t,n){e.MediaQueryList&&n.patchEventTargetMethods(e.MediaQueryList.prototype,{addEventListenerFnName:"addListener",removeEventListenerFnName:"removeListener"})})}); | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t():"function"==typeof define&&define.amd?define(t):t()}(this,function(){"use strict";Zone.__load_patch("mediaQuery",function(e,t,n){e.MediaQueryList&&n.patchEventTarget(e,[e.MediaQueryList.prototype],{addEventListenerFnName:"addListener",removeEventListenerFnName:"removeListener"})})}); |
@@ -30,3 +30,3 @@ /** | ||
windowPrototype[Zone.__symbol__('removeEventListener')] = null; | ||
api.patchEventTargetMethods(windowPrototype); | ||
api.patchEventTarget(global, [windowPrototype]); | ||
} | ||
@@ -36,3 +36,3 @@ if (Node.prototype.hasOwnProperty('addEventListener')) { | ||
Node.prototype[Zone.__symbol__('removeEventListener')] = null; | ||
api.patchEventTargetMethods(Node.prototype); | ||
api.patchEventTarget(global, [Node.prototype]); | ||
} | ||
@@ -39,0 +39,0 @@ }); |
@@ -1,1 +0,1 @@ | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t():"function"==typeof define&&define.amd?define(t):t()}(this,function(){"use strict";Zone.__load_patch("shadydom",function(e,t,o){var n=Object.getPrototypeOf(window);n&&n.hasOwnProperty("addEventListener")&&(n[t.__symbol__("addEventListener")]=null,n[t.__symbol__("removeEventListener")]=null,o.patchEventTargetMethods(n)),Node.prototype.hasOwnProperty("addEventListener")&&(Node.prototype[t.__symbol__("addEventListener")]=null,Node.prototype[t.__symbol__("removeEventListener")]=null,o.patchEventTargetMethods(Node.prototype))})}); | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t():"function"==typeof define&&define.amd?define(t):t()}(this,function(){"use strict";Zone.__load_patch("shadydom",function(e,t,o){var n=Object.getPrototypeOf(window);n&&n.hasOwnProperty("addEventListener")&&(n[t.__symbol__("addEventListener")]=null,n[t.__symbol__("removeEventListener")]=null,o.patchEventTarget(e,[n])),Node.prototype.hasOwnProperty("addEventListener")&&(Node.prototype[t.__symbol__("addEventListener")]=null,Node.prototype[t.__symbol__("removeEventListener")]=null,o.patchEventTarget(e,[Node.prototype]))})}); |
@@ -1,2 +0,2 @@ | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t():"function"==typeof define&&define.amd?define(t):t()}(this,function(){"use strict";function e(e,t){for(var n=e.length-1;n>=0;n--)"function"==typeof e[n]&&(e[n]=Zone.current.wrap(e[n],t+"_"+n));return e}function t(t,n){for(var r=t.constructor.name,o=function(o){var a=n[o],i=t[a];i&&(t[a]=function(t){var n=function(){return t.apply(this,e(arguments,r+"."+a))};return s(n,t),n}(i))},a=0;a<n.length;a++)o(a)}function n(e,t,n){var r=Object.getOwnPropertyDescriptor(e,t);if(!r&&n){var o=Object.getOwnPropertyDescriptor(n,t);o&&(r={enumerable:!0,configurable:!0})}if(r&&r.configurable){delete r.writable,delete r.value;var a=r.get,i=t.substr(2),s=w("_"+t);r.set=function(t){var n=this;if(n||e!==E||(n=E),n){var r=n[s];if(r&&n.removeEventListener(i,r),"function"==typeof t){var o=function(e){var n=t.apply(this,arguments);return void 0==n||n||e.preventDefault(),n};n[s]=o,n.addEventListener(i,o,!1)}else n[s]=null}},r.get=function(){var n=this;if(n||e!==E||(n=E),!n)return null;if(n.hasOwnProperty(s))return n[s];if(a){var o=a&&a.apply(this);if(o)return r.set.apply(this,[o]),"function"==typeof n.removeAttribute&&n.removeAttribute(t),o}return null},Object.defineProperty(e,t,r)}}function r(e,t,r){if(t)for(var o=0;o<t.length;o++)n(e,"on"+t[o],r);else{var a=[];for(var i in e)"on"==i.substr(0,2)&&a.push(i);for(var s=0;s<a.length;s++)n(e,a[s],r)}}function o(t){var n=E[t];if(n){E[w(t)]=n,E[t]=function(){var r=e(arguments,t);switch(r.length){case 0:this[z]=new n;break;case 1:this[z]=new n(r[0]);break;case 2:this[z]=new n(r[0],r[1]);break;case 3:this[z]=new n(r[0],r[1],r[2]);break;case 4:this[z]=new n(r[0],r[1],r[2],r[3]);break;default:throw new Error("Arg list too long.")}},s(E[t],n);var r,o=new n(function(){});for(r in o)"XMLHttpRequest"===t&&"responseBlob"===r||!function(e){"function"==typeof o[e]?E[t].prototype[e]=function(){return this[z][e].apply(this[z],arguments)}:Object.defineProperty(E[t].prototype,e,{set:function(n){"function"==typeof n?(this[z][e]=Zone.current.wrap(n,t+"."+e),s(this[z][e],n)):this[z][e]=n},get:function(){return this[z][e]}})}(r);for(r in n)"prototype"!==r&&n.hasOwnProperty(r)&&(E[t][r]=n[r])}}function a(e,t,n){for(var r=e;r&&!r.hasOwnProperty(t);)r=Object.getPrototypeOf(r);!r&&e[t]&&(r=e);var o,a=w(t);if(r&&!(o=r[a])){o=r[a]=r[t];var i=n(o,a,t);r[t]=function(){return i(this,arguments)},s(r[t],o)}return o}function i(e,t,n){function r(e){var t=e.data;return t.args[t.callbackIndex]=function(){e.invoke.apply(this,arguments)},o.apply(t.target,t.args),e}var o=null;o=a(e,t,function(e){return function(t,o){var a=n(t,o);if(a.callbackIndex>=0&&"function"==typeof o[a.callbackIndex]){var i=Zone.current.scheduleMacroTask(a.name,o[a.callbackIndex],a,r,null);return i}return e.apply(t,o)}})}function s(e,t){e[w("OriginalDelegate")]=t}function c(){if(P)return j;P=!0;try{var e=window.navigator.userAgent;e.indexOf("MSIE ");return e.indexOf("MSIE ")===-1&&e.indexOf("Trident/")===-1&&e.indexOf("Edge/")===-1||(j=!0),j}catch(t){}}function u(e,t){if(!e)return!1;var n=t&&t.addEventListenerFnName||"addEventListener",r=t&&t.removeEventListenerFnName||"removeEventListener",o=t&&t.listenersFnName||"eventListeners",a=t&&t.removeAllFnName||"removeAllListeners",i=w(n),c="."+n+":",u="prependListener",p="."+u+":",h=!0;t&&void 0!==t.useGlobalCallback&&(h=t.useGlobalCallback);var f=t&&t.validateHandler,d=!0;t&&void 0!==t.checkDuplicate&&(d=t.checkDuplicate);var v=!1;t&&void 0!==t.returnTarget&&(v=t.returnTarget);for(var g=e;g&&!g.hasOwnProperty(n);)g=Object.getPrototypeOf(g);if(!g&&e[n]&&(g=e),!g)return!1;if(g[i])return!1;var y,k={},m=g[i]=g[n],_=g[w(r)]=g[r],b=g[w(o)]=g[o],T=g[w(a)]=g[a];t&&t.prependEventListenerFnName&&(y=g[w(t.prependEventListenerFnName)]=g[t.prependEventListenerFnName]);var E=function(e){if(!k.isExisting)return m.apply(k.target,[k.eventName,k.capture?X:N,k.options])},D=function(e){if(e.remove)return _.apply(e.target,[e.eventName,e.capture?X:N,e.options])},Z=function(e){return m.apply(k.target,[k.eventName,e.invoke,k.options])},S=function(e){return y.apply(k.target,[k.eventName,e.invoke,k.options])},O=function(e){return _.apply(e.target,[e.eventName,e.invoke,e.options])},z=h?E:Z,P=h?D:O,j=function(e,t){var n=typeof t;return n===x&&e.callback===t||n===R&&e.originalDelegate===t},A=t&&t.compareTaskCallbackVsDelegate?t.compareTaskCallbackVsDelegate:j,W=function(e,t,n,r,o,a){return void 0===o&&(o=!1),void 0===a&&(a=!1),function(){var i=this||_global,s=(Zone.current,arguments[1]);if(!s)return e.apply(this,arguments);var c=!1;if(typeof s!==x){if(!s.handleEvent)return e.apply(this,arguments);c=!0}if(!f||f(e,s,i,arguments)){var u,l=arguments[0],p=arguments[2];u=void 0!==p&&(p===!0||p!==!1&&(!!p&&!!p.capture));var v,g=Zone.current,y=I[l];if(y)v=y[u?C:M];else{var m=l+M,_=l+C,b=q+m,T=q+_;I[l]={},I[l][M]=b,I[l][C]=T,v=u?T:b}var w=i[v],E=!1;if(w){if(E=!0,d)for(var D=0;D<w.length;D++)if(A(w[D],s))return}else w=i[v]=[];var Z,S=i.constructor[F],O=H[S];O&&(Z=O[l]),Z||(Z=S+t+l),k.options=p,k.target=i,k.capture=u,k.eventName=l,k.isExisting=E;var z=h?L:null,P=g.scheduleEventTask(Z,s,z,n,r);return P.options=p,P.target=i,P.capture=u,P.eventName=l,c&&(P.originalDelegate=s),a?w.unshift(P):w.push(P),o?i:void 0}}};return g[n]=W(m,c,z,P,v),y&&(g[u]=W(y,p,S,P,v,!0)),g[r]=function(){var e,t=this||_global,n=arguments[0],r=arguments[2];e=void 0!==r&&(r===!0||r!==!1&&(!!r&&!!r.capture));var o=arguments[1];if(!o)return _.apply(this,arguments);if(!f||f(_,o,t,arguments)){var a,i=I[n];i&&(a=i[e?C:M]);var s=a&&t[a];if(s)for(var c=0;c<s.length;c++){var u=s[c];if(A(u,o))return s.splice(c,1),0===s.length&&(u.remove=!0,t[a]=null),void u.zone.cancelTask(u)}}},g[o]=function(){for(var e=this||_global,t=arguments[0],n=[],r=l(e,t),o=0;o<r.length;o++){var a=r[o],i=a.originalDelegate?a.originalDelegate:a.callback;n.push(i)}return n},g[a]=function(){var e=this||_global,t=arguments[0];if(t){var n=I[t];if(n){var o=n[M],i=n[C],s=e[o],c=e[i];if(s)for(var u=s.slice(),l=0;l<u.length;l++){var p=u[l],h=p.originalDelegate?p.originalDelegate:p.callback;this[r].apply(this,[t,h,p.options])}if(c)for(var u=c.slice(),l=0;l<u.length;l++){var p=u[l],h=p.originalDelegate?p.originalDelegate:p.callback;this[r].apply(this,[t,h,p.options])}}}else{for(var f=Object.keys(e),l=0;l<f.length;l++){var d=f[l],v=B.exec(d),g=v&&v[1];g&&"removeListener"!==g&&this[a].apply(this,[g])}this[a].apply(this,["removeListener"])}},s(g[n],m),s(g[r],_),T&&s(g[a],T),b&&s(g[o],b),!0}function l(e,t){var n=[];for(var r in e){var o=B.exec(r),a=o&&o[1];if(a&&(!t||a===t)){var i=e[r];if(i)for(var s=0;s<i.length;s++)n.push(i[s])}}return n}function p(e,t,n,r){function o(t){function n(){try{t.invoke.apply(this,arguments)}finally{"number"==typeof r.handleId&&delete u[r.handleId]}}var r=t.data;return r.args[0]=n,r.handleId=s.apply(e,r.args),"number"==typeof r.handleId&&(u[r.handleId]=t),t}function i(e){return"number"==typeof e.data.handleId&&delete u[e.data.handleId],c(e.data.handleId)}var s=null,c=null;t+=r,n+=r;var u={};s=a(e,t,function(n){return function(a,s){if("function"==typeof s[0]){var c=Zone.current,u={handleId:null,isPeriodic:"Interval"===r,delay:"Timeout"===r||"Interval"===r?s[1]||0:null,args:s},l=c.scheduleMacroTask(t,s[0],u,o,i);if(!l)return l;var p=l.data.handleId;return p&&p.ref&&p.unref&&"function"==typeof p.ref&&"function"==typeof p.unref&&(l.ref=p.ref.bind(p),l.unref=p.unref.bind(p)),l}return n.apply(e,s)}}),c=a(e,n,function(t){return function(n,r){var o="number"==typeof r[0]?u[r[0]]:r[0];o&&"string"==typeof o.type?"notScheduled"!==o.state&&(o.cancelFn&&o.data.isPeriodic||0===o.runCount)&&o.zone.cancelTask(o):t.apply(e,r)}})}function h(){Object.defineProperty=function(e,t,n){if(d(e,t))throw new TypeError("Cannot assign to read only property '"+t+"' of "+e);var r=n.configurable;return"prototype"!==t&&(n=v(e,t,n)),g(e,t,n,r)},Object.defineProperties=function(e,t){return Object.keys(t).forEach(function(n){Object.defineProperty(e,n,t[n])}),e},Object.create=function(e,t){return"object"!=typeof t||Object.isFrozen(t)||Object.keys(t).forEach(function(n){t[n]=v(e,n,t[n])}),G(e,t)},Object.getOwnPropertyDescriptor=function(e,t){var n=U(e,t);return d(e,t)&&(n.configurable=!1),n}}function f(e,t,n){var r=n.configurable;return n=v(e,t,n),g(e,t,n,r)}function d(e,t){return e&&e[V]&&e[V][t]}function v(e,t,n){return n.configurable=!0,n.configurable||(e[V]||W(e,V,{writable:!0,value:{}}),e[V][t]=!0),n}function g(e,t,n,r){try{return W(e,t,n)}catch(o){if(!n.configurable)throw o;"undefined"==typeof r?delete n.configurable:n.configurable=r;try{return W(e,t,n)}catch(o){var a=null;try{a=JSON.stringify(n)}catch(o){a=a.toString()}console.log("Attempting to configure '"+t+"' with descriptor '"+a+"' on object '"+e+"' and got error, giving up: "+o)}}}function y(e){var t=e.WebSocket;e.EventTarget||u(t.prototype),e.WebSocket=function(e,n){var o,a,i=arguments.length>1?new t(e,n):new t(e),s=Object.getOwnPropertyDescriptor(i,"onmessage");return s&&s.configurable===!1?(o=Object.create(i),a=i,["addEventListener","removeEventListener","send","close"].forEach(function(e){o[e]=function(){return i[e].apply(i,arguments)}})):o=i,r(o,["close","error","message","open"],a),o};for(var n in t)e.WebSocket[n]=t[n]}function k(e){if(!Z||O){var t="undefined"!=typeof WebSocket;if(m()){if(S){r(window,le,Object.getPrototypeOf(window)),r(Document.prototype,le),"undefined"!=typeof window.SVGElement&&r(window.SVGElement.prototype,le),r(Element.prototype,le),r(HTMLElement.prototype,le),r(HTMLMediaElement.prototype,Y),r(HTMLFrameSetElement.prototype,Q.concat(ae)),r(HTMLBodyElement.prototype,Q.concat(ae)),r(HTMLFrameElement.prototype,oe),r(HTMLIFrameElement.prototype,oe);var n=window.HTMLMarqueeElement;n&&r(n.prototype,ie)}r(XMLHttpRequest.prototype,se);var a=e.XMLHttpRequestEventTarget;a&&r(a&&a.prototype,se),"undefined"!=typeof IDBIndex&&(r(IDBIndex.prototype,ce),r(IDBRequest.prototype,ce),r(IDBOpenDBRequest.prototype,ce),r(IDBDatabase.prototype,ce),r(IDBTransaction.prototype,ce),r(IDBCursor.prototype,ce)),t&&r(WebSocket.prototype,ue)}else _(),o("XMLHttpRequest"),t&&y(e)}}function m(){if((S||O)&&!Object.getOwnPropertyDescriptor(HTMLElement.prototype,"onclick")&&"undefined"!=typeof Element){var e=Object.getOwnPropertyDescriptor(Element.prototype,"onclick");if(e&&!e.configurable)return!1}var t=Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype,"onreadystatechange");if(t){Object.defineProperty(XMLHttpRequest.prototype,"onreadystatechange",{enumerable:!0,configurable:!0,get:function(){return!0}});var n=new XMLHttpRequest,r=!!n.onreadystatechange;return Object.defineProperty(XMLHttpRequest.prototype,"onreadystatechange",t||{}),r}Object.defineProperty(XMLHttpRequest.prototype,"onreadystatechange",{enumerable:!0,configurable:!0,get:function(){return this[w("fakeonreadystatechange")]},set:function(e){this[w("fakeonreadystatechange")]=e}});var n=new XMLHttpRequest,o=function(){};n.onreadystatechange=o;var r=n[w("fakeonreadystatechange")]===o;return n.onreadystatechange=null,r}function _(){for(var e=function(e){var t=le[e],n="on"+t;self.addEventListener(t,function(e){var t,r,o=e.target;for(r=o?o.constructor.name+"."+n:"unknown."+n;o;)o[n]&&!o[n][pe]&&(t=Zone.current.wrap(o[n],r),t[pe]=o[n],o[n]=t),o=o.parentElement},!0)},t=0;t<le.length;t++)e(t)}function b(e,t){var n="Anchor,Area,Audio,BR,Base,BaseFont,Body,Button,Canvas,Content,DList,Directory,Div,Embed,FieldSet,Font,Form,Frame,FrameSet,HR,Head,Heading,Html,IFrame,Image,Input,Keygen,LI,Label,Legend,Link,Map,Marquee,Media,Menu,Meta,Meter,Mod,OList,Object,OptGroup,Option,Output,Paragraph,Pre,Progress,Quote,Script,Select,Source,Span,Style,TableCaption,TableCell,TableCol,Table,TableRow,TableSection,TextArea,Title,Track,UList,Unknown,Video",r="ApplicationCache,EventSource,FileReader,InputMethodContext,MediaController,MessagePort,Node,Performance,SVGElementInstance,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebKitNamedFlow,Window,Worker,WorkerGlobalScope,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload,IDBRequest,IDBOpenDBRequest,IDBDatabase,IDBTransaction,IDBCursor,DBIndex,WebSocket".split(","),o="EventTarget",a=[],i=e.wtf,s=n.split(",");i?a=s.map(function(e){return"HTML"+e+"Element"}).concat(r):e[o]?a.push(o):a=r;for(var l=e.__Zone_disable_IE_check||!1,p=e.__Zone_enable_cross_context_check||!1,h=c(),f=".addEventListener:",d="[object FunctionWrapper]",v="function __BROWSERTOOLS_CONSOLE_SAFEFUNC() { [native code] }",g=0;g<le.length;g++){var y=le[g],k=y+M,m=y+C,_=q+k,b=q+m;I[y]={},I[y][M]=_,I[y][C]=b}for(var g=0;g<n.length;g++)for(var T=s[g],w=H[T]={},E=0;E<le.length;E++){var y=le[E];w[y]=T+f+y}for(var D=function(e,t,n,r){if(!l&&h)if(p)try{var o=t.toString();if(o===d||o==v)return e.apply(n,r),!1}catch(a){return e.apply(n,r),!1}else{var o=t.toString();if(o===d||o==v)return e.apply(n,r),!1}else if(p)try{t.toString()}catch(a){return e.apply(n,r),!1}return!0},g=0;g<a.length;g++){var Z=e[a[g]];u(Z&&Z.prototype,{validateHandler:D})}return t.patchEventTargetMethods=u,!0}function T(e){if((S||O)&&"registerElement"in e.document){var t=document.registerElement,n=["createdCallback","attachedCallback","detachedCallback","attributeChangedCallback"];document.registerElement=function(e,r){return r&&r.prototype&&n.forEach(function(e){var t="Document.registerElement::"+e;if(r.prototype.hasOwnProperty(e)){var n=Object.getOwnPropertyDescriptor(r.prototype,e);n&&n.value?(n.value=Zone.current.wrap(n.value,t),f(r.prototype,e,n)):r.prototype[e]=Zone.current.wrap(r.prototype[e],t)}else r.prototype[e]&&(r.prototype[e]=Zone.current.wrap(r.prototype[e],t))}),t.apply(document,[e,r])},s(document.registerElement,t)}}(function(e){function t(e){s&&s.mark&&s.mark(e)}function n(e,t){s&&s.measure&&s.measure(e,t)}function r(t){0===C&&0===g.length&&(e[d]?e[d].resolve(0)[v](o):e[f](o,0)),t&&g.push(t)}function o(){if(!y){for(y=!0;g.length;){var e=g;g=[];for(var t=0;t<e.length;t++){var n=e[t];try{n.zone.runTask(n,null,null)}catch(r){z.onUnhandledError(r)}}}!c[i("ignoreConsoleErrorUncaughtError")];z.microtaskDrainDone(),y=!1}}function a(){}function i(e){return"__zone_symbol__"+e}var s=e.performance;if(t("Zone"),e.Zone)throw new Error("Zone already loaded.");var c=function(){function r(e,t){this._properties=null,this._parent=e,this._name=t?t.name||"unnamed":"<root>",this._properties=t&&t.properties||{},this._zoneDelegate=new l(this,this._parent&&this._parent._zoneDelegate,t)}return r.assertZonePatched=function(){if(e.Promise!==O.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")},Object.defineProperty(r,"root",{get:function(){for(var e=r.current;e.parent;)e=e.parent;return e},enumerable:!0,configurable:!0}),Object.defineProperty(r,"current",{get:function(){return P.zone},enumerable:!0,configurable:!0}),Object.defineProperty(r,"currentTask",{get:function(){return j},enumerable:!0,configurable:!0}),r.__load_patch=function(o,a){if(O.hasOwnProperty(o))throw Error("Already loaded patch: "+o);if(!e["__Zone_disable_"+o]){var i="Zone:"+o;t(i),O[o]=a(e,r,z),n(i,i)}},Object.defineProperty(r.prototype,"parent",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"name",{get:function(){return this._name},enumerable:!0,configurable:!0}),r.prototype.get=function(e){var t=this.getZoneWith(e);if(t)return t._properties[e]},r.prototype.getZoneWith=function(e){for(var t=this;t;){if(t._properties.hasOwnProperty(e))return t;t=t._parent}return null},r.prototype.fork=function(e){if(!e)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,e)},r.prototype.wrap=function(e,t){if("function"!=typeof e)throw new Error("Expecting function got: "+e);var n=this._zoneDelegate.intercept(this,e,t),r=this;return function(){return r.runGuarded(n,this,arguments,t)}},r.prototype.run=function(e,t,n,r){void 0===t&&(t=void 0),void 0===n&&(n=null),void 0===r&&(r=null),P={parent:P,zone:this};try{return this._zoneDelegate.invoke(this,e,t,n,r)}finally{P=P.parent}},r.prototype.runGuarded=function(e,t,n,r){void 0===t&&(t=null),void 0===n&&(n=null),void 0===r&&(r=null),P={parent:P,zone:this};try{try{return this._zoneDelegate.invoke(this,e,t,n,r)}catch(o){if(this._zoneDelegate.handleError(this,o))throw o}}finally{P=P.parent}},r.prototype.runTask=function(e,t,n){if(e.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(e.zone||k).name+"; Execution: "+this.name+")");var r=e.state===m;if(!r||e.type!==S){var o=e.state!=T;o&&e._transitionTo(T,b),e.runCount++;var a=j;j=e,P={parent:P,zone:this};try{e.type==Z&&e.data&&!e.data.isPeriodic&&(e.cancelFn=null);try{return this._zoneDelegate.invokeTask(this,e,t,n)}catch(i){if(this._zoneDelegate.handleError(this,i))throw i}}finally{e.state!==m&&e.state!==E&&(e.type==S||e.data&&e.data.isPeriodic?o&&e._transitionTo(b,T):(e.runCount=0,this._updateTaskCount(e,-1),o&&e._transitionTo(m,T,m))),P=P.parent,j=a}}},r.prototype.scheduleTask=function(e){if(e.zone&&e.zone!==this)for(var t=this;t;){if(t===e.zone)throw Error("can not reschedule task to "+this.name+" which is descendants of the original zone "+e.zone.name);t=t.parent}e._transitionTo(_,m);var n=[];e._zoneDelegates=n,e._zone=this;try{e=this._zoneDelegate.scheduleTask(this,e)}catch(r){throw e._transitionTo(E,_,m),this._zoneDelegate.handleError(this,r),r}return e._zoneDelegates===n&&this._updateTaskCount(e,1),e.state==_&&e._transitionTo(b,_),e},r.prototype.scheduleMicroTask=function(e,t,n,r){return this.scheduleTask(new h(D,e,t,n,r,null))},r.prototype.scheduleMacroTask=function(e,t,n,r,o){return this.scheduleTask(new h(Z,e,t,n,r,o))},r.prototype.scheduleEventTask=function(e,t,n,r,o){return this.scheduleTask(new h(S,e,t,n,r,o))},r.prototype.cancelTask=function(e){if(e.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(e.zone||k).name+"; Execution: "+this.name+")");e._transitionTo(w,b,T);try{this._zoneDelegate.cancelTask(this,e)}catch(t){throw e._transitionTo(E,w),this._zoneDelegate.handleError(this,t),t}return this._updateTaskCount(e,-1),e._transitionTo(m,w),e.runCount=0,e},r.prototype._updateTaskCount=function(e,t){var n=e._zoneDelegates;t==-1&&(e._zoneDelegates=null);for(var r=0;r<n.length;r++)n[r]._updateTaskCount(e.type,t)},r}();c.__symbol__=i;var u={name:"",onHasTask:function(e,t,n,r){return e.hasTask(n,r)},onScheduleTask:function(e,t,n,r){return e.scheduleTask(n,r)},onInvokeTask:function(e,t,n,r,o,a){return e.invokeTask(n,r,o,a)},onCancelTask:function(e,t,n,r){return e.cancelTask(n,r)}},l=function(){function e(e,t,n){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=e,this._parentDelegate=t,this._forkZS=n&&(n&&n.onFork?n:t._forkZS),this._forkDlgt=n&&(n.onFork?t:t._forkDlgt),this._forkCurrZone=n&&(n.onFork?this.zone:t.zone),this._interceptZS=n&&(n.onIntercept?n:t._interceptZS),this._interceptDlgt=n&&(n.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=n&&(n.onIntercept?this.zone:t.zone),this._invokeZS=n&&(n.onInvoke?n:t._invokeZS),this._invokeDlgt=n&&(n.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=n&&(n.onInvoke?this.zone:t.zone),this._handleErrorZS=n&&(n.onHandleError?n:t._handleErrorZS),this._handleErrorDlgt=n&&(n.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=n&&(n.onHandleError?this.zone:t.zone),this._scheduleTaskZS=n&&(n.onScheduleTask?n:t._scheduleTaskZS),this._scheduleTaskDlgt=n&&(n.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=n&&(n.onScheduleTask?this.zone:t.zone),this._invokeTaskZS=n&&(n.onInvokeTask?n:t._invokeTaskZS),this._invokeTaskDlgt=n&&(n.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=n&&(n.onInvokeTask?this.zone:t.zone),this._cancelTaskZS=n&&(n.onCancelTask?n:t._cancelTaskZS),this._cancelTaskDlgt=n&&(n.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=n&&(n.onCancelTask?this.zone:t.zone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;var r=n&&n.onHasTask,o=t&&t._hasTaskZS;(r||o)&&(this._hasTaskZS=r?n:u,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=e,n.onScheduleTask||(this._scheduleTaskZS=u,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this.zone),n.onInvokeTask||(this._invokeTaskZS=u,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this.zone),n.onCancelTask||(this._cancelTaskZS=u,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this.zone))}return e.prototype.fork=function(e,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,e,t):new c(e,t)},e.prototype.intercept=function(e,t,n){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,e,t,n):t},e.prototype.invoke=function(e,t,n,r,o){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,e,t,n,r,o):t.apply(n,r)},e.prototype.handleError=function(e,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,e,t)},e.prototype.scheduleTask=function(e,t){var n=t;if(this._scheduleTaskZS)this._hasTaskZS&&n._zoneDelegates.push(this._hasTaskDlgtOwner),n=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,e,t),n||(n=t);else if(t.scheduleFn)t.scheduleFn(t);else{if(t.type!=D)throw new Error("Task is missing scheduleFn.");r(t)}return n},e.prototype.invokeTask=function(e,t,n,r){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,e,t,n,r):t.callback.apply(n,r)},e.prototype.cancelTask=function(e,t){var n;if(this._cancelTaskZS)n=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,e,t);else{if(!t.cancelFn)throw Error("Task is not cancelable");n=t.cancelFn(t)}return n},e.prototype.hasTask=function(e,t){try{return this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,e,t)}catch(n){this.handleError(e,n)}},e.prototype._updateTaskCount=function(e,t){var n=this._taskCounts,r=n[e],o=n[e]=r+t;if(o<0)throw new Error("More tasks executed then were scheduled.");if(0==r||0==o){var a={microTask:n.microTask>0,macroTask:n.macroTask>0,eventTask:n.eventTask>0,change:e};this.hasTask(this.zone,a)}},e}(),p=c.__symbol__("optimizedZoneEventTask"),h=function(){function t(n,r,o,a,i,s){this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=n,this.source=r,this.data=a,this.scheduleFn=i,this.cancelFn=s,this.callback=o;var c=this;n===S&&a===p?this.invoke=t.invokeTask:this.invoke=function(){return t.invokeTask.apply(e,[c,this,arguments])}}return t.invokeTask=function(e,t,n){e||(e=this),C++;try{return e.runCount++,e.zone.runTask(e,t,n)}finally{1==C&&o(),C--}},Object.defineProperty(t.prototype,"zone",{get:function(){return this._zone},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"state",{get:function(){return this._state},enumerable:!0,configurable:!0}),t.prototype.cancelScheduleRequest=function(){this._transitionTo(m,_)},t.prototype._transitionTo=function(e,t,n){if(this._state!==t&&this._state!==n)throw new Error(this.type+" '"+this.source+"': can not transition to '"+e+"', expecting state '"+t+"'"+(n?" or '"+n+"'":"")+", was '"+this._state+"'.");this._state=e,e==m&&(this._zoneDelegates=null)},t.prototype.toString=function(){return this.data&&"undefined"!=typeof this.data.handleId?this.data.handleId:Object.prototype.toString.call(this)},t.prototype.toJSON=function(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,invoke:this.invoke,scheduleFn:this.scheduleFn,cancelFn:this.cancelFn,runCount:this.runCount,callback:this.callback}},t}(),f=i("setTimeout"),d=i("Promise"),v=i("then"),g=[],y=!1,k={name:"NO ZONE"},m="notScheduled",_="scheduling",b="scheduled",T="running",w="canceling",E="unknown",D="microTask",Z="macroTask",S="eventTask",O={},z={symbol:i,currentZoneFrame:function(){return P},onUnhandledError:a,microtaskDrainDone:a,scheduleMicroTask:r,showUncaughtError:function(){return!c[i("ignoreConsoleErrorUncaughtError")]},patchEventTargetMethods:function(){return!1},patchOnProperties:a,patchMethod:function(){return a}},P={parent:null,zone:new c(null,null)},j=null,C=0;return n("Zone","Zone"),e.Zone=c})("undefined"!=typeof window&&window||"undefined"!=typeof self&&self||global);Zone.__load_patch("ZoneAwarePromise",function(e,t,n){function r(e){n.onUnhandledError(e);try{var r=t[f("unhandledPromiseRejectionHandler")];r&&"function"==typeof r&&r.apply(this,[e])}catch(o){}}function o(e){return e&&e.then}function a(e){return e}function i(e){return D.reject(e)}function s(e,t){return function(n){try{c(e,t,n)}catch(r){c(e,!1,r)}}}function c(e,r,o){var a=E();if(e===o)throw new TypeError("Promise resolved with itself");if(e[y]===_){var i=null;try{"object"!=typeof o&&"function"!=typeof o||(i=o&&o.then)}catch(p){return a(function(){c(e,!1,p)})(),e}if(r!==T&&o instanceof D&&o.hasOwnProperty(y)&&o.hasOwnProperty(k)&&o[y]!==_)u(o),c(e,o[y],o[k]);else if(r!==T&&"function"==typeof i)try{i.apply(o,[a(s(e,r)),a(s(e,!1))])}catch(p){a(function(){c(e,!1,p)})()}else{e[y]=r;var h=e[k];e[k]=o,r===T&&o instanceof Error&&(o[f("currentTask")]=t.currentTask);for(var v=0;v<h.length;)l(e,h[v++],h[v++],h[v++],h[v++]);if(0==h.length&&r==T){e[y]=w;try{throw new Error("Uncaught (in promise): "+o+(o&&o.stack?"\n"+o.stack:""))}catch(p){var g=p;g.rejection=o,g.promise=e,g.zone=t.current,g.task=t.currentTask,d.push(g),n.scheduleMicroTask()}}}}return e}function u(e){if(e[y]===w){try{var n=t[f("rejectionHandledHandler")];n&&"function"==typeof n&&n.apply(this,[{rejection:e[k],promise:e}])}catch(r){}e[y]=T;for(var o=0;o<d.length;o++)e===d[o].promise&&d.splice(o,1)}}function l(e,t,n,r,o){u(e);var s=e[y]?"function"==typeof r?r:a:"function"==typeof o?o:i;t.scheduleMicroTask(m,function(){try{c(n,!0,t.run(s,void 0,[e[k]]))}catch(r){c(n,!1,r)}})}function p(e){var t=e.prototype,n=t.then;t[g]=n,e.prototype.then=function(e,t){var r=this,o=new D(function(e,t){n.call(r,e,t)});return o.then(e,t)},e[S]=!0}function h(e){return function(){var t=e.apply(this,arguments);if(t instanceof D)return t;var n=t.constructor;return n[S]||p(n),t}}var f=n.symbol,d=[],v=f("Promise"),g=f("then");n.onUnhandledError=function(e){if(n.showUncaughtError()){var t=e&&e.rejection;t?console.error("Unhandled Promise rejection:",t instanceof Error?t.message:t,"; Zone:",e.zone.name,"; Task:",e.task&&e.task.source,"; Value:",t,t instanceof Error?t.stack:void 0):console.error(e)}},n.microtaskDrainDone=function(){for(;d.length;)for(var e=function(){var e=d.shift();try{e.zone.runGuarded(function(){throw e})}catch(t){r(t)}};d.length;)e()};var y=f("state"),k=f("value"),m="Promise.then",_=null,b=!0,T=!1,w=0,E=function(){var e=!1;return function(t){return function(){e||(e=!0,t.apply(null,arguments))}}},D=function(){function e(t){var n=this;if(!(n instanceof e))throw new Error("Must be an instanceof Promise.");n[y]=_,n[k]=[];try{t&&t(s(n,b),s(n,T))}catch(r){c(n,!1,r)}}return e.toString=function(){return"function ZoneAwarePromise() { [native code] }"},e.resolve=function(e){return c(new this(null),b,e)},e.reject=function(e){return c(new this(null),T,e)},e.race=function(e){function t(e){i&&(i=r(e))}function n(e){i&&(i=a(e))}for(var r,a,i=new this(function(e,t){n=[e,t],r=n[0],a=n[1];var n}),s=0,c=e;s<c.length;s++){var u=c[s];o(u)||(u=this.resolve(u)),u.then(t,n)}return i},e.all=function(e){for(var t,n,r=new this(function(e,r){t=e,n=r}),a=0,i=[],s=0,c=e;s<c.length;s++){var u=c[s];o(u)||(u=this.resolve(u)),u.then(function(e){return function(n){i[e]=n,a--,a||t(i)}}(a),n),a++}return a||t(i),r},e.prototype.then=function(e,n){var r=new this.constructor(null),o=t.current;return this[y]==_?this[k].push(o,r,e,n):l(this,o,r,e,n),r},e.prototype["catch"]=function(e){return this.then(null,e)},e}();D.resolve=D.resolve,D.reject=D.reject,D.race=D.race,D.all=D.all;var Z=e[v]=e.Promise;e.Promise=D;var S=f("thenPatched");if(Z){p(Z);var O=e.fetch;"function"==typeof O&&(e.fetch=h(O))}return Promise[t.__symbol__("uncaughtPromiseErrors")]=d,D});var w=Zone.__symbol__,E="object"==typeof window&&window||"object"==typeof self&&self||global,D="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,Z=!("nw"in E)&&"undefined"!=typeof E.process&&"[object process]"==={}.toString.call(E.process),S=!Z&&!D&&!("undefined"==typeof window||!window.HTMLElement),O="undefined"!=typeof E.process&&"[object process]"==={}.toString.call(E.process)&&!D&&!("undefined"==typeof window||!window.HTMLElement),z=w("originalInstance"),P=!1,j=!1;Zone.__load_patch("toString",function(e,t,n){var r=t.__zone_symbol__originalToString=Function.prototype.toString;Function.prototype.toString=function(){if("function"==typeof this){var t=this[w("OriginalDelegate")];if(t)return"function"==typeof t?r.apply(this[w("OriginalDelegate")],arguments):Object.prototype.toString.call(t);if(this===Promise){var n=e[w("Promise")];if(n)return r.apply(n,arguments)}if(this===Error){var o=e[w("Error")];if(o)return r.apply(o,arguments)}}return r.apply(this,arguments)};var o=Object.prototype.toString;Object.prototype.toString=function(){return this instanceof Promise?"[object Promise]":o.apply(this,arguments)}});var C="true",M="false",L=w("optimizedZoneEventTask"),I={},H={},F="name",x="function",R="object",q="__zone_symbol__",B=/^__zone_symbol__(\w+)(true|false)$/,A=function(e,t,n){var r=e.callback;typeof r===R&&r.handleEvent&&(e.callback=function(e){return r.handleEvent(e)},e.originalDelegate=r),e.invoke(e,t,[n])},N=function(e){var t=this||_global,n=t[I[e.type][M]];if(n)for(var r=0;r<n.length;r++)A(n[r],t,e)},X=function(e){var t=this||_global,n=t[I[e.type][C]];if(n)for(var r=0;r<n.length;r++)A(n[r],t,e)},W=Object[w("defineProperty")]=Object.defineProperty,U=Object[w("getOwnPropertyDescriptor")]=Object.getOwnPropertyDescriptor,G=Object.create,V=w("unconfigurables"),K=["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","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","transitioncancel","transitionend","waiting","wheel"],J=["afterscriptexecute","beforescriptexecute","DOMContentLoaded","fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange","fullscreenerror","mozfullscreenerror","webkitfullscreenerror","msfullscreenerror","readystatechange"],Q=["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"],$=["beforecopy","beforecut","beforepaste","copy","cut","paste","dragstart","loadend","animationstart","search","transitionrun","transitionstart","webkitanimationend","webkitanimationiteration","webkitanimationstart","webkittransitionend"],Y=["encrypted","waitingforkey","msneedkey","mozinterruptbegin","mozinterruptend"],ee=["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"],te=["webglcontextrestored","webglcontextlost","webglcontextcreationerror"],ne=["autocomplete","autocompleteerror"],re=["toggle"],oe=["load"],ae=["blur","error","focus","load","resize","scroll"],ie=["bounce","finish","start"],se=["loadstart","progress","abort","error","load","progress","timeout","loadend","readystatechange"],ce=["upgradeneeded","complete","abort","success","error","blocked","versionchange","close"],ue=["close","error","open","message"],le=K.concat(te,ne,re,J,Q,$,ee),pe=w("unbound"); | ||
Zone.__load_patch("timers",function(e,t,n){var r="set",o="clear";p(e,r,o,"Timeout"),p(e,r,o,"Interval"),p(e,r,o,"Immediate"),p(e,"request","cancel","AnimationFrame"),p(e,"mozRequest","mozCancel","AnimationFrame"),p(e,"webkitRequest","webkitCancel","AnimationFrame")}),Zone.__load_patch("blocking",function(e,t,n){for(var r=["alert","prompt","confirm"],o=0;o<r.length;o++){var i=r[o];a(e,i,function(n,r,o){return function(r,a){return t.current.run(n,e,a,o)}})}}),Zone.__load_patch("EventTarget",function(e,t,n){b(e,n);var r=e.XMLHttpRequestEventTarget;r&&r.prototype&&n.patchEventTargetMethods(r.prototype),o("MutationObserver"),o("WebKitMutationObserver"),o("FileReader")}),Zone.__load_patch("on_property",function(e,t,n){k(e),h(),T(e)}),Zone.__load_patch("canvas",function(e,t,n){var r=e.HTMLCanvasElement;"undefined"!=typeof r&&r.prototype&&r.prototype.toBlob&&i(r.prototype,"toBlob",function(e,t){return{name:"HTMLCanvasElement.toBlob",target:e,callbackIndex:0,args:t}})}),Zone.__load_patch("XHR",function(e,t,n){function r(e){function n(e){var t=e[o];return t}function r(e){XMLHttpRequest[c]=!1;var t=e.data,n=t.target[s],r=t.target[w("addEventListener")],a=t.target[w("removeEventListener")];n&&a.apply(t.target,["readystatechange",n]);var i=t.target[s]=function(){t.target.readyState===t.target.DONE&&!t.aborted&&XMLHttpRequest[c]&&"scheduled"===e.state&&e.invoke()};r.apply(t.target,["readystatechange",i]);var u=t.target[o];return u||(t.target[o]=e),h.apply(t.target,t.args),XMLHttpRequest[c]=!0,e}function u(){}function l(e){var t=e.data;return t.aborted=!0,f.apply(t.target,t.args)}var p=a(e.XMLHttpRequest.prototype,"open",function(){return function(e,t){return e[i]=0==t[2],p.apply(e,t)}}),h=a(e.XMLHttpRequest.prototype,"send",function(){return function(e,n){var o=t.current;if(e[i])return h.apply(e,n);var a={target:e,isPeriodic:!1,delay:null,args:n,aborted:!1};return o.scheduleMacroTask("XMLHttpRequest.send",u,a,r,l)}}),f=a(e.XMLHttpRequest.prototype,"abort",function(e){return function(e,t){var r=n(e);if(r&&"string"==typeof r.type){if(null==r.cancelFn||r.data&&r.data.aborted)return;r.zone.cancelTask(r)}}})}r(e);var o=w("xhrTask"),i=w("xhrSync"),s=w("xhrListener"),c=w("xhrScheduled")}),Zone.__load_patch("geolocation",function(e,n,r){e.navigator&&e.navigator.geolocation&&t(e.navigator.geolocation,["getCurrentPosition","watchPosition"])}),Zone.__load_patch("PromiseRejectionEvent",function(e,t,n){function r(t){return function(n){var r=l(e,t);r.forEach(function(r){var o=e.PromiseRejectionEvent;if(o){var a=new o(t,{promise:n.promise,reason:n.rejection});r.invoke(a)}})}}e.PromiseRejectionEvent&&(t[w("unhandledPromiseRejectionHandler")]=r("unhandledrejection"),t[w("rejectionHandledHandler")]=r("rejectionhandled"))}),Zone.__load_patch("util",function(e,t,n){n.patchOnProperties=r,n.patchMethod=a})}); | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t():"function"==typeof define&&define.amd?define(t):t()}(this,function(){"use strict";function e(e,t){for(var n=e.length-1;n>=0;n--)"function"==typeof e[n]&&(e[n]=Zone.current.wrap(e[n],t+"_"+n));return e}function t(t,n){for(var r=t.constructor.name,o=function(o){var a=n[o],i=t[a];i&&(t[a]=function(t){var n=function(){return t.apply(this,e(arguments,r+"."+a))};return s(n,t),n}(i))},a=0;a<n.length;a++)o(a)}function n(e,t,n){var r=Object.getOwnPropertyDescriptor(e,t);if(!r&&n){var o=Object.getOwnPropertyDescriptor(n,t);o&&(r={enumerable:!0,configurable:!0})}if(r&&r.configurable){delete r.writable,delete r.value;var a=r.get,i=t.substr(2),s=w("_"+t);r.set=function(t){var n=this;if(n||e!==E||(n=E),n){var r=n[s];if(r&&n.removeEventListener(i,r),"function"==typeof t){var o=function(e){var n=t.apply(this,arguments);return void 0==n||n||e.preventDefault(),n};n[s]=o,n.addEventListener(i,o,!1)}else n[s]=null}},r.get=function(){var n=this;if(n||e!==E||(n=E),!n)return null;if(n.hasOwnProperty(s))return n[s];if(a){var o=a&&a.apply(this);if(o)return r.set.apply(this,[o]),"function"==typeof n.removeAttribute&&n.removeAttribute(t),o}return null},Object.defineProperty(e,t,r)}}function r(e,t,r){if(t)for(var o=0;o<t.length;o++)n(e,"on"+t[o],r);else{var a=[];for(var i in e)"on"==i.substr(0,2)&&a.push(i);for(var s=0;s<a.length;s++)n(e,a[s],r)}}function o(t){var n=E[t];if(n){E[w(t)]=n,E[t]=function(){var r=e(arguments,t);switch(r.length){case 0:this[z]=new n;break;case 1:this[z]=new n(r[0]);break;case 2:this[z]=new n(r[0],r[1]);break;case 3:this[z]=new n(r[0],r[1],r[2]);break;case 4:this[z]=new n(r[0],r[1],r[2],r[3]);break;default:throw new Error("Arg list too long.")}},s(E[t],n);var r,o=new n(function(){});for(r in o)"XMLHttpRequest"===t&&"responseBlob"===r||!function(e){"function"==typeof o[e]?E[t].prototype[e]=function(){return this[z][e].apply(this[z],arguments)}:Object.defineProperty(E[t].prototype,e,{set:function(n){"function"==typeof n?(this[z][e]=Zone.current.wrap(n,t+"."+e),s(this[z][e],n)):this[z][e]=n},get:function(){return this[z][e]}})}(r);for(r in n)"prototype"!==r&&n.hasOwnProperty(r)&&(E[t][r]=n[r])}}function a(e,t,n){for(var r=e;r&&!r.hasOwnProperty(t);)r=Object.getPrototypeOf(r);!r&&e[t]&&(r=e);var o,a=w(t);if(r&&!(o=r[a])){o=r[a]=r[t];var i=n(o,a,t);r[t]=function(){return i(this,arguments)},s(r[t],o)}return o}function i(e,t,n){function r(e){var t=e.data;return t.args[t.callbackIndex]=function(){e.invoke.apply(this,arguments)},o.apply(t.target,t.args),e}var o=null;o=a(e,t,function(e){return function(t,o){var a=n(t,o);if(a.callbackIndex>=0&&"function"==typeof o[a.callbackIndex]){var i=Zone.current.scheduleMacroTask(a.name,o[a.callbackIndex],a,r,null);return i}return e.apply(t,o)}})}function s(e,t){e[w("OriginalDelegate")]=t}function c(){if(P)return j;P=!0;try{var e=window.navigator.userAgent;e.indexOf("MSIE ");return e.indexOf("MSIE ")===-1&&e.indexOf("Trident/")===-1&&e.indexOf("Edge/")===-1||(j=!0),j}catch(t){}}function u(e,t,n){function r(t,n){if(!t)return!1;var r=!0;n&&void 0!==n.useGlobalCallback&&(r=n.useGlobalCallback);var d=n&&n.validateHandler,y=!0;n&&void 0!==n.checkDuplicate&&(y=n.checkDuplicate);var k=!1;n&&void 0!==n.returnTarget&&(k=n.returnTarget);for(var m=t;m&&!m.hasOwnProperty(o);)m=Object.getPrototypeOf(m);if(!m&&t[o]&&(m=t),!m)return!1;if(m[u])return!1;var _,b={},T=m[u]=m[o],E=m[w(a)]=m[a],D=m[w(i)]=m[i],Z=m[w(c)]=m[c];n&&n.prependEventListenerFnName&&(_=m[w(n.prependEventListenerFnName)]=m[n.prependEventListenerFnName]);var S=function(e){if(!b.isExisting)return T.apply(b.target,[b.eventName,b.capture?g:v,b.options])},O=function(e){if(!e.isRemoved){var t=I[e.eventName],n=void 0;t&&(n=t[e.capture?C:L]);var r=n&&e.target[n];if(r)for(var o=0;o<r.length;o++){var a=r[o];if(a===e){r.splice(o,1),e.isRemoved=!0,0===r.length&&(e.allRemoved=!0,e.target[n]=null);break}}}if(e.allRemoved)return E.apply(e.target,[e.eventName,e.capture?g:v,e.options])},z=function(e){return T.apply(b.target,[b.eventName,e.invoke,b.options])},P=function(e){return _.apply(b.target,[b.eventName,e.invoke,b.options])},j=function(e){return E.apply(e.target,[e.eventName,e.invoke,e.options])},N=r?S:z,A=r?O:j,X=function(e,t){var n=typeof t;return n===R&&e.callback===t||n===x&&e.originalDelegate===t},W=n&&n.compareTaskCallbackVsDelegate?n.compareTaskCallbackVsDelegate:X,U=function(t,n,o,a,i,s){return void 0===i&&(i=!1),void 0===s&&(s=!1),function(){var c=this||e,u=(Zone.current,arguments[1]);if(!u)return t.apply(this,arguments);var l=!1;if(typeof u!==R){if(!u.handleEvent)return t.apply(this,arguments);l=!0}if(!d||d(t,u,c,arguments)){var p,f=arguments[0],h=arguments[2],v=!1;void 0===h?p=!1:h===!0?p=!0:h===!1?p=!1:(p=!!h&&!!h.capture,v=!!h&&!!h.once);var g,k=Zone.current,m=I[f];if(m)g=m[p?C:L];else{var _=f+L,T=f+C,w=q+_,E=q+T;I[f]={},I[f][L]=w,I[f][C]=E,g=p?E:w}var D=c[g],Z=!1;if(D){if(Z=!0,y)for(var S=0;S<D.length;S++)if(W(D[S],u))return}else D=c[g]=[];var O,z=c.constructor[F],P=H[z];P&&(O=P[f]),O||(O=z+n+f),b.options=h,v&&(b.options.once=!1),b.target=c,b.capture=p,b.eventName=f,b.isExisting=Z;var j=r?M:null,x=k.scheduleEventTask(O,u,j,o,a);return v&&(h.once=!0),x.options=h,x.target=c,x.capture=p,x.eventName=f,l&&(x.originalDelegate=u),s?D.unshift(x):D.push(x),i?c:void 0}}};return m[o]=U(T,p,N,A,k),_&&(m[f]=U(_,h,P,A,k,!0)),m[a]=function(){var t,n=this||e,r=arguments[0],o=arguments[2];t=void 0!==o&&(o===!0||o!==!1&&(!!o&&!!o.capture));var a=arguments[1];if(!a)return E.apply(this,arguments);if(!d||d(E,a,n,arguments)){var i,s=I[r];s&&(i=s[t?C:L]);var c=i&&n[i];if(c)for(var u=0;u<c.length;u++){var l=c[u];if(W(l,a))return c.splice(u,1),l.isRemoved=!0,0===c.length&&(l.allRemoved=!0,n[i]=null),void l.zone.cancelTask(l)}}},m[i]=function(){for(var t=this||e,n=arguments[0],r=[],o=l(t,n),a=0;a<o.length;a++){var i=o[a],s=i.originalDelegate?i.originalDelegate:i.callback;r.push(s)}return r},m[c]=function(){var t=this||e,n=arguments[0];if(n){var r=I[n];if(r){var o=r[L],i=r[C],s=t[o],u=t[i];if(s)for(var l=s.slice(),p=0;p<l.length;p++){var f=l[p],h=f.originalDelegate?f.originalDelegate:f.callback;this[a].apply(this,[n,h,f.options])}if(u)for(var l=u.slice(),p=0;p<l.length;p++){var f=l[p],h=f.originalDelegate?f.originalDelegate:f.callback;this[a].apply(this,[n,h,f.options])}}}else{for(var d=Object.keys(t),p=0;p<d.length;p++){var v=d[p],g=B.exec(v),y=g&&g[1];y&&"removeListener"!==y&&this[c].apply(this,[y])}this[c].apply(this,["removeListener"])}},s(m[o],T),s(m[a],E),Z&&s(m[c],Z),D&&s(m[i],D),!0}for(var o=n&&n.addEventListenerFnName||"addEventListener",a=n&&n.removeEventListenerFnName||"removeEventListener",i=n&&n.listenersFnName||"eventListeners",c=n&&n.removeAllFnName||"removeAllListeners",u=w(o),p="."+o+":",f="prependListener",h="."+f+":",d=function(e,t,n){if(!e.isRemoved){var r=e.callback;typeof r===x&&r.handleEvent&&(e.callback=function(e){return r.handleEvent(e)},e.originalDelegate=r),e.invoke(e,t,[n]);var o=e.options;if(o&&"object"==typeof o&&o.once){var i=e.originalDelegate?e.originalDelegate:e.callback;t[a].apply(t,[n.type,i,o])}}},v=function(t){var n=this||e,r=n[I[t.type][L]];if(r)if(1===r.length)d(r[0],n,t);else for(var o=r.slice(),a=0;a<o.length;a++)d(o[a],n,t)},g=function(t){var n=this||e,r=n[I[t.type][C]];if(r)if(1===r.length)d(r[0],n,t);else for(var o=r.slice(),a=0;a<o.length;a++)d(o[a],n,t)},y=[],k=0;k<t.length;k++)y[k]=r(t[k],n);return y}function l(e,t){var n=[];for(var r in e){var o=B.exec(r),a=o&&o[1];if(a&&(!t||a===t)){var i=e[r];if(i)for(var s=0;s<i.length;s++)n.push(i[s])}}return n}function p(e,t,n,r){function o(t){function n(){try{t.invoke.apply(this,arguments)}finally{"number"==typeof r.handleId&&delete u[r.handleId]}}var r=t.data;return r.args[0]=n,r.handleId=s.apply(e,r.args),"number"==typeof r.handleId&&(u[r.handleId]=t),t}function i(e){return"number"==typeof e.data.handleId&&delete u[e.data.handleId],c(e.data.handleId)}var s=null,c=null;t+=r,n+=r;var u={};s=a(e,t,function(n){return function(a,s){if("function"==typeof s[0]){var c=Zone.current,u={handleId:null,isPeriodic:"Interval"===r,delay:"Timeout"===r||"Interval"===r?s[1]||0:null,args:s},l=c.scheduleMacroTask(t,s[0],u,o,i);if(!l)return l;var p=l.data.handleId;return p&&p.ref&&p.unref&&"function"==typeof p.ref&&"function"==typeof p.unref&&(l.ref=p.ref.bind(p),l.unref=p.unref.bind(p)),l}return n.apply(e,s)}}),c=a(e,n,function(t){return function(n,r){var o="number"==typeof r[0]?u[r[0]]:r[0];o&&"string"==typeof o.type?"notScheduled"!==o.state&&(o.cancelFn&&o.data.isPeriodic||0===o.runCount)&&o.zone.cancelTask(o):t.apply(e,r)}})}function f(){Object.defineProperty=function(e,t,n){if(d(e,t))throw new TypeError("Cannot assign to read only property '"+t+"' of "+e);var r=n.configurable;return"prototype"!==t&&(n=v(e,t,n)),g(e,t,n,r)},Object.defineProperties=function(e,t){return Object.keys(t).forEach(function(n){Object.defineProperty(e,n,t[n])}),e},Object.create=function(e,t){return"object"!=typeof t||Object.isFrozen(t)||Object.keys(t).forEach(function(n){t[n]=v(e,n,t[n])}),X(e,t)},Object.getOwnPropertyDescriptor=function(e,t){var n=A(e,t);return d(e,t)&&(n.configurable=!1),n}}function h(e,t,n){var r=n.configurable;return n=v(e,t,n),g(e,t,n,r)}function d(e,t){return e&&e[W]&&e[W][t]}function v(e,t,n){return n.configurable=!0,n.configurable||(e[W]||N(e,W,{writable:!0,value:{}}),e[W][t]=!0),n}function g(e,t,n,r){try{return N(e,t,n)}catch(o){if(!n.configurable)throw o;"undefined"==typeof r?delete n.configurable:n.configurable=r;try{return N(e,t,n)}catch(o){var a=null;try{a=JSON.stringify(n)}catch(o){a=a.toString()}console.log("Attempting to configure '"+t+"' with descriptor '"+a+"' on object '"+e+"' and got error, giving up: "+o)}}}function y(e,t){var n=t.WebSocket;t.EventTarget||u(e,t,[n.prototype]),t.WebSocket=function(e,t){var o,a,i=arguments.length>1?new n(e,t):new n(e),s=Object.getOwnPropertyDescriptor(i,"onmessage");return s&&s.configurable===!1?(o=Object.create(i),a=i,["addEventListener","removeEventListener","send","close"].forEach(function(e){o[e]=function(){return i[e].apply(i,arguments)}})):o=i,r(o,["close","error","message","open"],a),o};for(var o in n)t.WebSocket[o]=n[o]}function k(e,t){if(!Z||O){var n="undefined"!=typeof WebSocket;if(m()){if(S){r(window,se,Object.getPrototypeOf(window)),r(Document.prototype,se),"undefined"!=typeof window.SVGElement&&r(window.SVGElement.prototype,se),r(Element.prototype,se),r(HTMLElement.prototype,se),r(HTMLMediaElement.prototype,J),r(HTMLFrameSetElement.prototype,V.concat(ne)),r(HTMLBodyElement.prototype,V.concat(ne)),r(HTMLFrameElement.prototype,te),r(HTMLIFrameElement.prototype,te);var a=window.HTMLMarqueeElement;a&&r(a.prototype,re)}r(XMLHttpRequest.prototype,oe);var i=t.XMLHttpRequestEventTarget;i&&r(i&&i.prototype,oe),"undefined"!=typeof IDBIndex&&(r(IDBIndex.prototype,ae),r(IDBRequest.prototype,ae),r(IDBOpenDBRequest.prototype,ae),r(IDBDatabase.prototype,ae),r(IDBTransaction.prototype,ae),r(IDBCursor.prototype,ae)),n&&r(WebSocket.prototype,ie)}else _(),o("XMLHttpRequest"),n&&y(e,t)}}function m(){if((S||O)&&!Object.getOwnPropertyDescriptor(HTMLElement.prototype,"onclick")&&"undefined"!=typeof Element){var e=Object.getOwnPropertyDescriptor(Element.prototype,"onclick");if(e&&!e.configurable)return!1}var t=Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype,"onreadystatechange");if(t){Object.defineProperty(XMLHttpRequest.prototype,"onreadystatechange",{enumerable:!0,configurable:!0,get:function(){return!0}});var n=new XMLHttpRequest,r=!!n.onreadystatechange;return Object.defineProperty(XMLHttpRequest.prototype,"onreadystatechange",t||{}),r}Object.defineProperty(XMLHttpRequest.prototype,"onreadystatechange",{enumerable:!0,configurable:!0,get:function(){return this[w("fakeonreadystatechange")]},set:function(e){this[w("fakeonreadystatechange")]=e}});var n=new XMLHttpRequest,o=function(){};n.onreadystatechange=o;var r=n[w("fakeonreadystatechange")]===o;return n.onreadystatechange=null,r}function _(){for(var e=function(e){var t=se[e],n="on"+t;self.addEventListener(t,function(e){var t,r,o=e.target;for(r=o?o.constructor.name+"."+n:"unknown."+n;o;)o[n]&&!o[n][ce]&&(t=Zone.current.wrap(o[n],r),t[ce]=o[n],o[n]=t),o=o.parentElement},!0)},t=0;t<se.length;t++)e(t)}function b(e,t){var n="Anchor,Area,Audio,BR,Base,BaseFont,Body,Button,Canvas,Content,DList,Directory,Div,Embed,FieldSet,Font,Form,Frame,FrameSet,HR,Head,Heading,Html,IFrame,Image,Input,Keygen,LI,Label,Legend,Link,Map,Marquee,Media,Menu,Meta,Meter,Mod,OList,Object,OptGroup,Option,Output,Paragraph,Pre,Progress,Quote,Script,Select,Source,Span,Style,TableCaption,TableCell,TableCol,Table,TableRow,TableSection,TextArea,Title,Track,UList,Unknown,Video",r="ApplicationCache,EventSource,FileReader,InputMethodContext,MediaController,MessagePort,Node,Performance,SVGElementInstance,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebKitNamedFlow,Window,Worker,WorkerGlobalScope,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload,IDBRequest,IDBOpenDBRequest,IDBDatabase,IDBTransaction,IDBCursor,DBIndex,WebSocket".split(","),o="EventTarget",a=[],i=e.wtf,s=n.split(",");i?a=s.map(function(e){return"HTML"+e+"Element"}).concat(r):e[o]?a.push(o):a=r;for(var l=e.__Zone_disable_IE_check||!1,p=e.__Zone_enable_cross_context_check||!1,f=c(),h=".addEventListener:",d="[object FunctionWrapper]",v="function __BROWSERTOOLS_CONSOLE_SAFEFUNC() { [native code] }",g=0;g<se.length;g++){var y=se[g],k=y+L,m=y+C,_=q+k,b=q+m;I[y]={},I[y][L]=_,I[y][C]=b}for(var g=0;g<n.length;g++)for(var T=s[g],w=H[T]={},E=0;E<se.length;E++){var y=se[E];w[y]=T+h+y}for(var D=function(e,t,n,r){if(!l&&f)if(p)try{var o=t.toString();if(o===d||o==v)return e.apply(n,r),!1}catch(a){return e.apply(n,r),!1}else{var o=t.toString();if(o===d||o==v)return e.apply(n,r),!1}else if(p)try{t.toString()}catch(a){return e.apply(n,r),!1}return!0},Z=[],g=0;g<a.length;g++){var S=e[a[g]];Z.push(S&&S.prototype)}return u(e,Z,{validateHandler:D}),t.patchEventTarget=u,!0}function T(e){if((S||O)&&"registerElement"in e.document){var t=document.registerElement,n=["createdCallback","attachedCallback","detachedCallback","attributeChangedCallback"];document.registerElement=function(e,r){return r&&r.prototype&&n.forEach(function(e){var t="Document.registerElement::"+e;if(r.prototype.hasOwnProperty(e)){var n=Object.getOwnPropertyDescriptor(r.prototype,e);n&&n.value?(n.value=Zone.current.wrap(n.value,t),h(r.prototype,e,n)):r.prototype[e]=Zone.current.wrap(r.prototype[e],t)}else r.prototype[e]&&(r.prototype[e]=Zone.current.wrap(r.prototype[e],t))}),t.apply(document,[e,r])},s(document.registerElement,t)}}(function(e){function t(e){s&&s.mark&&s.mark(e)}function n(e,t){s&&s.measure&&s.measure(e,t)}function r(t){0===j&&0===v.length&&(e[h]?e[h].resolve(0)[d](o):e[f](o,0)),t&&v.push(t)}function o(){if(!g){for(g=!0;v.length;){var e=v;v=[];for(var t=0;t<e.length;t++){var n=e[t];try{n.zone.runTask(n,null,null)}catch(r){O.onUnhandledError(r)}}}!c[i("ignoreConsoleErrorUncaughtError")];O.microtaskDrainDone(),g=!1}}function a(){}function i(e){return"__zone_symbol__"+e}var s=e.performance;if(t("Zone"),e.Zone)throw new Error("Zone already loaded.");var c=function(){function r(e,t){this._properties=null,this._parent=e,this._name=t?t.name||"unnamed":"<root>",this._properties=t&&t.properties||{},this._zoneDelegate=new l(this,this._parent&&this._parent._zoneDelegate,t)}return r.assertZonePatched=function(){if(e.Promise!==S.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")},Object.defineProperty(r,"root",{get:function(){for(var e=r.current;e.parent;)e=e.parent;return e},enumerable:!0,configurable:!0}),Object.defineProperty(r,"current",{get:function(){return z.zone},enumerable:!0,configurable:!0}),Object.defineProperty(r,"currentTask",{get:function(){return P},enumerable:!0,configurable:!0}),r.__load_patch=function(o,a){if(S.hasOwnProperty(o))throw Error("Already loaded patch: "+o);if(!e["__Zone_disable_"+o]){var i="Zone:"+o;t(i),S[o]=a(e,r,O),n(i,i)}},Object.defineProperty(r.prototype,"parent",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"name",{get:function(){return this._name},enumerable:!0,configurable:!0}),r.prototype.get=function(e){var t=this.getZoneWith(e);if(t)return t._properties[e]},r.prototype.getZoneWith=function(e){for(var t=this;t;){if(t._properties.hasOwnProperty(e))return t;t=t._parent}return null},r.prototype.fork=function(e){if(!e)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,e)},r.prototype.wrap=function(e,t){if("function"!=typeof e)throw new Error("Expecting function got: "+e);var n=this._zoneDelegate.intercept(this,e,t),r=this;return function(){return r.runGuarded(n,this,arguments,t)}},r.prototype.run=function(e,t,n,r){void 0===t&&(t=void 0),void 0===n&&(n=null),void 0===r&&(r=null),z={parent:z,zone:this};try{return this._zoneDelegate.invoke(this,e,t,n,r)}finally{z=z.parent}},r.prototype.runGuarded=function(e,t,n,r){void 0===t&&(t=null),void 0===n&&(n=null),void 0===r&&(r=null),z={parent:z,zone:this};try{try{return this._zoneDelegate.invoke(this,e,t,n,r)}catch(o){if(this._zoneDelegate.handleError(this,o))throw o}}finally{z=z.parent}},r.prototype.runTask=function(e,t,n){if(e.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(e.zone||y).name+"; Execution: "+this.name+")");var r=e.state===k;if(!r||e.type!==Z){var o=e.state!=b;o&&e._transitionTo(b,_),e.runCount++;var a=P;P=e,z={parent:z,zone:this};try{e.type==D&&e.data&&!e.data.isPeriodic&&(e.cancelFn=null);try{return this._zoneDelegate.invokeTask(this,e,t,n)}catch(i){if(this._zoneDelegate.handleError(this,i))throw i}}finally{e.state!==k&&e.state!==w&&(e.type==Z||e.data&&e.data.isPeriodic?o&&e._transitionTo(_,b):(e.runCount=0,this._updateTaskCount(e,-1),o&&e._transitionTo(k,b,k))),z=z.parent,P=a}}},r.prototype.scheduleTask=function(e){if(e.zone&&e.zone!==this)for(var t=this;t;){if(t===e.zone)throw Error("can not reschedule task to "+this.name+" which is descendants of the original zone "+e.zone.name);t=t.parent}e._transitionTo(m,k);var n=[];e._zoneDelegates=n,e._zone=this;try{e=this._zoneDelegate.scheduleTask(this,e)}catch(r){throw e._transitionTo(w,m,k),this._zoneDelegate.handleError(this,r),r}return e._zoneDelegates===n&&this._updateTaskCount(e,1),e.state==m&&e._transitionTo(_,m),e},r.prototype.scheduleMicroTask=function(e,t,n,r){return this.scheduleTask(new p(E,e,t,n,r,null))},r.prototype.scheduleMacroTask=function(e,t,n,r,o){return this.scheduleTask(new p(D,e,t,n,r,o))},r.prototype.scheduleEventTask=function(e,t,n,r,o){return this.scheduleTask(new p(Z,e,t,n,r,o))},r.prototype.cancelTask=function(e){if(e.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(e.zone||y).name+"; Execution: "+this.name+")");e._transitionTo(T,_,b);try{this._zoneDelegate.cancelTask(this,e)}catch(t){throw e._transitionTo(w,T),this._zoneDelegate.handleError(this,t),t}return this._updateTaskCount(e,-1),e._transitionTo(k,T),e.runCount=0,e},r.prototype._updateTaskCount=function(e,t){var n=e._zoneDelegates;t==-1&&(e._zoneDelegates=null);for(var r=0;r<n.length;r++)n[r]._updateTaskCount(e.type,t)},r}();c.__symbol__=i;var u={name:"",onHasTask:function(e,t,n,r){return e.hasTask(n,r)},onScheduleTask:function(e,t,n,r){return e.scheduleTask(n,r)},onInvokeTask:function(e,t,n,r,o,a){return e.invokeTask(n,r,o,a)},onCancelTask:function(e,t,n,r){return e.cancelTask(n,r)}},l=function(){function e(e,t,n){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=e,this._parentDelegate=t,this._forkZS=n&&(n&&n.onFork?n:t._forkZS),this._forkDlgt=n&&(n.onFork?t:t._forkDlgt),this._forkCurrZone=n&&(n.onFork?this.zone:t.zone),this._interceptZS=n&&(n.onIntercept?n:t._interceptZS),this._interceptDlgt=n&&(n.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=n&&(n.onIntercept?this.zone:t.zone),this._invokeZS=n&&(n.onInvoke?n:t._invokeZS),this._invokeDlgt=n&&(n.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=n&&(n.onInvoke?this.zone:t.zone),this._handleErrorZS=n&&(n.onHandleError?n:t._handleErrorZS),this._handleErrorDlgt=n&&(n.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=n&&(n.onHandleError?this.zone:t.zone),this._scheduleTaskZS=n&&(n.onScheduleTask?n:t._scheduleTaskZS),this._scheduleTaskDlgt=n&&(n.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=n&&(n.onScheduleTask?this.zone:t.zone),this._invokeTaskZS=n&&(n.onInvokeTask?n:t._invokeTaskZS),this._invokeTaskDlgt=n&&(n.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=n&&(n.onInvokeTask?this.zone:t.zone),this._cancelTaskZS=n&&(n.onCancelTask?n:t._cancelTaskZS),this._cancelTaskDlgt=n&&(n.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=n&&(n.onCancelTask?this.zone:t.zone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;var r=n&&n.onHasTask,o=t&&t._hasTaskZS;(r||o)&&(this._hasTaskZS=r?n:u,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=e,n.onScheduleTask||(this._scheduleTaskZS=u,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this.zone),n.onInvokeTask||(this._invokeTaskZS=u,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this.zone),n.onCancelTask||(this._cancelTaskZS=u,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this.zone))}return e.prototype.fork=function(e,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,e,t):new c(e,t)},e.prototype.intercept=function(e,t,n){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,e,t,n):t},e.prototype.invoke=function(e,t,n,r,o){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,e,t,n,r,o):t.apply(n,r)},e.prototype.handleError=function(e,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,e,t)},e.prototype.scheduleTask=function(e,t){var n=t;if(this._scheduleTaskZS)this._hasTaskZS&&n._zoneDelegates.push(this._hasTaskDlgtOwner),n=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,e,t),n||(n=t);else if(t.scheduleFn)t.scheduleFn(t);else{if(t.type!=E)throw new Error("Task is missing scheduleFn.");r(t)}return n},e.prototype.invokeTask=function(e,t,n,r){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,e,t,n,r):t.callback.apply(n,r)},e.prototype.cancelTask=function(e,t){var n;if(this._cancelTaskZS)n=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,e,t);else{if(!t.cancelFn)throw Error("Task is not cancelable");n=t.cancelFn(t)}return n},e.prototype.hasTask=function(e,t){try{return this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,e,t)}catch(n){this.handleError(e,n)}},e.prototype._updateTaskCount=function(e,t){var n=this._taskCounts,r=n[e],o=n[e]=r+t;if(o<0)throw new Error("More tasks executed then were scheduled.");if(0==r||0==o){var a={microTask:n.microTask>0,macroTask:n.macroTask>0,eventTask:n.eventTask>0,change:e};this.hasTask(this.zone,a)}},e}(),p=function(){function t(n,r,o,a,i,s){this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=n,this.source=r,this.data=a,this.scheduleFn=i,this.cancelFn=s,this.callback=o;var c=this;n===Z&&a&&a.isUsingGlobalCallback?this.invoke=t.invokeTask:this.invoke=function(){return t.invokeTask.apply(e,[c,this,arguments])}}return t.invokeTask=function(e,t,n){e||(e=this),j++;try{return e.runCount++,e.zone.runTask(e,t,n)}finally{1==j&&o(),j--}},Object.defineProperty(t.prototype,"zone",{get:function(){return this._zone},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"state",{get:function(){return this._state},enumerable:!0,configurable:!0}),t.prototype.cancelScheduleRequest=function(){this._transitionTo(k,m)},t.prototype._transitionTo=function(e,t,n){if(this._state!==t&&this._state!==n)throw new Error(this.type+" '"+this.source+"': can not transition to '"+e+"', expecting state '"+t+"'"+(n?" or '"+n+"'":"")+", was '"+this._state+"'.");this._state=e,e==k&&(this._zoneDelegates=null)},t.prototype.toString=function(){return this.data&&"undefined"!=typeof this.data.handleId?this.data.handleId:Object.prototype.toString.call(this)},t.prototype.toJSON=function(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,invoke:this.invoke,scheduleFn:this.scheduleFn,cancelFn:this.cancelFn,runCount:this.runCount,callback:this.callback}},t}(),f=i("setTimeout"),h=i("Promise"),d=i("then"),v=[],g=!1,y={name:"NO ZONE"},k="notScheduled",m="scheduling",_="scheduled",b="running",T="canceling",w="unknown",E="microTask",D="macroTask",Z="eventTask",S={},O={symbol:i,currentZoneFrame:function(){return z},onUnhandledError:a,microtaskDrainDone:a,scheduleMicroTask:r,showUncaughtError:function(){return!c[i("ignoreConsoleErrorUncaughtError")]},patchEventTarget:function(){return[]},patchOnProperties:a,patchMethod:function(){return a}},z={parent:null,zone:new c(null,null)},P=null,j=0;return n("Zone","Zone"),e.Zone=c})("undefined"!=typeof window&&window||"undefined"!=typeof self&&self||global);Zone.__load_patch("ZoneAwarePromise",function(e,t,n){function r(e){n.onUnhandledError(e);try{var r=t[h("unhandledPromiseRejectionHandler")];r&&"function"==typeof r&&r.apply(this,[e])}catch(o){}}function o(e){return e&&e.then}function a(e){return e}function i(e){return D.reject(e)}function s(e,t){return function(n){try{c(e,t,n)}catch(r){c(e,!1,r)}}}function c(e,r,o){var a=E();if(e===o)throw new TypeError("Promise resolved with itself");if(e[y]===_){var i=null;try{"object"!=typeof o&&"function"!=typeof o||(i=o&&o.then)}catch(p){return a(function(){c(e,!1,p)})(),e}if(r!==T&&o instanceof D&&o.hasOwnProperty(y)&&o.hasOwnProperty(k)&&o[y]!==_)u(o),c(e,o[y],o[k]);else if(r!==T&&"function"==typeof i)try{i.apply(o,[a(s(e,r)),a(s(e,!1))])}catch(p){a(function(){c(e,!1,p)})()}else{e[y]=r;var f=e[k];e[k]=o,r===T&&o instanceof Error&&(o[h("currentTask")]=t.currentTask);for(var v=0;v<f.length;)l(e,f[v++],f[v++],f[v++],f[v++]);if(0==f.length&&r==T){e[y]=w;try{throw new Error("Uncaught (in promise): "+o+(o&&o.stack?"\n"+o.stack:""))}catch(p){var g=p;g.rejection=o,g.promise=e,g.zone=t.current,g.task=t.currentTask,d.push(g),n.scheduleMicroTask()}}}}return e}function u(e){if(e[y]===w){try{var n=t[h("rejectionHandledHandler")];n&&"function"==typeof n&&n.apply(this,[{rejection:e[k],promise:e}])}catch(r){}e[y]=T;for(var o=0;o<d.length;o++)e===d[o].promise&&d.splice(o,1)}}function l(e,t,n,r,o){u(e);var s=e[y]?"function"==typeof r?r:a:"function"==typeof o?o:i;t.scheduleMicroTask(m,function(){try{c(n,!0,t.run(s,void 0,[e[k]]))}catch(r){c(n,!1,r)}})}function p(e){var t=e.prototype,n=t.then;t[g]=n,e.prototype.then=function(e,t){var r=this,o=new D(function(e,t){n.call(r,e,t)});return o.then(e,t)},e[S]=!0}function f(e){return function(){var t=e.apply(this,arguments);if(t instanceof D)return t;var n=t.constructor;return n[S]||p(n),t}}var h=n.symbol,d=[],v=h("Promise"),g=h("then");n.onUnhandledError=function(e){if(n.showUncaughtError()){var t=e&&e.rejection;t?console.error("Unhandled Promise rejection:",t instanceof Error?t.message:t,"; Zone:",e.zone.name,"; Task:",e.task&&e.task.source,"; Value:",t,t instanceof Error?t.stack:void 0):console.error(e)}},n.microtaskDrainDone=function(){for(;d.length;)for(var e=function(){var e=d.shift();try{e.zone.runGuarded(function(){throw e})}catch(t){r(t)}};d.length;)e()};var y=h("state"),k=h("value"),m="Promise.then",_=null,b=!0,T=!1,w=0,E=function(){var e=!1;return function(t){return function(){e||(e=!0,t.apply(null,arguments))}}},D=function(){function e(t){var n=this;if(!(n instanceof e))throw new Error("Must be an instanceof Promise.");n[y]=_,n[k]=[];try{t&&t(s(n,b),s(n,T))}catch(r){c(n,!1,r)}}return e.toString=function(){return"function ZoneAwarePromise() { [native code] }"},e.resolve=function(e){return c(new this(null),b,e)},e.reject=function(e){return c(new this(null),T,e)},e.race=function(e){function t(e){i&&(i=r(e))}function n(e){i&&(i=a(e))}for(var r,a,i=new this(function(e,t){n=[e,t],r=n[0],a=n[1];var n}),s=0,c=e;s<c.length;s++){var u=c[s];o(u)||(u=this.resolve(u)),u.then(t,n)}return i},e.all=function(e){for(var t,n,r=new this(function(e,r){t=e,n=r}),a=0,i=[],s=0,c=e;s<c.length;s++){var u=c[s];o(u)||(u=this.resolve(u)),u.then(function(e){return function(n){i[e]=n,a--,a||t(i)}}(a),n),a++}return a||t(i),r},e.prototype.then=function(e,n){var r=new this.constructor(null),o=t.current;return this[y]==_?this[k].push(o,r,e,n):l(this,o,r,e,n),r},e.prototype["catch"]=function(e){return this.then(null,e)},e}();D.resolve=D.resolve,D.reject=D.reject,D.race=D.race,D.all=D.all;var Z=e[v]=e.Promise;e.Promise=D;var S=h("thenPatched");if(Z){p(Z);var O=e.fetch;"function"==typeof O&&(e.fetch=f(O))}return Promise[t.__symbol__("uncaughtPromiseErrors")]=d,D});var w=Zone.__symbol__,E="object"==typeof window&&window||"object"==typeof self&&self||global,D="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,Z=!("nw"in E)&&"undefined"!=typeof E.process&&"[object process]"==={}.toString.call(E.process),S=!Z&&!D&&!("undefined"==typeof window||!window.HTMLElement),O="undefined"!=typeof E.process&&"[object process]"==={}.toString.call(E.process)&&!D&&!("undefined"==typeof window||!window.HTMLElement),z=w("originalInstance"),P=!1,j=!1;Zone.__load_patch("toString",function(e,t,n){var r=t.__zone_symbol__originalToString=Function.prototype.toString;Function.prototype.toString=function(){if("function"==typeof this){var t=this[w("OriginalDelegate")];if(t)return"function"==typeof t?r.apply(this[w("OriginalDelegate")],arguments):Object.prototype.toString.call(t);if(this===Promise){var n=e[w("Promise")];if(n)return r.apply(n,arguments)}if(this===Error){var o=e[w("Error")];if(o)return r.apply(o,arguments)}}return r.apply(this,arguments)};var o=Object.prototype.toString;Object.prototype.toString=function(){return this instanceof Promise?"[object Promise]":o.apply(this,arguments)}});var C="true",L="false",M={isUsingGlobalCallback:!0},I={},H={},F="name",R="function",x="object",q="__zone_symbol__",B=/^__zone_symbol__(\w+)(true|false)$/,N=Object[w("defineProperty")]=Object.defineProperty,A=Object[w("getOwnPropertyDescriptor")]=Object.getOwnPropertyDescriptor,X=Object.create,W=w("unconfigurables"),U=["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","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","transitioncancel","transitionend","waiting","wheel"],G=["afterscriptexecute","beforescriptexecute","DOMContentLoaded","fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange","fullscreenerror","mozfullscreenerror","webkitfullscreenerror","msfullscreenerror","readystatechange"],V=["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"],K=["beforecopy","beforecut","beforepaste","copy","cut","paste","dragstart","loadend","animationstart","search","transitionrun","transitionstart","webkitanimationend","webkitanimationiteration","webkitanimationstart","webkittransitionend"],J=["encrypted","waitingforkey","msneedkey","mozinterruptbegin","mozinterruptend"],Q=["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"],$=["webglcontextrestored","webglcontextlost","webglcontextcreationerror"],Y=["autocomplete","autocompleteerror"],ee=["toggle"],te=["load"],ne=["blur","error","focus","load","resize","scroll"],re=["bounce","finish","start"],oe=["loadstart","progress","abort","error","load","progress","timeout","loadend","readystatechange"],ae=["upgradeneeded","complete","abort","success","error","blocked","versionchange","close"],ie=["close","error","open","message"],se=U.concat($,Y,ee,G,V,K,Q),ce=w("unbound"); | ||
Zone.__load_patch("timers",function(e,t,n){var r="set",o="clear";p(e,r,o,"Timeout"),p(e,r,o,"Interval"),p(e,r,o,"Immediate"),p(e,"request","cancel","AnimationFrame"),p(e,"mozRequest","mozCancel","AnimationFrame"),p(e,"webkitRequest","webkitCancel","AnimationFrame")}),Zone.__load_patch("blocking",function(e,t,n){for(var r=["alert","prompt","confirm"],o=0;o<r.length;o++){var i=r[o];a(e,i,function(n,r,o){return function(r,a){return t.current.run(n,e,a,o)}})}}),Zone.__load_patch("EventTarget",function(e,t,n){b(e,n);var r=e.XMLHttpRequestEventTarget;r&&r.prototype&&n.patchEventTarget(e,[r.prototype]),o("MutationObserver"),o("WebKitMutationObserver"),o("FileReader")}),Zone.__load_patch("on_property",function(e,t,n){k(n,e),f(),T(e)}),Zone.__load_patch("canvas",function(e,t,n){var r=e.HTMLCanvasElement;"undefined"!=typeof r&&r.prototype&&r.prototype.toBlob&&i(r.prototype,"toBlob",function(e,t){return{name:"HTMLCanvasElement.toBlob",target:e,callbackIndex:0,args:t}})}),Zone.__load_patch("XHR",function(e,t,n){function r(e){function n(e){var t=e[o];return t}function r(e){XMLHttpRequest[c]=!1;var t=e.data,n=t.target[s],r=t.target[w("addEventListener")],a=t.target[w("removeEventListener")];n&&a.apply(t.target,["readystatechange",n]);var i=t.target[s]=function(){t.target.readyState===t.target.DONE&&!t.aborted&&XMLHttpRequest[c]&&"scheduled"===e.state&&e.invoke()};r.apply(t.target,["readystatechange",i]);var u=t.target[o];return u||(t.target[o]=e),f.apply(t.target,t.args),XMLHttpRequest[c]=!0,e}function u(){}function l(e){var t=e.data;return t.aborted=!0,h.apply(t.target,t.args)}var p=a(e.XMLHttpRequest.prototype,"open",function(){return function(e,t){return e[i]=0==t[2],p.apply(e,t)}}),f=a(e.XMLHttpRequest.prototype,"send",function(){return function(e,n){var o=t.current;if(e[i])return f.apply(e,n);var a={target:e,isPeriodic:!1,delay:null,args:n,aborted:!1};return o.scheduleMacroTask("XMLHttpRequest.send",u,a,r,l)}}),h=a(e.XMLHttpRequest.prototype,"abort",function(e){return function(e,t){var r=n(e);if(r&&"string"==typeof r.type){if(null==r.cancelFn||r.data&&r.data.aborted)return;r.zone.cancelTask(r)}}})}r(e);var o=w("xhrTask"),i=w("xhrSync"),s=w("xhrListener"),c=w("xhrScheduled")}),Zone.__load_patch("geolocation",function(e,n,r){e.navigator&&e.navigator.geolocation&&t(e.navigator.geolocation,["getCurrentPosition","watchPosition"])}),Zone.__load_patch("PromiseRejectionEvent",function(e,t,n){function r(t){return function(n){var r=l(e,t);r.forEach(function(r){var o=e.PromiseRejectionEvent;if(o){var a=new o(t,{promise:n.promise,reason:n.rejection});r.invoke(a)}})}}e.PromiseRejectionEvent&&(t[w("unhandledPromiseRejectionHandler")]=r("unhandledrejection"),t[w("rejectionHandledHandler")]=r("rejectionhandled"))}),Zone.__load_patch("util",function(e,t,n){n.patchOnProperties=r,n.patchMethod=a})}); |
@@ -46,4 +46,3 @@ /** | ||
if (XMLHttpRequestEventTarget && XMLHttpRequestEventTarget.prototype) { | ||
// TODO: @JiaLiPassion, add this back later. | ||
api.patchEventTargetMethods(XMLHttpRequestEventTarget.prototype); | ||
api.patchEventTarget(global, [XMLHttpRequestEventTarget.prototype]); | ||
} | ||
@@ -56,3 +55,3 @@ patchClass('MutationObserver'); | ||
Zone.__load_patch('on_property', (global: any, Zone: ZoneType, api: _ZonePrivate) => { | ||
propertyDescriptorPatch(global); | ||
propertyDescriptorPatch(api, global); | ||
propertyPatch(); | ||
@@ -59,0 +58,0 @@ registerElementPatch(global); |
@@ -9,3 +9,3 @@ /** | ||
import {FALSE_STR, globalSources, patchEventTargetMethods, TRUE_STR, ZONE_SYMBOL_PREFIX, zoneSymbolEventNames} from '../common/events'; | ||
import {FALSE_STR, globalSources, patchEventTarget, TRUE_STR, ZONE_SYMBOL_PREFIX, zoneSymbolEventNames} from '../common/events'; | ||
import {attachOriginToPatched, isIEOrEdge, zoneSymbol} from '../common/utils'; | ||
@@ -100,9 +100,11 @@ | ||
const apiTypes: any[] = []; | ||
for (let i = 0; i < apis.length; i++) { | ||
const type = _global[apis[i]]; | ||
patchEventTargetMethods(type && type.prototype, {validateHandler: checkIEAndCrossContext}); | ||
apiTypes.push(type && type.prototype); | ||
} | ||
patchEventTarget(_global, apiTypes, {validateHandler: checkIEAndCrossContext}); | ||
api.patchEventTarget = patchEventTarget; | ||
api.patchEventTargetMethods = patchEventTargetMethods; | ||
return true; | ||
} |
@@ -229,3 +229,3 @@ /** | ||
export function propertyDescriptorPatch(_global: any) { | ||
export function propertyDescriptorPatch(api: _ZonePrivate, _global: any) { | ||
if (isNode && !isMix) { | ||
@@ -283,3 +283,3 @@ return; | ||
if (supportsWebSocket) { | ||
webSocketPatch.apply(_global); | ||
webSocketPatch.apply(api, _global); | ||
} | ||
@@ -286,0 +286,0 @@ } |
@@ -17,3 +17,3 @@ /** | ||
(windowPrototype as any)[Zone.__symbol__('removeEventListener')] = null; | ||
api.patchEventTargetMethods(windowPrototype); | ||
api.patchEventTarget(global, [windowPrototype]); | ||
} | ||
@@ -23,4 +23,4 @@ if (Node.prototype.hasOwnProperty('addEventListener')) { | ||
(Node.prototype as any)[Zone.__symbol__('removeEventListener')] = null; | ||
api.patchEventTargetMethods(Node.prototype); | ||
api.patchEventTarget(global, [Node.prototype]); | ||
} | ||
}); |
@@ -12,5 +12,5 @@ /** | ||
} | ||
api.patchEventTargetMethods( | ||
global['MediaQueryList'].prototype, | ||
api.patchEventTarget( | ||
global, [global['MediaQueryList'].prototype], | ||
{addEventListenerFnName: 'addListener', removeEventListenerFnName: 'removeListener'}); | ||
}); |
@@ -9,7 +9,7 @@ /** | ||
import {patchEventTargetMethods} from '../common/events'; | ||
import {patchEventTarget} from '../common/events'; | ||
import {patchOnProperties} from '../common/utils'; | ||
// we have to patch the instance since the proto is non-configurable | ||
export function apply(_global: any) { | ||
export function apply(api: _ZonePrivate, _global: any) { | ||
const WS = (<any>_global).WebSocket; | ||
@@ -19,3 +19,3 @@ // On Safari window.EventTarget doesn't exist so need to patch WS add/removeEventListener | ||
if (!(<any>_global).EventTarget) { | ||
patchEventTargetMethods(WS.prototype); | ||
patchEventTarget(api, _global, [WS.prototype]); | ||
} | ||
@@ -22,0 +22,0 @@ (<any>_global).WebSocket = function(a: any, b: any) { |
@@ -12,4 +12,9 @@ /** | ||
export const FALSE_STR = 'false'; | ||
export interface EventTaskData extends TaskData { readonly isUsingGlobalCallback?: boolean; } | ||
// an identifier to tell ZoneTask do not create a new invoke closure | ||
export const OPTIMIZED_ZONE_EVENT_TASK = zoneSymbol('optimizedZoneEventTask'); | ||
export const OPTIMIZED_ZONE_EVENT_TASK_DATA: EventTaskData = { | ||
isUsingGlobalCallback: true | ||
}; | ||
@@ -41,42 +46,4 @@ export const zoneSymbolEventNames: any = {}; | ||
const invokeTask = function(task: any, target: any, event: Event) { | ||
const delegate = task.callback; | ||
if (typeof delegate === OBJECT_TYPE && delegate.handleEvent) { | ||
// create the bind version of handleEvnet when invoke | ||
task.callback = (event: Event) => delegate.handleEvent(event); | ||
task.originalDelegate = delegate; | ||
} | ||
// invoke static task.invoke | ||
task.invoke(task, target, [event]); | ||
}; | ||
// global shared zoneAwareCallback to handle all event callback with capture = false | ||
const globalZoneAwareCallback = function(event: Event) { | ||
const target = this || _global; | ||
const tasks = target[zoneSymbolEventNames[event.type][FALSE_STR]]; | ||
if (tasks) { | ||
// invoke all tasks which attached to current target with given event.type and capture = false | ||
for (let i = 0; i < tasks.length; i++) { | ||
invokeTask(tasks[i], target, event); | ||
} | ||
} | ||
}; | ||
// global shared zoneAwareCallback to handle all event callback with capture = true | ||
const globalZoneAwareCaptureCallback = function(event: Event) { | ||
const target = this || _global; | ||
const tasks = target[zoneSymbolEventNames[event.type][TRUE_STR]]; | ||
if (tasks) { | ||
for (let i = 0; i < tasks.length; i++) { | ||
invokeTask(tasks[i], target, event); | ||
} | ||
} | ||
}; | ||
export function patchEventTargetMethods(obj: any, patchOptions?: PatchEventTargetOptions) { | ||
if (!obj) { | ||
return false; | ||
} | ||
export function patchEventTarget( | ||
_global: any, apis: any[], patchOptions?: PatchEventTargetOptions) { | ||
const ADD_EVENT_LISTENER = | ||
@@ -99,136 +66,349 @@ (patchOptions && patchOptions.addEventListenerFnName) || 'addEventListener'; | ||
let useGlobalCallback = true; | ||
if (patchOptions && patchOptions.useGlobalCallback !== undefined) { | ||
useGlobalCallback = patchOptions.useGlobalCallback; | ||
} | ||
const validateHandler = patchOptions && patchOptions.validateHandler; | ||
const invokeTask = function(task: any, target: any, event: Event) { | ||
// for better performance, check isRemoved which is set | ||
// by removeEventListener | ||
if (task.isRemoved) { | ||
return; | ||
} | ||
const delegate = task.callback; | ||
if (typeof delegate === OBJECT_TYPE && delegate.handleEvent) { | ||
// create the bind version of handleEvent when invoke | ||
task.callback = (event: Event) => delegate.handleEvent(event); | ||
task.originalDelegate = delegate; | ||
} | ||
// invoke static task.invoke | ||
task.invoke(task, target, [event]); | ||
const options = task.options; | ||
if (options && typeof options === 'object' && options.once) { | ||
// if options.once is true, after invoke once remove listener here | ||
// only browser need to do this, nodejs eventEmitter will cal removeListener | ||
// inside EventEmitter.once | ||
const delegate = task.originalDelegate ? task.originalDelegate : task.callback; | ||
target[REMOVE_EVENT_LISTENER].apply(target, [event.type, delegate, options]); | ||
} | ||
}; | ||
let checkDuplicate = true; | ||
if (patchOptions && patchOptions.checkDuplicate !== undefined) { | ||
checkDuplicate = patchOptions.checkDuplicate; | ||
} | ||
// global shared zoneAwareCallback to handle all event callback with capture = false | ||
const globalZoneAwareCallback = function(event: Event) { | ||
const target = this || _global; | ||
let returnTarget = false; | ||
if (patchOptions && patchOptions.returnTarget !== undefined) { | ||
returnTarget = patchOptions.returnTarget; | ||
} | ||
const tasks = target[zoneSymbolEventNames[event.type][FALSE_STR]]; | ||
if (tasks) { | ||
// invoke all tasks which attached to current target with given event.type and capture = false | ||
// for performance concern, if task.length === 1, just invoke | ||
if (tasks.length === 1) { | ||
invokeTask(tasks[0], target, event); | ||
} else { | ||
// https://github.com/angular/zone.js/issues/836 | ||
// copy the tasks array before invoke, to avoid | ||
// the callback will remove itself or other listener | ||
const copyTasks = tasks.slice(); | ||
for (let i = 0; i < copyTasks.length; i++) { | ||
invokeTask(copyTasks[i], target, event); | ||
} | ||
} | ||
} | ||
}; | ||
let proto = obj; | ||
while (proto && !proto.hasOwnProperty(ADD_EVENT_LISTENER)) { | ||
proto = Object.getPrototypeOf(proto); | ||
} | ||
if (!proto && obj[ADD_EVENT_LISTENER]) { | ||
// somehow we did not find it, but we can see it. This happens on IE for Window properties. | ||
proto = obj; | ||
} | ||
// global shared zoneAwareCallback to handle all event callback with capture = true | ||
const globalZoneAwareCaptureCallback = function(event: Event) { | ||
const target = this || _global; | ||
if (!proto) { | ||
return false; | ||
} | ||
if (proto[zoneSymbolAddEventListener]) { | ||
return false; | ||
} | ||
const tasks = target[zoneSymbolEventNames[event.type][TRUE_STR]]; | ||
if (tasks) { | ||
// invoke all tasks which attached to current target with given event.type and capture = false | ||
// for performance concern, if task.length === 1, just invoke | ||
if (tasks.length === 1) { | ||
invokeTask(tasks[0], target, event); | ||
} else { | ||
// https://github.com/angular/zone.js/issues/836 | ||
// copy the tasks array before invoke, to avoid | ||
// the callback will remove itself or other listener | ||
const copyTasks = tasks.slice(); | ||
for (let i = 0; i < copyTasks.length; i++) { | ||
invokeTask(copyTasks[i], target, event); | ||
} | ||
} | ||
} | ||
}; | ||
// a shared global taskData to pass data for scheduleEventTask | ||
// so we do not need to create a new object just for pass some data | ||
const taskData: any = {}; | ||
function patchEventTargetMethods(obj: any, patchOptions?: PatchEventTargetOptions) { | ||
if (!obj) { | ||
return false; | ||
} | ||
const nativeAddEventListener = proto[zoneSymbolAddEventListener] = proto[ADD_EVENT_LISTENER]; | ||
const nativeRemoveEventListener = proto[zoneSymbol(REMOVE_EVENT_LISTENER)] = | ||
proto[REMOVE_EVENT_LISTENER]; | ||
let useGlobalCallback = true; | ||
if (patchOptions && patchOptions.useGlobalCallback !== undefined) { | ||
useGlobalCallback = patchOptions.useGlobalCallback; | ||
} | ||
const validateHandler = patchOptions && patchOptions.validateHandler; | ||
const nativeListeners = proto[zoneSymbol(LISTENERS_EVENT_LISTENER)] = | ||
proto[LISTENERS_EVENT_LISTENER]; | ||
const nativeRemoveAllListeners = proto[zoneSymbol(REMOVE_ALL_LISTENERS_EVENT_LISTENER)] = | ||
proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER]; | ||
let checkDuplicate = true; | ||
if (patchOptions && patchOptions.checkDuplicate !== undefined) { | ||
checkDuplicate = patchOptions.checkDuplicate; | ||
} | ||
let nativePrependEventListener: any; | ||
if (patchOptions && patchOptions.prependEventListenerFnName) { | ||
nativePrependEventListener = proto[zoneSymbol(patchOptions.prependEventListenerFnName)] = | ||
proto[patchOptions.prependEventListenerFnName]; | ||
} | ||
let returnTarget = false; | ||
if (patchOptions && patchOptions.returnTarget !== undefined) { | ||
returnTarget = patchOptions.returnTarget; | ||
} | ||
const customScheduleGlobal = function(task: Task) { | ||
// if there is already a task for the eventName + capture, | ||
// just return, because we use the shared globalZoneAwareCallback here. | ||
if (taskData.isExisting) { | ||
return; | ||
let proto = obj; | ||
while (proto && !proto.hasOwnProperty(ADD_EVENT_LISTENER)) { | ||
proto = Object.getPrototypeOf(proto); | ||
} | ||
return nativeAddEventListener.apply(taskData.target, [ | ||
taskData.eventName, | ||
taskData.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, taskData.options | ||
]); | ||
}; | ||
if (!proto && obj[ADD_EVENT_LISTENER]) { | ||
// somehow we did not find it, but we can see it. This happens on IE for Window properties. | ||
proto = obj; | ||
} | ||
const customCancelGlobal = function(task: any) { | ||
// if all tasks for the eventName + capture have gone, | ||
// we will really remove the global event callback, | ||
// if not, return | ||
if (!task.remove) { | ||
return; | ||
if (!proto) { | ||
return false; | ||
} | ||
return nativeRemoveEventListener.apply(task.target, [ | ||
task.eventName, task.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, | ||
task.options | ||
]); | ||
}; | ||
if (proto[zoneSymbolAddEventListener]) { | ||
return false; | ||
} | ||
const customScheduleNonGlobal = function(task: Task) { | ||
return nativeAddEventListener.apply( | ||
taskData.target, [taskData.eventName, task.invoke, taskData.options]); | ||
}; | ||
// a shared global taskData to pass data for scheduleEventTask | ||
// so we do not need to create a new object just for pass some data | ||
const taskData: any = {}; | ||
const customSchedulePrepend = function(task: Task) { | ||
return nativePrependEventListener.apply( | ||
taskData.target, [taskData.eventName, task.invoke, taskData.options]); | ||
}; | ||
const nativeAddEventListener = proto[zoneSymbolAddEventListener] = proto[ADD_EVENT_LISTENER]; | ||
const nativeRemoveEventListener = proto[zoneSymbol(REMOVE_EVENT_LISTENER)] = | ||
proto[REMOVE_EVENT_LISTENER]; | ||
const customCancelNonGlobal = function(task: any) { | ||
return nativeRemoveEventListener.apply( | ||
task.target, [task.eventName, task.invoke, task.options]); | ||
}; | ||
const nativeListeners = proto[zoneSymbol(LISTENERS_EVENT_LISTENER)] = | ||
proto[LISTENERS_EVENT_LISTENER]; | ||
const nativeRemoveAllListeners = proto[zoneSymbol(REMOVE_ALL_LISTENERS_EVENT_LISTENER)] = | ||
proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER]; | ||
const customSchedule = useGlobalCallback ? customScheduleGlobal : customScheduleNonGlobal; | ||
const customCancel = useGlobalCallback ? customCancelGlobal : customCancelNonGlobal; | ||
const compareTaskCallbackVsDelegate = function(task: any, delegate: any) { | ||
const typeOfDelegate = typeof delegate; | ||
if ((typeOfDelegate === FUNCTION_TYPE && task.callback === delegate) || | ||
(typeOfDelegate === OBJECT_TYPE && task.originalDelegate === delegate)) { | ||
// same callback, same capture, same event name, just return | ||
return true; | ||
let nativePrependEventListener: any; | ||
if (patchOptions && patchOptions.prependEventListenerFnName) { | ||
nativePrependEventListener = proto[zoneSymbol(patchOptions.prependEventListenerFnName)] = | ||
proto[patchOptions.prependEventListenerFnName]; | ||
} | ||
return false; | ||
}; | ||
const compare = (patchOptions && patchOptions.compareTaskCallbackVsDelegate) ? | ||
patchOptions.compareTaskCallbackVsDelegate : | ||
compareTaskCallbackVsDelegate; | ||
const makeAddListener = function( | ||
nativeListener: any, addSource: string, customScheduleFn: any, customCancelFn: any, | ||
returnTarget = false, prepend = false) { | ||
return function() { | ||
const target = this || _global; | ||
const targetZone = Zone.current; | ||
let delegate = arguments[1]; | ||
if (!delegate) { | ||
return nativeListener.apply(this, arguments); | ||
const customScheduleGlobal = function(task: Task) { | ||
// if there is already a task for the eventName + capture, | ||
// just return, because we use the shared globalZoneAwareCallback here. | ||
if (taskData.isExisting) { | ||
return; | ||
} | ||
return nativeAddEventListener.apply(taskData.target, [ | ||
taskData.eventName, | ||
taskData.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, | ||
taskData.options | ||
]); | ||
}; | ||
// don't create the bind delegate function for handleEvent | ||
// case here to improve addEventListener performance | ||
// we will create the bind delegate when invoke | ||
let isHandleEvent = false; | ||
if (typeof delegate !== FUNCTION_TYPE) { | ||
if (!delegate.handleEvent) { | ||
return nativeListener.apply(this, arguments); | ||
const customCancelGlobal = function(task: any) { | ||
// if task is not marked as isRemoved, this call is directly | ||
// from Zone.prototype.cancelTask, we should remove the task | ||
// from tasksList of target first | ||
if (!task.isRemoved) { | ||
const symbolEventNames = zoneSymbolEventNames[task.eventName]; | ||
let symbolEventName; | ||
if (symbolEventNames) { | ||
symbolEventName = symbolEventNames[task.capture ? TRUE_STR : FALSE_STR]; | ||
} | ||
isHandleEvent = true; | ||
const existingTasks = symbolEventName && task.target[symbolEventName]; | ||
if (existingTasks) { | ||
for (let i = 0; i < existingTasks.length; i++) { | ||
const existingTask = existingTasks[i]; | ||
if (existingTask === task) { | ||
existingTasks.splice(i, 1); | ||
// set isRemoved to data for faster invokeTask check | ||
task.isRemoved = true; | ||
if (existingTasks.length === 0) { | ||
// all tasks for the eventName + capture have gone, | ||
// remove globalZoneAwareCallback and remove the task cache from target | ||
task.allRemoved = true; | ||
task.target[symbolEventName] = null; | ||
} | ||
break; | ||
} | ||
} | ||
} | ||
} | ||
if (validateHandler && !validateHandler(nativeListener, delegate, target, arguments)) { | ||
// if all tasks for the eventName + capture have gone, | ||
// we will really remove the global event callback, | ||
// if not, return | ||
if (!task.allRemoved) { | ||
return; | ||
} | ||
return nativeRemoveEventListener.apply(task.target, [ | ||
task.eventName, task.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, | ||
task.options | ||
]); | ||
}; | ||
const customScheduleNonGlobal = function(task: Task) { | ||
return nativeAddEventListener.apply( | ||
taskData.target, [taskData.eventName, task.invoke, taskData.options]); | ||
}; | ||
const customSchedulePrepend = function(task: Task) { | ||
return nativePrependEventListener.apply( | ||
taskData.target, [taskData.eventName, task.invoke, taskData.options]); | ||
}; | ||
const customCancelNonGlobal = function(task: any) { | ||
return nativeRemoveEventListener.apply( | ||
task.target, [task.eventName, task.invoke, task.options]); | ||
}; | ||
const customSchedule = useGlobalCallback ? customScheduleGlobal : customScheduleNonGlobal; | ||
const customCancel = useGlobalCallback ? customCancelGlobal : customCancelNonGlobal; | ||
const compareTaskCallbackVsDelegate = function(task: any, delegate: any) { | ||
const typeOfDelegate = typeof delegate; | ||
if ((typeOfDelegate === FUNCTION_TYPE && task.callback === delegate) || | ||
(typeOfDelegate === OBJECT_TYPE && task.originalDelegate === delegate)) { | ||
// same callback, same capture, same event name, just return | ||
return true; | ||
} | ||
return false; | ||
}; | ||
const compare = (patchOptions && patchOptions.compareTaskCallbackVsDelegate) ? | ||
patchOptions.compareTaskCallbackVsDelegate : | ||
compareTaskCallbackVsDelegate; | ||
const makeAddListener = function( | ||
nativeListener: any, addSource: string, customScheduleFn: any, customCancelFn: any, | ||
returnTarget = false, prepend = false) { | ||
return function() { | ||
const target = this || _global; | ||
const targetZone = Zone.current; | ||
let delegate = arguments[1]; | ||
if (!delegate) { | ||
return nativeListener.apply(this, arguments); | ||
} | ||
// don't create the bind delegate function for handleEvent | ||
// case here to improve addEventListener performance | ||
// we will create the bind delegate when invoke | ||
let isHandleEvent = false; | ||
if (typeof delegate !== FUNCTION_TYPE) { | ||
if (!delegate.handleEvent) { | ||
return nativeListener.apply(this, arguments); | ||
} | ||
isHandleEvent = true; | ||
} | ||
if (validateHandler && !validateHandler(nativeListener, delegate, target, arguments)) { | ||
return; | ||
} | ||
const eventName = arguments[0]; | ||
const options = arguments[2]; | ||
let capture; | ||
let once = false; | ||
if (options === undefined) { | ||
capture = false; | ||
} else if (options === true) { | ||
capture = true; | ||
} else if (options === false) { | ||
capture = false; | ||
} else { | ||
capture = options ? !!options.capture : false; | ||
once = options ? !!options.once : false; | ||
} | ||
const zone = Zone.current; | ||
const symbolEventNames = zoneSymbolEventNames[eventName]; | ||
let symbolEventName; | ||
if (!symbolEventNames) { | ||
// the code is duplicate, but I just want to get some better performance | ||
const falseEventName = eventName + FALSE_STR; | ||
const trueEventName = eventName + TRUE_STR; | ||
const symbol = ZONE_SYMBOL_PREFIX + falseEventName; | ||
const symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName; | ||
zoneSymbolEventNames[eventName] = {}; | ||
zoneSymbolEventNames[eventName][FALSE_STR] = symbol; | ||
zoneSymbolEventNames[eventName][TRUE_STR] = symbolCapture; | ||
symbolEventName = capture ? symbolCapture : symbol; | ||
} else { | ||
symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR]; | ||
} | ||
let existingTasks = target[symbolEventName]; | ||
let isExisting = false; | ||
if (existingTasks) { | ||
// already have task registered | ||
isExisting = true; | ||
if (checkDuplicate) { | ||
for (let i = 0; i < existingTasks.length; i++) { | ||
if (compare(existingTasks[i], delegate)) { | ||
// same callback, same capture, same event name, just return | ||
return; | ||
} | ||
} | ||
} | ||
} else { | ||
existingTasks = target[symbolEventName] = []; | ||
} | ||
let source; | ||
const constructorName = target.constructor[CONSTRUCTOR_NAME]; | ||
const targetSource = globalSources[constructorName]; | ||
if (targetSource) { | ||
source = targetSource[eventName]; | ||
} | ||
if (!source) { | ||
source = constructorName + addSource + eventName; | ||
} | ||
// do not create a new object as task.data to pass those things | ||
// just use the global shared one | ||
taskData.options = options; | ||
if (once) { | ||
// if addEventListener with once options, we don't pass it to | ||
// native addEventListener, instead we keep the once setting | ||
// and handle ourselves. | ||
taskData.options.once = false; | ||
} | ||
taskData.target = target; | ||
taskData.capture = capture; | ||
taskData.eventName = eventName; | ||
taskData.isExisting = isExisting; | ||
const data = useGlobalCallback ? OPTIMIZED_ZONE_EVENT_TASK_DATA : null; | ||
const task: any = | ||
zone.scheduleEventTask(source, delegate, data, customScheduleFn, customCancelFn); | ||
// have to save those information to task in case | ||
// application may call task.zone.cancelTask() directly | ||
if (once) { | ||
options.once = true; | ||
} | ||
task.options = options; | ||
task.target = target; | ||
task.capture = capture; | ||
task.eventName = eventName; | ||
if (isHandleEvent) { | ||
// save original delegate for compare to check duplicate | ||
(task as any).originalDelegate = delegate; | ||
} | ||
if (!prepend) { | ||
existingTasks.push(task); | ||
} else { | ||
existingTasks.unshift(task); | ||
} | ||
if (returnTarget) { | ||
return target; | ||
} | ||
}; | ||
}; | ||
proto[ADD_EVENT_LISTENER] = makeAddListener( | ||
nativeAddEventListener, ADD_EVENT_LISTENER_SOURCE, customSchedule, customCancel, | ||
returnTarget); | ||
if (nativePrependEventListener) { | ||
proto[PREPEND_EVENT_LISTENER] = makeAddListener( | ||
nativePrependEventListener, PREPEND_EVENT_LISTENER_SOURCE, customSchedulePrepend, | ||
customCancel, returnTarget, true); | ||
} | ||
proto[REMOVE_EVENT_LISTENER] = function() { | ||
const target = this || _global; | ||
const eventName = arguments[0]; | ||
@@ -248,207 +428,122 @@ const options = arguments[2]; | ||
const zone = Zone.current; | ||
const delegate = arguments[1]; | ||
if (!delegate) { | ||
return nativeRemoveEventListener.apply(this, arguments); | ||
} | ||
if (validateHandler && | ||
!validateHandler(nativeRemoveEventListener, delegate, target, arguments)) { | ||
return; | ||
} | ||
const symbolEventNames = zoneSymbolEventNames[eventName]; | ||
let symbolEventName; | ||
if (!symbolEventNames) { | ||
// the code is duplicate, but I just want to get some better performance | ||
const falseEventName = eventName + FALSE_STR; | ||
const trueEventName = eventName + TRUE_STR; | ||
const symbol = ZONE_SYMBOL_PREFIX + falseEventName; | ||
const symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName; | ||
zoneSymbolEventNames[eventName] = {}; | ||
zoneSymbolEventNames[eventName][FALSE_STR] = symbol; | ||
zoneSymbolEventNames[eventName][TRUE_STR] = symbolCapture; | ||
symbolEventName = capture ? symbolCapture : symbol; | ||
} else { | ||
if (symbolEventNames) { | ||
symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR]; | ||
} | ||
let existingTasks = target[symbolEventName]; | ||
let isExisting = false; | ||
const existingTasks = symbolEventName && target[symbolEventName]; | ||
if (existingTasks) { | ||
// already have task registered | ||
isExisting = true; | ||
if (checkDuplicate) { | ||
for (let i = 0; i < existingTasks.length; i++) { | ||
if (compare(existingTasks[i], delegate)) { | ||
// same callback, same capture, same event name, just return | ||
return; | ||
for (let i = 0; i < existingTasks.length; i++) { | ||
const existingTask = existingTasks[i]; | ||
const typeOfDelegate = typeof delegate; | ||
if (compare(existingTask, delegate)) { | ||
existingTasks.splice(i, 1); | ||
// set isRemoved to data for faster invokeTask check | ||
(existingTask as any).isRemoved = true; | ||
if (existingTasks.length === 0) { | ||
// all tasks for the eventName + capture have gone, | ||
// remove globalZoneAwareCallback and remove the task cache from target | ||
(existingTask as any).allRemoved = true; | ||
target[symbolEventName] = null; | ||
} | ||
existingTask.zone.cancelTask(existingTask); | ||
return; | ||
} | ||
} | ||
} else { | ||
existingTasks = target[symbolEventName] = []; | ||
} | ||
let source; | ||
const constructorName = target.constructor[CONSTRUCTOR_NAME]; | ||
const targetSource = globalSources[constructorName]; | ||
if (targetSource) { | ||
source = targetSource[eventName]; | ||
} | ||
if (!source) { | ||
source = constructorName + addSource + eventName; | ||
} | ||
// do not create a new object as task.data to pass those things | ||
// just use the global shared one | ||
taskData.options = options; | ||
taskData.target = target; | ||
taskData.capture = capture; | ||
taskData.eventName = eventName; | ||
taskData.isExisting = isExisting; | ||
}; | ||
const data = useGlobalCallback ? OPTIMIZED_ZONE_EVENT_TASK : null; | ||
const task: any = | ||
zone.scheduleEventTask(source, delegate, data, customScheduleFn, customCancelFn); | ||
proto[LISTENERS_EVENT_LISTENER] = function() { | ||
const target = this || _global; | ||
const eventName = arguments[0]; | ||
// have to save those information to task in case | ||
// application may call task.zone.cancelTask() directly | ||
task.options = options; | ||
task.target = target; | ||
task.capture = capture; | ||
task.eventName = eventName; | ||
if (isHandleEvent) { | ||
// save original delegate for compare to check duplicate | ||
(task as any).originalDelegate = delegate; | ||
} | ||
if (!prepend) { | ||
existingTasks.push(task); | ||
} else { | ||
existingTasks.unshift(task); | ||
} | ||
const listeners: any[] = []; | ||
const tasks = findEventTasks(target, eventName); | ||
if (returnTarget) { | ||
return target; | ||
for (let i = 0; i < tasks.length; i++) { | ||
const task: any = tasks[i]; | ||
let delegate = task.originalDelegate ? task.originalDelegate : task.callback; | ||
listeners.push(delegate); | ||
} | ||
return listeners; | ||
}; | ||
}; | ||
proto[ADD_EVENT_LISTENER] = makeAddListener( | ||
nativeAddEventListener, ADD_EVENT_LISTENER_SOURCE, customSchedule, customCancel, | ||
returnTarget); | ||
if (nativePrependEventListener) { | ||
proto[PREPEND_EVENT_LISTENER] = makeAddListener( | ||
nativePrependEventListener, PREPEND_EVENT_LISTENER_SOURCE, customSchedulePrepend, | ||
customCancel, returnTarget, true); | ||
} | ||
proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER] = function() { | ||
const target = this || _global; | ||
proto[REMOVE_EVENT_LISTENER] = function() { | ||
const target = this || _global; | ||
const eventName = arguments[0]; | ||
const options = arguments[2]; | ||
let capture; | ||
if (options === undefined) { | ||
capture = false; | ||
} else if (options === true) { | ||
capture = true; | ||
} else if (options === false) { | ||
capture = false; | ||
} else { | ||
capture = options ? !!options.capture : false; | ||
} | ||
const delegate = arguments[1]; | ||
if (!delegate) { | ||
return nativeRemoveEventListener.apply(this, arguments); | ||
} | ||
if (validateHandler && | ||
!validateHandler(nativeRemoveEventListener, delegate, target, arguments)) { | ||
return; | ||
} | ||
const symbolEventNames = zoneSymbolEventNames[eventName]; | ||
let symbolEventName; | ||
if (symbolEventNames) { | ||
symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR]; | ||
} | ||
const existingTasks = symbolEventName && target[symbolEventName]; | ||
if (existingTasks) { | ||
for (let i = 0; i < existingTasks.length; i++) { | ||
const existingTask = existingTasks[i]; | ||
const typeOfDelegate = typeof delegate; | ||
if (compare(existingTask, delegate)) { | ||
existingTasks.splice(i, 1); | ||
if (existingTasks.length === 0) { | ||
// all tasks for the eventName + capture have gone, | ||
// remove globalZoneAwareCallback and remove the task cache from target | ||
(existingTask as any).remove = true; | ||
target[symbolEventName] = null; | ||
const eventName = arguments[0]; | ||
if (!eventName) { | ||
const keys = Object.keys(target); | ||
for (let i = 0; i < keys.length; i++) { | ||
const prop = keys[i]; | ||
const match = EVENT_NAME_SYMBOL_REGX.exec(prop); | ||
let evtName = match && match[1]; | ||
// in nodejs EventEmitter, removeListener event is | ||
// used for monitoring the removeListener call, | ||
// so just keep removeListener eventListener until | ||
// all other eventListeners are removed | ||
if (evtName && evtName !== 'removeListener') { | ||
this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].apply(this, [evtName]); | ||
} | ||
existingTask.zone.cancelTask(existingTask); | ||
return; | ||
} | ||
} | ||
} | ||
}; | ||
// remove removeListener listener finally | ||
this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].apply(this, ['removeListener']); | ||
} else { | ||
const symbolEventNames = zoneSymbolEventNames[eventName]; | ||
if (symbolEventNames) { | ||
const symbolEventName = symbolEventNames[FALSE_STR]; | ||
const symbolCaptureEventName = symbolEventNames[TRUE_STR]; | ||
proto[LISTENERS_EVENT_LISTENER] = function() { | ||
const target = this || _global; | ||
const eventName = arguments[0]; | ||
const tasks = target[symbolEventName]; | ||
const captureTasks = target[symbolCaptureEventName]; | ||
const listeners: any[] = []; | ||
const tasks = findEventTasks(target, eventName); | ||
for (let i = 0; i < tasks.length; i++) { | ||
const task: any = tasks[i]; | ||
let delegate = task.originalDelegate ? task.originalDelegate : task.callback; | ||
listeners.push(delegate); | ||
} | ||
return listeners; | ||
}; | ||
proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER] = function() { | ||
const target = this || _global; | ||
const eventName = arguments[0]; | ||
if (!eventName) { | ||
const keys = Object.keys(target); | ||
for (let i = 0; i < keys.length; i++) { | ||
const prop = keys[i]; | ||
const match = EVENT_NAME_SYMBOL_REGX.exec(prop); | ||
let evtName = match && match[1]; | ||
if (evtName && evtName !== 'removeListener') { | ||
this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].apply(this, [evtName]); | ||
} | ||
} | ||
this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].apply(this, ['removeListener']); | ||
} else { | ||
const symbolEventNames = zoneSymbolEventNames[eventName]; | ||
if (symbolEventNames) { | ||
const symbolEventName = symbolEventNames[FALSE_STR]; | ||
const symbolCaptureEventName = symbolEventNames[TRUE_STR]; | ||
const tasks = target[symbolEventName]; | ||
const captureTasks = target[symbolCaptureEventName]; | ||
if (tasks) { | ||
const removeTasks = [...tasks]; | ||
for (let i = 0; i < removeTasks.length; i++) { | ||
const task = removeTasks[i]; | ||
let delegate = task.originalDelegate ? task.originalDelegate : task.callback; | ||
this[REMOVE_EVENT_LISTENER].apply(this, [eventName, delegate, task.options]); | ||
if (tasks) { | ||
const removeTasks = [...tasks]; | ||
for (let i = 0; i < removeTasks.length; i++) { | ||
const task = removeTasks[i]; | ||
let delegate = task.originalDelegate ? task.originalDelegate : task.callback; | ||
this[REMOVE_EVENT_LISTENER].apply(this, [eventName, delegate, task.options]); | ||
} | ||
} | ||
} | ||
if (captureTasks) { | ||
const removeTasks = [...captureTasks]; | ||
for (let i = 0; i < removeTasks.length; i++) { | ||
const task = removeTasks[i]; | ||
let delegate = task.originalDelegate ? task.originalDelegate : task.callback; | ||
this[REMOVE_EVENT_LISTENER].apply(this, [eventName, delegate, task.options]); | ||
if (captureTasks) { | ||
const removeTasks = [...captureTasks]; | ||
for (let i = 0; i < removeTasks.length; i++) { | ||
const task = removeTasks[i]; | ||
let delegate = task.originalDelegate ? task.originalDelegate : task.callback; | ||
this[REMOVE_EVENT_LISTENER].apply(this, [eventName, delegate, task.options]); | ||
} | ||
} | ||
} | ||
} | ||
}; | ||
// for native toString patch | ||
attachOriginToPatched(proto[ADD_EVENT_LISTENER], nativeAddEventListener); | ||
attachOriginToPatched(proto[REMOVE_EVENT_LISTENER], nativeRemoveEventListener); | ||
if (nativeRemoveAllListeners) { | ||
attachOriginToPatched(proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER], nativeRemoveAllListeners); | ||
} | ||
}; | ||
if (nativeListeners) { | ||
attachOriginToPatched(proto[LISTENERS_EVENT_LISTENER], nativeListeners); | ||
} | ||
return true; | ||
} | ||
// for native toString patch | ||
attachOriginToPatched(proto[ADD_EVENT_LISTENER], nativeAddEventListener); | ||
attachOriginToPatched(proto[REMOVE_EVENT_LISTENER], nativeRemoveEventListener); | ||
if (nativeRemoveAllListeners) { | ||
attachOriginToPatched(proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER], nativeRemoveAllListeners); | ||
let results: any[] = []; | ||
for (let i = 0; i < apis.length; i++) { | ||
results[i] = patchEventTargetMethods(apis[i], patchOptions); | ||
} | ||
if (nativeListeners) { | ||
attachOriginToPatched(proto[LISTENERS_EVENT_LISTENER], nativeListeners); | ||
} | ||
return true; | ||
return results; | ||
} | ||
@@ -455,0 +550,0 @@ |
@@ -9,3 +9,3 @@ /** | ||
import {globalSources, patchEventTargetMethods, zoneSymbolEventNames} from '../common/events'; | ||
import {globalSources, patchEventTarget, zoneSymbolEventNames} from '../common/events'; | ||
@@ -36,4 +36,4 @@ Zone.__load_patch('EventEmitter', (global: any, Zone: ZoneType, api: _ZonePrivate) => { | ||
function patchEventEmitterMethods(obj: any): boolean { | ||
const result = patchEventTargetMethods(obj, { | ||
function patchEventEmitterMethods(obj: any) { | ||
const result = patchEventTarget(global, [obj], { | ||
useGlobalCallback: false, | ||
@@ -49,6 +49,5 @@ addEventListenerFnName: EE_ADD_LISTENER, | ||
}); | ||
if (result) { | ||
if (result && result[0]) { | ||
obj[EE_ON] = obj[EE_ADD_LISTENER]; | ||
} | ||
return result; | ||
} | ||
@@ -55,0 +54,0 @@ |
@@ -323,3 +323,3 @@ /** | ||
showUncaughtError: () => boolean; | ||
patchEventTargetMethods: (obj: any, options?: any) => boolean; | ||
patchEventTarget: (global: any, apis: any[], options?: any) => boolean[]; | ||
patchOnProperties: (obj: any, properties: string[]) => void; | ||
@@ -1142,4 +1142,2 @@ patchMethod: | ||
const OPTIMIZED_ZONE_EVENT_TASK = Zone.__symbol__('optimizedZoneEventTask'); | ||
class ZoneTask<T extends TaskType> implements Task { | ||
@@ -1168,3 +1166,3 @@ public type: T; | ||
const self = this; | ||
if (type === eventTask && options === OPTIMIZED_ZONE_EVENT_TASK) { | ||
if (type === eventTask && options && (options as any).isUsingGlobalCallback) { | ||
this.invoke = ZoneTask.invokeTask; | ||
@@ -1315,3 +1313,3 @@ } else { | ||
showUncaughtError: () => !(Zone as any)[__symbol__('ignoreConsoleErrorUncaughtError')], | ||
patchEventTargetMethods: () => false, | ||
patchEventTarget: () => [], | ||
patchOnProperties: noop, | ||
@@ -1318,0 +1316,0 @@ patchMethod: () => noop, |
{ | ||
"name": "zone.js", | ||
"version": "0.8.13", | ||
"version": "0.8.14", | ||
"description": "Zones for JavaScript", | ||
@@ -5,0 +5,0 @@ "main": "dist/zone-node.js", |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
731556
70
14934