UNPKG

ngx-pluto

Version:
258 lines 21.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ChangeDetectionStrategy, Input, ViewChild, ElementRef, forwardRef, Output, EventEmitter } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; /** * 按钮组件 - 主色调按钮、副色调按钮、取消按钮、可设置宽度按钮、上传文件按钮等 * * <example-url>https://stackblitz.com/edit/np-button-sample?embed=1&file=src/app/app.component.html</example-url> */ var NpButton = /** @class */ (function () { function NpButton() { // #region 上传文件相关 /** * 按钮功能类型 - normal - 默认类型;upload - 即为上传文件类型按钮。 */ this.funcType = 'normal'; /** * 上传文件类型, 如:[uploadFileType]="'jpg|png|jpeg'"。 * * 特别说明一下格式,因为采用正则匹配,所以传入格式为'xlsx|xls',用|隔开。 */ this.uploadFileType = ''; /** * 文件改变触发事件, 即双向绑定。 */ this.fileChange = new EventEmitter(); /** * 上传文件出错消息事件。 */ this.uploadErrorMessage = new EventEmitter(); } // #endregion // #endregion /** * @return {?} */ NpButton.prototype.ngOnInit = // #endregion /** * @return {?} */ function () { this.buttonType = this.buttonType || 'primary'; this.buttonSize = this.buttonType === 'search' ? 'small' : this.buttonSize || 'default'; /** @type {?} */ var element = this.npButton.nativeElement; if (this.buttonType === 'search' && this.buttonSize === 'default') { this.buttonSize = 'small'; } element.classList.add("button-" + this.buttonType); if (['large', 'default', 'small'].indexOf(this.buttonSize) > -1) { element.classList.add("button-size-" + this.buttonSize); } else { element.style.width = this.buttonSize; } if (this.buttonBlock === '') { /** @type {?} */ var parentWidth = element.parentElement.parentElement.offsetWidth; element.style.width = parentWidth - 54 + "px"; } if (this.isDisabled) { element.classList.add('button-disabled'); } }; /** * @param {?} changes * @return {?} */ NpButton.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { /** @type {?} */ var contentChange = changes['isDisabled']; if (contentChange) { /** @type {?} */ var value = contentChange.currentValue; if (value) { this.npButton.nativeElement.classList.add('button-disabled'); } else { this.npButton.nativeElement.classList.remove('button-disabled'); } } }; /** * @return {?} */ NpButton.prototype.upload = /** * @return {?} */ function () { var _this = this; if (this.funcType === 'upload' && !this.isDisabled) { this.inputDom = document.createElement('input'); this.inputDom.type = 'file'; this.inputDom.onchange = (/** * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var file = event.currentTarget.files[0]; /** @type {?} */ var fileName = file.name; if (_this.uploadFileType) { /** @type {?} */ var reg = new RegExp(".(" + _this.uploadFileType.toLowerCase() + ")|.(" + _this.uploadFileType.toUpperCase() + ")$"); if (!reg.test(fileName)) { _this.uploadErrorMessage.emit("\u6587\u4EF6\u683C\u5F0F\u4E0D\u5BF9\uFF0C\u652F\u6301" + _this.uploadFileType); return; } } /** @type {?} */ var obj = {}; obj['fileName'] = fileName; obj['file'] = file; if (_this.onChange) { _this.onChange(file); } _this.fileChange.emit(file); }); this.inputDom.click(); } }; /** * @param {?} obj * @return {?} */ NpButton.prototype.writeValue = /** * @param {?} obj * @return {?} */ function (obj) { // clear file input if (this.inputDom) { document.removeChild(this.inputDom); } }; /** * @param {?} fn * @return {?} */ NpButton.prototype.registerOnChange = /** * @param {?} fn * @return {?} */ function (fn) { this.onChange = fn; }; /** * @param {?} fn * @return {?} */ NpButton.prototype.registerOnTouched = /** * @param {?} fn * @return {?} */ function (fn) { }; NpButton.decorators = [ { type: Component, args: [{ selector: "np-button", template: "<div (click)=\"upload()\" #npButton class=\"np-button-wrapper\">\r\n <ng-content></ng-content>\r\n</div>\r\n", changeDetection: ChangeDetectionStrategy.OnPush, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ function () { return NpButton; })), multi: true, }, ], styles: [".flex-wrap{display:flex}.col-flex{flex-direction:column}.row-flex{flex-direction:row}.middle-flex{justify-content:center;align-items:center}.np-row{display:flex;flex-direction:row;flex-wrap:wrap;width:100%}.np-column{display:flex;flex-direction:column;flex-basis:100%;flex:1}.backdrop-transparent{opacity:0}:host{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;display:block}.btn,.button-cancel,.button-default,.button-primary,.button-search,.button-secondary{border-radius:5px;border:none;font-size:14px;padding:6px 12px;margin:0 15px;text-align:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.button-cancel:focus,.button-default:focus,.button-primary:focus,.button-search:focus,.button-secondary:focus{outline:0!important}.button-size-large{width:300px}.button-size-default{width:180px}.button-size-small{width:80px}.button-disabled,.button-disabled.active,.button-disabled:active,.button-disabled:focus,.button-disabled:hover{text-shadow:none;box-shadow:none;cursor:not-allowed}.button-default{font-weight:500;letter-spacing:2px}.button-primary{font-weight:600;letter-spacing:2px}.button-secondary{font-weight:600;border:1px solid;letter-spacing:2px;padding:5px 12px}.button-cancel,.button-search{font-weight:600;letter-spacing:2px}"] }] } ]; NpButton.propDecorators = { npButton: [{ type: ViewChild, args: ['npButton',] }], buttonType: [{ type: Input }], buttonSize: [{ type: Input }], buttonBlock: [{ type: Input }], isDisabled: [{ type: Input }], funcType: [{ type: Input }], uploadFileType: [{ type: Input }], file: [{ type: Input }], fileChange: [{ type: Output }], uploadErrorMessage: [{ type: Output }] }; return NpButton; }()); export { NpButton }; if (false) { /** * @type {?} * @private */ NpButton.prototype.onChange; /** @type {?} */ NpButton.prototype.inputDom; /** @type {?} */ NpButton.prototype.npButton; /** * 按钮类型 * * primary - 主色调按钮,即Pluto色;secondary - 副色调按钮;cancel - 取消按钮;search - 搜索按钮 * @type {?} */ NpButton.prototype.buttonType; /** * 按钮宽度大小 - large - 300px;default - 180px;small - 80px。 * @type {?} */ NpButton.prototype.buttonSize; /** * 继承父宽度 - `<np-button buttonBlock>继承父宽度</np-button>` * @type {?} */ NpButton.prototype.buttonBlock; /** * 是否禁用按钮。 * @type {?} */ NpButton.prototype.isDisabled; /** * 按钮功能类型 - normal - 默认类型;upload - 即为上传文件类型按钮。 * @type {?} */ NpButton.prototype.funcType; /** * 上传文件类型, 如:[uploadFileType]="'jpg|png|jpeg'"。 * * 特别说明一下格式,因为采用正则匹配,所以传入格式为'xlsx|xls',用|隔开。 * @type {?} */ NpButton.prototype.uploadFileType; /** * 二进制文件。 * @type {?} */ NpButton.prototype.file; /** * 文件改变触发事件, 即双向绑定。 * @type {?} */ NpButton.prototype.fileChange; /** * 上传文件出错消息事件。 * @type {?} */ NpButton.prototype.uploadErrorMessage; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXBsdXRvLyIsInNvdXJjZXMiOlsibGliL2J1dHRvbi9idXR0b24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLHVCQUF1QixFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUM3SyxPQUFPLEVBQTJELGlCQUFpQixFQUFpQixNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFPM0g7SUFBQTs7Ozs7UUFxQ1csYUFBUSxHQUF3QixRQUFRLENBQUM7Ozs7OztRQUt6QyxtQkFBYyxHQUFHLEVBQUUsQ0FBQzs7OztRQUluQixlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQzs7OztRQUVyQyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBaUY1RCxDQUFDO0lBaEZDLGFBQWE7Ozs7O0lBRWIsMkJBQVE7Ozs7O0lBQVI7UUFDRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksU0FBUyxDQUFDO1FBQy9DLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxTQUFTLENBQUM7O1lBQ2xGLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWE7UUFDM0MsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRTtZQUNqRSxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztTQUMzQjtRQUVELE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFlBQVUsSUFBSSxDQUFDLFVBQVksQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxP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QW1CO1FBQ25CLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNyQztJQUNILENBQUM7Ozs7O0lBRUQsbUNBQWdCOzs7O0lBQWhCLFVBQWlCLEVBQU87UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQzs7Ozs7SUFFRCxvQ0FBaUI7Ozs7SUFBakIsVUFBa0IsRUFBTztJQUN6QixDQUFDOztnQkFoSUYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxXQUFXO29CQUNyQix5SEFBMEI7b0JBRTFCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVU7Ozs0QkFBQyxjQUFNLE9BQUEsUUFBUSxFQUFSLENBQVEsRUFBQzs0QkFDdkMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7O2lCQUNGOzs7MkJBS0UsU0FBUyxTQUFDLFVBQVU7NkJBS3BCLEtBQUs7NkJBSUwsS0FBSzs4QkFJTCxLQUFLOzZCQUVMLEtBQUs7MkJBS0wsS0FBSztpQ0FLTCxLQUFLO3VCQUVMLEtBQUs7NkJBRUwsTUFBTTtxQ0FFTixNQUFNOztJQWlGVCxlQUFDO0NBQUEsQUFqSUQsSUFpSUM7U0FwSFksUUFBUTs7Ozs7O0lBQ25CLDRCQUEyQjs7SUFDM0IsNEJBQTJCOztJQUUzQiw0QkFBeUQ7Ozs7Ozs7SUFLekQsOEJBQW1FOzs7OztJQUluRSw4QkFBbUQ7Ozs7O0lBSW5ELCtCQUEwQjs7Ozs7SUFFMUIsOEJBQTZCOzs7OztJQUs3Qiw0QkFBa0Q7Ozs7Ozs7SUFLbEQsa0NBQTZCOzs7OztJQUU3Qix3QkFBYzs7Ozs7SUFFZCw4QkFBK0M7Ozs7O0lBRS9DLHNDQUEwRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIGZvcndhcmRSZWYsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBOR19WQUxJREFUT1JTIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuLyoqXHJcbiAqIOaMiemSrue7hOS7tiAtIOS4u+iJsuiwg+aMiemSruOAgeWJr+iJsuiwg+aMiemSruOAgeWPlua2iOaMiemSruOAgeWPr+iuvue9ruWuveW6puaMiemSruOAgeS4iuS8oOaWh+S7tuaMiemSruetiVxyXG4gKiBcclxuICogPGV4YW1wbGUtdXJsPmh0dHBzOi8vc3RhY2tibGl0ei5jb20vZWRpdC9ucC1idXR0b24tc2FtcGxlP2VtYmVkPTEmZmlsZT1zcmMvYXBwL2FwcC5jb21wb25lbnQuaHRtbDwvZXhhbXBsZS11cmw+XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogYG5wLWJ1dHRvbmAsXHJcbiAgdGVtcGxhdGVVcmw6ICdidXR0b24uaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ2J1dHRvbi5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOcEJ1dHRvbiksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOcEJ1dHRvbiBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIHByaXZhdGUgb25DaGFuZ2U6IEZ1bmN0aW9uO1xyXG4gIGlucHV0RG9tOiBIVE1MSW5wdXRFbGVtZW50O1xyXG5cclxuICBAVmlld0NoaWxkKCducEJ1dHRvbicpIG5wQnV0dG9uOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICAvKirmjInpkq7nsbvlnotcclxuICAgKiBcclxuICAgKiBwcmltYXJ5IC0g5Li76Imy6LCD5oyJ6ZKu77yM5Y2zUGx1dG/oibLvvJtzZWNvbmRhcnkgLSDlia/oibLosIPmjInpkq7vvJtjYW5jZWwgLSDlj5bmtojmjInpkq7vvJtzZWFyY2ggLSDmkJzntKLmjInpkq5cclxuICAgKi9cclxuICBASW5wdXQoKSBidXR0b25UeXBlOiAncHJpbWFyeScgfCAnc2Vjb25kYXJ5JyB8ICdjYW5jZWwnIHwgJ3NlYXJjaCc7XHJcbiAgLyoqXHJcbiAgICog5oyJ6ZKu5a695bqm5aSn5bCPIC0gbGFyZ2UgLSAzMDBweO+8m2RlZmF1bHQgLSAxODBweO+8m3NtYWxsIC0gODBweOOAglxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGJ1dHRvblNpemU6ICdsYXJnZScgfCAnZGVmYXVsdCcgfCAnc21hbGwnO1xyXG4gIC8qKlxyXG4gICAqIOe7p+aJv+eItuWuveW6piAtIGA8bnAtYnV0dG9uIGJ1dHRvbkJsb2NrPue7p+aJv+eItuWuveW6pjwvbnAtYnV0dG9uPmBcclxuICAgKi9cclxuICBASW5wdXQoKSBidXR0b25CbG9jazogYW55O1xyXG4gIC8qKuaYr+WQpuemgeeUqOaMiemSruOAgiAqL1xyXG4gIEBJbnB1dCgpIGlzRGlzYWJsZWQ6IGJvb2xlYW47XHJcblxyXG4gIC8vICNyZWdpb24g5LiK5Lyg5paH5Lu255u45YWzXHJcbiAgLyoq5oyJ6ZKu5Yqf6IO957G75Z6LIC0gbm9ybWFsIC0g6buY6K6k57G75Z6L77ybdXBsb2FkIC0g5Y2z5Li65LiK5Lyg5paH5Lu257G75Z6L5oyJ6ZKu44CCXHJcbiAgICovXHJcbiAgQElucHV0KCkgZnVuY1R5cGU6ICdub3JtYWwnIHwgJ3VwbG9hZCcgPSAnbm9ybWFsJztcclxuICAvKirkuIrkvKDmlofku7bnsbvlnovvvIwg5aaC77yaW3VwbG9hZEZpbGVUeXBlXT1cIidqcGd8cG5nfGpwZWcnXCLjgIJcclxuICAgKiBcclxuICAgKiDnibnliKvor7TmmI7kuIDkuIvmoLzlvI/vvIzlm6DkuLrph4fnlKjmraPliJnljLnphY3vvIzmiYDku6XkvKDlhaXmoLzlvI/kuLoneGxzeHx4bHMn77yM55SofOmalOW8gOOAglxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHVwbG9hZEZpbGVUeXBlID0gJyc7XHJcbiAgLyoq5LqM6L+b5Yi25paH5Lu244CCICovXHJcbiAgQElucHV0KCkgZmlsZTtcclxuICAvKirmlofku7bmlLnlj5jop6blj5Hkuovku7bvvIwg5Y2z5Y+M5ZCR57uR5a6a44CCICovXHJcbiAgQE91dHB1dCgpIGZpbGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAvKirkuIrkvKDmlofku7blh7rplJnmtojmga/kuovku7bjgIIgKi9cclxuICBAT3V0cHV0KCkgdXBsb2FkRXJyb3JNZXNzYWdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgLy8gI2VuZHJlZ2lvblxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuYnV0dG9uVHlwZSA9IHRoaXMuYnV0dG9uVHlwZSB8fCAncHJpbWFyeSc7XHJcbiAgICB0aGlzLmJ1dHRvblNpemUgPSB0aGlzLmJ1dHRvblR5cGUgPT09ICdzZWFyY2gnID8gJ3NtYWxsJyA6IHRoaXMuYnV0dG9uU2l6ZSB8fCAnZGVmYXVsdCc7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5ucEJ1dHRvbi5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKHRoaXMuYnV0dG9uVHlwZSA9PT0gJ3NlYXJjaCcgJiYgdGhpcy5idXR0b25TaXplID09PSAnZGVmYXVsdCcpIHtcclxuICAgICAgdGhpcy5idXR0b25TaXplID0gJ3NtYWxsJztcclxuICAgIH1cclxuXHJcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoYGJ1dHRvbi0ke3RoaXMuYnV0dG9uVHlwZX1gKTtcclxuICAgIGlmIChbJ2xhcmdlJywgJ2RlZmF1bHQnLCAnc21hbGwnXS5pbmRleE9mKHRoaXMuYnV0dG9uU2l6ZSkgPiAtMSkge1xyXG4gICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoYGJ1dHRvbi1zaXplLSR7dGhpcy5idXR0b25TaXplfWApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IHRoaXMuYnV0dG9uU2l6ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5idXR0b25CbG9jayA9PT0gJycpIHtcclxuICAgICAgY29uc3QgcGFyZW50V2lkdGggPSBlbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aDtcclxuICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3BhcmVudFdpZHRoIC0gNTR9cHhgO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdidXR0b24tZGlzYWJsZWQnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGNvbnN0IGNvbnRlbnRDaGFuZ2UgPSBjaGFuZ2VzWydpc0Rpc2FibGVkJ107XHJcbiAgICBpZiAoY29udGVudENoYW5nZSkge1xyXG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbnRlbnRDaGFuZ2UuY3VycmVudFZhbHVlO1xyXG4gICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICB0aGlzLm5wQnV0dG9uLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnYnV0dG9uLWRpc2FibGVkJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5ucEJ1dHRvbi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2J1dHRvbi1kaXNhYmxlZCcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGxvYWQoKSB7XHJcbiAgICBpZiAodGhpcy5mdW5jVHlwZSA9PT0gJ3VwbG9hZCcgJiYgIXRoaXMuaXNEaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLmlucHV0RG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcclxuICAgICAgdGhpcy5pbnB1dERvbS50eXBlID0gJ2ZpbGUnO1xyXG4gICAgICB0aGlzLmlucHV0RG9tLm9uY2hhbmdlID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBmaWxlID0gZXZlbnQuY3VycmVudFRhcmdldC5maWxlc1swXTtcclxuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICBpZiAodGhpcy51cGxvYWRGaWxlVHlwZSkge1xyXG4gICAgICAgICAgY29uc3QgcmVnID0gbmV3IFJlZ0V4cChgXFwuKCR7dGhpcy51cGxvYWRGaWxlVHlwZS50b0xvd2VyQ2FzZSgpfSl8Ligke3RoaXMudXBsb2FkRmlsZVR5cGUudG9VcHBlckNhc2UoKX0pJGApO1xyXG4gICAgICAgICAgaWYgKCFyZWcudGVzdChmaWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhpcy51cGxvYWRFcnJvck1lc3NhZ2UuZW1pdChg5paH5Lu25qC85byP5LiN5a+577yM5pSv5oyBJHt0aGlzLnVwbG9hZEZpbGVUeXBlfWApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBvYmogPSB7fTtcclxuICAgICAgICBvYmpbJ2ZpbGVOYW1lJ10gPSBmaWxlTmFtZTtcclxuICAgICAgICBvYmpbJ2ZpbGUnXSA9IGZpbGU7XHJcbiAgICAgICAgaWYgKHRoaXMub25DaGFuZ2UpIHtcclxuICAgICAgICAgIHRoaXMub25DaGFuZ2UoZmlsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZpbGVDaGFuZ2UuZW1pdChmaWxlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlucHV0RG9tLmNsaWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICAvLyBjbGVhciBmaWxlIGlucHV0XHJcbiAgICBpZiAodGhpcy5pbnB1dERvbSkge1xyXG4gICAgICBkb2N1bWVudC5yZW1vdmVDaGlsZCh0aGlzLmlucHV0RG9tKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gIH1cclxufVxyXG5cclxuXHJcbiJdfQ==