ngx-pluto
Version:
258 lines • 21.1 kB
JavaScript
/**
* @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==