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