ngx-pluto
Version:
230 lines • 20.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>
*/
export class NpButton {
constructor() {
// #region 上传文件相关
/**
* 按钮功能类型 - normal - 默认类型;upload - 即为上传文件类型按钮。
*/
this.funcType = 'normal';
/**
* 上传文件类型, 如:[uploadFileType]="'jpg|png|jpeg'"。
*
* 特别说明一下格式,因为采用正则匹配,所以传入格式为'xlsx|xls',用|隔开。
*/
this.uploadFileType = '';
/**
* 文件改变触发事件, 即双向绑定。
*/
this.fileChange = new EventEmitter();
/**
* 上传文件出错消息事件。
*/
this.uploadErrorMessage = new EventEmitter();
}
// #endregion
/**
* @return {?}
*/
ngOnInit() {
this.buttonType = this.buttonType || 'primary';
this.buttonSize = this.buttonType === 'search' ? 'small' : this.buttonSize || 'default';
/** @type {?} */
const 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 {?} */
const parentWidth = element.parentElement.parentElement.offsetWidth;
element.style.width = `${parentWidth - 54}px`;
}
if (this.isDisabled) {
element.classList.add('button-disabled');
}
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
/** @type {?} */
const contentChange = changes['isDisabled'];
if (contentChange) {
/** @type {?} */
const value = contentChange.currentValue;
if (value) {
this.npButton.nativeElement.classList.add('button-disabled');
}
else {
this.npButton.nativeElement.classList.remove('button-disabled');
}
}
}
/**
* @return {?}
*/
upload() {
if (this.funcType === 'upload' && !this.isDisabled) {
this.inputDom = document.createElement('input');
this.inputDom.type = 'file';
this.inputDom.onchange = (/**
* @param {?} event
* @return {?}
*/
(event) => {
/** @type {?} */
const file = event.currentTarget.files[0];
/** @type {?} */
const fileName = file.name;
if (this.uploadFileType) {
/** @type {?} */
const reg = new RegExp(`\.(${this.uploadFileType.toLowerCase()})|.(${this.uploadFileType.toUpperCase()})$`);
if (!reg.test(fileName)) {
this.uploadErrorMessage.emit(`文件格式不对,支持${this.uploadFileType}`);
return;
}
}
/** @type {?} */
const obj = {};
obj['fileName'] = fileName;
obj['file'] = file;
if (this.onChange) {
this.onChange(file);
}
this.fileChange.emit(file);
});
this.inputDom.click();
}
}
/**
* @param {?} obj
* @return {?}
*/
writeValue(obj) {
// clear file input
if (this.inputDom) {
document.removeChild(this.inputDom);
}
}
/**
* @param {?} fn
* @return {?}
*/
registerOnChange(fn) {
this.onChange = fn;
}
/**
* @param {?} fn
* @return {?}
*/
registerOnTouched(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 {?}
*/
() => 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 }]
};
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXBsdXRvLyIsInNvdXJjZXMiOlsibGliL2J1dHRvbi9idXR0b24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLHVCQUF1QixFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUM3SyxPQUFPLEVBQTJELGlCQUFpQixFQUFpQixNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFvQjNILE1BQU0sT0FBTyxRQUFRO0lBYnJCOzs7OztRQXFDVyxhQUFRLEdBQXdCLFFBQVEsQ0FBQzs7Ozs7O1FBS3pDLG1CQUFjLEdBQUcsRUFBRSxDQUFDOzs7O1FBSW5CLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDOzs7O1FBRXJDLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFpRjVELENBQUM7Ozs7O0lBOUVDLFFBQVE7UUFDTixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksU0FBUyxDQUFDO1FBQy9DLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxTQUFTLENBQUM7O2NBQ2xGLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWE7UUFDM0MsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRTtZQUNqRSxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztTQUMzQjtRQUVELE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFD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SUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNyQztJQUNILENBQUM7Ozs7O0lBRUQsZ0JBQWdCLENBQUMsRUFBTztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDOzs7OztJQUVELGlCQUFpQixDQUFDLEVBQU87SUFDekIsQ0FBQzs7O1lBaElGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsV0FBVztnQkFDckIseUhBQTBCO2dCQUUxQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtnQkFDL0MsU0FBUyxFQUFFO29CQUNUO3dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7d0JBQzFCLFdBQVcsRUFBRSxVQUFVOzs7d0JBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFDO3dCQUN2QyxLQUFLLEVBQUUsSUFBSTtxQkFDWjtpQkFDRjs7YUFDRjs7O3VCQUtFLFNBQVMsU0FBQyxVQUFVO3lCQUtwQixLQUFLO3lCQUlMLEtBQUs7MEJBSUwsS0FBSzt5QkFFTCxLQUFLO3VCQUtMLEtBQUs7NkJBS0wsS0FBSzttQkFFTCxLQUFLO3lCQUVMLE1BQU07aUNBRU4sTUFBTTs7Ozs7OztJQWxDUCw0QkFBMkI7O0lBQzNCLDRCQUEyQjs7SUFFM0IsNEJBQXlEOzs7Ozs7O0lBS3pELDhCQUFtRTs7Ozs7SUFJbkUsOEJBQW1EOzs7OztJQUluRCwrQkFBMEI7Ozs7O0lBRTFCLDhCQUE2Qjs7Ozs7SUFLN0IsNEJBQWtEOzs7Ozs7O0lBS2xELGtDQUE2Qjs7Ozs7SUFFN0Isd0JBQWM7Ozs7O0lBRWQsOEJBQStDOzs7OztJQUUvQyxzQ0FBMEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBmb3J3YXJkUmVmLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBOR19WQUxVRV9BQ0NFU1NPUiwgTkdfVkFMSURBVE9SUyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbi8qKlxyXG4gKiDmjInpkq7nu4Tku7YgLSDkuLvoibLosIPmjInpkq7jgIHlia/oibLosIPmjInpkq7jgIHlj5bmtojmjInpkq7jgIHlj6/orr7nva7lrr3luqbmjInpkq7jgIHkuIrkvKDmlofku7bmjInpkq7nrYlcclxuICogXHJcbiAqIDxleGFtcGxlLXVybD5odHRwczovL3N0YWNrYmxpdHouY29tL2VkaXQvbnAtYnV0dG9uLXNhbXBsZT9lbWJlZD0xJmZpbGU9c3JjL2FwcC9hcHAuY29tcG9uZW50Lmh0bWw8L2V4YW1wbGUtdXJsPlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IGBucC1idXR0b25gLFxyXG4gIHRlbXBsYXRlVXJsOiAnYnV0dG9uLmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWydidXR0b24uc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTnBCdXR0b24pLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTnBCdXR0b24gaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICBwcml2YXRlIG9uQ2hhbmdlOiBGdW5jdGlvbjtcclxuICBpbnB1dERvbTogSFRNTElucHV0RWxlbWVudDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbnBCdXR0b24nKSBucEJ1dHRvbjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgLyoq5oyJ6ZKu57G75Z6LXHJcbiAgICogXHJcbiAgICogcHJpbWFyeSAtIOS4u+iJsuiwg+aMiemSru+8jOWNs1BsdXRv6Imy77ybc2Vjb25kYXJ5IC0g5Ymv6Imy6LCD5oyJ6ZKu77ybY2FuY2VsIC0g5Y+W5raI5oyJ6ZKu77ybc2VhcmNoIC0g5pCc57Si5oyJ6ZKuXHJcbiAgICovXHJcbiAgQElucHV0KCkgYnV0dG9uVHlwZTogJ3ByaW1hcnknIHwgJ3NlY29uZGFyeScgfCAnY2FuY2VsJyB8ICdzZWFyY2gnO1xyXG4gIC8qKlxyXG4gICAqIOaMiemSruWuveW6puWkp+WwjyAtIGxhcmdlIC0gMzAwcHjvvJtkZWZhdWx0IC0gMTgwcHjvvJtzbWFsbCAtIDgwcHjjgIJcclxuICAgKi9cclxuICBASW5wdXQoKSBidXR0b25TaXplOiAnbGFyZ2UnIHwgJ2RlZmF1bHQnIHwgJ3NtYWxsJztcclxuICAvKipcclxuICAgKiDnu6fmib/niLblrr3luqYgLSBgPG5wLWJ1dHRvbiBidXR0b25CbG9jaz7nu6fmib/niLblrr3luqY8L25wLWJ1dHRvbj5gXHJcbiAgICovXHJcbiAgQElucHV0KCkgYnV0dG9uQmxvY2s6IGFueTtcclxuICAvKirmmK/lkKbnpoHnlKjmjInpkq7jgIIgKi9cclxuICBASW5wdXQoKSBpc0Rpc2FibGVkOiBib29sZWFuO1xyXG5cclxuICAvLyAjcmVnaW9uIOS4iuS8oOaWh+S7tuebuOWFs1xyXG4gIC8qKuaMiemSruWKn+iDveexu+WeiyAtIG5vcm1hbCAtIOm7mOiupOexu+Wei++8m3VwbG9hZCAtIOWNs+S4uuS4iuS8oOaWh+S7tuexu+Wei+aMiemSruOAglxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGZ1bmNUeXBlOiAnbm9ybWFsJyB8ICd1cGxvYWQnID0gJ25vcm1hbCc7XHJcbiAgLyoq5LiK5Lyg5paH5Lu257G75Z6L77yMIOWmgu+8mlt1cGxvYWRGaWxlVHlwZV09XCInanBnfHBuZ3xqcGVnJ1wi44CCXHJcbiAgICogXHJcbiAgICog54m55Yir6K+05piO5LiA5LiL5qC85byP77yM5Zug5Li66YeH55So5q2j5YiZ5Yy56YWN77yM5omA5Lul5Lyg5YWl5qC85byP5Li6J3hsc3h8eGxzJ++8jOeUqHzpmpTlvIDjgIJcclxuICAgKi9cclxuICBASW5wdXQoKSB1cGxvYWRGaWxlVHlwZSA9ICcnO1xyXG4gIC8qKuS6jOi/m+WItuaWh+S7tuOAgiAqL1xyXG4gIEBJbnB1dCgpIGZpbGU7XHJcbiAgLyoq5paH5Lu25pS55Y+Y6Kem5Y+R5LqL5Lu277yMIOWNs+WPjOWQkee7keWumuOAgiAqL1xyXG4gIEBPdXRwdXQoKSBmaWxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgLyoq5LiK5Lyg5paH5Lu25Ye66ZSZ5raI5oGv5LqL5Lu244CCICovXHJcbiAgQE91dHB1dCgpIHVwbG9hZEVycm9yTWVzc2FnZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIC8vICNlbmRyZWdpb25cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmJ1dHRvblR5cGUgPSB0aGlzLmJ1dHRvblR5cGUgfHwgJ3ByaW1hcnknO1xyXG4gICAgdGhpcy5idXR0b25TaXplID0gdGhpcy5idXR0b25UeXBlID09PSAnc2VhcmNoJyA/ICdzbWFsbCcgOiB0aGlzLmJ1dHRvblNpemUgfHwgJ2RlZmF1bHQnO1xyXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMubnBCdXR0b24ubmF0aXZlRWxlbWVudDtcclxuICAgIGlmICh0aGlzLmJ1dHRvblR5cGUgPT09ICdzZWFyY2gnICYmIHRoaXMuYnV0dG9uU2l6ZSA9PT0gJ2RlZmF1bHQnKSB7XHJcbiAgICAgIHRoaXMuYnV0dG9uU2l6ZSA9ICdzbWFsbCc7XHJcbiAgICB9XHJcblxyXG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGBidXR0b24tJHt0aGlzLmJ1dHRvblR5cGV9YCk7XHJcbiAgICBpZiAoWydsYXJnZScsICdkZWZhdWx0JywgJ3NtYWxsJ10uaW5kZXhPZih0aGlzLmJ1dHRvblNpemUpID4gLTEpIHtcclxuICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGBidXR0b24tc2l6ZS0ke3RoaXMuYnV0dG9uU2l6ZX1gKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSB0aGlzLmJ1dHRvblNpemU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYnV0dG9uQmxvY2sgPT09ICcnKSB7XHJcbiAgICAgIGNvbnN0IHBhcmVudFdpZHRoID0gZWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtwYXJlbnRXaWR0aCAtIDU0fXB4YDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKSB7XHJcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnYnV0dG9uLWRpc2FibGVkJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBjb25zdCBjb250ZW50Q2hhbmdlID0gY2hhbmdlc1snaXNEaXNhYmxlZCddO1xyXG4gICAgaWYgKGNvbnRlbnRDaGFuZ2UpIHtcclxuICAgICAgY29uc3QgdmFsdWUgPSBjb250ZW50Q2hhbmdlLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5ucEJ1dHRvbi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2J1dHRvbi1kaXNhYmxlZCcpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubnBCdXR0b24ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdidXR0b24tZGlzYWJsZWQnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBsb2FkKCkge1xyXG4gICAgaWYgKHRoaXMuZnVuY1R5cGUgPT09ICd1cGxvYWQnICYmICF0aGlzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5pbnB1dERvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XHJcbiAgICAgIHRoaXMuaW5wdXREb20udHlwZSA9ICdmaWxlJztcclxuICAgICAgdGhpcy5pbnB1dERvbS5vbmNoYW5nZSA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZmlsZSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQuZmlsZXNbMF07XHJcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLm5hbWU7XHJcbiAgICAgICAgaWYgKHRoaXMudXBsb2FkRmlsZVR5cGUpIHtcclxuICAgICAgICAgIGNvbnN0IHJlZyA9IG5ldyBSZWdFeHAoYFxcLigke3RoaXMudXBsb2FkRmlsZVR5cGUudG9Mb3dlckNhc2UoKX0pfC4oJHt0aGlzLnVwbG9hZEZpbGVUeXBlLnRvVXBwZXJDYXNlKCl9KSRgKTtcclxuICAgICAgICAgIGlmICghcmVnLnRlc3QoZmlsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBsb2FkRXJyb3JNZXNzYWdlLmVtaXQoYOaWh+S7tuagvOW8j+S4jeWvue+8jOaUr+aMgSR7dGhpcy51cGxvYWRGaWxlVHlwZX1gKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgb2JqID0ge307XHJcbiAgICAgICAgb2JqWydmaWxlTmFtZSddID0gZmlsZU5hbWU7XHJcbiAgICAgICAgb2JqWydmaWxlJ10gPSBmaWxlO1xyXG4gICAgICAgIGlmICh0aGlzLm9uQ2hhbmdlKSB7XHJcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKGZpbGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maWxlQ2hhbmdlLmVtaXQoZmlsZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbnB1dERvbS5jbGljaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgLy8gY2xlYXIgZmlsZSBpbnB1dFxyXG4gICAgaWYgKHRoaXMuaW5wdXREb20pIHtcclxuICAgICAgZG9jdW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5pbnB1dERvbSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICB9XHJcbn1cclxuXHJcblxyXG4iXX0=