UNPKG

ng-devui

Version:

DevUI components based on Angular

138 lines 19.8 kB
import { ComponentFactoryResolver, Directive, ElementRef, HostBinding, Injector, Input, TemplateRef, ViewContainerRef, } from '@angular/core'; import { Observable, Subscription, forkJoin, from, throwError } from 'rxjs'; import { catchError } from 'rxjs/operators'; import { LoadingBackdropComponent } from './loading-backdrop.component'; import { LoadingComponent } from './loading.component'; import * as i0 from "@angular/core"; export class LoadingDirective { constructor(componentFactoryResolver, elementRef, injector, triggerElementRef, viewContainerRef) { this.componentFactoryResolver = componentFactoryResolver; this.elementRef = elementRef; this.injector = injector; this.triggerElementRef = triggerElementRef; this.viewContainerRef = viewContainerRef; this.loadingStyle = 'default'; this.active = true; } ngOnChanges(changes) { const { backdrop, loading, loadingTemplateRef, message, positionType, showLoading, view, zIndex } = changes; const changeArr = [backdrop, loading, loadingTemplateRef, message, positionType, showLoading, view, zIndex]; if (changeArr.find((item) => item !== undefined)) { // loading 兼容showLoading, 赋值类型为 boolean 时触发显示 const isBoolean = typeof this.loading === 'boolean'; const flag = isBoolean ? this.loading : undefined; const isLoading = this.showLoading !== undefined ? this.showLoading : flag; if (isLoading !== undefined) { this.showLoadingChangeEvent(isLoading); } if (!isBoolean && this.loading) { this.loadingChangeEvent(this.loading); } } } loadingChangeEvent(loading) { if (loading instanceof Subscription) { this.startLoading(); loading.add(() => this.endLoading()); return; } const loadingArr = [].concat(loading).map((item) => (item instanceof Observable ? item : from(item))); if (loadingArr.length > 0) { this.startLoading(); forkJoin(loadingArr) .pipe(catchError((error) => throwError(error))) .subscribe({ next: null, error: () => this.endLoading(), complete: () => this.endLoading(), }); } } showLoadingChangeEvent(showLoading) { if (showLoading === true) { this.startLoading(); } else { this.endLoading(); } } startLoading() { this.position = this.positionType || 'relative'; if (this.backdrop && !this.backdropRef) { this.createLoadingBackdrop(); } if (!this.backdrop && this.backdropRef) { this.backdropRef.destroy(); this.backdropRef = null; } if (!this.loadingRef) { this.loadingRef = this.viewContainerRef.createComponent(LoadingComponent, { index: null, injector: this.injector }); this.insert(this.loadingRef.hostView); } Object.assign(this.loadingRef.instance, { message: this.message, loadingTemplateRef: this.loadingTemplateRef, top: this.view ? this.view.top : '50%', left: this.view ? this.view.left : '50%', isCustomPosition: !!this.view, zIndex: this.zIndex ? this.zIndex : '', loadingStyle: this.loadingStyle, }); } endLoading() { if (this.loadingRef) { this.loadingRef.destroy(); this.loadingRef = null; } if (this.backdropRef) { this.backdropRef.destroy(); this.backdropRef = null; } this.position = ''; } createLoadingBackdrop() { this.backdropRef = !this.backdropRef && this.viewContainerRef.createComponent(LoadingBackdropComponent, { index: null, injector: this.injector }); this.insert(this.backdropRef.hostView); Object.assign(this.backdropRef.instance, { triggerElementRef: this.triggerElementRef, backdrop: this.backdrop, zIndex: this.zIndex ? this.zIndex : '', }); } insert(viewRef) { viewRef.rootNodes.forEach((node) => this.elementRef.nativeElement.appendChild(node)); return viewRef; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LoadingDirective, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.ElementRef }, { token: i0.Injector }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: LoadingDirective, selector: "[dLoading]", inputs: { backdrop: "backdrop", message: "message", positionType: "positionType", showLoading: "showLoading", view: "view", zIndex: "zIndex", loading: "loading", loadingStyle: "loadingStyle", loadingTemplateRef: "loadingTemplateRef" }, host: { properties: { "style.position": "this.position" } }, exportAs: ["dLoading"], usesOnChanges: true, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LoadingDirective, decorators: [{ type: Directive, args: [{ selector: '[dLoading]', exportAs: 'dLoading', }] }], ctorParameters: () => [{ type: i0.ComponentFactoryResolver }, { type: i0.ElementRef }, { type: i0.Injector }, { type: i0.ElementRef }, { type: i0.ViewContainerRef }], propDecorators: { backdrop: [{ type: Input }], message: [{ type: Input }], positionType: [{ type: Input }], showLoading: [{ type: Input }], view: [{ type: Input }], zIndex: [{ type: Input }], loading: [{ type: Input }], loadingStyle: [{ type: Input }], loadingTemplateRef: [{ type: Input }], position: [{ type: HostBinding, args: ['style.position'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9kZXZ1aS9sb2FkaW5nL2xvYWRpbmcuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx3QkFBd0IsRUFFeEIsU0FBUyxFQUNULFVBQVUsRUFFVixXQUFXLEVBQ1gsUUFBUSxFQUNSLEtBQUssRUFHTCxXQUFXLEVBQ1gsZ0JBQWdCLEdBRWpCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFNdkQsTUFBTSxPQUFPLGdCQUFnQjtJQWUzQixZQUNVLHdCQUFrRCxFQUNsRCxVQUFzQixFQUN0QixRQUFrQixFQUNsQixpQkFBNkIsRUFDN0IsZ0JBQWtDO1FBSmxDLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBWTtRQUM3QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBWm5DLGlCQUFZLEdBQWlCLFNBQVMsQ0FBQztRQUdoRCxXQUFNLEdBQUcsSUFBSSxDQUFDO0lBVVgsQ0FBQztJQUVKLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQzVHLE1BQU0sU0FBUyxHQUFHLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNqRCw2Q0FBNkM7WUFDN0MsTUFBTSxTQUFTLEdBQUcsT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQztZQUNwRCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNsRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzNFLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBb0IsQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFDRCxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFzQixDQUFDLENBQUM7WUFDdkQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsT0FBb0I7UUFDckMsSUFBSSxPQUFPLFlBQVksWUFBWSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDckMsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLFlBQVksVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEcsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixRQUFRLENBQUMsVUFBVSxDQUFDO2lCQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDOUMsU0FBUyxDQUFDO2dCQUNULElBQUksRUFBRSxJQUFJO2dCQUNWLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUM5QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTthQUNsQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0gsQ0FBQztJQUVELHNCQUFzQixDQUFDLFdBQW9CO1FBQ3pDLElBQUksV0FBVyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLFVBQVUsQ0FBQztRQUVoRCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDL0IsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQzFCLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBRXBILElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTtZQUN0QyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtZQUMzQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUs7WUFDdEMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO1lBQ3hDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSTtZQUM3QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN0QyxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDaEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN6QixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUMxQixDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixJQUFJLENBQUMsV0FBVztZQUNkLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFakksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXZDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUU7WUFDdkMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtZQUN6QyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7U0FDdkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLE1BQU0sQ0FBQyxPQUFnQjtRQUM1QixPQUFnQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQy9HLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7K0dBOUhVLGdCQUFnQjttR0FBaEIsZ0JBQWdCOzs0RkFBaEIsZ0JBQWdCO2tCQUo1QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxZQUFZO29CQUN0QixRQUFRLEVBQUUsVUFBVTtpQkFDckI7cU1BRVUsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUN5QixRQUFRO3NCQUF0QyxXQUFXO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gIENvbXBvbmVudFJlZixcclxuICBEaXJlY3RpdmUsXHJcbiAgRWxlbWVudFJlZixcclxuICBFbWJlZGRlZFZpZXdSZWYsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSW5qZWN0b3IsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxuICBWaWV3UmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIGZvcmtKb2luLCBmcm9tLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IExvYWRpbmdCYWNrZHJvcENvbXBvbmVudCB9IGZyb20gJy4vbG9hZGluZy1iYWNrZHJvcC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMb2FkaW5nQ29tcG9uZW50IH0gZnJvbSAnLi9sb2FkaW5nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElMb2FkaW5nVmlld1Bvc2l0aW9uLCBMb2FkaW5nU3R5bGUsIExvYWRpbmdUeXBlIH0gZnJvbSAnLi9sb2FkaW5nLnR5cGVzJztcclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbZExvYWRpbmddJyxcclxuICBleHBvcnRBczogJ2RMb2FkaW5nJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIExvYWRpbmdEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIGJhY2tkcm9wOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIG1lc3NhZ2U6IHN0cmluZztcclxuICBASW5wdXQoKSBwb3NpdGlvblR5cGU6IHN0cmluZztcclxuICBASW5wdXQoKSBzaG93TG9hZGluZzogYm9vbGVhbjtcclxuICBASW5wdXQoKSB2aWV3OiBJTG9hZGluZ1ZpZXdQb3NpdGlvbjtcclxuICBASW5wdXQoKSB6SW5kZXg6IG51bWJlcjtcclxuICBASW5wdXQoKSBsb2FkaW5nOiBMb2FkaW5nVHlwZSB8IGJvb2xlYW47XHJcbiAgQElucHV0KCkgbG9hZGluZ1N0eWxlOiBMb2FkaW5nU3R5bGUgPSAnZGVmYXVsdCc7XHJcbiAgQElucHV0KCkgbG9hZGluZ1RlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBIb3N0QmluZGluZygnc3R5bGUucG9zaXRpb24nKSBwb3NpdGlvbjogc3RyaW5nO1xyXG4gIGFjdGl2ZSA9IHRydWU7XHJcbiAgYmFja2Ryb3BSZWY6IENvbXBvbmVudFJlZjxhbnk+O1xyXG4gIGxvYWRpbmdSZWY6IENvbXBvbmVudFJlZjxhbnk+O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgIHByaXZhdGUgdHJpZ2dlckVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWZcclxuICApIHt9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGNvbnN0IHsgYmFja2Ryb3AsIGxvYWRpbmcsIGxvYWRpbmdUZW1wbGF0ZVJlZiwgbWVzc2FnZSwgcG9zaXRpb25UeXBlLCBzaG93TG9hZGluZywgdmlldywgekluZGV4IH0gPSBjaGFuZ2VzO1xyXG4gICAgY29uc3QgY2hhbmdlQXJyID0gW2JhY2tkcm9wLCBsb2FkaW5nLCBsb2FkaW5nVGVtcGxhdGVSZWYsIG1lc3NhZ2UsIHBvc2l0aW9uVHlwZSwgc2hvd0xvYWRpbmcsIHZpZXcsIHpJbmRleF07XHJcbiAgICBpZiAoY2hhbmdlQXJyLmZpbmQoKGl0ZW0pID0+IGl0ZW0gIT09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgLy8gbG9hZGluZyDlhbzlrrlzaG93TG9hZGluZywg6LWL5YC857G75Z6L5Li6IGJvb2xlYW4g5pe26Kem5Y+R5pi+56S6XHJcbiAgICAgIGNvbnN0IGlzQm9vbGVhbiA9IHR5cGVvZiB0aGlzLmxvYWRpbmcgPT09ICdib29sZWFuJztcclxuICAgICAgY29uc3QgZmxhZyA9IGlzQm9vbGVhbiA/IHRoaXMubG9hZGluZyA6IHVuZGVmaW5lZDtcclxuICAgICAgY29uc3QgaXNMb2FkaW5nID0gdGhpcy5zaG93TG9hZGluZyAhPT0gdW5kZWZpbmVkID8gdGhpcy5zaG93TG9hZGluZyA6IGZsYWc7XHJcbiAgICAgIGlmIChpc0xvYWRpbmcgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0xvYWRpbmdDaGFuZ2VFdmVudChpc0xvYWRpbmcgYXMgYm9vbGVhbik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFpc0Jvb2xlYW4gJiYgdGhpcy5sb2FkaW5nKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nQ2hhbmdlRXZlbnQodGhpcy5sb2FkaW5nIGFzIExvYWRpbmdUeXBlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZGluZ0NoYW5nZUV2ZW50KGxvYWRpbmc6IExvYWRpbmdUeXBlKTogdm9pZCB7XHJcbiAgICBpZiAobG9hZGluZyBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN0YXJ0TG9hZGluZygpO1xyXG4gICAgICBsb2FkaW5nLmFkZCgoKSA9PiB0aGlzLmVuZExvYWRpbmcoKSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGxvYWRpbmdBcnIgPSBbXS5jb25jYXQobG9hZGluZykubWFwKChpdGVtKSA9PiAoaXRlbSBpbnN0YW5jZW9mIE9ic2VydmFibGUgPyBpdGVtIDogZnJvbShpdGVtKSkpO1xyXG4gICAgaWYgKGxvYWRpbmdBcnIubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnN0YXJ0TG9hZGluZygpO1xyXG4gICAgICBmb3JrSm9pbihsb2FkaW5nQXJyKVxyXG4gICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKGVycm9yKSA9PiB0aHJvd0Vycm9yKGVycm9yKSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiBudWxsLFxyXG4gICAgICAgICAgZXJyb3I6ICgpID0+IHRoaXMuZW5kTG9hZGluZygpLFxyXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHRoaXMuZW5kTG9hZGluZygpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd0xvYWRpbmdDaGFuZ2VFdmVudChzaG93TG9hZGluZzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKHNob3dMb2FkaW5nID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuc3RhcnRMb2FkaW5nKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVuZExvYWRpbmcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhcnRMb2FkaW5nKCk6IHZvaWQge1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IHRoaXMucG9zaXRpb25UeXBlIHx8ICdyZWxhdGl2ZSc7XHJcblxyXG4gICAgaWYgKHRoaXMuYmFja2Ryb3AgJiYgIXRoaXMuYmFja2Ryb3BSZWYpIHtcclxuICAgICAgdGhpcy5jcmVhdGVMb2FkaW5nQmFja2Ryb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuYmFja2Ryb3AgJiYgdGhpcy5iYWNrZHJvcFJlZikge1xyXG4gICAgICB0aGlzLmJhY2tkcm9wUmVmLmRlc3Ryb3koKTtcclxuICAgICAgdGhpcy5iYWNrZHJvcFJlZiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmxvYWRpbmdSZWYpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nUmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChMb2FkaW5nQ29tcG9uZW50LCB7IGluZGV4OiBudWxsLCBpbmplY3RvcjogdGhpcy5pbmplY3RvciB9KTtcclxuXHJcbiAgICAgIHRoaXMuaW5zZXJ0KHRoaXMubG9hZGluZ1JlZi5ob3N0Vmlldyk7XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLmxvYWRpbmdSZWYuaW5zdGFuY2UsIHtcclxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxyXG4gICAgICBsb2FkaW5nVGVtcGxhdGVSZWY6IHRoaXMubG9hZGluZ1RlbXBsYXRlUmVmLFxyXG4gICAgICB0b3A6IHRoaXMudmlldyA/IHRoaXMudmlldy50b3AgOiAnNTAlJyxcclxuICAgICAgbGVmdDogdGhpcy52aWV3ID8gdGhpcy52aWV3LmxlZnQgOiAnNTAlJyxcclxuICAgICAgaXNDdXN0b21Qb3NpdGlvbjogISF0aGlzLnZpZXcsXHJcbiAgICAgIHpJbmRleDogdGhpcy56SW5kZXggPyB0aGlzLnpJbmRleCA6ICcnLFxyXG4gICAgICBsb2FkaW5nU3R5bGU6IHRoaXMubG9hZGluZ1N0eWxlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVuZExvYWRpbmcoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5sb2FkaW5nUmVmKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ1JlZi5kZXN0cm95KCk7XHJcbiAgICAgIHRoaXMubG9hZGluZ1JlZiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYmFja2Ryb3BSZWYpIHtcclxuICAgICAgdGhpcy5iYWNrZHJvcFJlZi5kZXN0cm95KCk7XHJcbiAgICAgIHRoaXMuYmFja2Ryb3BSZWYgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucG9zaXRpb24gPSAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlTG9hZGluZ0JhY2tkcm9wKCk6IHZvaWQge1xyXG4gICAgdGhpcy5iYWNrZHJvcFJlZiA9XHJcbiAgICAgICF0aGlzLmJhY2tkcm9wUmVmICYmIHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoTG9hZGluZ0JhY2tkcm9wQ29tcG9uZW50LCB7IGluZGV4OiBudWxsLCBpbmplY3RvcjogdGhpcy5pbmplY3RvciB9KTtcclxuXHJcbiAgICB0aGlzLmluc2VydCh0aGlzLmJhY2tkcm9wUmVmLmhvc3RWaWV3KTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuYmFja2Ryb3BSZWYuaW5zdGFuY2UsIHtcclxuICAgICAgdHJpZ2dlckVsZW1lbnRSZWY6IHRoaXMudHJpZ2dlckVsZW1lbnRSZWYsXHJcbiAgICAgIGJhY2tkcm9wOiB0aGlzLmJhY2tkcm9wLFxyXG4gICAgICB6SW5kZXg6IHRoaXMuekluZGV4ID8gdGhpcy56SW5kZXggOiAnJyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnNlcnQodmlld1JlZjogVmlld1JlZik6IFZpZXdSZWYge1xyXG4gICAgKHZpZXdSZWYgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pLnJvb3ROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChub2RlKSk7XHJcbiAgICByZXR1cm4gdmlld1JlZjtcclxuICB9XHJcbn1cclxuIl19