UNPKG

ngx-pluto

Version:
354 lines 26.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ViewEncapsulation, Input, forwardRef, HostListener } from "@angular/core"; import { NG_VALUE_ACCESSOR, NG_VALIDATORS } from "@angular/forms"; /** * 多行文本输入框 * * <example-url>https://stackblitz.com/edit/np-textarea-example?embed=1&file=src/app/app.component.html</example-url> */ var NpTextarea = /** @class */ (function () { function NpTextarea() { this.navigationKeys = [ 'Backspace', 'Delete', 'Tab', 'Escape', 'Enter', 'Home', 'End', 'ArrowLeft', 'ArrowRight', 'Clear', 'Copy', 'Paste' ]; this.currentLen = 0; this.chineseReg = /[^\x00-\xff]/g; /** * 占位符 */ this.placeholder = ''; /** * 最大长度 * * Default -1 indicate that the length of input is not limited * The max of maxLen is 999 */ this.maxLen = -1; /** * 只允许填写数字 */ this.numberOnly = false; this.emitChange = (/** * @param {?} _ * @return {?} */ function (_) { }); } /** * @return {?} */ NpTextarea.prototype.ngOnInit = /** * @return {?} */ function () { }; /** * @return {?} */ NpTextarea.prototype.ngAfterViewInit = /** * @return {?} */ function () { }; /** * @param {?} changes * @return {?} */ NpTextarea.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { if (changes) { } }; /** * @param {?} event * @return {?} */ NpTextarea.prototype.onChange = /** * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var newValue = event.target.value; this.emitChange(newValue); }; /** * @param {?} obj * @return {?} */ NpTextarea.prototype.writeValue = /** * @param {?} obj * @return {?} */ function (obj) { if (obj || obj === '') { this.val = obj; if (this.maxLen > -1) { this.calculateCurrentLen(); } } }; /** * @param {?} fn * @return {?} */ NpTextarea.prototype.registerOnChange = /** * @param {?} fn * @return {?} */ function (fn) { this.emitChange = fn; }; /** * @param {?} fn * @return {?} */ NpTextarea.prototype.registerOnTouched = /** * @param {?} fn * @return {?} */ function (fn) { }; /** * @param {?} control * @return {?} */ NpTextarea.prototype.validate = /** * @param {?} control * @return {?} */ function (control) { // TODO: customize validation return null; }; /** * @param {?} e * @return {?} */ NpTextarea.prototype.onKeyup = /** * @param {?} e * @return {?} */ function (e) { if (this.maxLen === -1) { return; } if (this.maxLen > -1) { this.calculateCurrentLen(); // Hack: when typing chinese character, input control will not prevent the character typing /** @type {?} */ var chineseCharLen = this.val ? (this.val.match(this.chineseReg) || []) : []; if (chineseCharLen.length > 0) { this.val = this.val.substring(0, this.maxLen); } } if (this.numberOnly) { this.val = this.val ? this.val.replace(this.chineseReg, '') : ''; } }; /** * @private * @return {?} */ NpTextarea.prototype.isTriggerKeyEvents = /** * @private * @return {?} */ function () { return this.maxLen !== -1 || this.numberOnly; }; /** * @param {?} e * @return {?} */ NpTextarea.prototype.onKeyDown = /** * @param {?} e * @return {?} */ function (e) { if (!this.isTriggerKeyEvents()) { return; } if (this.navigationKeys.indexOf(e.key) > -1 || // Allow: navigation keys: backspace, delete, arrows etc. (e.key === 'a' && e.ctrlKey === true) || // Allow: Ctrl+A (e.key === 'c' && e.ctrlKey === true) || // Allow: Ctrl+C (e.key === 'v' && e.ctrlKey === true) || // Allow: Ctrl+V (e.key === 'x' && e.ctrlKey === true) || // Allow: Ctrl+X (e.key === 'a' && e.metaKey === true) || // Allow: Cmd+A (Mac) (e.key === 'c' && e.metaKey === true) || // Allow: Cmd+C (Mac) (e.key === 'v' && e.metaKey === true) || // Allow: Cmd+V (Mac) (e.key === 'x' && e.metaKey === true) // Allow: Cmd+X (Mac) ) { return; } if (this.maxLen > -1) { /** @type {?} */ var hightlightText = window.getSelection() + ''; if (this.val && this.val.length >= this.maxLen && hightlightText === '') { e.preventDefault(); } } if (this.numberOnly) { if (isNaN(Number(e.key))) { e.preventDefault(); } } }; /** * @param {?} event * @return {?} */ NpTextarea.prototype.onPaste = /** * @param {?} event * @return {?} */ function (event) { if (!this.isTriggerKeyEvents()) { return; } event.preventDefault(); /** @type {?} */ var currentVal = this.val; if (this.maxLen > -1 || this.numberOnly) { /** @type {?} */ var clipboardData = event.clipboardData.getData('text/plain'); if (this.numberOnly) { /** @type {?} */ var pastedInput = clipboardData.replace(/\D/g, ''); this.val = currentVal + pastedInput; } if (this.maxLen > -1) { /** @type {?} */ var pastedInput = clipboardData.substring(0, this.maxLen); this.val = currentVal + pastedInput; } } }; /** * @private * @return {?} */ NpTextarea.prototype.calculateCurrentLen = /** * @private * @return {?} */ function () { this.currentLen = this.val ? this.val.length : 0; this.currentLen = this.currentLen > this.maxLen ? this.maxLen : this.currentLen; }; NpTextarea.decorators = [ { type: Component, args: [{ selector: "np-textarea", template: "<div id=\"np-textarea-wrapper\" class=\"np-textarea-wrapper np-row\">\r\n <div class=\"np-column np-lbl-container\" *ngIf=\"label\">\r\n <label for=\"np-textarea\" class=\"np-textarea-lbl\">\r\n <span class=\"form-required\" *ngIf=\"isRequired\">*</span>\r\n {{ label }}\r\n </label>\r\n </div>\r\n <div class=\"np-column np-textarea-container\">\r\n <textarea class=\"np-textarea\" id=\"np-textarea\" [(ngModel)]=\"val\" [placeholder]=\"placeholder\" [attr.disabled]=\"isDisabled ? '' : null\"\r\n [class.disabled]=\"isDisabled\" (change)=\"onChange($event)\" (keyup)=\"onChange($event)\" cols=\"30\" rows=\"10\" >\r\n </textarea>\r\n <span class=\"error-message\" *ngIf=\"errorMessage\">{{ errorMessage }}</span>\r\n <div class=\"np-len\" *ngIf=\"maxLen > -1 && maxLen < 1000\">\r\n <span class=\"cur-length\">{{ currentLen }}</span> / <span>{{ maxLen }}</span>\r\n </div>\r\n </div>\r\n</div>\r\n", encapsulation: ViewEncapsulation.None, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ function () { return NpTextarea; })), multi: true, }, { provide: NG_VALIDATORS, useExisting: forwardRef((/** * @return {?} */ function () { return NpTextarea; })), 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}#np-textarea-wrapper{align-items:baseline}#np-textarea-wrapper .np-lbl-container{flex:0}#np-textarea-wrapper .np-lbl-container .np-textarea-lbl{width:80px;margin-right:20px;text-align:right;font-size:13px;font-weight:700}#np-textarea-wrapper .np-textarea-container{position:relative}#np-textarea-wrapper .np-textarea-container .np-textarea{box-sizing:border-box;background-image:none;border-radius:1px;display:inline-block;padding:5px 10px;margin:0;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%;height:83px;line-height:20px}#np-textarea-wrapper .np-textarea-container .np-textarea:focus{outline:0!important;outline-offset:unset;border-width:1px}#np-textarea-wrapper .np-textarea-container .error-message{display:block;font-size:10px;margin:5px}#np-textarea-wrapper .np-textarea-container .np-len{position:absolute;right:5px;height:34px;line-height:34px;font-size:14px;z-index:1000}"] }] } ]; /** @nocollapse */ NpTextarea.ctorParameters = function () { return []; }; NpTextarea.propDecorators = { label: [{ type: Input }], isRequired: [{ type: Input }], placeholder: [{ type: Input }], errorMessage: [{ type: Input }], isDisabled: [{ type: Input }], maxLen: [{ type: Input }], numberOnly: [{ type: Input }], onKeyup: [{ type: HostListener, args: ['keyup', ['$event'],] }], onKeyDown: [{ type: HostListener, args: ['keydown', ['$event'],] }], onPaste: [{ type: HostListener, args: ['paste', ['$event'],] }] }; return NpTextarea; }()); export { NpTextarea }; if (false) { /** @type {?} */ NpTextarea.prototype.val; /** * @type {?} * @private */ NpTextarea.prototype.navigationKeys; /** @type {?} */ NpTextarea.prototype.currentLen; /** @type {?} */ NpTextarea.prototype.chineseReg; /** * 标签 * @type {?} */ NpTextarea.prototype.label; /** * 是否必填 - 必填则有红色*号在标签前面;否则没有 * @type {?} */ NpTextarea.prototype.isRequired; /** * 占位符 * @type {?} */ NpTextarea.prototype.placeholder; /** * 错误信息 - 将以红色字体显示在输入框下方 * @type {?} */ NpTextarea.prototype.errorMessage; /** * 是否禁用 * @type {?} */ NpTextarea.prototype.isDisabled; /** * 最大长度 * * Default -1 indicate that the length of input is not limited * The max of maxLen is 999 * @type {?} */ NpTextarea.prototype.maxLen; /** * 只允许填写数字 * @type {?} */ NpTextarea.prototype.numberOnly; /** * @type {?} * @private */ NpTextarea.prototype.emitChange; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGFyZWEuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtcGx1dG8vIiwic291cmNlcyI6WyJsaWIvdGV4dGFyZWEvdGV4dGFyZWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQTJCLEtBQUssRUFBVSxVQUFVLEVBQStDLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1SyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFzRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFPdEk7SUE2REU7UUF2Q1EsbUJBQWMsR0FBRztZQUN2QixXQUFXO1lBQ1gsUUFBUTtZQUNSLEtBQUs7WUFDTCxRQUFRO1lBQ1IsT0FBTztZQUNQLE1BQU07WUFDTixLQUFLO1lBQ0wsV0FBVztZQUNYLFlBQVk7WUFDWixPQUFPO1lBQ1AsTUFBTTtZQUNOLE9BQU87U0FDUixDQUFDO1FBQ0YsZUFBVSxHQUFXLENBQUMsQ0FBQztRQUN2QixlQUFVLEdBQUcsZUFBZSxDQUFDOzs7O1FBT3BCLGdCQUFXLEdBQVcsRUFBRSxDQUFDOzs7Ozs7O1FBWXpCLFdBQU0sR0FBVyxDQUFDLENBQUMsQ0FBQzs7OztRQUVwQixlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzdCLGVBQVU7Ozs7UUFBRyxVQUFDLENBQU0sSUFBTyxDQUFDLEVBQUM7SUFFckIsQ0FBQzs7OztJQUVqQiw2QkFBUTs7O0lBQVI7SUFFQSxDQUFDOzs7O0lBRUQsb0NBQWU7OztJQUFmO0lBQ0EsQ0FBQzs7Ozs7SUFFRCxnQ0FBVzs7OztJQUFYLFVBQVksT0FBc0I7UUFDaEMsSUFBSSxPQUFPLEVBQUU7U0FFWjtJQUNILENBQUM7Ozs7O0lBRUQsNkJBQVE7Ozs7SUFBUixVQUFTLEtBQVU7O1lBQ2IsUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSztRQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRzVCLENBQUM7Ozs7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SUFBSTt5QkFDWjtxQkFBQzs7aUJBQ0w7Ozs7O3dCQXdCRSxLQUFLOzZCQUVMLEtBQUs7OEJBRUwsS0FBSzsrQkFFTCxLQUFLOzZCQUVMLEtBQUs7eUJBUUwsS0FBSzs2QkFFTCxLQUFLOzBCQTZDTCxZQUFZLFNBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDOzRCQXlCaEMsWUFBWSxTQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQzswQkFrQ2xDLFlBQVksU0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0lBMkJuQyxpQkFBQztDQUFBLEFBN0xELElBNkxDO1NBM0tZLFVBQVU7OztJQUdyQix5QkFBWTs7Ozs7SUFDWixvQ0FhRTs7SUFDRixnQ0FBdUI7O0lBQ3ZCLGdDQUE2Qjs7Ozs7SUFHN0IsMkJBQXVCOzs7OztJQUV2QixnQ0FBNkI7Ozs7O0lBRTdCLGlDQUFrQzs7Ozs7SUFFbEMsa0NBQThCOzs7OztJQUU5QixnQ0FBNkI7Ozs7Ozs7O0lBUTdCLDRCQUE2Qjs7Ozs7SUFFN0IsZ0NBQXFDOzs7OztJQUNyQyxnQ0FBcUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgSW5wdXQsIE9uSW5pdCwgZm9yd2FyZFJlZiwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgSG9zdExpc3RlbmVyIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IsIE5HX1ZBTElEQVRPUlMsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIFZhbGlkYXRpb25FcnJvcnMsIEFic3RyYWN0Q29udHJvbCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuLyoqXHJcbiAqIOWkmuihjOaWh+acrOi+k+WFpeahhlxyXG4gKiBcclxuICogPGV4YW1wbGUtdXJsPmh0dHBzOi8vc3RhY2tibGl0ei5jb20vZWRpdC9ucC10ZXh0YXJlYS1leGFtcGxlP2VtYmVkPTEmZmlsZT1zcmMvYXBwL2FwcC5jb21wb25lbnQuaHRtbDwvZXhhbXBsZS11cmw+XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogYG5wLXRleHRhcmVhYCxcclxuICB0ZW1wbGF0ZVVybDogJ3RleHRhcmVhLmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWyd0ZXh0YXJlYS5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE5wVGV4dGFyZWEpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE5wVGV4dGFyZWEpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH1dXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgTnBUZXh0YXJlYSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHtcclxuXHJcblxyXG4gIHZhbDogc3RyaW5nO1xyXG4gIHByaXZhdGUgbmF2aWdhdGlvbktleXMgPSBbXHJcbiAgICAnQmFja3NwYWNlJyxcclxuICAgICdEZWxldGUnLFxyXG4gICAgJ1RhYicsXHJcbiAgICAnRXNjYXBlJyxcclxuICAgICdFbnRlcicsXHJcbiAgICAnSG9tZScsXHJcbiAgICAnRW5kJyxcclxuICAgICdBcnJvd0xlZnQnLFxyXG4gICAgJ0Fycm93UmlnaHQnLFxyXG4gICAgJ0NsZWFyJyxcclxuICAgICdDb3B5JyxcclxuICAgICdQYXN0ZSdcclxuICBdO1xyXG4gIGN1cnJlbnRMZW46IG51bWJlciA9IDA7XHJcbiAgY2hpbmVzZVJlZyA9IC9bXlxceDAwLVxceGZmXS9nO1xyXG5cclxuICAvKirmoIfnrb4gKi9cclxuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xyXG4gIC8qKuaYr+WQpuW/heWhqyAtIOW/heWhq+WImeaciee6ouiJsirlj7flnKjmoIfnrb7liY3pnaLvvJvlkKbliJnmsqHmnIkgKi9cclxuICBASW5wdXQoKSBpc1JlcXVpcmVkOiBib29sZWFuO1xyXG4gIC8qKuWNoOS9jeespiAqL1xyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcclxuICAvKirplJnor6/kv6Hmga8gLSDlsIbku6XnuqLoibLlrZfkvZPmmL7npLrlnKjovpPlhaXmoYbkuIvmlrkgKi9cclxuICBASW5wdXQoKSBlcnJvck1lc3NhZ2U6IHN0cmluZztcclxuICAvKirmmK/lkKbnpoHnlKggKi9cclxuICBASW5wdXQoKSBpc0Rpc2FibGVkOiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiDmnIDlpKfplb/luqZcclxuICAgKiBcclxuICAgKiBEZWZhdWx0IC0xIGluZGljYXRlIHRoYXQgdGhlIGxlbmd0aCBvZiBpbnB1dCBpcyBub3QgbGltaXRlZFxyXG4gICAqIFRoZSBtYXggb2YgbWF4TGVuIGlzIDk5OVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG1heExlbjogbnVtYmVyID0gLTE7XHJcbiAgLyoq5Y+q5YWB6K645aGr5YaZ5pWw5a2XICovXHJcbiAgQElucHV0KCkgbnVtYmVyT25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgZW1pdENoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXMpIHtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBsZXQgbmV3VmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICB0aGlzLmVtaXRDaGFuZ2UobmV3VmFsdWUpO1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICBpZiAob2JqIHx8IG9iaiA9PT0gJycpIHtcclxuICAgICAgdGhpcy52YWwgPSBvYmo7XHJcbiAgICAgIGlmICh0aGlzLm1heExlbiA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVDdXJyZW50TGVuKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5lbWl0Q2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7IH1cclxuXHJcbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XHJcbiAgICAvLyBUT0RPOiBjdXN0b21pemUgdmFsaWRhdGlvblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdrZXl1cCcsIFsnJGV2ZW50J10pXHJcbiAgb25LZXl1cChlOiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5tYXhMZW4gPT09IC0xKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5tYXhMZW4gPiAtMSkge1xyXG4gICAgICB0aGlzLmNhbGN1bGF0ZUN1cnJlbnRMZW4oKTtcclxuXHJcbiAgICAgIC8vIEhhY2s6IHdoZW4gdHlwaW5nIGNoaW5lc2UgY2hhcmFjdGVyLCBpbnB1dCBjb250cm9sIHdpbGwgbm90IHByZXZlbnQgdGhlIGNoYXJhY3RlciB0eXBpbmdcclxuICAgICAgbGV0IGNoaW5lc2VDaGFyTGVuID0gdGhpcy52YWwgPyAodGhpcy52YWwubWF0Y2godGhpcy5jaGluZXNlUmVnKSB8fCBbXSkgOiBbXTtcclxuICAgICAgaWYgKGNoaW5lc2VDaGFyTGVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnZhbCA9IHRoaXMudmFsLnN1YnN0cmluZygwLCB0aGlzLm1heExlbik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5udW1iZXJPbmx5KSB7XHJcbiAgICAgIHRoaXMudmFsID0gdGhpcy52YWwgPyB0aGlzLnZhbC5yZXBsYWNlKHRoaXMuY2hpbmVzZVJlZywgJycpIDogJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzVHJpZ2dlcktleUV2ZW50cygpIHtcclxuICAgIHJldHVybiB0aGlzLm1heExlbiAhPT0gLTEgfHwgdGhpcy5udW1iZXJPbmx5O1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgb25LZXlEb3duKGU6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5pc1RyaWdnZXJLZXlFdmVudHMoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLm5hdmlnYXRpb25LZXlzLmluZGV4T2YoZS5rZXkpID4gLTEgfHwgIC8vIEFsbG93OiBuYXZpZ2F0aW9uIGtleXM6IGJhY2tzcGFjZSwgZGVsZXRlLCBhcnJvd3MgZXRjLlxyXG4gICAgICAoZS5rZXkgPT09ICdhJyAmJiBlLmN0cmxLZXkgPT09IHRydWUpIHx8ICAgIC8vIEFsbG93OiBDdHJsK0FcclxuICAgICAgKGUua2V5ID09PSAnYycgJiYgZS5jdHJsS2V5ID09PSB0cnVlKSB8fCAgICAvLyBBbGxvdzogQ3RybCtDXHJcbiAgICAgIChlLmtleSA9PT0gJ3YnICYmIGUuY3RybEtleSA9PT0gdHJ1ZSkgfHwgICAgLy8gQWxsb3c6IEN0cmwrVlxyXG4gICAgICAoZS5rZXkgPT09ICd4JyAmJiBlLmN0cmxLZXkgPT09IHRydWUpIHx8ICAgIC8vIEFsbG93OiBDdHJsK1hcclxuICAgICAgKGUua2V5ID09PSAnYScgJiYgZS5tZXRhS2V5ID09PSB0cnVlKSB8fCAgICAvLyBBbGxvdzogQ21kK0EgKE1hYylcclxuICAgICAgKGUua2V5ID09PSAnYycgJiYgZS5tZXRhS2V5ID09PSB0cnVlKSB8fCAgICAvLyBBbGxvdzogQ21kK0MgKE1hYylcclxuICAgICAgKGUua2V5ID09PSAndicgJiYgZS5tZXRhS2V5ID09PSB0cnVlKSB8fCAgICAvLyBBbGxvdzogQ21kK1YgKE1hYylcclxuICAgICAgKGUua2V5ID09PSAneCcgJiYgZS5tZXRhS2V5ID09PSB0cnVlKSAgICAgICAvLyBBbGxvdzogQ21kK1ggKE1hYylcclxuICAgICkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubWF4TGVuID4gLTEpIHtcclxuICAgICAgbGV0IGhpZ2h0bGlnaHRUZXh0ID0gd2luZG93LmdldFNlbGVjdGlvbigpICsgJyc7XHJcbiAgICAgIGlmICh0aGlzLnZhbCAmJiB0aGlzLnZhbC5sZW5ndGggPj0gdGhpcy5tYXhMZW4gJiYgaGlnaHRsaWdodFRleHQgPT09ICcnKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubnVtYmVyT25seSkge1xyXG4gICAgICBpZiAoaXNOYU4oTnVtYmVyKGUua2V5KSkpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3Bhc3RlJywgWyckZXZlbnQnXSlcclxuICBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkge1xyXG4gICAgaWYgKCF0aGlzLmlzVHJpZ2dlcktleUV2ZW50cygpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGxldCBjdXJyZW50VmFsID0gdGhpcy52YWw7XHJcbiAgICBpZiAodGhpcy5tYXhMZW4gPiAtMSB8fCB0aGlzLm51bWJlck9ubHkpIHtcclxuICAgICAgbGV0IGNsaXBib2FyZERhdGEgPSBldmVudC5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvcGxhaW4nKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLm51bWJlck9ubHkpIHtcclxuICAgICAgICBsZXQgcGFzdGVkSW5wdXQ6IHN0cmluZyA9IGNsaXBib2FyZERhdGEucmVwbGFjZSgvXFxEL2csICcnKTsgLy8gZ2V0IGEgbnVtYmVyLW9ubHkgc3RyaW5nXHJcbiAgICAgICAgdGhpcy52YWwgPSBjdXJyZW50VmFsICsgcGFzdGVkSW5wdXQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1heExlbiA+IC0xKSB7XHJcbiAgICAgICAgbGV0IHBhc3RlZElucHV0OiBzdHJpbmcgPSBjbGlwYm9hcmREYXRhLnN1YnN0cmluZygwLCB0aGlzLm1heExlbik7XHJcbiAgICAgICAgdGhpcy52YWwgPSBjdXJyZW50VmFsICsgcGFzdGVkSW5wdXQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVDdXJyZW50TGVuKCkge1xyXG4gICAgdGhpcy5jdXJyZW50TGVuID0gdGhpcy52YWwgPyB0aGlzLnZhbC5sZW5ndGggOiAwO1xyXG4gICAgdGhpcy5jdXJyZW50TGVuID0gdGhpcy5jdXJyZW50TGVuID4gdGhpcy5tYXhMZW4gPyB0aGlzLm1heExlbiA6IHRoaXMuY3VycmVudExlbjtcclxuICB9XHJcbn1cclxuXHJcblxyXG4iXX0=