ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
185 lines • 24 kB
JavaScript
import { __decorate } from "tslib";
import { DOCUMENT } from '@angular/common';
import { Directive, Inject, Input, Optional, booleanAttribute } from '@angular/core';
import { Subject, fromEvent } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { WithConfig } from 'ng-zorro-antd/core/config';
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: "18.0.1", 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: "16.1.0", version: "18.0.1", type: NzImageDirective, isStandalone: true, selector: "img[nz-image]", inputs: { nzSrc: "nzSrc", nzSrcset: "nzSrcset", nzDisablePreview: ["nzDisablePreview", "nzDisablePreview", booleanAttribute], nzFallback: "nzFallback", nzPlaceholder: "nzPlaceholder", nzScaleStep: "nzScaleStep" }, host: { listeners: { "click": "onPreview()" } }, exportAs: ["nzImage"], usesOnChanges: true, ngImport: i0 }); }
}
__decorate([
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: "18.0.1", 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,
args: [{ transform: booleanAttribute }]
}], nzFallback: [{
type: Input
}], nzPlaceholder: [{
type: Input
}], nzScaleStep: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50cy9pbWFnZS9pbWFnZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQU1BLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBRUwsU0FBUyxFQUVULE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUVSLGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFnQyxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUlyRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7O0FBR2xFLE1BQU0scUJBQXFCLEdBQWdCLE9BQU8sQ0FBQztBQWNuRCxNQUFNLE9BQU8sZ0JBQWdCO0lBZ0IzQixJQUFJLFdBQVc7UUFDYixPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDO0lBQzNELENBQUM7SUFFRCxZQUM0QixRQUFtQixFQUN0QyxlQUFnQyxFQUMvQixVQUFzQixFQUN0QixjQUE4QixFQUM1QixHQUFzQixFQUNaLFdBQWtDLEVBQ2xDLGNBQThCO1FBTnhCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDdEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQy9CLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzVCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ1osZ0JBQVcsR0FBWCxXQUFXLENBQXVCO1FBQ2xDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQTFCM0Msa0JBQWEsR0FB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Z0I7c0JBQXJFLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ2YsVUFBVTtzQkFBaEMsS0FBSztnQkFDaUIsYUFBYTtzQkFBbkMsS0FBSztnQkFDaUIsV0FBVztzQkFBakMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IERpcmVjdGlvbiwgRGlyZWN0aW9uYWxpdHkgfSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgYm9vbGVhbkF0dHJpYnV0ZVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBOekNvbmZpZ0tleSwgTnpDb25maWdTZXJ2aWNlLCBXaXRoQ29uZmlnIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL2NvbmZpZyc7XG5pbXBvcnQgeyBOelNhZmVBbnkgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuXG5pbXBvcnQgeyBOekltYWdlR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL2ltYWdlLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOWl9ERUZBVUxUX1NDQUxFX1NURVAgfSBmcm9tICcuL2ltYWdlLXByZXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IE56SW1hZ2VTZXJ2aWNlIH0gZnJvbSAnLi9pbWFnZS5zZXJ2aWNlJztcblxuY29uc3QgTlpfQ09ORklHX01PRFVMRV9OQU1FOiBOekNvbmZpZ0tleSA9ICdpbWFnZSc7XG5cbmV4cG9ydCB0eXBlIEltYWdlU3RhdHVzVHlwZSA9ICdlcnJvcicgfCAnbG9hZGluZycgfCAnbm9ybWFsJztcbmV4cG9ydCB0eXBlIE56SW1hZ2VVcmwgPSBzdHJpbmc7XG5leHBvcnQgdHlwZSBOekltYWdlU2NhbGVTdGVwID0gbnVtYmVyO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdpbWdbbnotaW1hZ2VdJyxcbiAgZXhwb3J0QXM6ICduekltYWdlJyxcbiAgaG9zdDoge1xuICAgICcoY2xpY2spJzogJ29uUHJldmlldygpJ1xuICB9LFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIE56SW1hZ2VEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgcmVhZG9ubHkgX256TW9kdWxlTmFtZTogTnpDb25maWdLZXkgPSBOWl9DT05GSUdfTU9EVUxFX05BTUU7XG5cbiAgQElucHV0KCkgbnpTcmMgPSAnJztcbiAgQElucHV0KCkgbnpTcmNzZXQgPSAnJztcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIEBXaXRoQ29uZmlnKCkgbnpEaXNhYmxlUHJldmlldzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBAV2l0aENvbmZpZygpIG56RmFsbGJhY2s6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBAV2l0aENvbmZpZygpIG56UGxhY2Vob2xkZXI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBAV2l0aENvbmZpZygpIG56U2NhbGVTdGVwOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBkaXI/OiBEaXJlY3Rpb247XG4gIGJhY2tMb2FkSW1hZ2UhOiBIVE1MSW1hZ2VFbGVtZW50O1xuICBzdGF0dXM6IEltYWdlU3RhdHVzVHlwZSA9ICdub3JtYWwnO1xuICBwcml2YXRlIGJhY2tMb2FkRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICBnZXQgcHJldmlld2FibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLm56RGlzYWJsZVByZXZpZXcgJiYgdGhpcy5zdGF0dXMgIT09ICdlcnJvcic7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBOelNhZmVBbnksXG4gICAgcHVibGljIG56Q29uZmlnU2VydmljZTogTnpDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIG56SW1hZ2VTZXJ2aWNlOiBOekltYWdlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHBhcmVudEdyb3VwOiBOekltYWdlR3JvdXBDb21wb25lbnQsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBkaXJlY3Rpb25hbGl0eTogRGlyZWN0aW9uYWxpdHlcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYmFja0xvYWQoKTtcbiAgICBpZiAodGhpcy5wYXJlbnRHcm91cCkge1xuICAgICAgdGhpcy5wYXJlbnRHcm91cC5hZGRJbWFnZSh0aGlzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlyZWN0aW9uYWxpdHkpIHtcbiAgICAgIHRoaXMuZGlyZWN0aW9uYWxpdHkuY2hhbmdlPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChkaXJlY3Rpb246IERpcmVjdGlvbikgPT4ge1xuICAgICAgICB0aGlzLmRpciA9IGRpcmVjdGlvbjtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmRpciA9IHRoaXMuZGlyZWN0aW9uYWxpdHkudmFsdWU7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgb25QcmV2aWV3KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wcmV2aWV3YWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBhcmVudEdyb3VwKSB7XG4gICAgICAvLyBwcmV2aWV3IGluc2lkZSBpbWFnZSBncm91cFxuICAgICAgY29uc3QgcHJldmlld0FibGVJbWFnZXMgPSB0aGlzLnBhcmVudEdyb3VwLmltYWdlcy5maWx0ZXIoZSA9PiBlLnByZXZpZXdhYmxlKTtcbiAgICAgIGNvbnN0IHByZXZpZXdJbWFnZXMgPSBwcmV2aWV3QWJsZUltYWdlcy5tYXAoZSA9PiAoeyBzcmM6IGUubnpTcmMsIHNyY3NldDogZS5uelNyY3NldCB9KSk7XG4gICAgICBjb25zdCBwcmV2aWV3SW5kZXggPSBwcmV2aWV3QWJsZUltYWdlcy5maW5kSW5kZXgoZWwgPT4gdGhpcyA9PT0gZWwpO1xuICAgICAgY29uc3Qgc2NhbGVTdGVwTWFwID0gbmV3IE1hcDxOekltYWdlVXJsLCBOekltYWdlU2NhbGVTdGVwPigpO1xuICAgICAgcHJldmlld0FibGVJbWFnZXMuZm9yRWFjaChpbWFnZURpcmVjdGl2ZSA9PiB7XG4gICAgICAgIHNjYWxlU3RlcE1hcC5zZXQoXG4gICAgICAgICAgaW1hZ2VEaXJlY3RpdmUubnpTcmMgPz8gaW1hZ2VEaXJlY3RpdmUubnpTcmNzZXQsXG4gICAgICAgICAgaW1hZ2VEaXJlY3RpdmUubnpTY2FsZVN0ZXAgPz8gdGhpcy5wYXJlbnRHcm91cC5uelNjYWxlU3RlcCA/PyB0aGlzLm56U2NhbGVTdGVwID8/IE5aX0RFRkFVTFRfU0NBTEVfU1RFUFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBwcmV2aWV3UmVmID0gdGhpcy5uekltYWdlU2VydmljZS5wcmV2aWV3KFxuICAgICAgICBwcmV2aWV3SW1hZ2VzLFxuICAgICAgICB7XG4gICAgICAgICAgbnpEaXJlY3Rpb246IHRoaXMuZGlyXG4gICAgICAgIH0sXG4gICAgICAgIHNjYWxlU3RlcE1hcFxuICAgICAgKTtcbiAgICAgIHByZXZpZXdSZWYuc3dpdGNoVG8ocHJldmlld0luZGV4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcHJldmlldyBub3QgaW5zaWRlIGltYWdlIGdyb3VwXG4gICAgICBjb25zdCBwcmV2aWV3SW1hZ2VzID0gW3sgc3JjOiB0aGlzLm56U3JjLCBzcmNzZXQ6IHRoaXMubnpTcmNzZXQgfV07XG4gICAgICB0aGlzLm56SW1hZ2VTZXJ2aWNlLnByZXZpZXcocHJldmlld0ltYWdlcywge1xuICAgICAgICBuekRpcmVjdGlvbjogdGhpcy5kaXIsXG4gICAgICAgIG56U2NhbGVTdGVwOiB0aGlzLm56U2NhbGVTdGVwID8/IE5aX0RFRkFVTFRfU0NBTEVfU1RFUFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RWxlbWVudCgpOiBFbGVtZW50UmVmPEhUTUxJbWFnZUVsZW1lbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IHsgbnpTcmMgfSA9IGNoYW5nZXM7XG4gICAgaWYgKG56U3JjKSB7XG4gICAgICB0aGlzLmdldEVsZW1lbnQoKS5uYXRpdmVFbGVtZW50LnNyYyA9IG56U3JjLmN1cnJlbnRWYWx1ZTtcbiAgICAgIHRoaXMuYmFja0xvYWQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdXNlIGludGVybmFsIEltYWdlIG9iamVjdCBoYW5kbGUgZmFsbGJhY2sgJiBwbGFjZWhvbGRlclxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBiYWNrTG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLmJhY2tMb2FkSW1hZ2UgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgIHRoaXMuYmFja0xvYWRJbWFnZS5zcmMgPSB0aGlzLm56U3JjO1xuICAgIHRoaXMuYmFja0xvYWRJbWFnZS5zcmNzZXQgPSB0aGlzLm56U3Jjc2V0O1xuICAgIHRoaXMuc3RhdHVzID0gJ2xvYWRpbmcnO1xuXG4gICAgLy8gdW5zdWJzY3JpYmUgbGFzdCBiYWNrTG9hZFxuICAgIHRoaXMuYmFja0xvYWREZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5iYWNrTG9hZERlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5iYWNrTG9hZERlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcbiAgICBpZiAodGhpcy5iYWNrTG9hZEltYWdlLmNvbXBsZXRlKSB7XG4gICAgICB0aGlzLnN0YXR1cyA9ICdub3JtYWwnO1xuICAgICAgdGhpcy5nZXRFbGVtZW50KCkubmF0aXZlRWxlbWVudC5zcmMgPSB0aGlzLm56U3JjO1xuICAgICAgdGhpcy5nZXRFbGVtZW50KCkubmF0aXZlRWxlbWVudC5zcmNzZXQgPSB0aGlzLm56U3Jjc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5uelBsYWNlaG9sZGVyKSB7XG4gICAgICAgIHRoaXMuZ2V0RWxlbWVudCgpLm5hdGl2ZUVsZW1lbnQuc3JjID0gdGhpcy5uelBsYWNlaG9sZGVyO1xuICAgICAgICB0aGlzLmdldEVsZW1lbnQoKS5uYXRpdmVFbGVtZW50LnNyY3NldCA9ICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5nZXRFbGVtZW50KCkubmF0aXZlRWxlbWVudC5zcmMgPSB0aGlzLm56U3JjO1xuICAgICAgICB0aGlzLmdldEVsZW1lbnQoKS5uYXRpdmVFbGVtZW50LnNyY3NldCA9IHRoaXMubnpTcmNzZXQ7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBgbnotaW1hZ2VgIGRpcmVjdGl2ZSBjYW4gYmUgZGVzdHJveWVkIGJlZm9yZSB0aGUgYGxvYWRgIG9yIGBlcnJvcmAgZXZlbnQgaXMgZGlzcGF0Y2hlZCxcbiAgICAgIC8vIHNvIHRoZXJlJ3Mgbm8gc2Vuc2UgdG8ga2VlcCBjYXB0dXJpbmcgYHRoaXNgLlxuICAgICAgZnJvbUV2ZW50KHRoaXMuYmFja0xvYWRJbWFnZSwgJ2xvYWQnKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5iYWNrTG9hZERlc3Ryb3kkKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnN0YXR1cyA9ICdub3JtYWwnO1xuICAgICAgICAgIHRoaXMuZ2V0RWxlbWVudCgpLm5hdGl2ZUVsZW1lbnQuc3JjID0gdGhpcy5uelNyYztcbiAgICAgICAgICB0aGlzLmdldEVsZW1lbnQoKS5uYXRpdmVFbGVtZW50LnNyY3NldCA9IHRoaXMubnpTcmNzZXQ7XG4gICAgICAgIH0pO1xuXG4gICAgICBmcm9tRXZlbnQodGhpcy5iYWNrTG9hZEltYWdlLCAnZXJyb3InKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5iYWNrTG9hZERlc3Ryb3kkKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnN0YXR1cyA9ICdlcnJvcic7XG4gICAgICAgICAgaWYgKHRoaXMubnpGYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5nZXRFbGVtZW50KCkubmF0aXZlRWxlbWVudC5zcmMgPSB0aGlzLm56RmFsbGJhY2s7XG4gICAgICAgICAgICB0aGlzLmdldEVsZW1lbnQoKS5uYXRpdmVFbGVtZW50LnNyY3NldCA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=