@duoduo-oba/ng-devui
Version:
DevUI components based on Angular
332 lines • 29.2 kB
JavaScript
/**
* @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';
var MultipleUploadComponent = /** @class */ (function () {
function MultipleUploadComponent(modalService, selectFiles, i18n) {
var _this = this;
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 {?}
*/
function (data) {
_this.i18nText = data.upload;
_this.i18nCommonText = data.common;
}));
}
/**
* @param {?} observale
* @return {?}
*/
MultipleUploadComponent.prototype._dealFiles = /**
* @param {?} observale
* @return {?}
*/
function (observale) {
var _this = this;
this.multipleUploadViewComponent.resetSameNameFiles();
observale.pipe(map((/**
* @param {?} file
* @return {?}
*/
function (file) { return _this.multipleUploadViewComponent.addFile(file); })), debounceTime(100))
.subscribe((/**
* @return {?}
*/
function () {
/** @type {?} */
var sameNameFiles = _this.multipleUploadViewComponent.getSameNameFiles();
if (_this.autoUpload) {
_this.upload();
}
if (_this.uploadOptions.checkSameName && sameNameFiles.length) {
_this.alertMsg(_this.i18nText.getExistSameNameFilesMsg(sameNameFiles));
}
}), (/**
* @param {?} error
* @return {?}
*/
function (error) {
_this.alertMsg(error.message);
}));
};
/**
* @param {?} event
* @return {?}
*/
MultipleUploadComponent.prototype.onClick = /**
* @param {?} event
* @return {?}
*/
function (event) {
this._dealFiles(this.selectFiles.triggerSelectFiles(this.fileOptions, this.uploadOptions));
};
/**
* @param {?} files
* @return {?}
*/
MultipleUploadComponent.prototype.onFileDrop = /**
* @param {?} files
* @return {?}
*/
function (files) {
this.isDropOVer = false;
this._dealFiles(this.selectFiles.triggerDropFiles(this.fileOptions, this.uploadOptions, files));
this.fileDrop.emit(files);
};
/**
* @param {?} event
* @return {?}
*/
MultipleUploadComponent.prototype.onFileOver = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.isDropOVer = event;
this.fileOver.emit(event);
};
/**
* @return {?}
*/
MultipleUploadComponent.prototype.upload = /**
* @return {?}
*/
function () {
var _this = this;
this.canUpload().then((/**
* @param {?} canUpload
* @return {?}
*/
function (canUpload) {
if (!canUpload) {
_this.multipleUploadViewComponent.removeFiles();
return;
}
_this.multipleUploadViewComponent.upload()
.pipe(last())
.subscribe((/**
* @param {?} results
* @return {?}
*/
function (results) {
_this.successEvent.emit(results);
results.forEach((/**
* @param {?} result
* @return {?}
*/
function (result) {
_this.multipleUploadViewComponent.deleteFile(result.file);
_this.multipleUploadViewComponent.uploadedFilesComponent.addFile(result.file);
}));
}), (/**
* @param {?} error
* @return {?}
*/
function (error) {
_this.errorEvent.emit(error);
}));
}));
};
/**
* @return {?}
*/
MultipleUploadComponent.prototype.canUpload = /**
* @return {?}
*/
function () {
/** @type {?} */
var uploadResult = Promise.resolve(true);
if (this.beforeUpload) {
/** @type {?} */
var 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 {?}
*/
MultipleUploadComponent.prototype._onDeleteUploadedFile = /**
* @param {?} filePath
* @return {?}
*/
function (filePath) {
this.deleteUploadedFileEvent.emit(filePath);
};
/**
* @param {?} errorMsg
* @return {?}
*/
MultipleUploadComponent.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 {?}
*/
MultipleUploadComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
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 = function () { return [
{ 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 },] }]
};
return MultipleUploadComponent;
}());
export { MultipleUploadComponent };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlwbGUtdXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWRldnVpL3VwbG9hZC8iLCJzb3VyY2VzIjpbIm11bHRpcGxlLXVwbG9hZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxjQUFjLEVBQ2QsWUFBWSxFQUNiLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixZQUFZLEVBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRSxPQUFPLEVBQ0wsV0FBVyxFQUNaLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekQsT0FBTyxFQUFpQixXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0Q7SUErQkUsaUNBQW9CLFlBQTBCLEVBQ3BDLFdBQXdCLEVBQ3hCLElBQWlCO1FBRjNCLGlCQVNDO1FBVG1CLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQ3BDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFNBQUksR0FBSixJQUFJLENBQWE7UUF4QmxCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixrQkFBYSxHQUFrQixFQUFFLENBQUM7UUFRbEMsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUVsQixpQkFBWSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3JELGVBQVUsR0FBc0IsSUFBSSxZQUFZLEVBQUUs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LEtBQUs7bUNBQ0wsS0FBSztrQ0FDTCxLQUFLOzJCQUNMLEtBQUs7a0NBQ0wsS0FBSzs2QkFDTCxLQUFLOzhCQUNMLEtBQUs7K0JBQ0wsS0FBSzs2QkFDTCxLQUFLOytCQUVMLE1BQU07NkJBQ04sTUFBTTswQ0FDTixNQUFNOzJCQUNOLE1BQU07MkJBQ04sTUFBTTs4Q0FDTixTQUFTLFNBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOztJQTJIcEQsOEJBQUM7Q0FBQSxBQXJKRCxJQXFKQztTQS9JWSx1QkFBdUI7OztJQUNsQyxnREFBdUM7O0lBQ3ZDLDhDQUFtQzs7SUFDbkMsNkNBQTRCOztJQUM1Qiw2Q0FBNEI7O0lBQzVCLGdEQUEyQzs7SUFDM0MsbURBQTRDOztJQUM1QyxrREFBNEM7O0lBQzVDLDJDQUEwQjs7SUFDMUIsa0RBQWlDOztJQUNqQyw2Q0FBNEI7O0lBQzVCLDhDQUE2Qjs7SUFDN0IsK0NBQW1GOztJQUNuRiw2Q0FBNEI7O0lBRTVCLCtDQUErRDs7SUFDL0QsNkNBQTZEOztJQUM3RCwwREFBMEU7O0lBQzFFLDJDQUEyRDs7SUFDM0QsMkNBQTJEOztJQUMzRCw4REFBNkc7O0lBQzdHLGlEQUF3Qzs7SUFDeEMsMkNBQWtDOztJQUNsQyw2Q0FBbUI7O0lBQ25CLG1EQUErQjs7Ozs7SUFDbkIsK0NBQWtDOzs7OztJQUM1Qyw4Q0FBZ0M7Ozs7O0lBQ2hDLHVDQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBPbkRlc3Ryb3ksXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBJVXBsb2FkT3B0aW9ucyxcclxuICBJRmlsZU9wdGlvbnNcclxufSBmcm9tICcuL2ZpbGUtdXBsb2FkZXIudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIE1vZGFsQWxlcnRDb21wb25lbnQsXHJcbiAgTW9kYWxTZXJ2aWNlXHJcbn0gZnJvbSAnbmctZGV2dWkvbW9kYWwnO1xyXG5pbXBvcnQgeyBNdWx0aXBsZVVwbG9hZFZpZXdDb21wb25lbnQgfSBmcm9tICcuL211bHRpcGxlLXVwbG9hZC12aWV3LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgU2VsZWN0RmlsZXNcclxufSBmcm9tICcuL3NlbGVjdC1maWxlcy51dGlscyc7XHJcbmltcG9ydCB7IG1hcCwgbGFzdCwgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSTE4bkludGVyZmFjZSwgSTE4blNlcnZpY2UgfSBmcm9tICduZy1kZXZ1aS9pMThuJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZC1tdWx0aXBsZS11cGxvYWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tdWx0aXBsZS11cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGV4cG9ydEFzOiAnZE11bHRpcGxlVXBsb2FkJyxcclxuICBzdHlsZVVybHM6IFsnLi91cGxvYWQtdmlldy5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTXVsdGlwbGVVcGxvYWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIHVwbG9hZE9wdGlvbnM6IElVcGxvYWRPcHRpb25zO1xyXG4gIEBJbnB1dCgpIGZpbGVPcHRpb25zOiBJRmlsZU9wdGlvbnM7XHJcbiAgQElucHV0KCkgYXV0b1VwbG9hZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHdpdGhvdXRCdG4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB1cGxvYWRlZEZpbGVzOiBBcnJheTxPYmplY3Q+ID0gW107XHJcbiAgQElucHV0KCkgdXBsb2FkZWRGaWxlc1JlZjogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBwcmVsb2FkRmlsZXNSZWY/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIGZpbGVQYXRoOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXJUZXh0OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdXBsb2FkVGV4dDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGNvbmZpcm1UZXh0OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYmVmb3JlVXBsb2FkOiAoZmlsZXMpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+IHwgT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICBASW5wdXQoKSBlbmFibGVEcm9wID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBzdWNjZXNzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBlcnJvckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZGVsZXRlVXBsb2FkZWRGaWxlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBmaWxlRHJvcDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGZpbGVPdmVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAVmlld0NoaWxkKCdkTXVsdGlwbGVVcGxvYWRWaWV3JywgeyBzdGF0aWM6IHRydWUgfSkgbXVsdGlwbGVVcGxvYWRWaWV3Q29tcG9uZW50OiBNdWx0aXBsZVVwbG9hZFZpZXdDb21wb25lbnQ7XHJcbiAgaTE4bkNvbW1vblRleHQ6IEkxOG5JbnRlcmZhY2VbJ2NvbW1vbiddO1xyXG4gIGkxOG5UZXh0OiBJMThuSW50ZXJmYWNlWyd1cGxvYWQnXTtcclxuICBpc0Ryb3BPVmVyID0gZmFsc2U7XHJcbiAgaTE4blN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNlbGVjdEZpbGVzOiBTZWxlY3RGaWxlcyxcclxuICAgIHByaXZhdGUgaTE4bjogSTE4blNlcnZpY2UsICkge1xyXG4gICAgdGhpcy5pMThuVGV4dCA9IHRoaXMuaTE4bi5nZXRJMThuVGV4dCgpLnVwbG9hZDtcclxuICAgIHRoaXMuaTE4bkNvbW1vblRleHQgPSB0aGlzLmkxOG4uZ2V0STE4blRleHQoKS5jb21tb247XHJcbiAgICB0aGlzLmkxOG5TdWJzY3JpcHRpb24gPSB0aGlzLmkxOG4ubGFuZ0NoYW5nZSgpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICB0aGlzLmkxOG5UZXh0ID0gZGF0YS51cGxvYWQ7XHJcbiAgICAgIHRoaXMuaTE4bkNvbW1vblRleHQgPSBkYXRhLmNvbW1vbjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgX2RlYWxGaWxlcyhvYnNlcnZhbGUpIHtcclxuICAgIHRoaXMubXVsdGlwbGVVcGxvYWRWaWV3Q29tcG9uZW50LnJlc2V0U2FtZU5hbWVGaWxlcygpO1xyXG4gICAgb2JzZXJ2YWxlLnBpcGUoXHJcbiAgICAgIG1hcChmaWxlID0+IHRoaXMubXVsdGlwbGVVcGxvYWRWaWV3Q29tcG9uZW50LmFkZEZpbGUoZmlsZSkpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMTAwKVxyXG4gICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHNhbWVOYW1lRmlsZXMgPSB0aGlzLm11bHRpcGxlVXBsb2FkVmlld0NvbXBvbmVudC5nZXRTYW1lTmFtZUZpbGVzKCk7XHJcbiAgICAgICAgICBpZiAodGhpcy5hdXRvVXBsb2FkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBsb2FkKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy51cGxvYWRPcHRpb25zLmNoZWNrU2FtZU5hbWUgJiYgc2FtZU5hbWVGaWxlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydE1zZyh0aGlzLmkxOG5UZXh0LmdldEV4aXN0U2FtZU5hbWVGaWxlc01zZyhzYW1lTmFtZUZpbGVzKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0TXNnKGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2soZXZlbnQpIHtcclxuICAgIHRoaXMuX2RlYWxGaWxlcyh0aGlzLnNlbGVjdEZpbGVzLnRyaWdnZXJTZWxlY3RGaWxlcyh0aGlzLmZpbGVPcHRpb25zLCB0aGlzLnVwbG9hZE9wdGlvbnMpKTtcclxuXHJcbiAgfVxyXG5cclxuICBvbkZpbGVEcm9wKGZpbGVzKSB7XHJcbiAgICB0aGlzLmlzRHJvcE9WZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuX2RlYWxGaWxlcyh0aGlzLnNlbGVjdEZpbGVzLnRyaWdnZXJEcm9wRmlsZXModGhpcy5maWxlT3B0aW9ucywgdGhpcy51cGxvYWRPcHRpb25zLCBmaWxlcykpO1xyXG4gICAgdGhpcy5maWxlRHJvcC5lbWl0KGZpbGVzKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgb25GaWxlT3ZlcihldmVudCkge1xyXG4gICAgdGhpcy5pc0Ryb3BPVmVyID0gZXZlbnQ7XHJcbiAgICB0aGlzLmZpbGVPdmVyLmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkKCkge1xyXG4gICAgdGhpcy5jYW5VcGxvYWQoKS50aGVuKChjYW5VcGxvYWQpID0+IHtcclxuICAgICAgaWYgKCFjYW5VcGxvYWQpIHtcclxuICAgICAgICB0aGlzLm11bHRpcGxlVXBsb2FkVmlld0NvbXBvbmVudC5yZW1vdmVGaWxlcygpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm11bHRpcGxlVXBsb2FkVmlld0NvbXBvbmVudC51cGxvYWQoKVxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgbGFzdCgpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAocmVzdWx0czogQXJyYXk8eyBmaWxlOiBGaWxlLCByZXNwb25zZTogYW55IH0+KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc0V2ZW50LmVtaXQocmVzdWx0cyk7XHJcbiAgICAgICAgICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tdWx0aXBsZVVwbG9hZFZpZXdDb21wb25lbnQuZGVsZXRlRmlsZShyZXN1bHQuZmlsZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5tdWx0aXBsZVVwbG9hZFZpZXdDb21wb25lbnQudXBsb2FkZWRGaWxlc0NvbXBvbmVudC5hZGRGaWxlKHJlc3VsdC5maWxlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JFdmVudC5lbWl0KGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjYW5VcGxvYWQoKSB7XHJcbiAgICBsZXQgdXBsb2FkUmVzdWx0ID0gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xyXG4gICAgaWYgKHRoaXMuYmVmb3JlVXBsb2FkKSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0gdGhpcy5iZWZvcmVVcGxvYWQodGhpcy5tdWx0aXBsZVVwbG9hZFZpZXdDb21wb25lbnQuZ2V0RmlsZXMoKSk7XHJcbiAgICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIGlmIChyZXN1bHQudGhlbikge1xyXG4gICAgICAgICAgdXBsb2FkUmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnN1YnNjcmliZSkge1xyXG4gICAgICAgICAgdXBsb2FkUmVzdWx0ID0gKHJlc3VsdCBhcyBPYnNlcnZhYmxlPGJvb2xlYW4+KS50b1Byb21pc2UoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdXBsb2FkUmVzdWx0ID0gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXBsb2FkUmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgX29uRGVsZXRlVXBsb2FkZWRGaWxlKGZpbGVQYXRoOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGVsZXRlVXBsb2FkZWRGaWxlRXZlbnQuZW1pdChmaWxlUGF0aCk7XHJcbiAgfVxyXG5cclxuICBhbGVydE1zZyhlcnJvck1zZykge1xyXG4gICAgY29uc3QgcmVzdWx0cyA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oe1xyXG4gICAgICB3aWR0aDogJzMwMHB4JyxcclxuICAgICAgYmFja2Ryb3BDbG9zZWFibGU6IGZhbHNlLFxyXG4gICAgICBzaG93QW5pbWF0ZTogdHJ1ZSxcclxuICAgICAgY29tcG9uZW50OiBNb2RhbEFsZXJ0Q29tcG9uZW50LFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgY29udGVudDogZXJyb3JNc2csXHJcbiAgICAgICAgY2FuY2VsQnRuVGV4dDogdGhpcy5jb25maXJtVGV4dCA/IHRoaXMuY29uZmlybVRleHQgOiB0aGlzLmkxOG5Db21tb25UZXh0LmJ0bkNvbmZpcm0sXHJcbiAgICAgICAgb25DbG9zZTogKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICByZXN1bHRzLm1vZGFsSW5zdGFuY2UuaGlkZSgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5pMThuU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuaTE4blN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbiJdfQ==