Files
Bones/node_modules/zone.js/lib/browser/register-element.ts
SOUTHERNCO\x2mjbyrn 7efe7605b8 Template Upload
2017-05-17 13:45:25 -04:00

38 lines
1.3 KiB
TypeScript

import {_redefineProperty} from './define-property';
import {isBrowser} from './utils';
export function registerElementPatch(_global: any) {
if (!isBrowser || !('registerElement' in (<any>_global).document)) {
return;
}
var _registerElement = (<any>document).registerElement;
var callbacks = [
'createdCallback',
'attachedCallback',
'detachedCallback',
'attributeChangedCallback'
];
(<any>document).registerElement = function (name, opts) {
if (opts && opts.prototype) {
callbacks.forEach(function (callback) {
var source = 'Document.registerElement::' + callback;
if (opts.prototype.hasOwnProperty(callback)) {
var 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]);
};
}