ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
186 lines • 23.9 kB
JavaScript
import { __decorate } from "tslib";
import { DOCUMENT } from '@angular/common';
import { Directive, Inject, Input, Optional } from '@angular/core';
import { fromEvent, Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { WithConfig } from 'ng-zorro-antd/core/config';
import { InputBoolean } from 'ng-zorro-antd/core/util';
import { NZ_DEFAULT_SCALE_STEP } from './image-preview.component';
import * as i0 from "@angular/core";
import * as i1 from "ng-zorro-antd/core/config";
import * as i2 from "./image.service";
import * as i3 from "./image-group.component";
import * as i4 from "@angular/cdk/bidi";
const NZ_CONFIG_MODULE_NAME = 'image';
export class NzImageDirective {
get previewable() {
return !this.nzDisablePreview && this.status !== 'error';
}
constructor(document, nzConfigService, elementRef, nzImageService, cdr, parentGroup, directionality) {
this.document = document;
this.nzConfigService = nzConfigService;
this.elementRef = elementRef;
this.nzImageService = nzImageService;
this.cdr = cdr;
this.parentGroup = parentGroup;
this.directionality = directionality;
this._nzModuleName = NZ_CONFIG_MODULE_NAME;
this.nzSrc = '';
this.nzSrcset = '';
this.nzDisablePreview = false;
this.nzFallback = null;
this.nzPlaceholder = null;
this.nzScaleStep = null;
this.status = 'normal';
this.backLoadDestroy$ = new Subject();
this.destroy$ = new Subject();
}
ngOnInit() {
this.backLoad();
if (this.parentGroup) {
this.parentGroup.addImage(this);
}
if (this.directionality) {
this.directionality.change?.pipe(takeUntil(this.destroy$)).subscribe((direction) => {
this.dir = direction;
this.cdr.detectChanges();
});
this.dir = this.directionality.value;
}
}
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
}
onPreview() {
if (!this.previewable) {
return;
}
if (this.parentGroup) {
// preview inside image group
const previewAbleImages = this.parentGroup.images.filter(e => e.previewable);
const previewImages = previewAbleImages.map(e => ({ src: e.nzSrc, srcset: e.nzSrcset }));
const previewIndex = previewAbleImages.findIndex(el => this === el);
const scaleStepMap = new Map();
previewAbleImages.forEach(imageDirective => {
scaleStepMap.set(imageDirective.nzSrc ?? imageDirective.nzSrcset, imageDirective.nzScaleStep ?? this.parentGroup.nzScaleStep ?? this.nzScaleStep ?? NZ_DEFAULT_SCALE_STEP);
});
const previewRef = this.nzImageService.preview(previewImages, {
nzDirection: this.dir
}, scaleStepMap);
previewRef.switchTo(previewIndex);
}
else {
// preview not inside image group
const previewImages = [{ src: this.nzSrc, srcset: this.nzSrcset }];
this.nzImageService.preview(previewImages, {
nzDirection: this.dir,
nzScaleStep: this.nzScaleStep ?? NZ_DEFAULT_SCALE_STEP
});
}
}
getElement() {
return this.elementRef;
}
ngOnChanges(changes) {
const { nzSrc } = changes;
if (nzSrc) {
this.getElement().nativeElement.src = nzSrc.currentValue;
this.backLoad();
}
}
/**
* use internal Image object handle fallback & placeholder
*
* @private
*/
backLoad() {
this.backLoadImage = this.document.createElement('img');
this.backLoadImage.src = this.nzSrc;
this.backLoadImage.srcset = this.nzSrcset;
this.status = 'loading';
// unsubscribe last backLoad
this.backLoadDestroy$.next();
this.backLoadDestroy$.complete();
this.backLoadDestroy$ = new Subject();
if (this.backLoadImage.complete) {
this.status = 'normal';
this.getElement().nativeElement.src = this.nzSrc;
this.getElement().nativeElement.srcset = this.nzSrcset;
}
else {
if (this.nzPlaceholder) {
this.getElement().nativeElement.src = this.nzPlaceholder;
this.getElement().nativeElement.srcset = '';
}
else {
this.getElement().nativeElement.src = this.nzSrc;
this.getElement().nativeElement.srcset = this.nzSrcset;
}
// The `nz-image` directive can be destroyed before the `load` or `error` event is dispatched,
// so there's no sense to keep capturing `this`.
fromEvent(this.backLoadImage, 'load')
.pipe(takeUntil(this.backLoadDestroy$), takeUntil(this.destroy$))
.subscribe(() => {
this.status = 'normal';
this.getElement().nativeElement.src = this.nzSrc;
this.getElement().nativeElement.srcset = this.nzSrcset;
});
fromEvent(this.backLoadImage, 'error')
.pipe(takeUntil(this.backLoadDestroy$), takeUntil(this.destroy$))
.subscribe(() => {
this.status = 'error';
if (this.nzFallback) {
this.getElement().nativeElement.src = this.nzFallback;
this.getElement().nativeElement.srcset = '';
}
});
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: NzImageDirective, deps: [{ token: DOCUMENT }, { token: i1.NzConfigService }, { token: i0.ElementRef }, { token: i2.NzImageService }, { token: i0.ChangeDetectorRef }, { token: i3.NzImageGroupComponent, optional: true }, { token: i4.Directionality, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.7", type: NzImageDirective, isStandalone: true, selector: "img[nz-image]", inputs: { nzSrc: "nzSrc", nzSrcset: "nzSrcset", nzDisablePreview: "nzDisablePreview", nzFallback: "nzFallback", nzPlaceholder: "nzPlaceholder", nzScaleStep: "nzScaleStep" }, host: { listeners: { "click": "onPreview()" } }, exportAs: ["nzImage"], usesOnChanges: true, ngImport: i0 }); }
}
__decorate([
InputBoolean(),
WithConfig()
], NzImageDirective.prototype, "nzDisablePreview", void 0);
__decorate([
WithConfig()
], NzImageDirective.prototype, "nzFallback", void 0);
__decorate([
WithConfig()
], NzImageDirective.prototype, "nzPlaceholder", void 0);
__decorate([
WithConfig()
], NzImageDirective.prototype, "nzScaleStep", void 0);
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: NzImageDirective, decorators: [{
type: Directive,
args: [{
selector: 'img[nz-image]',
exportAs: 'nzImage',
host: {
'(click)': 'onPreview()'
},
standalone: true
}]
}], ctorParameters: () => [{ type: undefined, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }, { type: i1.NzConfigService }, { type: i0.ElementRef }, { type: i2.NzImageService }, { type: i0.ChangeDetectorRef }, { type: i3.NzImageGroupComponent, decorators: [{
type: Optional
}] }, { type: i4.Directionality, decorators: [{
type: Optional
}] }], propDecorators: { nzSrc: [{
type: Input
}], nzSrcset: [{
type: Input
}], nzDisablePreview: [{
type: Input
}], nzFallback: [{
type: Input
}], nzPlaceholder: [{
type: Input
}], nzScaleStep: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50cy9pbWFnZS9pbWFnZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQU1BLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBRUwsU0FBUyxFQUVULE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUVULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQWdDLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXJGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUd2RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7O0FBR2xFLE1BQU0scUJBQXFCLEdBQWdCLE9BQU8sQ0FBQztBQWNuRCxNQUFNLE9BQU8sZ0JBQWdCO0lBa0IzQixJQUFJLFdBQVc7UUFDYixPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDO0lBQzNELENBQUM7SUFFRCxZQUM0QixRQUFtQixFQUN0QyxlQUFnQyxFQUMvQixVQUFzQixFQUN0QixjQUE4QixFQUM1QixHQUFzQixFQUNaLFdBQWtDLEVBQ2xDLGNBQThCO1FBTnhCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDdEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQy9CLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzVCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ1osZ0JBQVcsR0FBWCxXQUFXLENBQXVCO1FBQ2xDLG1CQUFjLEdB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QWpDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9ORy1aT1JSTy9uZy16b3Jyby1hbnRkL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBEaXJlY3Rpb24sIERpcmVjdGlvbmFsaXR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTnpDb25maWdLZXksIE56Q29uZmlnU2VydmljZSwgV2l0aENvbmZpZyB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS9jb25maWcnO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBOelNhZmVBbnkgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuaW1wb3J0IHsgSW5wdXRCb29sZWFuIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3V0aWwnO1xuXG5pbXBvcnQgeyBOekltYWdlR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL2ltYWdlLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOWl9ERUZBVUxUX1NDQUxFX1NURVAgfSBmcm9tICcuL2ltYWdlLXByZXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IE56SW1hZ2VTZXJ2aWNlIH0gZnJvbSAnLi9pbWFnZS5zZXJ2aWNlJztcblxuY29uc3QgTlpfQ09ORklHX01PRFVMRV9OQU1FOiBOekNvbmZpZ0tleSA9ICdpbWFnZSc7XG5cbmV4cG9ydCB0eXBlIEltYWdlU3RhdHVzVHlwZSA9ICdlcnJvcicgfCAnbG9hZGluZycgfCAnbm9ybWFsJztcbmV4cG9ydCB0eXBlIE56SW1hZ2VVcmwgPSBzdHJpbmc7XG5leHBvcnQgdHlwZSBOekltYWdlU2NhbGVTdGVwID0gbnVtYmVyO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdpbWdbbnotaW1hZ2VdJyxcbiAgZXhwb3J0QXM6ICduekltYWdlJyxcbiAgaG9zdDoge1xuICAgICcoY2xpY2spJzogJ29uUHJldmlldygpJ1xuICB9LFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIE56SW1hZ2VEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgcmVhZG9ubHkgX256TW9kdWxlTmFtZTogTnpDb25maWdLZXkgPSBOWl9DT05GSUdfTU9EVUxFX05BTUU7XG5cbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX256RGlzYWJsZVByZXZpZXc6IEJvb2xlYW5JbnB1dDtcblxuICBASW5wdXQoKSBuelNyYyA9ICcnO1xuICBASW5wdXQoKSBuelNyY3NldCA9ICcnO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgQFdpdGhDb25maWcoKSBuekRpc2FibGVQcmV2aWV3OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIEBXaXRoQ29uZmlnKCkgbnpGYWxsYmFjazogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIEBXaXRoQ29uZmlnKCkgbnpQbGFjZWhvbGRlcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIEBXaXRoQ29uZmlnKCkgbnpTY2FsZVN0ZXA6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIGRpcj86IERpcmVjdGlvbjtcbiAgYmFja0xvYWRJbWFnZSE6IEhUTUxJbWFnZUVsZW1lbnQ7XG4gIHN0YXR1czogSW1hZ2VTdGF0dXNUeXBlID0gJ25vcm1hbCc7XG4gIHByaXZhdGUgYmFja0xvYWREZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIGdldCBwcmV2aWV3YWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMubnpEaXNhYmxlUHJldmlldyAmJiB0aGlzLnN0YXR1cyAhPT0gJ2Vycm9yJztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IE56U2FmZUFueSxcbiAgICBwdWJsaWMgbnpDb25maWdTZXJ2aWNlOiBOekNvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgbnpJbWFnZVNlcnZpY2U6IE56SW1hZ2VTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcGFyZW50R3JvdXA6IE56SW1hZ2VHcm91cENvbXBvbmVudCxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGRpcmVjdGlvbmFsaXR5OiBEaXJlY3Rpb25hbGl0eVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5iYWNrTG9hZCgpO1xuICAgIGlmICh0aGlzLnBhcmVudEdyb3VwKSB7XG4gICAgICB0aGlzLnBhcmVudEdyb3VwLmFkZEltYWdlKHRoaXMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaXJlY3Rpb25hbGl0eSkge1xuICAgICAgdGhpcy5kaXJlY3Rpb25hbGl0eS5jaGFuZ2U/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGRpcmVjdGlvbjogRGlyZWN0aW9uKSA9PiB7XG4gICAgICAgIHRoaXMuZGlyID0gZGlyZWN0aW9uO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGlyID0gdGhpcy5kaXJlY3Rpb25hbGl0eS52YWx1ZTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBvblByZXZpZXcoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByZXZpZXdhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGFyZW50R3JvdXApIHtcbiAgICAgIC8vIHByZXZpZXcgaW5zaWRlIGltYWdlIGdyb3VwXG4gICAgICBjb25zdCBwcmV2aWV3QWJsZUltYWdlcyA9IHRoaXMucGFyZW50R3JvdXAuaW1hZ2VzLmZpbHRlcihlID0+IGUucHJldmlld2FibGUpO1xuICAgICAgY29uc3QgcHJldmlld0ltYWdlcyA9IHByZXZpZXdBYmxlSW1hZ2VzLm1hcChlID0+ICh7IHNyYzogZS5uelNyYywgc3Jjc2V0OiBlLm56U3Jjc2V0IH0pKTtcbiAgICAgIGNvbnN0IHByZXZpZXdJbmRleCA9IHByZXZpZXdBYmxlSW1hZ2VzLmZpbmRJbmRleChlbCA9PiB0aGlzID09PSBlbCk7XG4gICAgICBjb25zdCBzY2FsZVN0ZXBNYXAgPSBuZXcgTWFwPE56SW1hZ2VVcmwsIE56SW1hZ2VTY2FsZVN0ZXA+KCk7XG4gICAgICBwcmV2aWV3QWJsZUltYWdlcy5mb3JFYWNoKGltYWdlRGlyZWN0aXZlID0+IHtcbiAgICAgICAgc2NhbGVTdGVwTWFwLnNldChcbiAgICAgICAgICBpbWFnZURpcmVjdGl2ZS5uelNyYyA/PyBpbWFnZURpcmVjdGl2ZS5uelNyY3NldCxcbiAgICAgICAgICBpbWFnZURpcmVjdGl2ZS5uelNjYWxlU3RlcCA/PyB0aGlzLnBhcmVudEdyb3VwLm56U2NhbGVTdGVwID8/IHRoaXMubnpTY2FsZVN0ZXAgPz8gTlpfREVGQVVMVF9TQ0FMRV9TVEVQXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByZXZpZXdSZWYgPSB0aGlzLm56SW1hZ2VTZXJ2aWNlLnByZXZpZXcoXG4gICAgICAgIHByZXZpZXdJbWFnZXMsXG4gICAgICAgIHtcbiAgICAgICAgICBuekRpcmVjdGlvbjogdGhpcy5kaXJcbiAgICAgICAgfSxcbiAgICAgICAgc2NhbGVTdGVwTWFwXG4gICAgICApO1xuICAgICAgcHJldmlld1JlZi5zd2l0Y2hUbyhwcmV2aWV3SW5kZXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBwcmV2aWV3IG5vdCBpbnNpZGUgaW1hZ2UgZ3JvdXBcbiAgICAgIGNvbnN0IHByZXZpZXdJbWFnZXMgPSBbeyBzcmM6IHRoaXMubnpTcmMsIHNyY3NldDogdGhpcy5uelNyY3NldCB9XTtcbiAgICAgIHRoaXMubnpJbWFnZVNlcnZpY2UucHJldmlldyhwcmV2aWV3SW1hZ2VzLCB7XG4gICAgICAgIG56RGlyZWN0aW9uOiB0aGlzLmRpcixcbiAgICAgICAgbnpTY2FsZVN0ZXA6IHRoaXMubnpTY2FsZVN0ZXAgPz8gTlpfREVGQVVMVF9TQ0FMRV9TVEVQXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRFbGVtZW50KCk6IEVsZW1lbnRSZWY8SFRNTEltYWdlRWxlbWVudD4ge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWY7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgeyBuelNyYyB9ID0gY2hhbmdlcztcbiAgICBpZiAobnpTcmMpIHtcbiAgICAgIHRoaXMuZ2V0RWxlbWVudCgpLm5hdGl2ZUVsZW1lbnQuc3JjID0gbnpTcmMuY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy5iYWNrTG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB1c2UgaW50ZXJuYWwgSW1hZ2Ugb2JqZWN0IGhhbmRsZSBmYWxsYmFjayAmIHBsYWNlaG9sZGVyXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGJhY2tMb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuYmFja0xvYWRJbWFnZSA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgdGhpcy5iYWNrTG9hZEltYWdlLnNyYyA9IHRoaXMubnpTcmM7XG4gICAgdGhpcy5iYWNrTG9hZEltYWdlLnNyY3NldCA9IHRoaXMubnpTcmNzZXQ7XG4gICAgdGhpcy5zdGF0dXMgPSAnbG9hZGluZyc7XG5cbiAgICAvLyB1bnN1YnNjcmliZSBsYXN0IGJhY2tMb2FkXG4gICAgdGhpcy5iYWNrTG9hZERlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmJhY2tMb2FkRGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB0aGlzLmJhY2tMb2FkRGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuICAgIGlmICh0aGlzLmJhY2tMb2FkSW1hZ2UuY29tcGxldGUpIHtcbiAgICAgIHRoaXMuc3RhdHVzID0gJ25vcm1hbCc7XG4gICAgICB0aGlzLmdldEVsZW1lbnQoKS5uYXRpdmVFbGVtZW50LnNyYyA9IHRoaXMubnpTcmM7XG4gICAgICB0aGlzLmdldEVsZW1lbnQoKS5uYXRpdmVFbGVtZW50LnNyY3NldCA9IHRoaXMubnpTcmNzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLm56UGxhY2Vob2xkZXIpIHtcbiAgICAgICAgdGhpcy5nZXRFbGVtZW50KCkubmF0aXZlRWxlbWVudC5zcmMgPSB0aGlzLm56UGxhY2Vob2xkZXI7XG4gICAgICAgIHRoaXMuZ2V0RWxlbWVudCgpLm5hdGl2ZUVsZW1lbnQuc3Jjc2V0ID0gJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmdldEVsZW1lbnQoKS5uYXRpdmVFbGVtZW50LnNyYyA9IHRoaXMubnpTcmM7XG4gICAgICAgIHRoaXMuZ2V0RWxlbWVudCgpLm5hdGl2ZUVsZW1lbnQuc3Jjc2V0ID0gdGhpcy5uelNyY3NldDtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGBuei1pbWFnZWAgZGlyZWN0aXZlIGNhbiBiZSBkZXN0cm95ZWQgYmVmb3JlIHRoZSBgbG9hZGAgb3IgYGVycm9yYCBldmVudCBpcyBkaXNwYXRjaGVkLFxuICAgICAgLy8gc28gdGhlcmUncyBubyBzZW5zZSB0byBrZWVwIGNhcHR1cmluZyBgdGhpc2AuXG4gICAgICBmcm9tRXZlbnQodGhpcy5iYWNrTG9hZEltYWdlLCAnbG9hZCcpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmJhY2tMb2FkRGVzdHJveSQpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc3RhdHVzID0gJ25vcm1hbCc7XG4gICAgICAgICAgdGhpcy5nZXRFbGVtZW50KCkubmF0aXZlRWxlbWVudC5zcmMgPSB0aGlzLm56U3JjO1xuICAgICAgICAgIHRoaXMuZ2V0RWxlbWVudCgpLm5hdGl2ZUVsZW1lbnQuc3Jjc2V0ID0gdGhpcy5uelNyY3NldDtcbiAgICAgICAgfSk7XG5cbiAgICAgIGZyb21FdmVudCh0aGlzLmJhY2tMb2FkSW1hZ2UsICdlcnJvcicpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmJhY2tMb2FkRGVzdHJveSQpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc3RhdHVzID0gJ2Vycm9yJztcbiAgICAgICAgICBpZiAodGhpcy5uekZhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmdldEVsZW1lbnQoKS5uYXRpdmVFbGVtZW50LnNyYyA9IHRoaXMubnpGYWxsYmFjaztcbiAgICAgICAgICAgIHRoaXMuZ2V0RWxlbWVudCgpLm5hdGl2ZUVsZW1lbnQuc3Jjc2V0ID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==