ng-devui
Version:
DevUI components based on Angular
138 lines • 19.8 kB
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9kZXZ1aS9sb2FkaW5nL2xvYWRpbmcuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx3QkFBd0IsRUFFeEIsU0FBUyxFQUNULFVBQVUsRUFFVixXQUFXLEVBQ1gsUUFBUSxFQUNSLEtBQUssRUFHTCxXQUFXLEVBQ1gsZ0JBQWdCLEdBRWpCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFNdkQsTUFBTSxPQUFPLGdCQUFnQjtJQWUzQixZQUNVLHdCQUFrRCxFQUNsRCxVQUFzQixFQUN0QixRQUFrQixFQUNsQixpQkFBNkIsRUFDN0IsZ0JBQWtDO1FBSmxDLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBWTtRQUM3QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBWm5DLGlCQUFZLEdBQWlCLFNBQVMsQ0FBQztRQUdoRCxXQUFNLEdBQUcsSUFBSSxDQUFDO0lBVVgsQ0FBQztJQUVKLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FB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QWdCO2tCQUo1QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxZQUFZO29CQUN0QixRQUFRLEVBQUUsVUFBVTtpQkFDckI7cU1BRVUsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUN5QixRQUFRO3NCQUF0QyxXQUFXO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gIENvbXBvbmVudFJlZixcclxuICBEaXJlY3RpdmUsXHJcbiAgRWxlbWVudFJlZixcclxuICBFbWJlZGRlZFZpZXdSZWYsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSW5qZWN0b3IsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxuICBWaWV3UmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIGZvcmtKb2luLCBmcm9tLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IExvYWRpbmdCYWNrZHJvcENvbXBvbmVudCB9IGZyb20gJy4vbG9hZGluZy1iYWNrZHJvcC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMb2FkaW5nQ29tcG9uZW50IH0gZnJvbSAnLi9sb2FkaW5nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElMb2FkaW5nVmlld1Bvc2l0aW9uLCBMb2FkaW5nU3R5bGUsIExvYWRpbmdUeXBlIH0gZnJvbSAnLi9sb2FkaW5nLnR5cGVzJztcclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbZExvYWRpbmddJyxcclxuICBleHBvcnRBczogJ2RMb2FkaW5nJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIExvYWRpbmdEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIGJhY2tkcm9wOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIG1lc3NhZ2U6IHN0cmluZztcclxuICBASW5wdXQoKSBwb3NpdGlvblR5cGU6IHN0cmluZztcclxuICBASW5wdXQoKSBzaG93TG9hZGluZzogYm9vbGVhbjtcclxuICBASW5wdXQoKSB2aWV3OiBJTG9hZGluZ1ZpZXdQb3NpdGlvbjtcclxuICBASW5wdXQoKSB6SW5kZXg6IG51bWJlcjtcclxuICBASW5wdXQoKSBsb2FkaW5nOiBMb2FkaW5nVHlwZSB8IGJvb2xlYW47XHJcbiAgQElucHV0KCkgbG9hZGluZ1N0eWxlOiBMb2FkaW5nU3R5bGUgPSAnZGVmYXVsdCc7XHJcbiAgQElucHV0KCkgbG9hZGluZ1RlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBIb3N0QmluZGluZygnc3R5bGUucG9zaXRpb24nKSBwb3NpdGlvbjogc3RyaW5nO1xyXG4gIGFjdGl2ZSA9IHRydWU7XHJcbiAgYmFja2Ryb3BSZWY6IENvbXBvbmVudFJlZjxhbnk+O1xyXG4gIGxvYWRpbmdSZWY6IENvbXBvbmVudFJlZjxhbnk+O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgIHByaXZhdGUgdHJpZ2dlckVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWZcclxuICApIHt9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGNvbnN0IHsgYmFja2Ryb3AsIGxvYWRpbmcsIGxvYWRpbmdUZW1wbGF0ZVJlZiwgbWVzc2FnZSwgcG9zaXRpb25UeXBlLCBzaG93TG9hZGluZywgdmlldywgekluZGV4IH0gPSBjaGFuZ2VzO1xyXG4gICAgY29uc3QgY2hhbmdlQXJyID0gW2JhY2tkcm9wLCBsb2FkaW5nLCBsb2FkaW5nVGVtcGxhdGVSZWYsIG1lc3NhZ2UsIHBvc2l0aW9uVHlwZSwgc2hvd0xvYWRpbmcsIHZpZXcsIHpJbmRleF07XHJcbiAgICBpZiAoY2hhbmdlQXJyLmZpbmQoKGl0ZW0pID0+IGl0ZW0gIT09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgLy8gbG9hZGluZyDlhbzlrrlzaG93TG9hZGluZywg6LWL5YC857G75Z6L5Li6IGJvb2xlYW4g5pe26Kem5Y+R5pi+56S6XHJcbiAgICAgIGNvbnN0IGlzQm9vbGVhbiA9IHR5cGVvZiB0aGlzLmxvYWRpbmcgPT09ICdib29sZWFuJztcclxuICAgICAgY29uc3QgZmxhZyA9IGlzQm9vbGVhbiA/IHRoaXMubG9hZGluZyA6IHVuZGVmaW5lZDtcclxuICAgICAgY29uc3QgaXNMb2FkaW5nID0gdGhpcy5zaG93TG9hZGluZyAhPT0gdW5kZWZpbmVkID8gdGhpcy5zaG93TG9hZGluZyA6IGZsYWc7XHJcbiAgICAgIGlmIChpc0xvYWRpbmcgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0xvYWRpbmdDaGFuZ2VFdmVudChpc0xvYWRpbmcgYXMgYm9vbGVhbik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFpc0Jvb2xlYW4gJiYgdGhpcy5sb2FkaW5nKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nQ2hhbmdlRXZlbnQodGhpcy5sb2FkaW5nIGFzIExvYWRpbmdUeXBlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZGluZ0NoYW5nZUV2ZW50KGxvYWRpbmc6IExvYWRpbmdUeXBlKTogdm9pZCB7XHJcbiAgICBpZiAobG9hZGluZyBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN0YXJ0TG9hZGluZygpO1xyXG4gICAgICBsb2FkaW5nLmFkZCgoKSA9PiB0aGlzLmVuZExvYWRpbmcoKSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGxvYWRpbmdBcnIgPSBbXS5jb25jYXQobG9hZGluZykubWFwKChpdGVtKSA9PiAoaXRlbSBpbnN0YW5jZW9mIE9ic2VydmFibGUgPyBpdGVtIDogZnJvbShpdGVtKSkpO1xyXG4gICAgaWYgKGxvYWRpbmdBcnIubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnN0YXJ0TG9hZGluZygpO1xyXG4gICAgICBmb3JrSm9pbihsb2FkaW5nQXJyKVxyXG4gICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKGVycm9yKSA9PiB0aHJvd0Vycm9yKGVycm9yKSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiBudWxsLFxyXG4gICAgICAgICAgZXJyb3I6ICgpID0+IHRoaXMuZW5kTG9hZGluZygpLFxyXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHRoaXMuZW5kTG9hZGluZygpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd0xvYWRpbmdDaGFuZ2VFdmVudChzaG93TG9hZGluZzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKHNob3dMb2FkaW5nID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuc3RhcnRMb2FkaW5nKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVuZExvYWRpbmcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhcnRMb2FkaW5nKCk6IHZvaWQge1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IHRoaXMucG9zaXRpb25UeXBlIHx8ICdyZWxhdGl2ZSc7XHJcblxyXG4gICAgaWYgKHRoaXMuYmFja2Ryb3AgJiYgIXRoaXMuYmFja2Ryb3BSZWYpIHtcclxuICAgICAgdGhpcy5jcmVhdGVMb2FkaW5nQmFja2Ryb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuYmFja2Ryb3AgJiYgdGhpcy5iYWNrZHJvcFJlZikge1xyXG4gICAgICB0aGlzLmJhY2tkcm9wUmVmLmRlc3Ryb3koKTtcclxuICAgICAgdGhpcy5iYWNrZHJvcFJlZiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmxvYWRpbmdSZWYpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nUmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChMb2FkaW5nQ29tcG9uZW50LCB7IGluZGV4OiBudWxsLCBpbmplY3RvcjogdGhpcy5pbmplY3RvciB9KTtcclxuXHJcbiAgICAgIHRoaXMuaW5zZXJ0KHRoaXMubG9hZGluZ1JlZi5ob3N0Vmlldyk7XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLmxvYWRpbmdSZWYuaW5zdGFuY2UsIHtcclxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxyXG4gICAgICBsb2FkaW5nVGVtcGxhdGVSZWY6IHRoaXMubG9hZGluZ1RlbXBsYXRlUmVmLFxyXG4gICAgICB0b3A6IHRoaXMudmlldyA/IHRoaXMudmlldy50b3AgOiAnNTAlJyxcclxuICAgICAgbGVmdDogdGhpcy52aWV3ID8gdGhpcy52aWV3LmxlZnQgOiAnNTAlJyxcclxuICAgICAgaXNDdXN0b21Qb3NpdGlvbjogISF0aGlzLnZpZXcsXHJcbiAgICAgIHpJbmRleDogdGhpcy56SW5kZXggPyB0aGlzLnpJbmRleCA6ICcnLFxyXG4gICAgICBsb2FkaW5nU3R5bGU6IHRoaXMubG9hZGluZ1N0eWxlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVuZExvYWRpbmcoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5sb2FkaW5nUmVmKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ1JlZi5kZXN0cm95KCk7XHJcbiAgICAgIHRoaXMubG9hZGluZ1JlZiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYmFja2Ryb3BSZWYpIHtcclxuICAgICAgdGhpcy5iYWNrZHJvcFJlZi5kZXN0cm95KCk7XHJcbiAgICAgIHRoaXMuYmFja2Ryb3BSZWYgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucG9zaXRpb24gPSAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlTG9hZGluZ0JhY2tkcm9wKCk6IHZvaWQge1xyXG4gICAgdGhpcy5iYWNrZHJvcFJlZiA9XHJcbiAgICAgICF0aGlzLmJhY2tkcm9wUmVmICYmIHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoTG9hZGluZ0JhY2tkcm9wQ29tcG9uZW50LCB7IGluZGV4OiBudWxsLCBpbmplY3RvcjogdGhpcy5pbmplY3RvciB9KTtcclxuXHJcbiAgICB0aGlzLmluc2VydCh0aGlzLmJhY2tkcm9wUmVmLmhvc3RWaWV3KTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuYmFja2Ryb3BSZWYuaW5zdGFuY2UsIHtcclxuICAgICAgdHJpZ2dlckVsZW1lbnRSZWY6IHRoaXMudHJpZ2dlckVsZW1lbnRSZWYsXHJcbiAgICAgIGJhY2tkcm9wOiB0aGlzLmJhY2tkcm9wLFxyXG4gICAgICB6SW5kZXg6IHRoaXMuekluZGV4ID8gdGhpcy56SW5kZXggOiAnJyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnNlcnQodmlld1JlZjogVmlld1JlZik6IFZpZXdSZWYge1xyXG4gICAgKHZpZXdSZWYgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pLnJvb3ROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChub2RlKSk7XHJcbiAgICByZXR1cm4gdmlld1JlZjtcclxuICB9XHJcbn1cclxuIl19