ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
204 lines • 24.8 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';
import { filter, take } from 'rxjs/operators';
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.animationStateChanged = new Subject();
this.userAction = false;
this.eraseTimer = null;
}
ngOnInit() {
this.options = this.instance.options;
if (this.options.nzAnimate) {
this.instance.state = 'enter';
this.animationStateChanged
.pipe(filter(event => event.phaseName === 'done' && event.toState === 'leave'), take(1))
.subscribe(() => {
clearTimeout(this.closeTimer);
this.destroyed.next({ id: this.instance.messageId, userAction: this.userAction });
});
}
this.autoClose = this.options.nzDuration > 0;
if (this.autoClose) {
this.initErase();
this.startEraseTimeout();
}
}
ngOnDestroy() {
if (this.autoClose) {
this.clearEraseTimeout();
}
this.animationStateChanged.complete();
}
onEnter() {
if (this.autoClose && this.options.nzPauseOnHover) {
this.clearEraseTimeout();
this.updateTTL();
}
}
onLeave() {
if (this.autoClose && this.options.nzPauseOnHover) {
this.startEraseTimeout();
}
}
destroy(userAction = false) {
this.userAction = userAction;
if (this.options.nzAnimate) {
this.instance.state = 'leave';
this.cdr.detectChanges();
this.closeTimer = setTimeout(() => {
this.closeTimer = undefined;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudHMvbWVzc2FnZS9iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUlILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBK0IsTUFBTSxlQUFlLENBQUM7QUFDeEcsT0FBTyxFQUFpQixlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUzRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJOUMsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBRXRCLE1BQU0sT0FBZ0IsV0FBVztJQUkvQixZQUFzQixrQkFBc0MsRUFBWSxPQUFnQixFQUFVLFFBQWtCO1FBQTlGLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFBWSxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUFHLENBQUM7SUFFeEgsTUFBTSxDQUFDLEVBQVc7UUFDaEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksRUFBRSxFQUFFO2dCQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzNCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7YUFDNUI7U0FDRjtJQUNILENBQUM7SUFFUyxhQUFhO1FBQ3JCLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxJQUFJLGFBQWEsRUFBRSxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVTLGFBQWEsQ0FBbUMsSUFBc0I7UUFDOUUsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENB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QUFDO0lBRU8sU0FBUztRQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDeEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRU8sU0FBUztRQUNmLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWlCLENBQUM7U0FDdEQ7SUFDSCxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUU7WUFDckIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ3BDO2FBQU07WUFDTCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDaEI7SUFDSCxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUU7WUFDNUIsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztTQUN4QjtJQUNILENBQUM7OztZQXRHRixTQUFTOzs7WUF0SUQsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgQW5pbWF0aW9uRXZlbnQgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENvbXBvbmVudFR5cGUsIE92ZXJsYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZXNzYWdlQ29uZmlnLCBOekNvbmZpZ1NlcnZpY2UgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvY29uZmlnJztcbmltcG9ydCB7IE56U2luZ2xldG9uU2VydmljZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE56TWVzc2FnZURhdGEsIE56TWVzc2FnZURhdGFPcHRpb25zIH0gZnJvbSAnLi90eXBpbmdzJztcblxubGV0IGdsb2JhbENvdW50ZXIgPSAwO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTnpNTlNlcnZpY2Uge1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY29tcG9uZW50UHJlZml4OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBjb250YWluZXI/OiBOek1OQ29udGFpbmVyQ29tcG9uZW50O1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBuelNpbmdsZXRvblNlcnZpY2U6IE56U2luZ2xldG9uU2VydmljZSwgcHJvdGVjdGVkIG92ZXJsYXk6IE92ZXJsYXksIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7fVxuXG4gIHJlbW92ZShpZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbnRhaW5lcikge1xuICAgICAgaWYgKGlkKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZShpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmVBbGwoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SW5zdGFuY2VJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmNvbXBvbmVudFByZWZpeH0tJHtnbG9iYWxDb3VudGVyKyt9YDtcbiAgfVxuXG4gIHByb3RlY3RlZCB3aXRoQ29udGFpbmVyPFQgZXh0ZW5kcyBOek1OQ29udGFpbmVyQ29tcG9uZW50PihjdG9yOiBDb21wb25lbnRUeXBlPFQ+KTogVCB7XG4gICAgbGV0IGNvbnRhaW5lckluc3RhbmNlID0gdGhpcy5uelNpbmdsZXRvblNlcnZpY2UuZ2V0U2luZ2xldG9uV2l0aEtleSh0aGlzLmNvbXBvbmVudFByZWZpeCk7XG4gICAgaWYgKGNvbnRhaW5lckluc3RhbmNlKSB7XG4gICAgICByZXR1cm4gY29udGFpbmVySW5zdGFuY2UgYXMgVDtcbiAgICB9XG5cbiAgICBjb25zdCBvdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XG4gICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMubm9vcCgpLFxuICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKClcbiAgICB9KTtcbiAgICBjb25zdCBjb21wb25lbnRQb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsKGN0b3IsIG51bGwsIHRoaXMuaW5qZWN0b3IpO1xuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IG92ZXJsYXlSZWYuYXR0YWNoKGNvbXBvbmVudFBvcnRhbCk7XG4gICAgY29uc3Qgb3ZlcmxheVBhbmUgPSBvdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50O1xuICAgIG92ZXJsYXlQYW5lLnN0eWxlLnpJbmRleCA9ICcxMDEwJztcblxuICAgIGlmICghY29udGFpbmVySW5zdGFuY2UpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVySW5zdGFuY2UgPSBjb21wb25lbnRSZWYuaW5zdGFuY2U7XG4gICAgICB0aGlzLm56U2luZ2xldG9uU2VydmljZS5yZWdpc3RlclNpbmdsZXRvbldpdGhLZXkodGhpcy5jb21wb25lbnRQcmVmaXgsIGNvbnRhaW5lckluc3RhbmNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGFpbmVySW5zdGFuY2UgYXMgVDtcbiAgfVxufVxuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOek1OQ29udGFpbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBjb25maWc/OiBSZXF1aXJlZDxNZXNzYWdlQ29uZmlnPjtcbiAgaW5zdGFuY2VzOiBBcnJheTxSZXF1aXJlZDxOek1lc3NhZ2VEYXRhPj4gPSBbXTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcm90ZWN0ZWQgbnpDb25maWdTZXJ2aWNlOiBOekNvbmZpZ1NlcnZpY2UpIHtcbiAgICB0aGlzLnVwZGF0ZUNvbmZpZygpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpYmVDb25maWdDaGFuZ2UoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIGNyZWF0ZShkYXRhOiBOek1lc3NhZ2VEYXRhKTogUmVxdWlyZWQ8TnpNZXNzYWdlRGF0YT4ge1xuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5vbkNyZWF0ZShkYXRhKTtcblxuICAgIGlmICh0aGlzLmluc3RhbmNlcy5sZW5ndGggPj0gdGhpcy5jb25maWchLm56TWF4U3RhY2spIHtcbiAgICAgIHRoaXMuaW5zdGFuY2VzID0gdGhpcy5pbnN0YW5jZXMuc2xpY2UoMSk7XG4gICAgfVxuXG4gICAgdGhpcy5pbnN0YW5jZXMgPSBbLi4udGhpcy5pbnN0YW5jZXMsIGluc3RhbmNlXTtcblxuICAgIHRoaXMucmVhZHlJbnN0YW5jZXMoKTtcblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIHJlbW92ZShpZDogc3RyaW5nLCB1c2VyQWN0aW9uOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLmluc3RhbmNlcy5zb21lKChpbnN0YW5jZSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbnN0YW5jZS5tZXNzYWdlSWQgPT09IGlkKSB7XG4gICAgICAgIHRoaXMuaW5zdGFuY2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMuaW5zdGFuY2VzID0gWy4uLnRoaXMuaW5zdGFuY2VzXTtcbiAgICAgICAgdGhpcy5vblJlbW92ZShpbnN0YW5jZSwgdXNlckFjdGlvbik7XG4gICAgICAgIHRoaXMucmVhZHlJbnN0YW5jZXMoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICByZW1vdmVBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5pbnN0YW5jZXMuZm9yRWFjaChpID0+IHRoaXMub25SZW1vdmUoaSwgZmFsc2UpKTtcbiAgICB0aGlzLmluc3RhbmNlcyA9IFtdO1xuXG4gICAgdGhpcy5yZWFkeUluc3RhbmNlcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uQ3JlYXRlKGluc3RhbmNlOiBOek1lc3NhZ2VEYXRhKTogUmVxdWlyZWQ8TnpNZXNzYWdlRGF0YT4ge1xuICAgIGluc3RhbmNlLm9wdGlvbnMgPSB0aGlzLm1lcmdlT3B0aW9ucyhpbnN0YW5jZS5vcHRpb25zKTtcbiAgICBpbnN0YW5jZS5vbkNsb3NlID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICByZXR1cm4gaW5zdGFuY2UgYXMgUmVxdWlyZWQ8TnpNZXNzYWdlRGF0YT47XG4gIH1cblxuICBwcm90ZWN0ZWQgb25SZW1vdmUoaW5zdGFuY2U6IFJlcXVpcmVkPE56TWVzc2FnZURhdGE+LCB1c2VyQWN0aW9uOiBib29sZWFuKTogdm9pZCB7XG4gICAgaW5zdGFuY2Uub25DbG9zZS5uZXh0KHVzZXJBY3Rpb24pO1xuICAgIGluc3RhbmNlLm9uQ2xvc2UuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWFkeUluc3RhbmNlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgdXBkYXRlQ29uZmlnKCk6IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHN1YnNjcmliZUNvbmZpZ0NoYW5nZSgpOiB2b2lkO1xuXG4gIHByb3RlY3RlZCBtZXJnZU9wdGlvbnMob3B0aW9ucz86IE56TWVzc2FnZURhdGFPcHRpb25zKTogTnpNZXNzYWdlRGF0YU9wdGlvbnMge1xuICAgIGNvbnN0IHsgbnpEdXJhdGlvbiwgbnpBbmltYXRlLCBuelBhdXNlT25Ib3ZlciB9ID0gdGhpcy5jb25maWchO1xuICAgIHJldHVybiB7IG56RHVyYXRpb24sIG56QW5pbWF0ZSwgbnpQYXVzZU9uSG92ZXIsIC4uLm9wdGlvbnMgfTtcbiAgfVxufVxuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOek1OQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBpbnN0YW5jZSE6IFJlcXVpcmVkPE56TWVzc2FnZURhdGE+O1xuICBpbmRleD86IG51bWJlcjtcblxuICByZWFkb25seSBkZXN0cm95ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgaWQ6IHN0cmluZzsgdXNlckFjdGlvbjogYm9vbGVhbiB9PigpO1xuICByZWFkb25seSBhbmltYXRpb25TdGF0ZUNoYW5nZWQ6IFN1YmplY3Q8QW5pbWF0aW9uRXZlbnQ+ID0gbmV3IFN1YmplY3Q8QW5pbWF0aW9uRXZlbnQ+KCk7XG5cbiAgcHJvdGVjdGVkIG9wdGlvbnMhOiBSZXF1aXJlZDxOek1lc3NhZ2VEYXRhT3B0aW9ucz47XG4gIHByb3RlY3RlZCBhdXRvQ2xvc2U/OiBib29sZWFuO1xuICBwcm90ZWN0ZWQgY2xvc2VUaW1lcj86IG51bWJlcjtcbiAgcHJvdGVjdGVkIHVzZXJBY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGVyYXNlVGltZXI6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcm90ZWN0ZWQgZXJhc2VUaW1pbmdTdGFydD86IG51bWJlcjtcbiAgcHJvdGVjdGVkIGVyYXNlVFRMITogbnVtYmVyO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmluc3RhbmNlLm9wdGlvbnMgYXMgUmVxdWlyZWQ8TnpNZXNzYWdlRGF0YU9wdGlvbnM+O1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5uekFuaW1hdGUpIHtcbiAgICAgIHRoaXMuaW5zdGFuY2Uuc3RhdGUgPSAnZW50ZXInO1xuICAgICAgdGhpcy5hbmltYXRpb25TdGF0ZUNoYW5nZWRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50LnBoYXNlTmFtZSA9PT0gJ2RvbmUnICYmIGV2ZW50LnRvU3RhdGUgPT09ICdsZWF2ZScpLFxuICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5jbG9zZVRpbWVyKTtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3llZC5uZXh0KHsgaWQ6IHRoaXMuaW5zdGFuY2UubWVzc2FnZUlkLCB1c2VyQWN0aW9uOiB0aGlzLnVzZXJBY3Rpb24gfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuYXV0b0Nsb3NlID0gdGhpcy5vcHRpb25zLm56RHVyYXRpb24gPiAwO1xuXG4gICAgaWYgKHRoaXMuYXV0b0Nsb3NlKSB7XG4gICAgICB0aGlzLmluaXRFcmFzZSgpO1xuICAgICAgdGhpcy5zdGFydEVyYXNlVGltZW91dCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF1dG9DbG9zZSkge1xuICAgICAgdGhpcy5jbGVhckVyYXNlVGltZW91dCgpO1xuICAgIH1cbiAgICB0aGlzLmFuaW1hdGlvblN0YXRlQ2hhbmdlZC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgb25FbnRlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hdXRvQ2xvc2UgJiYgdGhpcy5vcHRpb25zLm56UGF1c2VPbkhvdmVyKSB7XG4gICAgICB0aGlzLmNsZWFyRXJhc2VUaW1lb3V0KCk7XG4gICAgICB0aGlzLnVwZGF0ZVRUTCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uTGVhdmUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXV0b0Nsb3NlICYmIHRoaXMub3B0aW9ucy5uelBhdXNlT25Ib3Zlcikge1xuICAgICAgdGhpcy5zdGFydEVyYXNlVGltZW91dCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBkZXN0cm95KHVzZXJBY3Rpb246IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIHRoaXMudXNlckFjdGlvbiA9IHVzZXJBY3Rpb247XG4gICAgaWYgKHRoaXMub3B0aW9ucy5uekFuaW1hdGUpIHtcbiAgICAgIHRoaXMuaW5zdGFuY2Uuc3RhdGUgPSAnbGVhdmUnO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgdGhpcy5jbG9zZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2VUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5kZXN0cm95ZWQubmV4dCh7IGlkOiB0aGlzLmluc3RhbmNlLm1lc3NhZ2VJZCwgdXNlckFjdGlvbjogdXNlckFjdGlvbiB9KTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVzdHJveWVkLm5leHQoeyBpZDogdGhpcy5pbnN0YW5jZS5tZXNzYWdlSWQsIHVzZXJBY3Rpb246IHVzZXJBY3Rpb24gfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0RXJhc2UoKTogdm9pZCB7XG4gICAgdGhpcy5lcmFzZVRUTCA9IHRoaXMub3B0aW9ucy5uekR1cmF0aW9uO1xuICAgIHRoaXMuZXJhc2VUaW1pbmdTdGFydCA9IERhdGUubm93KCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRUTCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hdXRvQ2xvc2UpIHtcbiAgICAgIHRoaXMuZXJhc2VUVEwgLT0gRGF0ZS5ub3coKSAtIHRoaXMuZXJhc2VUaW1pbmdTdGFydCE7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGFydEVyYXNlVGltZW91dCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lcmFzZVRUTCA+IDApIHtcbiAgICAgIHRoaXMuY2xlYXJFcmFzZVRpbWVvdXQoKTtcbiAgICAgIHRoaXMuZXJhc2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5kZXN0cm95KCksIHRoaXMuZXJhc2VUVEwpO1xuICAgICAgdGhpcy5lcmFzZVRpbWluZ1N0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckVyYXNlVGltZW91dCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lcmFzZVRpbWVyICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5lcmFzZVRpbWVyKTtcbiAgICAgIHRoaXMuZXJhc2VUaW1lciA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iXX0=