UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

358 lines 31.5 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'; var SingleUploadComponent = /** @class */ (function () { function SingleUploadComponent(modalService, i18n, selectFiles) { var _this = this; 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 {?} */ function (data) { _this.i18nText = data.upload; _this.i18nCommonText = data.common; })); } /** * @param {?} observale * @return {?} */ SingleUploadComponent.prototype._dealFiles = /** * @param {?} observale * @return {?} */ function (observale) { var _this = this; observale.pipe(map((/** * @param {?} file * @return {?} */ function (file) { _this.singleUploadViewComponent.addFile((/** @type {?} */ (file))); return file; }))).subscribe((/** * @return {?} */ function () { _this.singleUploadViewComponent.uploadedFilesComponent.cleanUploadedFiles(); if (_this.autoUpload) { _this.upload(); } }), (/** * @param {?} error * @return {?} */ function (error) { _this.alertMsg(error.message); })); }; /** * @param {?} $event * @return {?} */ SingleUploadComponent.prototype.onClick = /** * @param {?} $event * @return {?} */ function ($event) { this._dealFiles(this.selectFiles.triggerSelectFiles(this.fileOptions, this.uploadOptions)); }; Object.defineProperty(SingleUploadComponent.prototype, "filename", { get: /** * @return {?} */ function () { return (this.singleUploadViewComponent.getFiles()[0] || (/** @type {?} */ ({}))).name || ''; }, enumerable: true, configurable: true }); /** * @param {?} files * @return {?} */ SingleUploadComponent.prototype.onFileDrop = /** * @param {?} files * @return {?} */ function (files) { this.isDropOVer = false; this._dealFiles(this.selectFiles.triggerDropFiles(this.fileOptions, this.uploadOptions, files)); this.fileDrop.emit(files[0]); }; /** * @param {?} event * @return {?} */ SingleUploadComponent.prototype.onFileOver = /** * @param {?} event * @return {?} */ function (event) { this.isDropOVer = event; this.fileOver.emit(event); }; /** * @return {?} */ SingleUploadComponent.prototype.upload = /** * @return {?} */ function () { var _this = this; this.canUpload().then((/** * @param {?} canUpload * @return {?} */ function (canUpload) { if (!canUpload) { return; } _this.singleUploadViewComponent .upload() .pipe(last()).subscribe((/** * @param {?} results * @return {?} */ function (results) { _this.successEvent.emit(results); results.forEach((/** * @param {?} result * @return {?} */ function (result) { _this.singleUploadViewComponent.deleteFile(result.file); _this.singleUploadViewComponent.uploadedFilesComponent.addAndOverwriteFile(result.file); })); }), (/** * @param {?} error * @return {?} */ function (error) { _this.singleUploadViewComponent.uploadedFilesComponent.cleanUploadedFiles(); _this.errorEvent.emit(error); })); })); }; /** * @return {?} */ SingleUploadComponent.prototype.canUpload = /** * @return {?} */ function () { /** @type {?} */ var uploadResult = Promise.resolve(true); if (this.beforeUpload) { /** @type {?} */ var 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 {?} */ SingleUploadComponent.prototype._onDeleteUploadedFile = /** * @param {?} filePath * @return {?} */ function (filePath) { this.deleteUploadedFileEvent.emit(filePath); }; /** * @param {?} $event * @return {?} */ SingleUploadComponent.prototype.deleteFile = /** * @param {?} $event * @return {?} */ function ($event) { $event.stopPropagation(); /** @type {?} */ var files = this.singleUploadViewComponent.getFiles(); this.singleUploadViewComponent.deleteFile(files[0]); }; /** * @param {?} errorMsg * @return {?} */ SingleUploadComponent.prototype.alertMsg = /** * @param {?} errorMsg * @return {?} */ function (errorMsg) { /** @type {?} */ var 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 {?} */ function (event) { results.modalInstance.hide(); }), }, }); }; /** * @return {?} */ SingleUploadComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { 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 = function () { return [ { 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 },] }] }; return SingleUploadComponent; }()); export { SingleUploadComponent }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1kZXZ1aS91cGxvYWQvIiwic291cmNlcyI6WyJzaW5nbGUtdXBsb2FkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUNULFdBQVcsR0FHWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLFlBQVksRUFDWixjQUFjLEVBQ2QsWUFBWSxFQUNiLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUNMLFdBQVcsRUFDWixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCxZQUFZLEVBQ1osbUJBQW1CLEVBQ3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQWlCLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczRDtJQWdDRSwrQkFBb0IsWUFBMEIsRUFDcEMsSUFBaUIsRUFDakIsV0FBd0I7UUFGbEMsaUJBU0M7UUFUbUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDcEMsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQXhCekIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGtCQUFhLEdBQWtCLEVBQUUsQ0FBQztRQVFsQyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGlCQUFZLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDckQsZUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFD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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIE9uRGVzdHJveSxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIFVwbG9hZFN0YXR1cyxcclxuICBJVXBsb2FkT3B0aW9ucyxcclxuICBJRmlsZU9wdGlvbnNcclxufSBmcm9tICcuL2ZpbGUtdXBsb2FkZXIudHlwZXMnO1xyXG5pbXBvcnQgeyBTaW5nbGVVcGxvYWRWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9zaW5nbGUtdXBsb2FkLXZpZXcuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBTZWxlY3RGaWxlc1xyXG59IGZyb20gJy4vc2VsZWN0LWZpbGVzLnV0aWxzJztcclxuaW1wb3J0IHtcclxuICBNb2RhbFNlcnZpY2UsXHJcbiAgTW9kYWxBbGVydENvbXBvbmVudFxyXG59IGZyb20gJ25nLWRldnVpL21vZGFsJztcclxuaW1wb3J0IHsgbGFzdCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSTE4bkludGVyZmFjZSwgSTE4blNlcnZpY2UgfSBmcm9tICduZy1kZXZ1aS9pMThuJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Qtc2luZ2xlLXVwbG9hZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NpbmdsZS11cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGV4cG9ydEFzOiAnZFNpbmdsZVVwbG9hZCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdXBsb2FkLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNpbmdsZVVwbG9hZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgZFNpbmdsZVVwbG9hZFZpZXc7XHJcbiAgQElucHV0KCkgdXBsb2FkT3B0aW9uczogSVVwbG9hZE9wdGlvbnM7XHJcbiAgQElucHV0KCkgZmlsZU9wdGlvbnM6IElGaWxlT3B0aW9ucztcclxuICBASW5wdXQoKSBhdXRvVXBsb2FkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgd2l0aG91dEJ0biA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHVwbG9hZGVkRmlsZXM6IEFycmF5PE9iamVjdD4gPSBbXTtcclxuICBASW5wdXQoKSB1cGxvYWRlZEZpbGVzUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIHByZWxvYWRGaWxlc1JlZj86IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgZmlsZVBhdGg6IHN0cmluZztcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlclRleHQ6IHN0cmluZztcclxuICBASW5wdXQoKSB1cGxvYWRUZXh0OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY29uZmlybVRleHQ6IHN0cmluZztcclxuICBASW5wdXQoKSBiZWZvcmVVcGxvYWQ6IChmaWxlKSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPiB8IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgQElucHV0KCkgZW5hYmxlRHJvcCA9IGZhbHNlO1xyXG4gIEBPdXRwdXQoKSBzdWNjZXNzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBlcnJvckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZGVsZXRlVXBsb2FkZWRGaWxlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBmaWxlRHJvcDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGZpbGVPdmVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAVmlld0NoaWxkKCdkU2luZ2xlVXBsb2FkVmlldycsIHsgc3RhdGljOiB0cnVlIH0pIHNpbmdsZVVwbG9hZFZpZXdDb21wb25lbnQ6IFNpbmdsZVVwbG9hZFZpZXdDb21wb25lbnQ7XHJcbiAgVXBsb2FkU3RhdHVzID0gVXBsb2FkU3RhdHVzO1xyXG4gIGlzRHJvcE9WZXIgPSBmYWxzZTtcclxuICBpMThuVGV4dDogSTE4bkludGVyZmFjZVsndXBsb2FkJ107XHJcbiAgaTE4bkNvbW1vblRleHQ6IEkxOG5JbnRlcmZhY2VbJ2NvbW1vbiddO1xyXG4gIGkxOG5TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpMThuOiBJMThuU2VydmljZSxcclxuICAgIHByaXZhdGUgc2VsZWN0RmlsZXM6IFNlbGVjdEZpbGVzKSB7XHJcbiAgICB0aGlzLmkxOG5UZXh0ID0gdGhpcy5pMThuLmdldEkxOG5UZXh0KCkudXBsb2FkO1xyXG4gICAgdGhpcy5pMThuQ29tbW9uVGV4dCA9IHRoaXMuaTE4bi5nZXRJMThuVGV4dCgpLmNvbW1vbjtcclxuICAgIHRoaXMuaTE4blN1YnNjcmlwdGlvbiA9IHRoaXMuaTE4bi5sYW5nQ2hhbmdlKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgIHRoaXMuaTE4blRleHQgPSBkYXRhLnVwbG9hZDtcclxuICAgICAgdGhpcy5pMThuQ29tbW9uVGV4dCA9IGRhdGEuY29tbW9uO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBfZGVhbEZpbGVzKG9ic2VydmFsZSkge1xyXG4gICAgb2JzZXJ2YWxlLnBpcGUobWFwKGZpbGUgPT4ge1xyXG4gICAgICB0aGlzLnNpbmdsZVVwbG9hZFZpZXdDb21wb25lbnQuYWRkRmlsZSg8RmlsZT5maWxlKTtcclxuICAgICAgcmV0dXJuIGZpbGU7XHJcbiAgICB9KSkuc3Vic2NyaWJlKFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaW5nbGVVcGxvYWRWaWV3Q29tcG9uZW50LnVwbG9hZGVkRmlsZXNDb21wb25lbnQuY2xlYW5VcGxvYWRlZEZpbGVzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b1VwbG9hZCkge1xyXG4gICAgICAgICAgdGhpcy51cGxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcjogRXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLmFsZXJ0TXNnKGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb25DbGljaygkZXZlbnQpIHtcclxuICAgIHRoaXMuX2RlYWxGaWxlcyh0aGlzLnNlbGVjdEZpbGVzLnRyaWdnZXJTZWxlY3RGaWxlcyh0aGlzLmZpbGVPcHRpb25zLCB0aGlzLnVwbG9hZE9wdGlvbnMpKTtcclxuICB9XHJcblxyXG4gIGdldCBmaWxlbmFtZSgpIHtcclxuICAgIHJldHVybiAodGhpcy5zaW5nbGVVcGxvYWRWaWV3Q29tcG9uZW50LmdldEZpbGVzKClbMF0gfHwge30gYXMgRmlsZSkubmFtZSB8fCAnJztcclxuICB9XHJcblxyXG4gIG9uRmlsZURyb3AoZmlsZXMpIHtcclxuICAgIHRoaXMuaXNEcm9wT1ZlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5fZGVhbEZpbGVzKHRoaXMuc2VsZWN0RmlsZXMudHJpZ2dlckRyb3BGaWxlcyh0aGlzLmZpbGVPcHRpb25zLCB0aGlzLnVwbG9hZE9wdGlvbnMsIGZpbGVzKSk7XHJcbiAgICB0aGlzLmZpbGVEcm9wLmVtaXQoZmlsZXNbMF0pO1xyXG4gIH1cclxuXHJcbiAgb25GaWxlT3ZlcihldmVudCkge1xyXG4gICAgdGhpcy5pc0Ryb3BPVmVyID0gZXZlbnQ7XHJcbiAgICB0aGlzLmZpbGVPdmVyLmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkKCkge1xyXG4gICAgdGhpcy5jYW5VcGxvYWQoKS50aGVuKChjYW5VcGxvYWQpID0+IHtcclxuICAgICAgaWYgKCFjYW5VcGxvYWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zaW5nbGVVcGxvYWRWaWV3Q29tcG9uZW50XHJcbiAgICAgICAgLnVwbG9hZCgpXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBsYXN0KClcclxuICAgICAgICApLnN1YnNjcmliZShcclxuICAgICAgICAgIChyZXN1bHRzOiBBcnJheTx7IGZpbGU6IEZpbGUsIHJlc3BvbnNlOiBhbnkgfT4pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zdWNjZXNzRXZlbnQuZW1pdChyZXN1bHRzKTtcclxuICAgICAgICAgICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNpbmdsZVVwbG9hZFZpZXdDb21wb25lbnQuZGVsZXRlRmlsZShyZXN1bHQuZmlsZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zaW5nbGVVcGxvYWRWaWV3Q29tcG9uZW50LnVwbG9hZGVkRmlsZXNDb21wb25lbnQuYWRkQW5kT3ZlcndyaXRlRmlsZShyZXN1bHQuZmlsZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNpbmdsZVVwbG9hZFZpZXdDb21wb25lbnQudXBsb2FkZWRGaWxlc0NvbXBvbmVudC5jbGVhblVwbG9hZGVkRmlsZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5lcnJvckV2ZW50LmVtaXQoZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNhblVwbG9hZCgpIHtcclxuICAgIGxldCB1cGxvYWRSZXN1bHQgPSBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcbiAgICBpZiAodGhpcy5iZWZvcmVVcGxvYWQpIHtcclxuICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSB0aGlzLmJlZm9yZVVwbG9hZCh0aGlzLnNpbmdsZVVwbG9hZFZpZXdDb21wb25lbnQuZ2V0RmlsZXMoKVswXSB8fCB7fSBhcyBGaWxlKTtcclxuICAgICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC50aGVuKSB7XHJcbiAgICAgICAgICB1cGxvYWRSZXN1bHQgPSByZXN1bHQ7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuc3Vic2NyaWJlKSB7XHJcbiAgICAgICAgICB1cGxvYWRSZXN1bHQgPSAocmVzdWx0IGFzIE9ic2VydmFibGU8Ym9vbGVhbj4pLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB1cGxvYWRSZXN1bHQgPSBQcm9taXNlLnJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB1cGxvYWRSZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBfb25EZWxldGVVcGxvYWRlZEZpbGUoZmlsZVBhdGg6IHN0cmluZykge1xyXG4gICAgdGhpcy5kZWxldGVVcGxvYWRlZEZpbGVFdmVudC5lbWl0KGZpbGVQYXRoKTtcclxuICB9XHJcbiAgZGVsZXRlRmlsZSgkZXZlbnQpIHtcclxuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGNvbnN0IGZpbGVzID0gdGhpcy5zaW5nbGVVcGxvYWRWaWV3Q29tcG9uZW50LmdldEZpbGVzKCk7XHJcbiAgICB0aGlzLnNpbmdsZVVwbG9hZFZpZXdDb21wb25lbnQuZGVsZXRlRmlsZShmaWxlc1swXSk7XHJcbiAgfVxyXG4gIGFsZXJ0TXNnKGVycm9yTXNnKSB7XHJcbiAgICBjb25zdCByZXN1bHRzID0gdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih7XHJcbiAgICAgIHdpZHRoOiAnMzAwcHgnLFxyXG4gICAgICBiYWNrZHJvcENsb3NlYWJsZTogZmFsc2UsXHJcbiAgICAgIHNob3dBbmltYXRlOiB0cnVlLFxyXG4gICAgICBjb21wb25lbnQ6IE1vZGFsQWxlcnRDb21wb25lbnQsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBjb250ZW50OiBlcnJvck1zZyxcclxuICAgICAgICBjYW5jZWxCdG5UZXh0OiB0aGlzLmNvbmZpcm1UZXh0ID8gdGhpcy5jb25maXJtVGV4dCA6IHRoaXMuaTE4bkNvbW1vblRleHQuYnRuQ29uZmlybSxcclxuICAgICAgICBvbkNsb3NlOiAoZXZlbnQpID0+IHtcclxuICAgICAgICAgIHJlc3VsdHMubW9kYWxJbnN0YW5jZS5oaWRlKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLmkxOG5TdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5pMThuU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=