ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
725 lines • 43.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Input, Output, EventEmitter, ViewChild, forwardRef, HostBinding, ElementRef, Renderer2 } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
var TextareaItemComponent = /** @class */ (function () {
function TextareaItemComponent(element, render) {
this.element = element;
this.render = render;
this.prefixCls = 'am-textarea';
this.isTitleString = true;
this.maxLength = Infinity;
this._prefixListCls = 'am-list';
this._defaultValue = '';
this._placeholder = '';
this._editable = true;
this._disabled = false;
this._clear = false;
this._rows = 1;
this._error = false;
this._labelNumber = 5;
this._name = '';
this._focus = false;
this._autoFocus = false;
this._isClear = false;
this._isClickingClear = false;
this.onChange = new EventEmitter();
this.onBlur = new EventEmitter();
this.onFocus = new EventEmitter();
this.onErrorClick = new EventEmitter();
this.clsItem = true;
this._onChange = (/**
* @param {?} _
* @return {?}
*/
function (_) { });
this._el = element.nativeElement;
}
Object.defineProperty(TextareaItemComponent.prototype, "value", {
get: /**
* @return {?}
*/
function () {
return this._value;
},
set: /**
* @param {?} v
* @return {?}
*/
function (v) {
if (typeof v === 'undefined' || v === null) {
this._value = '';
}
else {
this._value = v;
}
this.textRef.nativeElement.value = this._value;
this._onChange(this._value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "defaultValue", {
get: /**
* @return {?}
*/
function () {
return this._defaultValue;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._defaultValue = value;
this._value = this._defaultValue;
this.textRef.nativeElement.value = this._value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "placeholder", {
get: /**
* @return {?}
*/
function () {
return this._placeholder;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._placeholder = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "editable", {
get: /**
* @return {?}
*/
function () {
return this._editable;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._editable = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "disabled", {
get: /**
* @return {?}
*/
function () {
return this._disabled;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._disabled = value;
this.setCls();
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "clear", {
get: /**
* @return {?}
*/
function () {
return this._clear;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._clear = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "rows", {
get: /**
* @return {?}
*/
function () {
return this._rows;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._rows = value;
this.setCls();
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "error", {
get: /**
* @return {?}
*/
function () {
return this._error;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._error = value;
this.setCls();
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "labelNumber", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._labelNumber = value;
this.setCls();
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "count", {
get: /**
* @return {?}
*/
function () {
return this._count;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._count = value;
this.setCls();
this.setCharacterLength();
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "prefixListCls", {
get: /**
* @return {?}
*/
function () {
return this._prefixListCls;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._prefixListCls = value;
this.setCls();
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "name", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._name = value;
this.textRef.nativeElement.name = this._name;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "autoHeight", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._autoHeight = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "title", {
get: /**
* @return {?}
*/
function () {
return this._title;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._title = value;
this.isTitleString = true;
if (typeof value !== 'string') {
this.isTitleString = false;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "focus", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
if (value && value.focus) {
this.textRef.nativeElement.focus();
this.inputFocus('');
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "autoFocus", {
get: /**
* @return {?}
*/
function () {
return this._autoFocus;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._autoFocus = value;
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
TextareaItemComponent.prototype.setCls = /**
* @return {?}
*/
function () {
var _a, _b, _c;
this.hasCount = this._count > 0 && this._rows > 1;
this.render.addClass(this._el, this._prefixListCls + '-item');
this.clsSingleLine = this._rows === 1 && !this._autoHeight;
this.clsDisabled = this._disabled;
this.clsError = this._error;
this.clsFocus = this._focus;
this.clsHasCount = this.hasCount;
this.labelCls = (_a = {},
_a[this.prefixCls + "-label"] = true,
_a[this.prefixCls + "-label-2"] = this._labelNumber === 2,
_a[this.prefixCls + "-label-3"] = this._labelNumber === 3,
_a[this.prefixCls + "-label-4"] = this._labelNumber === 4,
_a[this.prefixCls + "-label-5"] = this._labelNumber === 5,
_a[this.prefixCls + "-label-6"] = this._labelNumber === 6,
_a[this.prefixCls + "-label-7"] = this._labelNumber === 7,
_a);
this.controlCls = (_b = {}, _b[this.prefixCls + "-control"] = true, _b);
this.clearCls = (_c = {},
_c[this.prefixCls + "-clear-active"] = this._isClickingClear,
_c);
};
/**
* @return {?}
*/
TextareaItemComponent.prototype.setCharacterLength = /**
* @return {?}
*/
function () {
this.characterLength = this.countSymbols(this._value);
if (this._count > 0) {
this.maxLength = this._count - this.characterLength + (this._value ? this._value.length : 0);
}
};
/**
* @param {?} e
* @return {?}
*/
TextareaItemComponent.prototype.inputChange = /**
* @param {?} e
* @return {?}
*/
function (e) {
this._value = e;
this.textRef.nativeElement.value = this._value;
this.setCharacterLength();
this._onChange(this._value);
this.onChange.emit(this._value);
};
/**
* @param {?} value
* @return {?}
*/
TextareaItemComponent.prototype.inputFocus = /**
* @param {?} value
* @return {?}
*/
function (value) {
this._focus = true;
this.setCls();
if (value !== undefined) {
this.onFocus.emit(value);
}
};
/**
* @param {?} value
* @param {?} event
* @return {?}
*/
TextareaItemComponent.prototype.inputBlur = /**
* @param {?} value
* @param {?} event
* @return {?}
*/
function (value, event) {
var _this = this;
setTimeout((/**
* @return {?}
*/
function () {
_this._focus = false;
_this.setCls();
_this.onBlur.emit(value);
_this._isClear = false;
}), 100);
};
/**
* @return {?}
*/
TextareaItemComponent.prototype.clearInput = /**
* @return {?}
*/
function () {
var _this = this;
this._isClickingClear = true;
this.setCls();
setTimeout((/**
* @return {?}
*/
function () {
_this._value = '';
_this.inputChange('');
_this.inputFocus(_this._value);
_this._isClickingClear = false;
_this.setCls();
}), 100);
};
/**
* @param {?} e
* @return {?}
*/
TextareaItemComponent.prototype.errorClick = /**
* @param {?} e
* @return {?}
*/
function (e) {
if (this.onErrorClick) {
this.onErrorClick.emit(e);
}
};
/**
* @return {?}
*/
TextareaItemComponent.prototype.reAlignHeight = /**
* @return {?}
*/
function () {
/** @type {?} */
var textareaDom = this.textRef.nativeElement;
textareaDom.style.height = '';
textareaDom.style.height = textareaDom.scrollHeight + "px";
};
/**
* @param {?=} text
* @return {?}
*/
TextareaItemComponent.prototype.countSymbols = /**
* @param {?=} text
* @return {?}
*/
function (text) {
if (text === void 0) { text = ''; }
/** @type {?} */
var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]|\n/g;
return text.replace(regexAstralSymbols, '_').length;
};
/**
* @param {?} value
* @return {?}
*/
TextareaItemComponent.prototype.writeValue = /**
* @param {?} value
* @return {?}
*/
function (value) {
if (typeof value === 'undefined' || value === null) {
this._value = '';
}
else {
this._value = value;
}
};
/**
* @param {?} fn
* @return {?}
*/
TextareaItemComponent.prototype.registerOnChange = /**
* @param {?} fn
* @return {?}
*/
function (fn) {
this._onChange = fn;
};
/**
* @param {?} fn
* @return {?}
*/
TextareaItemComponent.prototype.registerOnTouched = /**
* @param {?} fn
* @return {?}
*/
function (fn) { };
/**
* @return {?}
*/
TextareaItemComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.textRef.nativeElement.value = this._value;
this.setCls();
this.setCharacterLength();
};
/**
* @return {?}
*/
TextareaItemComponent.prototype.ngAfterContentChecked = /**
* @return {?}
*/
function () {
if (this._autoHeight) {
this.reAlignHeight();
}
};
TextareaItemComponent.decorators = [
{ type: Component, args: [{
selector: 'TextareaItem , nzm-textarea-item',
template: "<div *ngIf=\"title && isTitleString\" [ngClass]=\"labelCls\">{{ title }}</div>\n<div *ngIf=\"title && !isTitleString\" [ngClass]=\"labelCls\">\n <ng-template [ngTemplateOutlet]=\"title\"></ng-template>\n</div>\n<div [ngClass]=\"controlCls\">\n <textarea\n #text\n [rows]=\"rows\"\n [maxlength]=\"maxLength\"\n [(ngModel)]=\"value\"\n [defaultValue]=\"defaultValue\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readOnly]=\"!editable\"\n [autofocus]=\"autoFocus\"\n (ngModelChange)=\"inputChange($event)\"\n (blur)=\"inputBlur(value, $event)\"\n (focus)=\"inputFocus(value)\"\n ></textarea>\n</div>\n<div\n *ngIf=\"clear && editable && !disabled && (value && value.length > 0)\"\n class=\"{{ prefixCls }}-clear\"\n [ngClass]=\"clearCls\"\n (click)=\"clearInput()\"\n></div>\n<div *ngIf=\"error\" class=\"{{ prefixCls }}-error-extra\" (click)=\"errorClick($event)\"></div>\n<span *ngIf=\"hasCount\" class=\"{{ prefixCls }}-count\">\n <span>{{ characterLength }}</span\n >/{{ count }}\n</span>\n",
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef((/**
* @return {?}
*/
function () { return TextareaItemComponent; })),
multi: true
}
]
}] }
];
/** @nocollapse */
TextareaItemComponent.ctorParameters = function () { return [
{ type: ElementRef },
{ type: Renderer2 }
]; };
TextareaItemComponent.propDecorators = {
textRef: [{ type: ViewChild, args: ['text', { static: true },] }],
value: [{ type: Input }],
defaultValue: [{ type: Input }],
placeholder: [{ type: Input }],
editable: [{ type: Input }],
disabled: [{ type: Input }],
clear: [{ type: Input }],
rows: [{ type: Input }],
error: [{ type: Input }],
labelNumber: [{ type: Input }],
count: [{ type: Input }],
prefixListCls: [{ type: Input }],
name: [{ type: Input }],
autoHeight: [{ type: Input }],
title: [{ type: Input }],
focus: [{ type: Input }],
autoFocus: [{ type: Input }],
onChange: [{ type: Output }],
onBlur: [{ type: Output }],
onFocus: [{ type: Output }],
onErrorClick: [{ type: Output }],
clsItem: [{ type: HostBinding, args: ['class.am-textarea-item',] }],
clsDisabled: [{ type: HostBinding, args: ['class.am-textarea-disabled',] }],
clsError: [{ type: HostBinding, args: ['class.am-textarea-error',] }],
clsFocus: [{ type: HostBinding, args: ['class.am-textarea-focus',] }],
clsSingleLine: [{ type: HostBinding, args: ['class.am-textarea-item-single-line',] }],
clsHasCount: [{ type: HostBinding, args: ['class.am-textarea-has-count',] }]
};
return TextareaItemComponent;
}());
export { TextareaItemComponent };
if (false) {
/** @type {?} */
TextareaItemComponent.prototype.prefixCls;
/** @type {?} */
TextareaItemComponent.prototype.wrapCls;
/** @type {?} */
TextareaItemComponent.prototype.labelCls;
/** @type {?} */
TextareaItemComponent.prototype.controlCls;
/** @type {?} */
TextareaItemComponent.prototype.clearCls;
/** @type {?} */
TextareaItemComponent.prototype.hasCount;
/** @type {?} */
TextareaItemComponent.prototype.characterLength;
/** @type {?} */
TextareaItemComponent.prototype.isTitleString;
/** @type {?} */
TextareaItemComponent.prototype.maxLength;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._el;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._prefixListCls;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._value;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._defaultValue;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._placeholder;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._editable;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._disabled;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._clear;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._rows;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._count;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._autoHeight;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._error;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._labelNumber;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._name;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._title;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._focus;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._autoFocus;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._isClear;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._isClickingClear;
/** @type {?} */
TextareaItemComponent.prototype.textRef;
/** @type {?} */
TextareaItemComponent.prototype.onChange;
/** @type {?} */
TextareaItemComponent.prototype.onBlur;
/** @type {?} */
TextareaItemComponent.prototype.onFocus;
/** @type {?} */
TextareaItemComponent.prototype.onErrorClick;
/** @type {?} */
TextareaItemComponent.prototype.clsItem;
/** @type {?} */
TextareaItemComponent.prototype.clsDisabled;
/** @type {?} */
TextareaItemComponent.prototype.clsError;
/** @type {?} */
TextareaItemComponent.prototype.clsFocus;
/** @type {?} */
TextareaItemComponent.prototype.clsSingleLine;
/** @type {?} */
TextareaItemComponent.prototype.clsHasCount;
/** @type {?} */
TextareaItemComponent.prototype._onChange;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype.element;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype.render;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGFyZWEtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS8iLCJzb3VyY2VzIjpbInRleHRhcmVhLWl0ZW0vdGV4dGFyZWEtaXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUdULFVBQVUsRUFDVixXQUFXLEVBQ1gsVUFBVSxFQUNWLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekU7SUE4TEUsK0JBQW9CLE9BQW1CLEVBQVUsTUFBaUI7UUFBOUMsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVc7UUFsTGxFLGNBQVMsR0FBVyxhQUFhLENBQUM7UUFPbEMsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFDOUIsY0FBUyxHQUFXLFFBQVEsQ0FBQztRQUdyQixtQkFBYyxHQUFHLFNBQVMsQ0FBQztRQUUzQixrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUMzQixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQixjQUFTLEdBQVksSUFBSSxDQUFDO1FBQzFCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUN4QixVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBR2xCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFDeEIsaUJBQVksR0FBVyxDQUFDLENBQUM7UUFDekIsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUVuQixXQUFNLEdBQVksS0FBSyxDQUFDO1FBQ3hCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFpSTFDLGFBQVEsR0FBc0IsSUFBSSxZ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LDRCQUE0QjsyQkFFeEMsV0FBVyxTQUFDLHlCQUF5QjsyQkFFckMsV0FBVyxTQUFDLHlCQUF5QjtnQ0FFckMsV0FBVyxTQUFDLG9DQUFvQzs4QkFFaEQsV0FBVyxTQUFDLDZCQUE2Qjs7SUFrSDVDLDRCQUFDO0NBQUEsQUE3U0QsSUE2U0M7U0FsU1kscUJBQXFCOzs7SUFDaEMsMENBQWtDOztJQUNsQyx3Q0FBZ0I7O0lBQ2hCLHlDQUFpQjs7SUFDakIsMkNBQW1COztJQUNuQix5Q0FBaUI7O0lBQ2pCLHlDQUFrQjs7SUFDbEIsZ0RBQXdCOztJQUN4Qiw4Q0FBOEI7O0lBQzlCLDBDQUE2Qjs7Ozs7SUFFN0Isb0NBQXdCOzs7OztJQUN4QiwrQ0FBbUM7Ozs7O0lBQ25DLHVDQUF1Qjs7Ozs7SUFDdkIsOENBQW1DOzs7OztJQUNuQyw2Q0FBa0M7Ozs7O0lBQ2xDLDBDQUFrQzs7Ozs7SUFDbEMsMENBQW1DOzs7OztJQUNuQyx1Q0FBZ0M7Ozs7O0lBQ2hDLHNDQUEwQjs7Ozs7SUFDMUIsdUNBQXVCOzs7OztJQUN2Qiw0Q0FBNkI7Ozs7O0lBQzdCLHVDQUFnQzs7Ozs7SUFDaEMsNkNBQWlDOzs7OztJQUNqQyxzQ0FBMkI7Ozs7O0lBQzNCLHVDQUEwQzs7Ozs7SUFDMUMsdUNBQWdDOzs7OztJQUNoQywyQ0FBb0M7Ozs7O0lBQ3BDLHlDQUFrQzs7Ozs7SUFDbEMsaURBQTBDOztJQUUxQyx3Q0FDUTs7SUE2SFIseUNBQ3NEOztJQUN0RCx1Q0FDb0Q7O0lBQ3BELHdDQUNxRDs7SUFDckQsNkNBQzBEOztJQUUxRCx3Q0FDd0I7O0lBQ3hCLDRDQUNxQjs7SUFDckIseUNBQ2tCOztJQUNsQix5Q0FDa0I7O0lBQ2xCLDhDQUN1Qjs7SUFDdkIsNENBQ3FCOztJQU1yQiwwQ0FBNEI7Ozs7O0lBSmhCLHdDQUEyQjs7Ozs7SUFBRSx1Q0FBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBWaWV3Q2hpbGQsXG4gIFRlbXBsYXRlUmVmLFxuICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgRWxlbWVudFJlZixcbiAgUmVuZGVyZXIyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdUZXh0YXJlYUl0ZW0gLCBuem0tdGV4dGFyZWEtaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXh0YXJlYS1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUZXh0YXJlYUl0ZW1Db21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgVGV4dGFyZWFJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRDaGVja2VkLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHByZWZpeENsczogc3RyaW5nID0gJ2FtLXRleHRhcmVhJztcbiAgd3JhcENsczogb2JqZWN0O1xuICBsYWJlbENsczogb2JqZWN0O1xuICBjb250cm9sQ2xzOiBvYmplY3Q7XG4gIGNsZWFyQ2xzOiBvYmplY3Q7XG4gIGhhc0NvdW50OiBib29sZWFuO1xuICBjaGFyYWN0ZXJMZW5ndGg6IG51bWJlcjtcbiAgaXNUaXRsZVN0cmluZzogYm9vbGVhbiA9IHRydWU7XG4gIG1heExlbmd0aDogbnVtYmVyID0gSW5maW5pdHk7XG5cbiAgcHJpdmF0ZSBfZWw6IEVsZW1lbnRSZWY7XG4gIHByaXZhdGUgX3ByZWZpeExpc3RDbHMgPSAnYW0tbGlzdCc7XG4gIHByaXZhdGUgX3ZhbHVlOiBzdHJpbmc7XG4gIHByaXZhdGUgX2RlZmF1bHRWYWx1ZTogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX3BsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfZWRpdGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9jbGVhcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9yb3dzOiBudW1iZXIgPSAxO1xuICBwcml2YXRlIF9jb3VudDogbnVtYmVyO1xuICBwcml2YXRlIF9hdXRvSGVpZ2h0OiBib29sZWFuO1xuICBwcml2YXRlIF9lcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9sYWJlbE51bWJlcjogbnVtYmVyID0gNTtcbiAgcHJpdmF0ZSBfbmFtZTogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX3RpdGxlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIF9mb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9hdXRvRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXNDbGVhcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9pc0NsaWNraW5nQ2xlYXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCd0ZXh0JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgdGV4dFJlZjtcblxuICBASW5wdXQoKVxuICBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbiAgc2V0IHZhbHVlKHY6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgdiA9PT0gJ3VuZGVmaW5lZCcgfHwgdiA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fdmFsdWUgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2O1xuICAgIH1cbiAgICB0aGlzLnRleHRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgZGVmYXVsdFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgfVxuICBzZXQgZGVmYXVsdFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9kZWZhdWx0VmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgICB0aGlzLnRleHRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgfVxuICBzZXQgcGxhY2Vob2xkZXIodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGVkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9lZGl0YWJsZTtcbiAgfVxuICBzZXQgZWRpdGFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9lZGl0YWJsZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBjbGVhcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2xlYXI7XG4gIH1cbiAgc2V0IGNsZWFyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fY2xlYXIgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgcm93cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yb3dzO1xuICB9XG4gIHNldCByb3dzKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9yb3dzID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbHMoKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgZXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Vycm9yO1xuICB9XG4gIHNldCBlcnJvcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Vycm9yID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbHMoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgbGFiZWxOdW1iZXIodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2xhYmVsTnVtYmVyID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbHMoKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgY291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY291bnQ7XG4gIH1cbiAgc2V0IGNvdW50KHZhbHVlKSB7XG4gICAgdGhpcy5fY291bnQgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICAgIHRoaXMuc2V0Q2hhcmFjdGVyTGVuZ3RoKCk7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHByZWZpeExpc3RDbHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcHJlZml4TGlzdENscztcbiAgfVxuICBzZXQgcHJlZml4TGlzdENscyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcHJlZml4TGlzdENscyA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xzKCk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IG5hbWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX25hbWUgPSB2YWx1ZTtcbiAgICB0aGlzLnRleHRSZWYubmF0aXZlRWxlbWVudC5uYW1lID0gdGhpcy5fbmFtZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgYXV0b0hlaWdodCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2F1dG9IZWlnaHQgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgdGl0bGUoKTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX3RpdGxlO1xuICB9XG4gIHNldCB0aXRsZSh2YWx1ZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIHRoaXMuX3RpdGxlID0gdmFsdWU7XG4gICAgdGhpcy5pc1RpdGxlU3RyaW5nID0gdHJ1ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5pc1RpdGxlU3RyaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBmb2N1cyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5mb2N1cykge1xuICAgICAgdGhpcy50ZXh0UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIHRoaXMuaW5wdXRGb2N1cygnJyk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBhdXRvRm9jdXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dG9Gb2N1cztcbiAgfVxuICBzZXQgYXV0b0ZvY3VzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fYXV0b0ZvY3VzID0gdmFsdWU7XG4gIH1cbiAgQE91dHB1dCgpXG4gIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25CbHVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25Gb2N1czogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uRXJyb3JDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXRleHRhcmVhLWl0ZW0nKVxuICBjbHNJdGVtOiBib29sZWFuID0gdHJ1ZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS10ZXh0YXJlYS1kaXNhYmxlZCcpXG4gIGNsc0Rpc2FibGVkOiBib29sZWFuO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXRleHRhcmVhLWVycm9yJylcbiAgY2xzRXJyb3I6IGJvb2xlYW47XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tdGV4dGFyZWEtZm9jdXMnKVxuICBjbHNGb2N1czogYm9vbGVhbjtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS10ZXh0YXJlYS1pdGVtLXNpbmdsZS1saW5lJylcbiAgY2xzU2luZ2xlTGluZTogYm9vbGVhbjtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS10ZXh0YXJlYS1oYXMtY291bnQnKVxuICBjbHNIYXNDb3VudDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyOiBSZW5kZXJlcjIpIHtcbiAgICB0aGlzLl9lbCA9IGVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIF9vbkNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcblxuICBzZXRDbHMoKSB7XG4gICAgdGhpcy5oYXNDb3VudCA9IHRoaXMuX2NvdW50ID4gMCAmJiB0aGlzLl9yb3dzID4gMTtcbiAgICB0aGlzLnJlbmRlci5hZGRDbGFzcyh0aGlzLl9lbCwgdGhpcy5fcHJlZml4TGlzdENscyArICctaXRlbScpO1xuICAgIHRoaXMuY2xzU2luZ2xlTGluZSA9IHRoaXMuX3Jvd3MgPT09IDEgJiYgIXRoaXMuX2F1dG9IZWlnaHQ7XG4gICAgdGhpcy5jbHNEaXNhYmxlZCA9IHRoaXMuX2Rpc2FibGVkO1xuICAgIHRoaXMuY2xzRXJyb3IgPSB0aGlzLl9lcnJvcjtcbiAgICB0aGlzLmNsc0ZvY3VzID0gdGhpcy5fZm9jdXM7XG4gICAgdGhpcy5jbHNIYXNDb3VudCA9IHRoaXMuaGFzQ291bnQ7XG4gICAgdGhpcy5sYWJlbENscyA9IHtcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbGFiZWxgXTogdHJ1ZSxcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbGFiZWwtMmBdOiB0aGlzLl9sYWJlbE51bWJlciA9PT0gMixcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbGFiZWwtM2BdOiB0aGlzLl9sYWJlbE51bWJlciA9PT0gMyxcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbGFiZWwtNGBdOiB0aGlzLl9sYWJlbE51bWJlciA9PT0gNCxcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbGFiZWwtNWBdOiB0aGlzLl9sYWJlbE51bWJlciA9PT0gNSxcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbGFiZWwtNmBdOiB0aGlzLl9sYWJlbE51bWJlciA9PT0gNixcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbGFiZWwtN2BdOiB0aGlzLl9sYWJlbE51bWJlciA9PT0gN1xuICAgIH07XG4gICAgdGhpcy5jb250cm9sQ2xzID0geyBbYCR7dGhpcy5wcmVmaXhDbHN9LWNvbnRyb2xgXTogdHJ1ZSB9O1xuICAgIHRoaXMuY2xlYXJDbHMgPSB7XG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWNsZWFyLWFjdGl2ZWBdOiB0aGlzLl9pc0NsaWNraW5nQ2xlYXJcbiAgICB9O1xuICB9XG4gIHNldENoYXJhY3Rlckxlbmd0aCgpIHtcbiAgICB0aGlzLmNoYXJhY3Rlckxlbmd0aCA9IHRoaXMuY291bnRTeW1ib2xzKHRoaXMuX3ZhbHVlKTtcbiAgICBpZiAodGhpcy5fY291bnQgPiAwKSB7XG4gICAgICB0aGlzLm1heExlbmd0aCA9IHRoaXMuX2NvdW50IC0gdGhpcy5jaGFyYWN0ZXJMZW5ndGggKyAodGhpcy5fdmFsdWUgPyB0aGlzLl92YWx1ZS5sZW5ndGggOiAwKTtcbiAgICB9XG4gIH1cblxuICBpbnB1dENoYW5nZShlKSB7XG4gICAgdGhpcy5fdmFsdWUgPSBlO1xuICAgIHRoaXMudGV4dFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5fdmFsdWU7XG4gICAgdGhpcy5zZXRDaGFyYWN0ZXJMZW5ndGgoKTtcbiAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLl92YWx1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgfVxuXG4gIGlucHV0Rm9jdXModmFsdWUpIHtcbiAgICB0aGlzLl9mb2N1cyA9IHRydWU7XG4gICAgdGhpcy5zZXRDbHMoKTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vbkZvY3VzLmVtaXQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGlucHV0Qmx1cih2YWx1ZSwgZXZlbnQpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2ZvY3VzID0gZmFsc2U7XG4gICAgICB0aGlzLnNldENscygpO1xuICAgICAgdGhpcy5vbkJsdXIuZW1pdCh2YWx1ZSk7XG4gICAgICB0aGlzLl9pc0NsZWFyID0gZmFsc2U7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGNsZWFySW5wdXQoKSB7XG4gICAgdGhpcy5faXNDbGlja2luZ0NsZWFyID0gdHJ1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fdmFsdWUgPSAnJztcbiAgICAgIHRoaXMuaW5wdXRDaGFuZ2UoJycpO1xuICAgICAgdGhpcy5pbnB1dEZvY3VzKHRoaXMuX3ZhbHVlKTtcbiAgICAgIHRoaXMuX2lzQ2xpY2tpbmdDbGVhciA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXRDbHMoKTtcbiAgICB9LCAxMDApO1xuICB9XG4gIGVycm9yQ2xpY2soZSkge1xuICAgIGlmICh0aGlzLm9uRXJyb3JDbGljaykge1xuICAgICAgdGhpcy5vbkVycm9yQ2xpY2suZW1pdChlKTtcbiAgICB9XG4gIH1cbiAgcmVBbGlnbkhlaWdodCgpIHtcbiAgICBjb25zdCB0ZXh0YXJlYURvbSA9IHRoaXMudGV4dFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIHRleHRhcmVhRG9tLnN0eWxlLmhlaWdodCA9ICcnO1xuICAgIHRleHRhcmVhRG9tLnN0eWxlLmhlaWdodCA9IGAke3RleHRhcmVhRG9tLnNjcm9sbEhlaWdodH1weGA7XG4gIH1cblxuICBjb3VudFN5bWJvbHModGV4dCA9ICcnKSB7XG4gICAgY29uc3QgcmVnZXhBc3RyYWxTeW1ib2xzID0gL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl18XFxuL2c7XG4gICAgcmV0dXJuIHRleHQucmVwbGFjZShyZWdleEFzdHJhbFN5bWJvbHMsICdfJykubGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChfOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy50ZXh0UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICAgIHRoaXMuc2V0Q2hhcmFjdGVyTGVuZ3RoKCk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XG4gICAgaWYgKHRoaXMuX2F1dG9IZWlnaHQpIHtcbiAgICAgIHRoaXMucmVBbGlnbkhlaWdodCgpO1xuICAgIH1cbiAgfVxufVxuIl19