ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
192 lines • 22.4 kB
JavaScript
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
import { ComponentPortal } from '@angular/cdk/portal';
import { ChangeDetectorRef, Directive, EventEmitter } from '@angular/core';
import { NzConfigService } from 'ng-zorro-antd/core/config';
import { Subject } from 'rxjs';
let globalCounter = 0;
export class NzMNService {
constructor(nzSingletonService, overlay, injector) {
this.nzSingletonService = nzSingletonService;
this.overlay = overlay;
this.injector = injector;
}
remove(id) {
if (this.container) {
if (id) {
this.container.remove(id);
}
else {
this.container.removeAll();
}
}
}
getInstanceId() {
return `${this.componentPrefix}-${globalCounter++}`;
}
withContainer(ctor) {
let containerInstance = this.nzSingletonService.getSingletonWithKey(this.componentPrefix);
if (containerInstance) {
return containerInstance;
}
const overlayRef = this.overlay.create({
hasBackdrop: false,
scrollStrategy: this.overlay.scrollStrategies.noop(),
positionStrategy: this.overlay.position().global()
});
const componentPortal = new ComponentPortal(ctor, null, this.injector);
const componentRef = overlayRef.attach(componentPortal);
const overlayPane = overlayRef.overlayElement;
overlayPane.style.zIndex = '1010';
if (!containerInstance) {
this.container = containerInstance = componentRef.instance;
this.nzSingletonService.registerSingletonWithKey(this.componentPrefix, containerInstance);
}
return containerInstance;
}
}
export class NzMNContainerComponent {
constructor(cdr, nzConfigService) {
this.cdr = cdr;
this.nzConfigService = nzConfigService;
this.instances = [];
this.destroy$ = new Subject();
this.updateConfig();
}
ngOnInit() {
this.subscribeConfigChange();
}
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
}
create(data) {
const instance = this.onCreate(data);
if (this.instances.length >= this.config.nzMaxStack) {
this.instances = this.instances.slice(1);
}
this.instances = [...this.instances, instance];
this.readyInstances();
return instance;
}
remove(id, userAction = false) {
this.instances.some((instance, index) => {
if (instance.messageId === id) {
this.instances.splice(index, 1);
this.instances = [...this.instances];
this.onRemove(instance, userAction);
this.readyInstances();
return true;
}
return false;
});
}
removeAll() {
this.instances.forEach(i => this.onRemove(i, false));
this.instances = [];
this.readyInstances();
}
onCreate(instance) {
instance.options = this.mergeOptions(instance.options);
instance.onClose = new Subject();
return instance;
}
onRemove(instance, userAction) {
instance.onClose.next(userAction);
instance.onClose.complete();
}
readyInstances() {
this.cdr.detectChanges();
}
mergeOptions(options) {
const { nzDuration, nzAnimate, nzPauseOnHover } = this.config;
return Object.assign({ nzDuration, nzAnimate, nzPauseOnHover }, options);
}
}
NzMNContainerComponent.decorators = [
{ type: Directive }
];
NzMNContainerComponent.ctorParameters = () => [
{ type: ChangeDetectorRef },
{ type: NzConfigService }
];
export class NzMNComponent {
constructor(cdr) {
this.cdr = cdr;
this.destroyed = new EventEmitter();
this.eraseTimer = null;
}
ngOnInit() {
this.options = this.instance.options;
if (this.options.nzAnimate) {
this.instance.state = 'enter';
}
this.autoClose = this.options.nzDuration > 0;
if (this.autoClose) {
this.initErase();
this.startEraseTimeout();
}
}
ngOnDestroy() {
if (this.autoClose) {
this.clearEraseTimeout();
}
}
onEnter() {
if (this.autoClose && this.options.nzPauseOnHover) {
this.clearEraseTimeout();
this.updateTTL();
}
}
onLeave() {
if (this.autoClose && this.options.nzPauseOnHover) {
this.startEraseTimeout();
}
}
destroy(userAction = false) {
if (this.options.nzAnimate) {
this.instance.state = 'leave';
this.cdr.detectChanges();
setTimeout(() => {
this.destroyed.next({ id: this.instance.messageId, userAction: userAction });
}, 200);
}
else {
this.destroyed.next({ id: this.instance.messageId, userAction: userAction });
}
}
initErase() {
this.eraseTTL = this.options.nzDuration;
this.eraseTimingStart = Date.now();
}
updateTTL() {
if (this.autoClose) {
this.eraseTTL -= Date.now() - this.eraseTimingStart;
}
}
startEraseTimeout() {
if (this.eraseTTL > 0) {
this.clearEraseTimeout();
this.eraseTimer = setTimeout(() => this.destroy(), this.eraseTTL);
this.eraseTimingStart = Date.now();
}
else {
this.destroy();
}
}
clearEraseTimeout() {
if (this.eraseTimer !== null) {
clearTimeout(this.eraseTimer);
this.eraseTimer = null;
}
}
}
NzMNComponent.decorators = [
{ type: Directive }
];
NzMNComponent.ctorParameters = () => [
{ type: ChangeDetectorRef }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS92c3RzL3dvcmsvMS9zL2NvbXBvbmVudHMvbWVzc2FnZS8iLCJzb3VyY2VzIjpbImJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBR0gsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUErQixNQUFNLGVBQWUsQ0FBQztBQUN4RyxPQUFPLEVBQWlCLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTNFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJL0IsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBRXRCLE1BQU0sT0FBZ0IsV0FBVztJQUkvQixZQUFzQixrQkFBc0MsRUFBWSxPQUFnQixFQUFVLFFBQWtCO1FBQTlGLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFBWSxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUFHLENBQUM7SUFFeEgsTUFBTSxDQUFDLEVBQVc7UUFDaEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksRUFBRSxFQUFFO2dCQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzNCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7YUFDNUI7U0FDRjtJQUNILENBQUM7SUFFUyxhQUFhO1FBQ3JCLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxJQUFJLGFBQWEsRUFBRSxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVTLGFBQWEsQ0FBbUMsSUFBc0I7UUFDOUUsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FB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NUIsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztTQUN4QjtJQUNILENBQUM7OztZQXZGRixTQUFTOzs7WUFySUQsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSwgT3ZlcmxheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lc3NhZ2VDb25maWcsIE56Q29uZmlnU2VydmljZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS9jb25maWcnO1xuaW1wb3J0IHsgTnpTaW5nbGV0b25TZXJ2aWNlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3NlcnZpY2VzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTnpNZXNzYWdlRGF0YSwgTnpNZXNzYWdlRGF0YU9wdGlvbnMgfSBmcm9tICcuL3R5cGluZ3MnO1xuXG5sZXQgZ2xvYmFsQ291bnRlciA9IDA7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOek1OU2VydmljZSB7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjb21wb25lbnRQcmVmaXg6IHN0cmluZztcbiAgcHJvdGVjdGVkIGNvbnRhaW5lcj86IE56TU5Db250YWluZXJDb21wb25lbnQ7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIG56U2luZ2xldG9uU2VydmljZTogTnpTaW5nbGV0b25TZXJ2aWNlLCBwcm90ZWN0ZWQgb3ZlcmxheTogT3ZlcmxheSwgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHt9XG5cbiAgcmVtb3ZlKGlkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29udGFpbmVyKSB7XG4gICAgICBpZiAoaWQpIHtcbiAgICAgICAgdGhpcy5jb250YWluZXIucmVtb3ZlKGlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUFsbCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRJbnN0YW5jZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuY29tcG9uZW50UHJlZml4fS0ke2dsb2JhbENvdW50ZXIrK31gO1xuICB9XG5cbiAgcHJvdGVjdGVkIHdpdGhDb250YWluZXI8VCBleHRlbmRzIE56TU5Db250YWluZXJDb21wb25lbnQ+KGN0b3I6IENvbXBvbmVudFR5cGU8VD4pOiBUIHtcbiAgICBsZXQgY29udGFpbmVySW5zdGFuY2UgPSB0aGlzLm56U2luZ2xldG9uU2VydmljZS5nZXRTaW5nbGV0b25XaXRoS2V5KHRoaXMuY29tcG9uZW50UHJlZml4KTtcbiAgICBpZiAoY29udGFpbmVySW5zdGFuY2UpIHtcbiAgICAgIHJldHVybiBjb250YWluZXJJbnN0YW5jZSBhcyBUO1xuICAgIH1cblxuICAgIGNvbnN0IG92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcbiAgICAgIGhhc0JhY2tkcm9wOiBmYWxzZSxcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5ub29wKCksXG4gICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKVxuICAgIH0pO1xuICAgIGNvbnN0IGNvbXBvbmVudFBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWwoY3RvciwgbnVsbCwgdGhpcy5pbmplY3Rvcik7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gb3ZlcmxheVJlZi5hdHRhY2goY29tcG9uZW50UG9ydGFsKTtcbiAgICBjb25zdCBvdmVybGF5UGFuZSA9IG92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQ7XG4gICAgb3ZlcmxheVBhbmUuc3R5bGUuekluZGV4ID0gJzEwMTAnO1xuXG4gICAgaWYgKCFjb250YWluZXJJbnN0YW5jZSkge1xuICAgICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXJJbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgICAgIHRoaXMubnpTaW5nbGV0b25TZXJ2aWNlLnJlZ2lzdGVyU2luZ2xldG9uV2l0aEtleSh0aGlzLmNvbXBvbmVudFByZWZpeCwgY29udGFpbmVySW5zdGFuY2UpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250YWluZXJJbnN0YW5jZSBhcyBUO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE56TU5Db250YWluZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGNvbmZpZz86IFJlcXVpcmVkPE1lc3NhZ2VDb25maWc+O1xuICBpbnN0YW5jZXM6IEFycmF5PFJlcXVpcmVkPE56TWVzc2FnZURhdGE+PiA9IFtdO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByb3RlY3RlZCBuekNvbmZpZ1NlcnZpY2U6IE56Q29uZmlnU2VydmljZSkge1xuICAgIHRoaXMudXBkYXRlQ29uZmlnKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmliZUNvbmZpZ0NoYW5nZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgY3JlYXRlKGRhdGE6IE56TWVzc2FnZURhdGEpOiBSZXF1aXJlZDxOek1lc3NhZ2VEYXRhPiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLm9uQ3JlYXRlKGRhdGEpO1xuXG4gICAgaWYgKHRoaXMuaW5zdGFuY2VzLmxlbmd0aCA+PSB0aGlzLmNvbmZpZyEubnpNYXhTdGFjaykge1xuICAgICAgdGhpcy5pbnN0YW5jZXMgPSB0aGlzLmluc3RhbmNlcy5zbGljZSgxKTtcbiAgICB9XG5cbiAgICB0aGlzLmluc3RhbmNlcyA9IFsuLi50aGlzLmluc3RhbmNlcywgaW5zdGFuY2VdO1xuXG4gICAgdGhpcy5yZWFkeUluc3RhbmNlcygpO1xuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgcmVtb3ZlKGlkOiBzdHJpbmcsIHVzZXJBY3Rpb246IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIHRoaXMuaW5zdGFuY2VzLnNvbWUoKGluc3RhbmNlLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluc3RhbmNlLm1lc3NhZ2VJZCA9PT0gaWQpIHtcbiAgICAgICAgdGhpcy5pbnN0YW5jZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZXMgPSBbLi4udGhpcy5pbnN0YW5jZXNdO1xuICAgICAgICB0aGlzLm9uUmVtb3ZlKGluc3RhbmNlLCB1c2VyQWN0aW9uKTtcbiAgICAgICAgdGhpcy5yZWFkeUluc3RhbmNlcygpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZUFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmluc3RhbmNlcy5mb3JFYWNoKGkgPT4gdGhpcy5vblJlbW92ZShpLCBmYWxzZSkpO1xuICAgIHRoaXMuaW5zdGFuY2VzID0gW107XG5cbiAgICB0aGlzLnJlYWR5SW5zdGFuY2VzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25DcmVhdGUoaW5zdGFuY2U6IE56TWVzc2FnZURhdGEpOiBSZXF1aXJlZDxOek1lc3NhZ2VEYXRhPiB7XG4gICAgaW5zdGFuY2Uub3B0aW9ucyA9IHRoaXMubWVyZ2VPcHRpb25zKGluc3RhbmNlLm9wdGlvbnMpO1xuICAgIGluc3RhbmNlLm9uQ2xvc2UgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICAgIHJldHVybiBpbnN0YW5jZSBhcyBSZXF1aXJlZDxOek1lc3NhZ2VEYXRhPjtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblJlbW92ZShpbnN0YW5jZTogUmVxdWlyZWQ8TnpNZXNzYWdlRGF0YT4sIHVzZXJBY3Rpb246IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpbnN0YW5jZS5vbkNsb3NlLm5leHQodXNlckFjdGlvbik7XG4gICAgaW5zdGFuY2Uub25DbG9zZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWR5SW5zdGFuY2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCB1cGRhdGVDb25maWcoKTogdm9pZDtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc3Vic2NyaWJlQ29uZmlnQ2hhbmdlKCk6IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIG1lcmdlT3B0aW9ucyhvcHRpb25zPzogTnpNZXNzYWdlRGF0YU9wdGlvbnMpOiBOek1lc3NhZ2VEYXRhT3B0aW9ucyB7XG4gICAgY29uc3QgeyBuekR1cmF0aW9uLCBuekFuaW1hdGUsIG56UGF1c2VPbkhvdmVyIH0gPSB0aGlzLmNvbmZpZyE7XG4gICAgcmV0dXJuIHsgbnpEdXJhdGlvbiwgbnpBbmltYXRlLCBuelBhdXNlT25Ib3ZlciwgLi4ub3B0aW9ucyB9O1xuICB9XG59XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE56TU5Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGluc3RhbmNlITogUmVxdWlyZWQ8TnpNZXNzYWdlRGF0YT47XG4gIGluZGV4PzogbnVtYmVyO1xuXG4gIHJlYWRvbmx5IGRlc3Ryb3llZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpZDogc3RyaW5nOyB1c2VyQWN0aW9uOiBib29sZWFuIH0+KCk7XG5cbiAgcHJvdGVjdGVkIG9wdGlvbnMhOiBSZXF1aXJlZDxOek1lc3NhZ2VEYXRhT3B0aW9ucz47XG4gIHByb3RlY3RlZCBhdXRvQ2xvc2U/OiBib29sZWFuO1xuICBwcm90ZWN0ZWQgZXJhc2VUaW1lcjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByb3RlY3RlZCBlcmFzZVRpbWluZ1N0YXJ0PzogbnVtYmVyO1xuICBwcm90ZWN0ZWQgZXJhc2VUVEwhOiBudW1iZXI7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuaW5zdGFuY2Uub3B0aW9ucyBhcyBSZXF1aXJlZDxOek1lc3NhZ2VEYXRhT3B0aW9ucz47XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLm56QW5pbWF0ZSkge1xuICAgICAgdGhpcy5pbnN0YW5jZS5zdGF0ZSA9ICdlbnRlcic7XG4gICAgfVxuXG4gICAgdGhpcy5hdXRvQ2xvc2UgPSB0aGlzLm9wdGlvbnMubnpEdXJhdGlvbiA+IDA7XG5cbiAgICBpZiAodGhpcy5hdXRvQ2xvc2UpIHtcbiAgICAgIHRoaXMuaW5pdEVyYXNlKCk7XG4gICAgICB0aGlzLnN0YXJ0RXJhc2VUaW1lb3V0KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXV0b0Nsb3NlKSB7XG4gICAgICB0aGlzLmNsZWFyRXJhc2VUaW1lb3V0KCk7XG4gICAgfVxuICB9XG5cbiAgb25FbnRlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hdXRvQ2xvc2UgJiYgdGhpcy5vcHRpb25zLm56UGF1c2VPbkhvdmVyKSB7XG4gICAgICB0aGlzLmNsZWFyRXJhc2VUaW1lb3V0KCk7XG4gICAgICB0aGlzLnVwZGF0ZVRUTCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uTGVhdmUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXV0b0Nsb3NlICYmIHRoaXMub3B0aW9ucy5uelBhdXNlT25Ib3Zlcikge1xuICAgICAgdGhpcy5zdGFydEVyYXNlVGltZW91dCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBkZXN0cm95KHVzZXJBY3Rpb246IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubnpBbmltYXRlKSB7XG4gICAgICB0aGlzLmluc3RhbmNlLnN0YXRlID0gJ2xlYXZlJztcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmRlc3Ryb3llZC5uZXh0KHsgaWQ6IHRoaXMuaW5zdGFuY2UubWVzc2FnZUlkLCB1c2VyQWN0aW9uOiB1c2VyQWN0aW9uIH0pO1xuICAgICAgfSwgMjAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZXN0cm95ZWQubmV4dCh7IGlkOiB0aGlzLmluc3RhbmNlLm1lc3NhZ2VJZCwgdXNlckFjdGlvbjogdXNlckFjdGlvbiB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRFcmFzZSgpOiB2b2lkIHtcbiAgICB0aGlzLmVyYXNlVFRMID0gdGhpcy5vcHRpb25zLm56RHVyYXRpb247XG4gICAgdGhpcy5lcmFzZVRpbWluZ1N0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVFRMKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF1dG9DbG9zZSkge1xuICAgICAgdGhpcy5lcmFzZVRUTCAtPSBEYXRlLm5vdygpIC0gdGhpcy5lcmFzZVRpbWluZ1N0YXJ0ITtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0RXJhc2VUaW1lb3V0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVyYXNlVFRMID4gMCkge1xuICAgICAgdGhpcy5jbGVhckVyYXNlVGltZW91dCgpO1xuICAgICAgdGhpcy5lcmFzZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmRlc3Ryb3koKSwgdGhpcy5lcmFzZVRUTCk7XG4gICAgICB0aGlzLmVyYXNlVGltaW5nU3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRXJhc2VUaW1lb3V0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVyYXNlVGltZXIgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmVyYXNlVGltZXIpO1xuICAgICAgdGhpcy5lcmFzZVRpbWVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==