UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

299 lines 27.9 kB
/** * @fileoverview added by tsickle * Generated from: multiple-upload.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, TemplateRef, ViewChild, } from '@angular/core'; import { Input, Output, EventEmitter, } from '@angular/core'; import { IUploadOptions, IFileOptions } from './file-uploader.types'; import { ModalAlertComponent, ModalService } from '@duoduo-oba/ng-devui/modal'; import { MultipleUploadViewComponent } from './multiple-upload-view.component'; import { SelectFiles } from './select-files.utils'; import { map, last, debounceTime } from 'rxjs/operators'; import { I18nService } from '@duoduo-oba/ng-devui/i18n'; export class MultipleUploadComponent { /** * @param {?} modalService * @param {?} selectFiles * @param {?} i18n */ constructor(modalService, selectFiles, i18n) { this.modalService = modalService; this.selectFiles = selectFiles; this.i18n = i18n; 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.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) { this.multipleUploadViewComponent.resetSameNameFiles(); observale.pipe(map((/** * @param {?} file * @return {?} */ file => this.multipleUploadViewComponent.addFile(file))), debounceTime(100)) .subscribe((/** * @return {?} */ () => { /** @type {?} */ const sameNameFiles = this.multipleUploadViewComponent.getSameNameFiles(); if (this.autoUpload) { this.upload(); } if (this.uploadOptions.checkSameName && sameNameFiles.length) { this.alertMsg(this.i18nText.getExistSameNameFilesMsg(sameNameFiles)); } }), (/** * @param {?} error * @return {?} */ (error) => { this.alertMsg(error.message); })); } /** * @param {?} event * @return {?} */ onClick(event) { this._dealFiles(this.selectFiles.triggerSelectFiles(this.fileOptions, this.uploadOptions)); } /** * @param {?} files * @return {?} */ onFileDrop(files) { this.isDropOVer = false; this._dealFiles(this.selectFiles.triggerDropFiles(this.fileOptions, this.uploadOptions, files)); this.fileDrop.emit(files); } /** * @param {?} event * @return {?} */ onFileOver(event) { this.isDropOVer = event; this.fileOver.emit(event); } /** * @return {?} */ upload() { this.canUpload().then((/** * @param {?} canUpload * @return {?} */ (canUpload) => { if (!canUpload) { this.multipleUploadViewComponent.removeFiles(); return; } this.multipleUploadViewComponent.upload() .pipe(last()) .subscribe((/** * @param {?} results * @return {?} */ (results) => { this.successEvent.emit(results); results.forEach((/** * @param {?} result * @return {?} */ (result) => { this.multipleUploadViewComponent.deleteFile(result.file); this.multipleUploadViewComponent.uploadedFilesComponent.addFile(result.file); })); }), (/** * @param {?} error * @return {?} */ (error) => { this.errorEvent.emit(error); })); })); } /** * @return {?} */ canUpload() { /** @type {?} */ let uploadResult = Promise.resolve(true); if (this.beforeUpload) { /** @type {?} */ const result = this.beforeUpload(this.multipleUploadViewComponent.getFiles()); 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 {?} 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(); } } } MultipleUploadComponent.decorators = [ { type: Component, args: [{ selector: 'd-multiple-upload', template: "<div\r\n [style.display]=\"withoutBtn ? '' : '-webkit-inline-box'\"\r\n d-file-drop\r\n [enableDrop]=\"enableDrop\"\r\n (fileDrop)=\"onFileDrop($event)\"\r\n (fileOver)=\"onFileOver($event)\"\r\n [ngStyle]=\"{ border: isDropOVer ? '1px solid #15bf15' : '0' }\"\r\n>\r\n <div class=\"devui-input-group\" (click)=\"onClick($event)\">\r\n <input\r\n type=\"text\"\r\n style=\"cursor: pointer\"\r\n class=\"devui-form-control\"\r\n [placeholder]=\"placeholderText ? placeholderText : i18nText?.chooseFiles\"\r\n readonly\r\n />\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 *ngIf=\"!autoUpload && !withoutBtn\" (btnClick)=\"upload()\" [style.margin-left.px]=\"10\" bsStyle=\"common\">\r\n {{ uploadText || i18nText?.upload }}\r\n </d-button>\r\n</div>\r\n<d-multiple-upload-view\r\n #dMultipleUploadView\r\n [uploadedFiles]=\"uploadedFiles\"\r\n [uploadedFilesRef]=\"uploadedFilesRef\"\r\n [preloadFilesRef]=\"preloadFilesRef\"\r\n [uploadOptions]=\"uploadOptions\"\r\n [filePath]=\"filePath\"\r\n (deleteUploadedFileEvent)=\"_onDeleteUploadedFile($event)\"\r\n>\r\n</d-multiple-upload-view>\r\n", exportAs: 'dMultipleUpload', 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 */ MultipleUploadComponent.ctorParameters = () => [ { type: ModalService }, { type: SelectFiles }, { type: I18nService } ]; MultipleUploadComponent.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 }], multipleUploadViewComponent: [{ type: ViewChild, args: ['dMultipleUploadView', { static: true },] }] }; if (false) { /** @type {?} */ MultipleUploadComponent.prototype.uploadOptions; /** @type {?} */ MultipleUploadComponent.prototype.fileOptions; /** @type {?} */ MultipleUploadComponent.prototype.autoUpload; /** @type {?} */ MultipleUploadComponent.prototype.withoutBtn; /** @type {?} */ MultipleUploadComponent.prototype.uploadedFiles; /** @type {?} */ MultipleUploadComponent.prototype.uploadedFilesRef; /** @type {?} */ MultipleUploadComponent.prototype.preloadFilesRef; /** @type {?} */ MultipleUploadComponent.prototype.filePath; /** @type {?} */ MultipleUploadComponent.prototype.placeholderText; /** @type {?} */ MultipleUploadComponent.prototype.uploadText; /** @type {?} */ MultipleUploadComponent.prototype.confirmText; /** @type {?} */ MultipleUploadComponent.prototype.beforeUpload; /** @type {?} */ MultipleUploadComponent.prototype.enableDrop; /** @type {?} */ MultipleUploadComponent.prototype.successEvent; /** @type {?} */ MultipleUploadComponent.prototype.errorEvent; /** @type {?} */ MultipleUploadComponent.prototype.deleteUploadedFileEvent; /** @type {?} */ MultipleUploadComponent.prototype.fileDrop; /** @type {?} */ MultipleUploadComponent.prototype.fileOver; /** @type {?} */ MultipleUploadComponent.prototype.multipleUploadViewComponent; /** @type {?} */ MultipleUploadComponent.prototype.i18nCommonText; /** @type {?} */ MultipleUploadComponent.prototype.i18nText; /** @type {?} */ MultipleUploadComponent.prototype.isDropOVer; /** @type {?} */ MultipleUploadComponent.prototype.i18nSubscription; /** * @type {?} * @private */ MultipleUploadComponent.prototype.modalService; /** * @type {?} * @private */ MultipleUploadComponent.prototype.selectFiles; /** * @type {?} * @private */ MultipleUploadComponent.prototype.i18n; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlwbGUtdXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWRldnVpL3VwbG9hZC8iLCJzb3VyY2VzIjpbIm11bHRpcGxlLXVwbG9hZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxjQUFjLEVBQ2QsWUFBWSxFQUNiLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixZQUFZLEVBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRSxPQUFPLEVBQ0wsV0FBVyxFQUNaLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekQsT0FBTyxFQUFpQixXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFRM0QsTUFBTSxPQUFPLHVCQUF1Qjs7Ozs7O0lBeUJsQyxZQUFvQixZQUEwQixFQUNwQyxXQUF3QixFQUN4QixJQUFpQjtRQUZQLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQ3BDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFNBQUksR0FBSixJQUFJLENBQWE7UUF4QmxCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixrQkFBYSxHQUFrQixFQUFFLENBQUM7UUFRbEMsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUVsQixpQkFBWSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3JELGVBQVUsR0FBc0IsSUFBSSxZ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Q0wsS0FBSzs4QkFDTCxLQUFLO3lCQUNMLEtBQUs7MEJBQ0wsS0FBSzsyQkFDTCxLQUFLO3lCQUNMLEtBQUs7MkJBRUwsTUFBTTt5QkFDTixNQUFNO3NDQUNOLE1BQU07dUJBQ04sTUFBTTt1QkFDTixNQUFNOzBDQUNOLFNBQVMsU0FBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Ozs7SUFuQmxELGdEQUF1Qzs7SUFDdkMsOENBQW1DOztJQUNuQyw2Q0FBNEI7O0lBQzVCLDZDQUE0Qjs7SUFDNUIsZ0RBQTJDOztJQUMzQyxtREFBNEM7O0lBQzVDLGtEQUE0Qzs7SUFDNUMsMkNBQTBCOztJQUMxQixrREFBaUM7O0lBQ2pDLDZDQUE0Qjs7SUFDNUIsOENBQTZCOztJQUM3QiwrQ0FBbUY7O0lBQ25GLDZDQUE0Qjs7SUFFNUIsK0NBQStEOztJQUMvRCw2Q0FBNkQ7O0lBQzdELDBEQUEwRTs7SUFDMUUsMkNBQTJEOztJQUMzRCwyQ0FBMkQ7O0lBQzNELDhEQUE2Rzs7SUFDN0csaURBQXdDOztJQUN4QywyQ0FBa0M7O0lBQ2xDLDZDQUFtQjs7SUFDbkIsbURBQStCOzs7OztJQUNuQiwrQ0FBa0M7Ozs7O0lBQzVDLDhDQUFnQzs7Ozs7SUFDaEMsdUNBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIE9uRGVzdHJveSxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIElVcGxvYWRPcHRpb25zLFxyXG4gIElGaWxlT3B0aW9uc1xyXG59IGZyb20gJy4vZmlsZS11cGxvYWRlci50eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgTW9kYWxBbGVydENvbXBvbmVudCxcclxuICBNb2RhbFNlcnZpY2VcclxufSBmcm9tICduZy1kZXZ1aS9tb2RhbCc7XHJcbmltcG9ydCB7IE11bHRpcGxlVXBsb2FkVmlld0NvbXBvbmVudCB9IGZyb20gJy4vbXVsdGlwbGUtdXBsb2FkLXZpZXcuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBTZWxlY3RGaWxlc1xyXG59IGZyb20gJy4vc2VsZWN0LWZpbGVzLnV0aWxzJztcclxuaW1wb3J0IHsgbWFwLCBsYXN0LCBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBJMThuSW50ZXJmYWNlLCBJMThuU2VydmljZSB9IGZyb20gJ25nLWRldnVpL2kxOG4nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdkLW11bHRpcGxlLXVwbG9hZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpcGxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgZXhwb3J0QXM6ICdkTXVsdGlwbGVVcGxvYWQnLFxyXG4gIHN0eWxlVXJsczogWycuL3VwbG9hZC12aWV3LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNdWx0aXBsZVVwbG9hZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgdXBsb2FkT3B0aW9uczogSVVwbG9hZE9wdGlvbnM7XHJcbiAgQElucHV0KCkgZmlsZU9wdGlvbnM6IElGaWxlT3B0aW9ucztcclxuICBASW5wdXQoKSBhdXRvVXBsb2FkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgd2l0aG91dEJ0biA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHVwbG9hZGVkRmlsZXM6IEFycmF5PE9iamVjdD4gPSBbXTtcclxuICBASW5wdXQoKSB1cGxvYWRlZEZpbGVzUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIHByZWxvYWRGaWxlc1JlZj86IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgZmlsZVBhdGg6IHN0cmluZztcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlclRleHQ6IHN0cmluZztcclxuICBASW5wdXQoKSB1cGxvYWRUZXh0OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY29uZmlybVRleHQ6IHN0cmluZztcclxuICBASW5wdXQoKSBiZWZvcmVVcGxvYWQ6IChmaWxlcykgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4gfCBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gIEBJbnB1dCgpIGVuYWJsZURyb3AgPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIHN1Y2Nlc3NFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGVycm9yRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBkZWxldGVVcGxvYWRlZEZpbGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGZpbGVEcm9wOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZmlsZU92ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBWaWV3Q2hpbGQoJ2RNdWx0aXBsZVVwbG9hZFZpZXcnLCB7IHN0YXRpYzogdHJ1ZSB9KSBtdWx0aXBsZVVwbG9hZFZpZXdDb21wb25lbnQ6IE11bHRpcGxlVXBsb2FkVmlld0NvbXBvbmVudDtcclxuICBpMThuQ29tbW9uVGV4dDogSTE4bkludGVyZmFjZVsnY29tbW9uJ107XHJcbiAgaTE4blRleHQ6IEkxOG5JbnRlcmZhY2VbJ3VwbG9hZCddO1xyXG4gIGlzRHJvcE9WZXIgPSBmYWxzZTtcclxuICBpMThuU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcclxuICAgIHByaXZhdGUgc2VsZWN0RmlsZXM6IFNlbGVjdEZpbGVzLFxyXG4gICAgcHJpdmF0ZSBpMThuOiBJMThuU2VydmljZSwgKSB7XHJcbiAgICB0aGlzLmkxOG5UZXh0ID0gdGhpcy5pMThuLmdldEkxOG5UZXh0KCkudXBsb2FkO1xyXG4gICAgdGhpcy5pMThuQ29tbW9uVGV4dCA9IHRoaXMuaTE4bi5nZXRJMThuVGV4dCgpLmNvbW1vbjtcclxuICAgIHRoaXMuaTE4blN1YnNjcmlwdGlvbiA9IHRoaXMuaTE4bi5sYW5nQ2hhbmdlKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgIHRoaXMuaTE4blRleHQgPSBkYXRhLnVwbG9hZDtcclxuICAgICAgdGhpcy5pMThuQ29tbW9uVGV4dCA9IGRhdGEuY29tbW9uO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBfZGVhbEZpbGVzKG9ic2VydmFsZSkge1xyXG4gICAgdGhpcy5tdWx0aXBsZVVwbG9hZFZpZXdDb21wb25lbnQucmVzZXRTYW1lTmFtZUZpbGVzKCk7XHJcbiAgICBvYnNlcnZhbGUucGlwZShcclxuICAgICAgbWFwKGZpbGUgPT4gdGhpcy5tdWx0aXBsZVVwbG9hZFZpZXdDb21wb25lbnQuYWRkRmlsZShmaWxlKSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgxMDApXHJcbiAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgc2FtZU5hbWVGaWxlcyA9IHRoaXMubXVsdGlwbGVVcGxvYWRWaWV3Q29tcG9uZW50LmdldFNhbWVOYW1lRmlsZXMoKTtcclxuICAgICAgICAgIGlmICh0aGlzLmF1dG9VcGxvYWQpIHtcclxuICAgICAgICAgICAgdGhpcy51cGxvYWQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLnVwbG9hZE9wdGlvbnMuY2hlY2tTYW1lTmFtZSAmJiBzYW1lTmFtZUZpbGVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0TXNnKHRoaXMuaTE4blRleHQuZ2V0RXhpc3RTYW1lTmFtZUZpbGVzTXNnKHNhbWVOYW1lRmlsZXMpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcjogRXJyb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRNc2coZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgb25DbGljayhldmVudCkge1xyXG4gICAgdGhpcy5fZGVhbEZpbGVzKHRoaXMuc2VsZWN0RmlsZXMudHJpZ2dlclNlbGVjdEZpbGVzKHRoaXMuZmlsZU9wdGlvbnMsIHRoaXMudXBsb2FkT3B0aW9ucykpO1xyXG5cclxuICB9XHJcblxyXG4gIG9uRmlsZURyb3AoZmlsZXMpIHtcclxuICAgIHRoaXMuaXNEcm9wT1ZlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5fZGVhbEZpbGVzKHRoaXMuc2VsZWN0RmlsZXMudHJpZ2dlckRyb3BGaWxlcyh0aGlzLmZpbGVPcHRpb25zLCB0aGlzLnVwbG9hZE9wdGlvbnMsIGZpbGVzKSk7XHJcbiAgICB0aGlzLmZpbGVEcm9wLmVtaXQoZmlsZXMpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBvbkZpbGVPdmVyKGV2ZW50KSB7XHJcbiAgICB0aGlzLmlzRHJvcE9WZXIgPSBldmVudDtcclxuICAgIHRoaXMuZmlsZU92ZXIuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICB1cGxvYWQoKSB7XHJcbiAgICB0aGlzLmNhblVwbG9hZCgpLnRoZW4oKGNhblVwbG9hZCkgPT4ge1xyXG4gICAgICBpZiAoIWNhblVwbG9hZCkge1xyXG4gICAgICAgIHRoaXMubXVsdGlwbGVVcGxvYWRWaWV3Q29tcG9uZW50LnJlbW92ZUZpbGVzKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubXVsdGlwbGVVcGxvYWRWaWV3Q29tcG9uZW50LnVwbG9hZCgpXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBsYXN0KClcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgIChyZXN1bHRzOiBBcnJheTx7IGZpbGU6IEZpbGUsIHJlc3BvbnNlOiBhbnkgfT4pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zdWNjZXNzRXZlbnQuZW1pdChyZXN1bHRzKTtcclxuICAgICAgICAgICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLm11bHRpcGxlVXBsb2FkVmlld0NvbXBvbmVudC5kZWxldGVGaWxlKHJlc3VsdC5maWxlKTtcclxuICAgICAgICAgICAgICB0aGlzLm11bHRpcGxlVXBsb2FkVmlld0NvbXBvbmVudC51cGxvYWRlZEZpbGVzQ29tcG9uZW50LmFkZEZpbGUocmVzdWx0LmZpbGUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvckV2ZW50LmVtaXQoZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNhblVwbG9hZCgpIHtcclxuICAgIGxldCB1cGxvYWRSZXN1bHQgPSBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcbiAgICBpZiAodGhpcy5iZWZvcmVVcGxvYWQpIHtcclxuICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSB0aGlzLmJlZm9yZVVwbG9hZCh0aGlzLm11bHRpcGxlVXBsb2FkVmlld0NvbXBvbmVudC5nZXRGaWxlcygpKTtcclxuICAgICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC50aGVuKSB7XHJcbiAgICAgICAgICB1cGxvYWRSZXN1bHQgPSByZXN1bHQ7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuc3Vic2NyaWJlKSB7XHJcbiAgICAgICAgICB1cGxvYWRSZXN1bHQgPSAocmVzdWx0IGFzIE9ic2VydmFibGU8Ym9vbGVhbj4pLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB1cGxvYWRSZXN1bHQgPSBQcm9taXNlLnJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB1cGxvYWRSZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBfb25EZWxldGVVcGxvYWRlZEZpbGUoZmlsZVBhdGg6IHN0cmluZykge1xyXG4gICAgdGhpcy5kZWxldGVVcGxvYWRlZEZpbGVFdmVudC5lbWl0KGZpbGVQYXRoKTtcclxuICB9XHJcblxyXG4gIGFsZXJ0TXNnKGVycm9yTXNnKSB7XHJcbiAgICBjb25zdCByZXN1bHRzID0gdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih7XHJcbiAgICAgIHdpZHRoOiAnMzAwcHgnLFxyXG4gICAgICBiYWNrZHJvcENsb3NlYWJsZTogZmFsc2UsXHJcbiAgICAgIHNob3dBbmltYXRlOiB0cnVlLFxyXG4gICAgICBjb21wb25lbnQ6IE1vZGFsQWxlcnRDb21wb25lbnQsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBjb250ZW50OiBlcnJvck1zZyxcclxuICAgICAgICBjYW5jZWxCdG5UZXh0OiB0aGlzLmNvbmZpcm1UZXh0ID8gdGhpcy5jb25maXJtVGV4dCA6IHRoaXMuaTE4bkNvbW1vblRleHQuYnRuQ29uZmlybSxcclxuICAgICAgICBvbkNsb3NlOiAoZXZlbnQpID0+IHtcclxuICAgICAgICAgIHJlc3VsdHMubW9kYWxJbnN0YW5jZS5oaWRlKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLmkxOG5TdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5pMThuU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuIl19