UNPKG

zone.js

Version:
45 lines (37 loc) 1.64 kB
/** * @license * Copyright Google Inc. All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ import {attachOriginToPatched, isBrowser, isMix} from '../common/utils'; import {_redefineProperty} from './define-property'; export function registerElementPatch(_global: any) { if ((!isBrowser && !isMix) || !('registerElement' in (<any>_global).document)) { return; } const _registerElement = (<any>document).registerElement; const callbacks = ['createdCallback', 'attachedCallback', 'detachedCallback', 'attributeChangedCallback']; (<any>document).registerElement = function(name: any, opts: any) { if (opts && opts.prototype) { callbacks.forEach(function(callback) { const source = 'Document.registerElement::' + callback; if (opts.prototype.hasOwnProperty(callback)) { const descriptor = Object.getOwnPropertyDescriptor(opts.prototype, callback); if (descriptor && descriptor.value) { descriptor.value = Zone.current.wrap(descriptor.value, source); _redefineProperty(opts.prototype, callback, descriptor); } else { opts.prototype[callback] = Zone.current.wrap(opts.prototype[callback], source); } } else if (opts.prototype[callback]) { opts.prototype[callback] = Zone.current.wrap(opts.prototype[callback], source); } }); } return _registerElement.apply(document, [name, opts]); }; attachOriginToPatched((<any>document).registerElement, _registerElement); }