UNPKG

ngx-pluto

Version:
230 lines 20.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> */ 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=