UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

317 lines 29.9 kB
/** * @fileoverview added by tsickle * Generated from: single-upload.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ViewChild, TemplateRef, } from '@angular/core'; import { Input, Output, EventEmitter, } from '@angular/core'; import { UploadStatus, IUploadOptions, IFileOptions } from './file-uploader.types'; import { SingleUploadViewComponent } from './single-upload-view.component'; import { SelectFiles } from './select-files.utils'; import { ModalService, ModalAlertComponent } from '@duoduo-oba/ng-devui/modal'; import { last, map } from 'rxjs/operators'; import { I18nService } from '@duoduo-oba/ng-devui/i18n'; export class SingleUploadComponent { /** * @param {?} modalService * @param {?} i18n * @param {?} selectFiles */ constructor(modalService, i18n, selectFiles) { this.modalService = modalService; this.i18n = i18n; this.selectFiles = selectFiles; this.autoUpload = false; this.withoutBtn = false; this.uploadedFiles = []; this.enableDrop = false; this.successEvent = new EventEmitter(); this.errorEvent = new EventEmitter(); this.deleteUploadedFileEvent = new EventEmitter(); this.fileDrop = new EventEmitter(); this.fileOver = new EventEmitter(); this.UploadStatus = UploadStatus; this.isDropOVer = false; this.i18nText = this.i18n.getI18nText().upload; this.i18nCommonText = this.i18n.getI18nText().common; this.i18nSubscription = this.i18n.langChange().subscribe((/** * @param {?} data * @return {?} */ (data) => { this.i18nText = data.upload; this.i18nCommonText = data.common; })); } /** * @param {?} observale * @return {?} */ _dealFiles(observale) { observale.pipe(map((/** * @param {?} file * @return {?} */ file => { this.singleUploadViewComponent.addFile((/** @type {?} */ (file))); return file; }))).subscribe((/** * @return {?} */ () => { this.singleUploadViewComponent.uploadedFilesComponent.cleanUploadedFiles(); if (this.autoUpload) { this.upload(); } }), (/** * @param {?} error * @return {?} */ (error) => { this.alertMsg(error.message); })); } /** * @param {?} $event * @return {?} */ onClick($event) { this._dealFiles(this.selectFiles.triggerSelectFiles(this.fileOptions, this.uploadOptions)); } /** * @return {?} */ get filename() { return (this.singleUploadViewComponent.getFiles()[0] || (/** @type {?} */ ({}))).name || ''; } /** * @param {?} files * @return {?} */ onFileDrop(files) { this.isDropOVer = false; this._dealFiles(this.selectFiles.triggerDropFiles(this.fileOptions, this.uploadOptions, files)); this.fileDrop.emit(files[0]); } /** * @param {?} event * @return {?} */ onFileOver(event) { this.isDropOVer = event; this.fileOver.emit(event); } /** * @return {?} */ upload() { this.canUpload().then((/** * @param {?} canUpload * @return {?} */ (canUpload) => { if (!canUpload) { return; } this.singleUploadViewComponent .upload() .pipe(last()).subscribe((/** * @param {?} results * @return {?} */ (results) => { this.successEvent.emit(results); results.forEach((/** * @param {?} result * @return {?} */ (result) => { this.singleUploadViewComponent.deleteFile(result.file); this.singleUploadViewComponent.uploadedFilesComponent.addAndOverwriteFile(result.file); })); }), (/** * @param {?} error * @return {?} */ (error) => { this.singleUploadViewComponent.uploadedFilesComponent.cleanUploadedFiles(); this.errorEvent.emit(error); })); })); } /** * @return {?} */ canUpload() { /** @type {?} */ let uploadResult = Promise.resolve(true); if (this.beforeUpload) { /** @type {?} */ const result = this.beforeUpload(this.singleUploadViewComponent.getFiles()[0] || (/** @type {?} */ ({}))); if (typeof result !== 'undefined') { if (result.then) { uploadResult = result; } else if (result.subscribe) { uploadResult = ((/** @type {?} */ (result))).toPromise(); } else { uploadResult = Promise.resolve(result); } } } return uploadResult; } /** * @param {?} filePath * @return {?} */ _onDeleteUploadedFile(filePath) { this.deleteUploadedFileEvent.emit(filePath); } /** * @param {?} $event * @return {?} */ deleteFile($event) { $event.stopPropagation(); /** @type {?} */ const files = this.singleUploadViewComponent.getFiles(); this.singleUploadViewComponent.deleteFile(files[0]); } /** * @param {?} errorMsg * @return {?} */ alertMsg(errorMsg) { /** @type {?} */ const results = this.modalService.open({ width: '300px', backdropCloseable: false, showAnimate: true, component: ModalAlertComponent, data: { content: errorMsg, cancelBtnText: this.confirmText ? this.confirmText : this.i18nCommonText.btnConfirm, onClose: (/** * @param {?} event * @return {?} */ (event) => { results.modalInstance.hide(); }), }, }); } /** * @return {?} */ ngOnDestroy() { if (this.i18nSubscription) { this.i18nSubscription.unsubscribe(); } } } SingleUploadComponent.decorators = [ { type: Component, args: [{ selector: 'd-single-upload', template: "<div\r\n [style.display]=\"withoutBtn ? '' : '-webkit-inline-box'\"\r\n d-file-drop\r\n [enableDrop]=\"enableDrop\"\r\n [isSingle]=\"true\"\r\n (fileDrop)=\"onFileDrop($event)\"\r\n (fileOver)=\"onFileOver($event)\"\r\n [ngStyle]=\"{ border: isDropOVer ? '1px solid #15bf15' : '0' }\"\r\n>\r\n <div (click)=\"onClick($event)\" class=\"devui-input-group\">\r\n <input\r\n style=\"cursor: pointer\"\r\n class=\"devui-form-control devui-upload-input\"\r\n [placeholder]=\"placeholderText ? placeholderText : i18nText?.chooseFile\"\r\n [value]=\"filename\"\r\n [title]=\"filename\"\r\n readonly\r\n />\r\n <span\r\n *ngIf=\"!!filename\"\r\n class=\"icon-close devui-upload-delete-file-button devui-icon-close-position\"\r\n (click)=\"deleteFile($event)\"\r\n ></span>\r\n <span class=\"devui-input-group-addon\" style=\"cursor: pointer\">\r\n <svg class=\"svg-icon-dot\" height=\"1em\" width=\"1em\" viewBox=\"0 0 1024 1024\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"m400.31892 176.970574c0-61.574381 50.113351-111.680569 111.679545-111.680569 61.576427 0 111.680569 50.106188 111.680569 111.680569 0 61.568241-50.104141 111.679545-111.680569 111.679545-61.566194 0-111.679545-50.111304-111.679545-111.679545zm0 335.028403c0-61.568241 50.113351-111.678522 111.679545-111.678522 61.576427 0 111.680569 50.110281 111.680569 111.678522 0 61.574381-50.105165 111.682615-111.680569 111.682615-61.566194 0-111.679545-50.108235-111.679545-111.682615zm0 335.037612c0-61.572334 50.113351-111.679545 111.679545-111.679545 61.575404 0 111.680569 50.107211 111.680569 111.679545 0 61.567217-50.105165 111.672382-111.680569 111.672382-61.566194 0-111.679545-50.105164-111.679545-111.672382zm0 0\"\r\n />\r\n </svg>\r\n </span>\r\n </div>\r\n <d-button\r\n *ngIf=\"!autoUpload && !withoutBtn\"\r\n (btnClick)=\"upload()\"\r\n bsStyle=\"common\"\r\n [style.margin-left.px]=\"10\"\r\n [disabled]=\"\r\n dSingleUploadView.uploadedFilesComponent.uploadedFiles.length > 0 ||\r\n dSingleUploadView.fileUploaders[0]?.status === UploadStatus.uploading\r\n \"\r\n >\r\n <span *ngIf=\"!dSingleUploadView.fileUploaders[0] || dSingleUploadView.fileUploaders[0]?.status === UploadStatus.preLoad\">{{\r\n uploadText || i18nText?.upload\r\n }}</span>\r\n <span *ngIf=\"dSingleUploadView.fileUploaders[0]?.status === UploadStatus.uploading\">{{ i18nText?.uploading }}</span>\r\n <span *ngIf=\"dSingleUploadView.fileUploaders[0]?.status === UploadStatus.uploaded\">{{ i18nText?.uploaded }}</span>\r\n <span *ngIf=\"dSingleUploadView.fileUploaders[0]?.status === UploadStatus.failed\">{{ i18nText?.uploadFailed }}</span>\r\n </d-button>\r\n</div>\r\n<d-single-upload-view\r\n #dSingleUploadView=\"dSingleUploadView\"\r\n [uploadOptions]=\"uploadOptions\"\r\n [filePath]=\"filePath\"\r\n [uploadedFiles]=\"uploadedFiles\"\r\n [uploadedFilesRef]=\"uploadedFilesRef\"\r\n [preloadFilesRef]=\"preloadFilesRef\"\r\n (deleteUploadedFileEvent)=\"_onDeleteUploadedFile($event)\"\r\n>\r\n</d-single-upload-view>\r\n", exportAs: 'dSingleUpload', styles: [".devui-input-group{position:relative;display:table;border-collapse:separate}.devui-input-group:hover .devui-input-group-addon{border-color:#344899;background-color:#dfe1e6;font-weight:700}.devui-input-group:hover .devui-form-control{border-color:#344899 #adb0b8 #344899 #344899}.devui-input-group .devui-input-group-addon:active{border-color:#344899 #adb0b8 #344899 #344899;background-color:#dfe1e6}.devui-input-group .devui-input-group-addon{width:1%;white-space:nowrap;vertical-align:middle;padding:5px 10px;font-size:14px;font-weight:400;line-height:1;color:#252b3a;text-align:center;background-color:#f8f8f8;border-top:1px solid #adb0b8;border-bottom:1px solid #adb0b8;border-right:1px solid #adb0b8;border-top-right-radius:1px;border-bottom-right-radius:1px;display:table-cell;-webkit-transition:border-color .15s ease-in-out;transition:border-color .15s ease-in-out;cursor:pointer}.devui-input-group .devui-form-control{cursor:pointer;display:block;width:100%;height:32px;padding:5px 10px;font-size:14px;line-height:1.42857143;color:#252b3a;background-image:none;border:1px solid #adb0b8;border-top-left-radius:1px;border-bottom-left-radius:1px;-webkit-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}svg.svg-icon-dot>path{fill:#252b3a}.devui-form-control{outline:0}.devui-icon-close-position{position:absolute;top:calc(50% - 7px);right:50px}"] }] } ]; /** @nocollapse */ SingleUploadComponent.ctorParameters = () => [ { type: ModalService }, { type: I18nService }, { type: SelectFiles } ]; SingleUploadComponent.propDecorators = { uploadOptions: [{ type: Input }], fileOptions: [{ type: Input }], autoUpload: [{ type: Input }], withoutBtn: [{ type: Input }], uploadedFiles: [{ type: Input }], uploadedFilesRef: [{ type: Input }], preloadFilesRef: [{ type: Input }], filePath: [{ type: Input }], placeholderText: [{ type: Input }], uploadText: [{ type: Input }], confirmText: [{ type: Input }], beforeUpload: [{ type: Input }], enableDrop: [{ type: Input }], successEvent: [{ type: Output }], errorEvent: [{ type: Output }], deleteUploadedFileEvent: [{ type: Output }], fileDrop: [{ type: Output }], fileOver: [{ type: Output }], singleUploadViewComponent: [{ type: ViewChild, args: ['dSingleUploadView', { static: true },] }] }; if (false) { /** @type {?} */ SingleUploadComponent.prototype.dSingleUploadView; /** @type {?} */ SingleUploadComponent.prototype.uploadOptions; /** @type {?} */ SingleUploadComponent.prototype.fileOptions; /** @type {?} */ SingleUploadComponent.prototype.autoUpload; /** @type {?} */ SingleUploadComponent.prototype.withoutBtn; /** @type {?} */ SingleUploadComponent.prototype.uploadedFiles; /** @type {?} */ SingleUploadComponent.prototype.uploadedFilesRef; /** @type {?} */ SingleUploadComponent.prototype.preloadFilesRef; /** @type {?} */ SingleUploadComponent.prototype.filePath; /** @type {?} */ SingleUploadComponent.prototype.placeholderText; /** @type {?} */ SingleUploadComponent.prototype.uploadText; /** @type {?} */ SingleUploadComponent.prototype.confirmText; /** @type {?} */ SingleUploadComponent.prototype.beforeUpload; /** @type {?} */ SingleUploadComponent.prototype.enableDrop; /** @type {?} */ SingleUploadComponent.prototype.successEvent; /** @type {?} */ SingleUploadComponent.prototype.errorEvent; /** @type {?} */ SingleUploadComponent.prototype.deleteUploadedFileEvent; /** @type {?} */ SingleUploadComponent.prototype.fileDrop; /** @type {?} */ SingleUploadComponent.prototype.fileOver; /** @type {?} */ SingleUploadComponent.prototype.singleUploadViewComponent; /** @type {?} */ SingleUploadComponent.prototype.UploadStatus; /** @type {?} */ SingleUploadComponent.prototype.isDropOVer; /** @type {?} */ SingleUploadComponent.prototype.i18nText; /** @type {?} */ SingleUploadComponent.prototype.i18nCommonText; /** @type {?} */ SingleUploadComponent.prototype.i18nSubscription; /** * @type {?} * @private */ SingleUploadComponent.prototype.modalService; /** * @type {?} * @private */ SingleUploadComponent.prototype.i18n; /** * @type {?} * @private */ SingleUploadComponent.prototype.selectFiles; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1kZXZ1aS91cGxvYWQvIiwic291cmNlcyI6WyJzaW5nbGUtdXBsb2FkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUNULFdBQVcsR0FHWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLFlBQVksRUFDWixjQUFjLEVBQ2QsWUFBWSxFQUNiLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUNMLFdBQVcsRUFDWixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCxZQUFZLEVBQ1osbUJBQW1CLEVBQ3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQWlCLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVMzRCxNQUFNLE9BQU8scUJBQXFCOzs7Ozs7SUEwQmhDLFlBQW9CLFlBQTBCLEVBQ3BDLElBQWlCLEVBQ2pCLFdBQXdCO1FBRmQsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDcEMsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQXhCekIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGtCQUFhLEdBQWtCLEVBQUUsQ0FBQztRQVFsQyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGlCQUFZLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDckQsZUFBVSxHQUFzQixJQUFJLFlBQVks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QUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBRXJDO0lBQ0gsQ0FBQzs7O1lBckpGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsaUJBQWlCO2dCQUMzQix3bEdBQTZDO2dCQUM3QyxRQUFRLEVBQUUsZUFBZTs7YUFFMUI7Ozs7WUFiQyxZQUFZO1lBS1UsV0FBVztZQVJqQyxXQUFXOzs7NEJBbUJWLEtBQUs7MEJBQ0wsS0FBSzt5QkFDTCxLQUFLO3lCQUNMLEtBQUs7NEJBQ0wsS0FBSzsrQkFDTCxLQUFLOzhCQUNMLEtBQUs7dUJBQ0wsS0FBSzs4QkFDTCxLQUFLO3lCQUNMLEtBQUs7MEJBQ0wsS0FBSzsyQkFDTCxLQUFLO3lCQUNMLEtBQUs7MkJBQ0wsTUFBTTt5QkFDTixNQUFNO3NDQUNOLE1BQU07dUJBQ04sTUFBTTt1QkFDTixNQUFNO3dDQUNOLFNBQVMsU0FBQyxtQkFBbUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Ozs7SUFuQmhELGtEQUFrQjs7SUFDbEIsOENBQXVDOztJQUN2Qyw0Q0FBbUM7O0lBQ25DLDJDQUE0Qjs7SUFDNUIsMkNBQTRCOztJQUM1Qiw4Q0FBMkM7O0lBQzNDLGlEQUE0Qzs7SUFDNUMsZ0RBQTRDOztJQUM1Qyx5Q0FBMEI7O0lBQzFCLGdEQUFpQzs7SUFDakMsMkNBQTRCOztJQUM1Qiw0Q0FBNkI7O0lBQzdCLDZDQUFrRjs7SUFDbEYsMkNBQTRCOztJQUM1Qiw2Q0FBK0Q7O0lBQy9ELDJDQUE2RDs7SUFDN0Qsd0RBQTBFOztJQUMxRSx5Q0FBMkQ7O0lBQzNELHlDQUEyRDs7SUFDM0QsMERBQXVHOztJQUN2Ryw2Q0FBNEI7O0lBQzVCLDJDQUFtQjs7SUFDbkIseUNBQWtDOztJQUNsQywrQ0FBd0M7O0lBQ3hDLGlEQUErQjs7Ozs7SUFDbkIsNkNBQWtDOzs7OztJQUM1QyxxQ0FBeUI7Ozs7O0lBQ3pCLDRDQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIFZpZXdDaGlsZCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBIb3N0QmluZGluZyxcclxuICBPbkRlc3Ryb3ksXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBVcGxvYWRTdGF0dXMsXHJcbiAgSVVwbG9hZE9wdGlvbnMsXHJcbiAgSUZpbGVPcHRpb25zXHJcbn0gZnJvbSAnLi9maWxlLXVwbG9hZGVyLnR5cGVzJztcclxuaW1wb3J0IHsgU2luZ2xlVXBsb2FkVmlld0NvbXBvbmVudCB9IGZyb20gJy4vc2luZ2xlLXVwbG9hZC12aWV3LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgU2VsZWN0RmlsZXNcclxufSBmcm9tICcuL3NlbGVjdC1maWxlcy51dGlscyc7XHJcbmltcG9ydCB7XHJcbiAgTW9kYWxTZXJ2aWNlLFxyXG4gIE1vZGFsQWxlcnRDb21wb25lbnRcclxufSBmcm9tICduZy1kZXZ1aS9tb2RhbCc7XHJcbmltcG9ydCB7IGxhc3QsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEkxOG5JbnRlcmZhY2UsIEkxOG5TZXJ2aWNlIH0gZnJvbSAnbmctZGV2dWkvaTE4bic7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdkLXNpbmdsZS11cGxvYWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zaW5nbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sJyxcclxuICBleHBvcnRBczogJ2RTaW5nbGVVcGxvYWQnLFxyXG4gIHN0eWxlVXJsczogWycuL3VwbG9hZC12aWV3LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTaW5nbGVVcGxvYWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIGRTaW5nbGVVcGxvYWRWaWV3O1xyXG4gIEBJbnB1dCgpIHVwbG9hZE9wdGlvbnM6IElVcGxvYWRPcHRpb25zO1xyXG4gIEBJbnB1dCgpIGZpbGVPcHRpb25zOiBJRmlsZU9wdGlvbnM7XHJcbiAgQElucHV0KCkgYXV0b1VwbG9hZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHdpdGhvdXRCdG4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB1cGxvYWRlZEZpbGVzOiBBcnJheTxPYmplY3Q+ID0gW107XHJcbiAgQElucHV0KCkgdXBsb2FkZWRGaWxlc1JlZjogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBwcmVsb2FkRmlsZXNSZWY/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIGZpbGVQYXRoOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXJUZXh0OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdXBsb2FkVGV4dDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGNvbmZpcm1UZXh0OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYmVmb3JlVXBsb2FkOiAoZmlsZSkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4gfCBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gIEBJbnB1dCgpIGVuYWJsZURyb3AgPSBmYWxzZTtcclxuICBAT3V0cHV0KCkgc3VjY2Vzc0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZXJyb3JFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGRlbGV0ZVVwbG9hZGVkRmlsZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZmlsZURyb3A6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBmaWxlT3ZlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQFZpZXdDaGlsZCgnZFNpbmdsZVVwbG9hZFZpZXcnLCB7IHN0YXRpYzogdHJ1ZSB9KSBzaW5nbGVVcGxvYWRWaWV3Q29tcG9uZW50OiBTaW5nbGVVcGxvYWRWaWV3Q29tcG9uZW50O1xyXG4gIFVwbG9hZFN0YXR1cyA9IFVwbG9hZFN0YXR1cztcclxuICBpc0Ryb3BPVmVyID0gZmFsc2U7XHJcbiAgaTE4blRleHQ6IEkxOG5JbnRlcmZhY2VbJ3VwbG9hZCddO1xyXG4gIGkxOG5Db21tb25UZXh0OiBJMThuSW50ZXJmYWNlWydjb21tb24nXTtcclxuICBpMThuU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcclxuICAgIHByaXZhdGUgaTE4bjogSTE4blNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNlbGVjdEZpbGVzOiBTZWxlY3RGaWxlcykge1xyXG4gICAgdGhpcy5pMThuVGV4dCA9IHRoaXMuaTE4bi5nZXRJMThuVGV4dCgpLnVwbG9hZDtcclxuICAgIHRoaXMuaTE4bkNvbW1vblRleHQgPSB0aGlzLmkxOG4uZ2V0STE4blRleHQoKS5jb21tb247XHJcbiAgICB0aGlzLmkxOG5TdWJzY3JpcHRpb24gPSB0aGlzLmkxOG4ubGFuZ0NoYW5nZSgpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICB0aGlzLmkxOG5UZXh0ID0gZGF0YS51cGxvYWQ7XHJcbiAgICAgIHRoaXMuaTE4bkNvbW1vblRleHQgPSBkYXRhLmNvbW1vbjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgX2RlYWxGaWxlcyhvYnNlcnZhbGUpIHtcclxuICAgIG9ic2VydmFsZS5waXBlKG1hcChmaWxlID0+IHtcclxuICAgICAgdGhpcy5zaW5nbGVVcGxvYWRWaWV3Q29tcG9uZW50LmFkZEZpbGUoPEZpbGU+ZmlsZSk7XHJcbiAgICAgIHJldHVybiBmaWxlO1xyXG4gICAgfSkpLnN1YnNjcmliZShcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2luZ2xlVXBsb2FkVmlld0NvbXBvbmVudC51cGxvYWRlZEZpbGVzQ29tcG9uZW50LmNsZWFuVXBsb2FkZWRGaWxlcygpO1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9VcGxvYWQpIHtcclxuICAgICAgICAgIHRoaXMudXBsb2FkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3I6IEVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hbGVydE1zZyhlcnJvci5tZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2soJGV2ZW50KSB7XHJcbiAgICB0aGlzLl9kZWFsRmlsZXModGhpcy5zZWxlY3RGaWxlcy50cmlnZ2VyU2VsZWN0RmlsZXModGhpcy5maWxlT3B0aW9ucywgdGhpcy51cGxvYWRPcHRpb25zKSk7XHJcbiAgfVxyXG5cclxuICBnZXQgZmlsZW5hbWUoKSB7XHJcbiAgICByZXR1cm4gKHRoaXMuc2luZ2xlVXBsb2FkVmlld0NvbXBvbmVudC5nZXRGaWxlcygpWzBdIHx8IHt9IGFzIEZpbGUpLm5hbWUgfHwgJyc7XHJcbiAgfVxyXG5cclxuICBvbkZpbGVEcm9wKGZpbGVzKSB7XHJcbiAgICB0aGlzLmlzRHJvcE9WZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuX2RlYWxGaWxlcyh0aGlzLnNlbGVjdEZpbGVzLnRyaWdnZXJEcm9wRmlsZXModGhpcy5maWxlT3B0aW9ucywgdGhpcy51cGxvYWRPcHRpb25zLCBmaWxlcykpO1xyXG4gICAgdGhpcy5maWxlRHJvcC5lbWl0KGZpbGVzWzBdKTtcclxuICB9XHJcblxyXG4gIG9uRmlsZU92ZXIoZXZlbnQpIHtcclxuICAgIHRoaXMuaXNEcm9wT1ZlciA9IGV2ZW50O1xyXG4gICAgdGhpcy5maWxlT3Zlci5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHVwbG9hZCgpIHtcclxuICAgIHRoaXMuY2FuVXBsb2FkKCkudGhlbigoY2FuVXBsb2FkKSA9PiB7XHJcbiAgICAgIGlmICghY2FuVXBsb2FkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2luZ2xlVXBsb2FkVmlld0NvbXBvbmVudFxyXG4gICAgICAgIC51cGxvYWQoKVxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgbGFzdCgpXHJcbiAgICAgICAgKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAocmVzdWx0czogQXJyYXk8eyBmaWxlOiBGaWxlLCByZXNwb25zZTogYW55IH0+KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc0V2ZW50LmVtaXQocmVzdWx0cyk7XHJcbiAgICAgICAgICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zaW5nbGVVcGxvYWRWaWV3Q29tcG9uZW50LmRlbGV0ZUZpbGUocmVzdWx0LmZpbGUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2luZ2xlVXBsb2FkVmlld0NvbXBvbmVudC51cGxvYWRlZEZpbGVzQ29tcG9uZW50LmFkZEFuZE92ZXJ3cml0ZUZpbGUocmVzdWx0LmZpbGUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zaW5nbGVVcGxvYWRWaWV3Q29tcG9uZW50LnVwbG9hZGVkRmlsZXNDb21wb25lbnQuY2xlYW5VcGxvYWRlZEZpbGVzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JFdmVudC5lbWl0KGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjYW5VcGxvYWQoKSB7XHJcbiAgICBsZXQgdXBsb2FkUmVzdWx0ID0gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xyXG4gICAgaWYgKHRoaXMuYmVmb3JlVXBsb2FkKSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0gdGhpcy5iZWZvcmVVcGxvYWQodGhpcy5zaW5nbGVVcGxvYWRWaWV3Q29tcG9uZW50LmdldEZpbGVzKClbMF0gfHwge30gYXMgRmlsZSk7XHJcbiAgICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIGlmIChyZXN1bHQudGhlbikge1xyXG4gICAgICAgICAgdXBsb2FkUmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnN1YnNjcmliZSkge1xyXG4gICAgICAgICAgdXBsb2FkUmVzdWx0ID0gKHJlc3VsdCBhcyBPYnNlcnZhYmxlPGJvb2xlYW4+KS50b1Byb21pc2UoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdXBsb2FkUmVzdWx0ID0gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXBsb2FkUmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgX29uRGVsZXRlVXBsb2FkZWRGaWxlKGZpbGVQYXRoOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGVsZXRlVXBsb2FkZWRGaWxlRXZlbnQuZW1pdChmaWxlUGF0aCk7XHJcbiAgfVxyXG4gIGRlbGV0ZUZpbGUoJGV2ZW50KSB7XHJcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBjb25zdCBmaWxlcyA9IHRoaXMuc2luZ2xlVXBsb2FkVmlld0NvbXBvbmVudC5nZXRGaWxlcygpO1xyXG4gICAgdGhpcy5zaW5nbGVVcGxvYWRWaWV3Q29tcG9uZW50LmRlbGV0ZUZpbGUoZmlsZXNbMF0pO1xyXG4gIH1cclxuICBhbGVydE1zZyhlcnJvck1zZykge1xyXG4gICAgY29uc3QgcmVzdWx0cyA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oe1xyXG4gICAgICB3aWR0aDogJzMwMHB4JyxcclxuICAgICAgYmFja2Ryb3BDbG9zZWFibGU6IGZhbHNlLFxyXG4gICAgICBzaG93QW5pbWF0ZTogdHJ1ZSxcclxuICAgICAgY29tcG9uZW50OiBNb2RhbEFsZXJ0Q29tcG9uZW50LFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgY29udGVudDogZXJyb3JNc2csXHJcbiAgICAgICAgY2FuY2VsQnRuVGV4dDogdGhpcy5jb25maXJtVGV4dCA/IHRoaXMuY29uZmlybVRleHQgOiB0aGlzLmkxOG5Db21tb25UZXh0LmJ0bkNvbmZpcm0sXHJcbiAgICAgICAgb25DbG9zZTogKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICByZXN1bHRzLm1vZGFsSW5zdGFuY2UuaGlkZSgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5pMThuU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuaTE4blN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19