UNPKG

ngx-pluto

Version:
337 lines 25.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ViewEncapsulation, Input, Output, EventEmitter, forwardRef } from "@angular/core"; import { DomSanitizer } from "@angular/platform-browser"; import { NG_VALUE_ACCESSOR, NG_VALIDATORS } from "@angular/forms"; import { Utils } from "../common/utils"; /** * 图片上传组件 - 支持NgModel和reactive forms * * <example-url>https://stackblitz.com/edit/np-img-upload-sample?embed=1&file=src/app/app.component.html</example-url> */ var NpImgUpload = /** @class */ (function () { function NpImgUpload(sanitizer) { this.sanitizer = sanitizer; this.emitChange = (/** * @param {?} _ * @return {?} */ function (_) { }); /** * 标签 */ this.label = '选择图片'; /** * 是否忽略宽高检查,true - 忽略宽高检查,false - 检查宽高 */ this.ignoreWidthAndHeightCheck = false; /** * 上传图片按钮文字 */ this.btnText = '点击上传'; /** * 图片描述,如尺寸、格式、大小等 */ this.imgDesc = '*图片描述,如尺寸、格式、大小等*'; /** * 图片格式,默认jpg、png和jpeg */ this.imgFormat = 'jpg|png|jpeg'; /** * 图片大小,默认最大500kb */ this.maxSize = 500; /** * 当重新选择图片时触发 */ this.onImgFileChanged = new EventEmitter(); /** * 上传错误,如尺寸不对、格式不对,大小不对等 */ this.onUploadError = new EventEmitter(); /** * 点击缩略图是触发 */ this.onImgClicked = new EventEmitter(); this.currentImgFile = null; this.currentImgSrc = null; } /** * @return {?} */ NpImgUpload.prototype.ngOnInit = /** * @return {?} */ function () { }; /** * @param {?} file * @return {?} */ NpImgUpload.prototype.onCurrentImgFileChanged = /** * @param {?} file * @return {?} */ function (file) { var _this = this; /** @type {?} */ var filename = file.name; /** @type {?} */ var reg = new RegExp(".(" + this.imgFormat.toLowerCase() + ")|.(" + this.imgFormat.toUpperCase() + ")$"); if (!reg.test(filename)) { this.errorMessage = '图片格式不对,支持' + this.imgFormat.split('|').join('、'); this.onUploadError.next(this.errorMessage); this.emitChange({ file: null, src: null }); return; } if (file.size > +this.maxSize * 1024) { this.errorMessage = '图片大于' + this.maxSize + 'kb,请重新选择'; this.onUploadError.next(this.errorMessage); this.emitChange({ file: null, src: null }); return; } Utils.checkImgWidthAndHeight(file, +this.width, +this.height).subscribe((/** * @param {?} res * @return {?} */ function (res) { if (!res && !_this.ignoreWidthAndHeightCheck) { _this.errorMessage = '图片大小必须为' + _this.width + '*' + _this.height; _this.onUploadError.next(_this.errorMessage); _this.emitChange({ file: null, src: null }); return; } _this.errorMessage = ''; _this.currentImgSrc = _this.sanitizer.bypassSecurityTrustUrl(URL.createObjectURL(file)); _this.currentImgFile = file; _this.emitChange({ file: _this.currentImgFile, src: _this.currentImgSrc }); _this.onImgFileChanged.next({ file: _this.currentImgFile, src: _this.currentImgSrc }); return true; })); }; /** * @param {?} msg * @return {?} */ NpImgUpload.prototype.onUploadImgFormatError = /** * @param {?} msg * @return {?} */ function (msg) { this.errorMessage = '图片格式不对,支持' + this.imgFormat.split('|').join('、'); this.onUploadError.next(this.errorMessage); this.emitChange({ file: null, src: null }); }; /** * @return {?} */ NpImgUpload.prototype.onCurrentImgClick = /** * @return {?} */ function () { this.onImgClicked.next({ file: this.currentImgFile, src: this.currentImgSrc }); }; /** * @param {?} obj * @return {?} */ NpImgUpload.prototype.writeValue = /** * @param {?} obj * @return {?} */ function (obj) { if (obj) { this.currentImgFile = obj.file; this.currentImgSrc = obj.src; } else { this.currentImgFile = null; this.currentImgSrc = null; } }; /** * @param {?} control * @return {?} */ NpImgUpload.prototype.validate = /** * @param {?} control * @return {?} */ function (control) { if (this.isRequired) { if (control && control.value && !control.value.file && !control.value.src) { return { 'imgError': true }; } if (control && !control.value) { return { 'imgError': true }; } } return null; }; /** * @param {?} fn * @return {?} */ NpImgUpload.prototype.registerOnChange = /** * @param {?} fn * @return {?} */ function (fn) { this.emitChange = fn; }; /** * @param {?} fn * @return {?} */ NpImgUpload.prototype.registerOnTouched = /** * @param {?} fn * @return {?} */ function (fn) { }; /** * @param {?} isDisabled * @return {?} */ NpImgUpload.prototype.setDisabledState = /** * @param {?} isDisabled * @return {?} */ function (isDisabled) { }; NpImgUpload.decorators = [ { type: Component, args: [{ selector: "np-img-upload", template: "<div class=\"img-upload-wrapper flex-wrap col-flex\">\r\n <div class=\"flex-wrap row-flex\" style=\"align-items: baseline;\">\r\n <label class=\"img-label\">\r\n <span class=\"form-required\" *ngIf=\"isRequired\">*</span>\r\n {{ label }}\r\n </label>\r\n <np-button buttonType=\"secondary\" [funcType]=\"'upload'\" [isDisabled]=\"isDisabled\" [uploadFileType]=\"imgFormat\"\r\n (uploadErrorMessage)=\"onUploadImgFormatError($event)\" [file]=\"currentImgFile\"\r\n (fileChange)=\"onCurrentImgFileChanged($event)\">{{ btnText }}\r\n </np-button>\r\n </div>\r\n <span class=\"error-message\" *ngIf=\"errorMessage\" style=\"margin-left: 100px;\">{{ errorMessage }}</span>\r\n <div class=\"img-thumbnail-container flex-wrap col-flex middle-flex\" (click)=\"onCurrentImgClick()\">\r\n <img *ngIf=\"currentImgSrc\" [src]=\"currentImgSrc\">\r\n <div *ngIf=\"!currentImgSrc\" class=\"img-placeholder flex-wrap col-flex middle-flex\">\r\n <span>+</span>\r\n </div>\r\n </div>\r\n <span [innerHtml]=\"imgDesc | safeHtml\" class=\"img-desc\"></span>\r\n</div>\r\n", providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ function () { return NpImgUpload; })), multi: true, }, { provide: NG_VALIDATORS, useExisting: forwardRef((/** * @return {?} */ function () { return NpImgUpload; })), multi: true, } ], encapsulation: ViewEncapsulation.None, styles: [".img-upload-wrapper .error-message{display:block;font-size:10px;margin:5px}.img-upload-wrapper .img-thumbnail-container{width:220px;height:160px;padding:15px;margin-top:10px;margin-left:100px;border:2.5px dashed #aaa}.img-upload-wrapper .img-thumbnail-container>.img-placeholder,.img-upload-wrapper .img-thumbnail-container>img{width:160px;height:auto;max-height:120px}.img-upload-wrapper .img-thumbnail-container>.img-placeholder{font-size:18px}.img-upload-wrapper .img-thumbnail-container>.img-placeholder span{font-size:40px;font-weight:500;color:#aaa}.img-upload-wrapper .img-label{width:80px;text-align:right;margin-right:20px;font-weight:700}.img-upload-wrapper .img-desc{font-size:12px;margin-top:10px;margin-left:100px}.img-upload-wrapper .button-secondary{margin:0!important}"] }] } ]; /** @nocollapse */ NpImgUpload.ctorParameters = function () { return [ { type: DomSanitizer } ]; }; NpImgUpload.propDecorators = { label: [{ type: Input }], isDisabled: [{ type: Input }], ignoreWidthAndHeightCheck: [{ type: Input }], isRequired: [{ type: Input }], btnText: [{ type: Input }], imgDesc: [{ type: Input }], imgFormat: [{ type: Input }], maxSize: [{ type: Input }], width: [{ type: Input }], height: [{ type: Input }], errorMessage: [{ type: Input }], onImgFileChanged: [{ type: Output }], onUploadError: [{ type: Output }], onImgClicked: [{ type: Output }] }; return NpImgUpload; }()); export { NpImgUpload }; if (false) { /** * @type {?} * @private */ NpImgUpload.prototype.emitChange; /** * 标签 * @type {?} */ NpImgUpload.prototype.label; /** * 是否禁用 * @type {?} */ NpImgUpload.prototype.isDisabled; /** * 是否忽略宽高检查,true - 忽略宽高检查,false - 检查宽高 * @type {?} */ NpImgUpload.prototype.ignoreWidthAndHeightCheck; /** * 是否必填 - 必填则有红色*号在标签前面;否则没有 * @type {?} */ NpImgUpload.prototype.isRequired; /** * 上传图片按钮文字 * @type {?} */ NpImgUpload.prototype.btnText; /** * 图片描述,如尺寸、格式、大小等 * @type {?} */ NpImgUpload.prototype.imgDesc; /** * 图片格式,默认jpg、png和jpeg * @type {?} */ NpImgUpload.prototype.imgFormat; /** * 图片大小,默认最大500kb * @type {?} */ NpImgUpload.prototype.maxSize; /** * 图片宽度px * @type {?} */ NpImgUpload.prototype.width; /** * 图片高度px * @type {?} */ NpImgUpload.prototype.height; /** * 错误信息 - 将以红色字体显示在上传按钮下方 * @type {?} */ NpImgUpload.prototype.errorMessage; /** * 当重新选择图片时触发 * @type {?} */ NpImgUpload.prototype.onImgFileChanged; /** * 上传错误,如尺寸不对、格式不对,大小不对等 * @type {?} */ NpImgUpload.prototype.onUploadError; /** * 点击缩略图是触发 * @type {?} */ NpImgUpload.prototype.onImgClicked; /** @type {?} */ NpImgUpload.prototype.currentImgFile; /** @type {?} */ NpImgUpload.prototype.currentImgSrc; /** * @type {?} * @private */ NpImgUpload.prototype.sanitizer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1nLXVwbG9hZC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1wbHV0by8iLCJzb3VyY2VzIjpbImxpYi9pbWctdXBsb2FkL2ltZy11cGxvYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQVUsS0FBSyxFQUF5QixNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNySSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUF3QixhQUFhLEVBQWdELE1BQU0sZ0JBQWdCLENBQUM7QUFDdEksT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7QUFPeEM7SUFtRUUscUJBQW9CLFNBQXVCO1FBQXZCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFoRG5DLGVBQVU7Ozs7UUFBRyxVQUFDLENBQU0sSUFBTyxDQUFDLEVBQUM7Ozs7UUFHNUIsVUFBSyxHQUFXLE1BQU0sQ0FBQzs7OztRQU12Qiw4QkFBeUIsR0FBWSxLQUFLLENBQUM7Ozs7UUFNM0MsWUFBTyxHQUFXLE1BQU0sQ0FBQzs7OztRQUd6QixZQUFPLEdBQVcsbUJBQW1CLENBQUM7Ozs7UUFHdEMsY0FBUyxHQUFXLGNBQWMsQ0FBQzs7OztRQUduQyxZQUFPLEdBQVcsR0FBRyxDQUFDOzs7O1FBYXJCLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7Ozs7UUFHM0Msa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDOzs7O1FBRzNDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVqRCxtQkFBYyxHQUFTLElBQUksQ0FBQztRQUM1QixrQkFBYSxHQUFRLElBQUksQ0FBQztJQUVxQixDQUFDOzs7O0lBRWhELDhCQUFROzs7SUFBUjtJQUVBLENBQUM7Ozs7O0lBRUQsNkNBQXVCOzs7O0lBQXZCLFVBQXdCLElBQVU7UUFBbEMsaUJBaUNDOztZQWhDTyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUk7O1lBQ3BCLEdBQUcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLFlBQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsT0FBSSxDQUFDO1FBQ2pHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDM0MsT0FBTztTQUNSO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEVBQUU7WUFDcEMsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUM7WUFDdkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLE9BQU87U0FDUjtRQUVELEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVM7Ozs7UUFBQyxVQUFBLEdBQUc7WUFDekUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUksQ0FBQyx5QkFBeUIsRUFBRTtnQkFDM0MsS0FBSSxDQUFDLFlBQVksR0FBRyxTQUFTLEdBQUcsS0FBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSSxDQUFDLE1BQU0sQ0FBQztnQkFDL0QsS0FBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUMzQyxLQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDM0MsT0FBTzthQUNSO1lBRUQsS0FBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDdkIsS0FBSSxDQUFDLGFBQWEsR0FBRyxLQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN0RixLQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztZQUUzQixLQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFLEtBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLEtBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUUsS0FBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDbkYsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLEVBQUMsQ0FBQztJQUNMLENBQUM7Ozs7O0lBRUQsNENBQXNCOzs7O0lBQXRCLFVBQXVCLEdBQVc7UUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDOzs7O0lBRUQsdUNBQWlCOzs7SUFBakI7UUFDRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQztJQUMvRSxDQUFDOzs7OztJQUVELGdDQUFVOzs7O0lBQVYsVUFBVyxHQUFRO1FBQ2pCLElBQUksR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQy9CLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztTQUM5QjthQUFNO1lBQ0wsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDM0I7SUFDSCxDQUFDOzs7OztJQUVELDhCQUFROzs7O0lBQVIsVUFBUyxPQUF3QjtRQUMvQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7Z0JBQ3pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7YUFDN0I7WUFFRCxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7Z0JBQzdCLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7YUFDN0I7U0FDRjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7Ozs7SUFFRCxzQ0FBZ0I7Ozs7SUFBaEIsVUFBaUIsRUFBTztRQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDOzs7OztJQUVELHVDQUFpQjs7OztJQUFqQixVQUFrQixFQUFPLElBQVUsQ0FBQzs7Ozs7SUFFcEMsc0NBQWdCOzs7O0lBQWhCLFVBQWtCLFVBQW1CLElBQVUsQ0FBQzs7Z0JBcEpqRCxTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLDJsQ0FBOEI7b0JBRTlCLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVTs7OzRCQUFDLGNBQU0sT0FBQSxXQUFXLEVBQVgsQ0FBVyxFQUFDOzRCQUMxQyxLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsV0FBVyxFQUFFLFVBQVU7Ozs0QkFBQyxjQUFNLE9BQUEsV0FBVyxFQUFYLENBQVcsRUFBQzs0QkFDMUMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQUM7b0JBQ0osYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7O2lCQUN0Qzs7OztnQkF6QlEsWUFBWTs7O3dCQStCbEIsS0FBSzs2QkFHTCxLQUFLOzRDQUdMLEtBQUs7NkJBR0wsS0FBSzswQkFHTCxLQUFLOzBCQUdMLEtBQUs7NEJBR0wsS0FBSzswQkFHTCxLQUFLO3dCQUdMLEtBQUs7eUJBR0wsS0FBSzsrQkFHTCxLQUFLO21DQUlMLE1BQU07Z0NBR04sTUFBTTsrQkFHTixNQUFNOztJQXVGVCxrQkFBQztDQUFBLEFBckpELElBcUpDO1NBbklZLFdBQVc7Ozs7OztJQUN0QixpQ0FBcUM7Ozs7O0lBR3JDLDRCQUFnQzs7Ozs7SUFHaEMsaUNBQTZCOzs7OztJQUc3QixnREFBb0Q7Ozs7O0lBR3BELGlDQUE2Qjs7Ozs7SUFHN0IsOEJBQWtDOzs7OztJQUdsQyw4QkFBK0M7Ozs7O0lBRy9DLGdDQUE0Qzs7Ozs7SUFHNUMsOEJBQStCOzs7OztJQUcvQiw0QkFBdUI7Ozs7O0lBR3ZCLDZCQUF3Qjs7Ozs7SUFHeEIsbUNBQThCOzs7OztJQUk5Qix1Q0FBcUQ7Ozs7O0lBR3JELG9DQUFxRDs7Ozs7SUFHckQsbUNBQWlEOztJQUVqRCxxQ0FBNEI7O0lBQzVCLG9DQUEwQjs7Ozs7SUFFZCxnQ0FBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkluaXQsIElucHV0LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxJREFUT1JTLCBWYWxpZGF0b3IsIEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBVdGlscyB9IGZyb20gXCIuLi9jb21tb24vdXRpbHNcIjtcclxuXHJcbi8qKlxyXG4gKiDlm77niYfkuIrkvKDnu4Tku7YgLSDmlK/mjIFOZ01vZGVs5ZKMcmVhY3RpdmUgZm9ybXNcclxuICogXHJcbiAqIDxleGFtcGxlLXVybD5odHRwczovL3N0YWNrYmxpdHouY29tL2VkaXQvbnAtaW1nLXVwbG9hZC1zYW1wbGU/ZW1iZWQ9MSZmaWxlPXNyYy9hcHAvYXBwLmNvbXBvbmVudC5odG1sPC9leGFtcGxlLXVybD5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBgbnAtaW1nLXVwbG9hZGAsXHJcbiAgdGVtcGxhdGVVcmw6ICdpbWctdXBsb2FkLmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWydpbWctdXBsb2FkLnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE5wSW1nVXBsb2FkKSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOcEltZ1VwbG9hZCksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfV0sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIE5wSW1nVXBsb2FkIGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHtcclxuICBwcml2YXRlIGVtaXRDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XHJcblxyXG4gIC8qKuagh+etviAqL1xyXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgPSAn6YCJ5oup5Zu+54mHJztcclxuXHJcbiAgLyoq5piv5ZCm56aB55SoICovXHJcbiAgQElucHV0KCkgaXNEaXNhYmxlZDogYm9vbGVhbjtcclxuXHJcbiAgLyoq5piv5ZCm5b+955Wl5a696auY5qOA5p+l77yMdHJ1ZSAtIOW/veeVpeWuvemrmOajgOafpe+8jGZhbHNlIC0g5qOA5p+l5a696auYICAqL1xyXG4gIEBJbnB1dCgpIGlnbm9yZVdpZHRoQW5kSGVpZ2h0Q2hlY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoq5piv5ZCm5b+F5aGrIC0g5b+F5aGr5YiZ5pyJ57qi6ImyKuWPt+WcqOagh+etvuWJjemdou+8m+WQpuWImeayoeaciSAqL1xyXG4gIEBJbnB1dCgpIGlzUmVxdWlyZWQ6IGJvb2xlYW47XHJcblxyXG4gIC8qKuS4iuS8oOWbvueJh+aMiemSruaWh+WtlyAqL1xyXG4gIEBJbnB1dCgpIGJ0blRleHQ6IHN0cmluZyA9ICfngrnlh7vkuIrkvKAnO1xyXG5cclxuICAvKirlm77niYfmj4/ov7DvvIzlpoLlsLrlr7jjgIHmoLzlvI/jgIHlpKflsI/nrYkgKi9cclxuICBASW5wdXQoKSBpbWdEZXNjOiBzdHJpbmcgPSAnKuWbvueJh+aPj+i/sO+8jOWmguWwuuWvuOOAgeagvOW8j+OAgeWkp+Wwj+etiSonO1xyXG5cclxuICAvKirlm77niYfmoLzlvI/vvIzpu5jorqRqcGfjgIFwbmflkoxqcGVnICovXHJcbiAgQElucHV0KCkgaW1nRm9ybWF0OiBzdHJpbmcgPSAnanBnfHBuZ3xqcGVnJztcclxuXHJcbiAgLyoq5Zu+54mH5aSn5bCP77yM6buY6K6k5pyA5aSnNTAwa2IgKi9cclxuICBASW5wdXQoKSBtYXhTaXplOiBudW1iZXIgPSA1MDA7XHJcblxyXG4gIC8qKuWbvueJh+WuveW6pnB4ICovXHJcbiAgQElucHV0KCkgd2lkdGg6IG51bWJlcjtcclxuXHJcbiAgLyoq5Zu+54mH6auY5bqmcHggKi9cclxuICBASW5wdXQoKSBoZWlnaHQ6IG51bWJlcjtcclxuXHJcbiAgLyoq6ZSZ6K+v5L+h5oGvIC0g5bCG5Lul57qi6Imy5a2X5L2T5pi+56S65Zyo5LiK5Lyg5oyJ6ZKu5LiL5pa5ICovXHJcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XHJcblxyXG5cclxuICAvKirlvZPph43mlrDpgInmi6nlm77niYfml7bop6blj5EgKi9cclxuICBAT3V0cHV0KCkgb25JbWdGaWxlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAvKirkuIrkvKDplJnor6/vvIzlpoLlsLrlr7jkuI3lr7njgIHmoLzlvI/kuI3lr7nvvIzlpKflsI/kuI3lr7nnrYkgKi9cclxuICBAT3V0cHV0KCkgb25VcGxvYWRFcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICAvKirngrnlh7vnvKnnlaXlm77mmK/op6blj5EgKi9cclxuICBAT3V0cHV0KCkgb25JbWdDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIGN1cnJlbnRJbWdGaWxlOiBGaWxlID0gbnVsbDtcclxuICBjdXJyZW50SW1nU3JjOiBhbnkgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgb25DdXJyZW50SW1nRmlsZUNoYW5nZWQoZmlsZTogRmlsZSkge1xyXG4gICAgY29uc3QgZmlsZW5hbWUgPSBmaWxlLm5hbWU7XHJcbiAgICBjb25zdCByZWcgPSBuZXcgUmVnRXhwKGBcXC4oJHt0aGlzLmltZ0Zvcm1hdC50b0xvd2VyQ2FzZSgpfSl8Ligke3RoaXMuaW1nRm9ybWF0LnRvVXBwZXJDYXNlKCl9KSRgKTtcclxuICAgIGlmICghcmVnLnRlc3QoZmlsZW5hbWUpKSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ+WbvueJh+agvOW8j+S4jeWvue+8jOaUr+aMgScgKyB0aGlzLmltZ0Zvcm1hdC5zcGxpdCgnfCcpLmpvaW4oJ+OAgScpO1xyXG4gICAgICB0aGlzLm9uVXBsb2FkRXJyb3IubmV4dCh0aGlzLmVycm9yTWVzc2FnZSk7XHJcbiAgICAgIHRoaXMuZW1pdENoYW5nZSh7IGZpbGU6IG51bGwsIHNyYzogbnVsbCB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmaWxlLnNpemUgPiArdGhpcy5tYXhTaXplICogMTAyNCkge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICflm77niYflpKfkuo4nICsgdGhpcy5tYXhTaXplICsgJ2ti77yM6K+36YeN5paw6YCJ5oupJztcclxuICAgICAgdGhpcy5vblVwbG9hZEVycm9yLm5leHQodGhpcy5lcnJvck1lc3NhZ2UpO1xyXG4gICAgICB0aGlzLmVtaXRDaGFuZ2UoeyBmaWxlOiBudWxsLCBzcmM6IG51bGwgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBVdGlscy5jaGVja0ltZ1dpZHRoQW5kSGVpZ2h0KGZpbGUsICt0aGlzLndpZHRoLCArdGhpcy5oZWlnaHQpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICBpZiAoIXJlcyAmJiAhdGhpcy5pZ25vcmVXaWR0aEFuZEhlaWdodENoZWNrKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAn5Zu+54mH5aSn5bCP5b+F6aG75Li6JyArIHRoaXMud2lkdGggKyAnKicgKyB0aGlzLmhlaWdodDtcclxuICAgICAgICB0aGlzLm9uVXBsb2FkRXJyb3IubmV4dCh0aGlzLmVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKHsgZmlsZTogbnVsbCwgc3JjOiBudWxsIH0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcclxuICAgICAgdGhpcy5jdXJyZW50SW1nU3JjID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpKTtcclxuICAgICAgdGhpcy5jdXJyZW50SW1nRmlsZSA9IGZpbGU7XHJcblxyXG4gICAgICB0aGlzLmVtaXRDaGFuZ2UoeyBmaWxlOiB0aGlzLmN1cnJlbnRJbWdGaWxlLCBzcmM6IHRoaXMuY3VycmVudEltZ1NyYyB9KTtcclxuICAgICAgdGhpcy5vbkltZ0ZpbGVDaGFuZ2VkLm5leHQoeyBmaWxlOiB0aGlzLmN1cnJlbnRJbWdGaWxlLCBzcmM6IHRoaXMuY3VycmVudEltZ1NyYyB9KTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uVXBsb2FkSW1nRm9ybWF0RXJyb3IobXNnOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ+WbvueJh+agvOW8j+S4jeWvue+8jOaUr+aMgScgKyB0aGlzLmltZ0Zvcm1hdC5zcGxpdCgnfCcpLmpvaW4oJ+OAgScpO1xyXG4gICAgdGhpcy5vblVwbG9hZEVycm9yLm5leHQodGhpcy5lcnJvck1lc3NhZ2UpO1xyXG4gICAgdGhpcy5lbWl0Q2hhbmdlKHsgZmlsZTogbnVsbCwgc3JjOiBudWxsIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DdXJyZW50SW1nQ2xpY2soKSB7XHJcbiAgICB0aGlzLm9uSW1nQ2xpY2tlZC5uZXh0KHtmaWxlOiB0aGlzLmN1cnJlbnRJbWdGaWxlLCBzcmM6IHRoaXMuY3VycmVudEltZ1NyY30pO1xyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKG9iaikge1xyXG4gICAgICB0aGlzLmN1cnJlbnRJbWdGaWxlID0gb2JqLmZpbGU7XHJcbiAgICAgIHRoaXMuY3VycmVudEltZ1NyYyA9IG9iai5zcmM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnJlbnRJbWdGaWxlID0gbnVsbDtcclxuICAgICAgdGhpcy5jdXJyZW50SW1nU3JjID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMge1xyXG4gICAgaWYgKHRoaXMuaXNSZXF1aXJlZCkge1xyXG4gICAgICBpZiAoY29udHJvbCAmJiBjb250cm9sLnZhbHVlICYmICFjb250cm9sLnZhbHVlLmZpbGUgJiYgIWNvbnRyb2wudmFsdWUuc3JjKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgJ2ltZ0Vycm9yJzogdHJ1ZSB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY29udHJvbCAmJiAhY29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB7ICdpbWdFcnJvcic6IHRydWUgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmVtaXRDaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHsgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7IH1cclxufSJdfQ==