ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
608 lines • 38.3 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';
export class TextareaItemComponent {
/**
* @param {?} element
* @param {?} render
*/
constructor(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 {?}
*/
(_) => { });
this._el = element.nativeElement;
}
/**
* @return {?}
*/
get value() {
return this._value;
}
/**
* @param {?} v
* @return {?}
*/
set value(v) {
if (typeof v === 'undefined' || v === null) {
this._value = '';
}
else {
this._value = v;
}
this.textRef.nativeElement.value = this._value;
this._onChange(this._value);
}
/**
* @return {?}
*/
get defaultValue() {
return this._defaultValue;
}
/**
* @param {?} value
* @return {?}
*/
set defaultValue(value) {
this._defaultValue = value;
this._value = this._defaultValue;
this.textRef.nativeElement.value = this._value;
}
/**
* @return {?}
*/
get placeholder() {
return this._placeholder;
}
/**
* @param {?} value
* @return {?}
*/
set placeholder(value) {
this._placeholder = value;
}
/**
* @return {?}
*/
get editable() {
return this._editable;
}
/**
* @param {?} value
* @return {?}
*/
set editable(value) {
this._editable = value;
}
/**
* @return {?}
*/
get disabled() {
return this._disabled;
}
/**
* @param {?} value
* @return {?}
*/
set disabled(value) {
this._disabled = value;
this.setCls();
}
/**
* @return {?}
*/
get clear() {
return this._clear;
}
/**
* @param {?} value
* @return {?}
*/
set clear(value) {
this._clear = value;
}
/**
* @return {?}
*/
get rows() {
return this._rows;
}
/**
* @param {?} value
* @return {?}
*/
set rows(value) {
this._rows = value;
this.setCls();
}
/**
* @return {?}
*/
get error() {
return this._error;
}
/**
* @param {?} value
* @return {?}
*/
set error(value) {
this._error = value;
this.setCls();
}
/**
* @param {?} value
* @return {?}
*/
set labelNumber(value) {
this._labelNumber = value;
this.setCls();
}
/**
* @return {?}
*/
get count() {
return this._count;
}
/**
* @param {?} value
* @return {?}
*/
set count(value) {
this._count = value;
this.setCls();
this.setCharacterLength();
}
/**
* @return {?}
*/
get prefixListCls() {
return this._prefixListCls;
}
/**
* @param {?} value
* @return {?}
*/
set prefixListCls(value) {
this._prefixListCls = value;
this.setCls();
}
/**
* @param {?} value
* @return {?}
*/
set name(value) {
this._name = value;
this.textRef.nativeElement.name = this._name;
}
/**
* @param {?} value
* @return {?}
*/
set autoHeight(value) {
this._autoHeight = value;
}
/**
* @return {?}
*/
get title() {
return this._title;
}
/**
* @param {?} value
* @return {?}
*/
set title(value) {
this._title = value;
this.isTitleString = true;
if (typeof value !== 'string') {
this.isTitleString = false;
}
}
/**
* @param {?} value
* @return {?}
*/
set focus(value) {
if (value && value.focus) {
this.textRef.nativeElement.focus();
this.inputFocus('');
}
}
/**
* @return {?}
*/
get autoFocus() {
return this._autoFocus;
}
/**
* @param {?} value
* @return {?}
*/
set autoFocus(value) {
this._autoFocus = value;
}
/**
* @return {?}
*/
setCls() {
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 = {
[`${this.prefixCls}-label`]: true,
[`${this.prefixCls}-label-2`]: this._labelNumber === 2,
[`${this.prefixCls}-label-3`]: this._labelNumber === 3,
[`${this.prefixCls}-label-4`]: this._labelNumber === 4,
[`${this.prefixCls}-label-5`]: this._labelNumber === 5,
[`${this.prefixCls}-label-6`]: this._labelNumber === 6,
[`${this.prefixCls}-label-7`]: this._labelNumber === 7
};
this.controlCls = { [`${this.prefixCls}-control`]: true };
this.clearCls = {
[`${this.prefixCls}-clear-active`]: this._isClickingClear
};
}
/**
* @return {?}
*/
setCharacterLength() {
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 {?}
*/
inputChange(e) {
this._value = e;
this.textRef.nativeElement.value = this._value;
this.setCharacterLength();
this._onChange(this._value);
this.onChange.emit(this._value);
}
/**
* @param {?} value
* @return {?}
*/
inputFocus(value) {
this._focus = true;
this.setCls();
if (value !== undefined) {
this.onFocus.emit(value);
}
}
/**
* @param {?} value
* @param {?} event
* @return {?}
*/
inputBlur(value, event) {
setTimeout((/**
* @return {?}
*/
() => {
this._focus = false;
this.setCls();
this.onBlur.emit(value);
this._isClear = false;
}), 100);
}
/**
* @return {?}
*/
clearInput() {
this._isClickingClear = true;
this.setCls();
setTimeout((/**
* @return {?}
*/
() => {
this._value = '';
this.inputChange('');
this.inputFocus(this._value);
this._isClickingClear = false;
this.setCls();
}), 100);
}
/**
* @param {?} e
* @return {?}
*/
errorClick(e) {
if (this.onErrorClick) {
this.onErrorClick.emit(e);
}
}
/**
* @return {?}
*/
reAlignHeight() {
/** @type {?} */
const textareaDom = this.textRef.nativeElement;
textareaDom.style.height = '';
textareaDom.style.height = `${textareaDom.scrollHeight}px`;
}
/**
* @param {?=} text
* @return {?}
*/
countSymbols(text = '') {
/** @type {?} */
const regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]|\n/g;
return text.replace(regexAstralSymbols, '_').length;
}
/**
* @param {?} value
* @return {?}
*/
writeValue(value) {
if (typeof value === 'undefined' || value === null) {
this._value = '';
}
else {
this._value = value;
}
}
/**
* @param {?} fn
* @return {?}
*/
registerOnChange(fn) {
this._onChange = fn;
}
/**
* @param {?} fn
* @return {?}
*/
registerOnTouched(fn) { }
/**
* @return {?}
*/
ngOnInit() {
this.textRef.nativeElement.value = this._value;
this.setCls();
this.setCharacterLength();
}
/**
* @return {?}
*/
ngAfterContentChecked() {
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 {?}
*/
() => TextareaItemComponent)),
multi: true
}
]
}] }
];
/** @nocollapse */
TextareaItemComponent.ctorParameters = () => [
{ 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',] }]
};
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGFyZWEtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS8iLCJzb3VyY2VzIjpbInRleHRhcmVhLWl0ZW0vdGV4dGFyZWEtaXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUdULFVBQVUsRUFDVixXQUFXLEVBQ1gsVUFBVSxFQUNWLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFhekUsTUFBTSxPQUFPLHFCQUFxQjs7Ozs7SUFtTGhDLFlBQW9CLE9BQW1CLEVBQVUsTUFBaUI7UUFBOUMsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVc7UUFsTGxFLGNBQVMsR0FBVyxhQUFhLENBQUM7UUFPbEMsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFDOUIsY0FBUyxHQUFXLFFBQVEsQ0FBQztRQUdyQixtQkFBYyxHQUFHLFNBQVMsQ0FBQztRQUUzQixrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUMzQixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQixjQUFTLEdBQVksSUFBSSxDQUFDO1FBQzFCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUN4QixVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBR2xCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFDeEIsaUJBQVksR0FBVyxDQUFDLENBQUM7UUFDekIsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUVuQixXQUFNLEdBQVksS0FBSyxDQUFDO1FBQ3hCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFp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O0lBQ2xDLHdDQUFnQjs7SUFDaEIseUNBQWlCOztJQUNqQiwyQ0FBbUI7O0lBQ25CLHlDQUFpQjs7SUFDakIseUNBQWtCOztJQUNsQixnREFBd0I7O0lBQ3hCLDhDQUE4Qjs7SUFDOUIsMENBQTZCOzs7OztJQUU3QixvQ0FBd0I7Ozs7O0lBQ3hCLCtDQUFtQzs7Ozs7SUFDbkMsdUNBQXVCOzs7OztJQUN2Qiw4Q0FBbUM7Ozs7O0lBQ25DLDZDQUFrQzs7Ozs7SUFDbEMsMENBQWtDOzs7OztJQUNsQywwQ0FBbUM7Ozs7O0lBQ25DLHVDQUFnQzs7Ozs7SUFDaEMsc0NBQTBCOzs7OztJQUMxQix1Q0FBdUI7Ozs7O0lBQ3ZCLDRDQUE2Qjs7Ozs7SUFDN0IsdUNBQWdDOzs7OztJQUNoQyw2Q0FBaUM7Ozs7O0lBQ2pDLHNDQUEyQjs7Ozs7SUFDM0IsdUNBQTBDOzs7OztJQUMxQyx1Q0FBZ0M7Ozs7O0lBQ2hDLDJDQUFvQzs7Ozs7SUFDcEMseUNBQWtDOzs7OztJQUNsQyxpREFBMEM7O0lBRTFDLHdDQUNROztJQTZIUix5Q0FDc0Q7O0lBQ3RELHVDQUNvRDs7SUFDcEQsd0NBQ3FEOztJQUNyRCw2Q0FDMEQ7O0lBRTFELHdDQUN3Qjs7SUFDeEIsNENBQ3FCOztJQUNyQix5Q0FDa0I7O0lBQ2xCLHlDQUNrQjs7SUFDbEIsOENBQ3VCOztJQUN2Qiw0Q0FDcUI7O0lBTXJCLDBDQUE0Qjs7Ozs7SUFKaEIsd0NBQTJCOzs7OztJQUFFLHVDQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdDaGlsZCxcbiAgVGVtcGxhdGVSZWYsXG4gIEFmdGVyQ29udGVudENoZWNrZWQsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBFbGVtZW50UmVmLFxuICBSZW5kZXJlcjJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1RleHRhcmVhSXRlbSAsIG56bS10ZXh0YXJlYS1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RleHRhcmVhLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRleHRhcmVhSXRlbUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBUZXh0YXJlYUl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudENoZWNrZWQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHJlZml4Q2xzOiBzdHJpbmcgPSAnYW0tdGV4dGFyZWEnO1xuICB3cmFwQ2xzOiBvYmplY3Q7XG4gIGxhYmVsQ2xzOiBvYmplY3Q7XG4gIGNvbnRyb2xDbHM6IG9iamVjdDtcbiAgY2xlYXJDbHM6IG9iamVjdDtcbiAgaGFzQ291bnQ6IGJvb2xlYW47XG4gIGNoYXJhY3Rlckxlbmd0aDogbnVtYmVyO1xuICBpc1RpdGxlU3RyaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgbWF4TGVuZ3RoOiBudW1iZXIgPSBJbmZpbml0eTtcblxuICBwcml2YXRlIF9lbDogRWxlbWVudFJlZjtcbiAgcHJpdmF0ZSBfcHJlZml4TGlzdENscyA9ICdhbS1saXN0JztcbiAgcHJpdmF0ZSBfdmFsdWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfZGVmYXVsdFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9lZGl0YWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2NsZWFyOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3Jvd3M6IG51bWJlciA9IDE7XG4gIHByaXZhdGUgX2NvdW50OiBudW1iZXI7XG4gIHByaXZhdGUgX2F1dG9IZWlnaHQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2xhYmVsTnVtYmVyOiBudW1iZXIgPSA1O1xuICBwcml2YXRlIF9uYW1lOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfdGl0bGU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG4gIHByaXZhdGUgX2ZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2F1dG9Gb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9pc0NsZWFyOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2lzQ2xpY2tpbmdDbGVhcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ3RleHQnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICB0ZXh0UmVmO1xuXG4gIEBJbnB1dCgpXG4gIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuICBzZXQgdmFsdWUodjogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB2ID09PSAndW5kZWZpbmVkJyB8fCB2ID09PSBudWxsKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHY7XG4gICAgfVxuICAgIHRoaXMudGV4dFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5fdmFsdWU7XG4gICAgdGhpcy5fb25DaGFuZ2UodGhpcy5fdmFsdWUpO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBkZWZhdWx0VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZhbHVlO1xuICB9XG4gIHNldCBkZWZhdWx0VmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2RlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fZGVmYXVsdFZhbHVlO1xuICAgIHRoaXMudGV4dFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5fdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xuICB9XG4gIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcGxhY2Vob2xkZXIgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgZWRpdGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2VkaXRhYmxlO1xuICB9XG4gIHNldCBlZGl0YWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2VkaXRhYmxlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xzKCk7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGNsZWFyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jbGVhcjtcbiAgfVxuICBzZXQgY2xlYXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jbGVhciA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCByb3dzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd3M7XG4gIH1cbiAgc2V0IHJvd3ModmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3Jvd3MgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBlcnJvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZXJyb3I7XG4gIH1cbiAgc2V0IGVycm9yKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZXJyb3IgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBsYWJlbE51bWJlcih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGFiZWxOdW1iZXIgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBjb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jb3VudDtcbiAgfVxuICBzZXQgY291bnQodmFsdWUpIHtcbiAgICB0aGlzLl9jb3VudCA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xzKCk7XG4gICAgdGhpcy5zZXRDaGFyYWN0ZXJMZW5ndGgoKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgcHJlZml4TGlzdENscygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wcmVmaXhMaXN0Q2xzO1xuICB9XG4gIHNldCBwcmVmaXhMaXN0Q2xzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wcmVmaXhMaXN0Q2xzID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbHMoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgbmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbmFtZSA9IHZhbHVlO1xuICAgIHRoaXMudGV4dFJlZi5uYXRpdmVFbGVtZW50Lm5hbWUgPSB0aGlzLl9uYW1lO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBhdXRvSGVpZ2h0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fYXV0b0hlaWdodCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCB0aXRsZSgpOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gIH1cbiAgc2V0IHRpdGxlKHZhbHVlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgdGhpcy5fdGl0bGUgPSB2YWx1ZTtcbiAgICB0aGlzLmlzVGl0bGVTdHJpbmcgPSB0cnVlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLmlzVGl0bGVTdHJpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGZvY3VzKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLmZvY3VzKSB7XG4gICAgICB0aGlzLnRleHRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgdGhpcy5pbnB1dEZvY3VzKCcnKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGF1dG9Gb2N1cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYXV0b0ZvY3VzO1xuICB9XG4gIHNldCBhdXRvRm9jdXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9hdXRvRm9jdXMgPSB2YWx1ZTtcbiAgfVxuICBAT3V0cHV0KClcbiAgb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKVxuICBvbkJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKVxuICBvbkZvY3VzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25FcnJvckNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tdGV4dGFyZWEtaXRlbScpXG4gIGNsc0l0ZW06IGJvb2xlYW4gPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXRleHRhcmVhLWRpc2FibGVkJylcbiAgY2xzRGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tdGV4dGFyZWEtZXJyb3InKVxuICBjbHNFcnJvcjogYm9vbGVhbjtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS10ZXh0YXJlYS1mb2N1cycpXG4gIGNsc0ZvY3VzOiBib29sZWFuO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXRleHRhcmVhLWl0ZW0tc2luZ2xlLWxpbmUnKVxuICBjbHNTaW5nbGVMaW5lOiBib29sZWFuO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXRleHRhcmVhLWhhcy1jb3VudCcpXG4gIGNsc0hhc0NvdW50OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZiwgcHJpdmF0ZSByZW5kZXI6IFJlbmRlcmVyMikge1xuICAgIHRoaXMuX2VsID0gZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgX29uQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xuXG4gIHNldENscygpIHtcbiAgICB0aGlzLmhhc0NvdW50ID0gdGhpcy5fY291bnQgPiAwICYmIHRoaXMuX3Jvd3MgPiAxO1xuICAgIHRoaXMucmVuZGVyLmFkZENsYXNzKHRoaXMuX2VsLCB0aGlzLl9wcmVmaXhMaXN0Q2xzICsgJy1pdGVtJyk7XG4gICAgdGhpcy5jbHNTaW5nbGVMaW5lID0gdGhpcy5fcm93cyA9PT0gMSAmJiAhdGhpcy5fYXV0b0hlaWdodDtcbiAgICB0aGlzLmNsc0Rpc2FibGVkID0gdGhpcy5fZGlzYWJsZWQ7XG4gICAgdGhpcy5jbHNFcnJvciA9IHRoaXMuX2Vycm9yO1xuICAgIHRoaXMuY2xzRm9jdXMgPSB0aGlzLl9mb2N1cztcbiAgICB0aGlzLmNsc0hhc0NvdW50ID0gdGhpcy5oYXNDb3VudDtcbiAgICB0aGlzLmxhYmVsQ2xzID0ge1xuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbGBdOiB0cnVlLFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC0yYF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSAyLFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC0zYF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSAzLFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC00YF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSA0LFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC01YF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSA1LFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC02YF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSA2LFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC03YF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSA3XG4gICAgfTtcbiAgICB0aGlzLmNvbnRyb2xDbHMgPSB7IFtgJHt0aGlzLnByZWZpeENsc30tY29udHJvbGBdOiB0cnVlIH07XG4gICAgdGhpcy5jbGVhckNscyA9IHtcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tY2xlYXItYWN0aXZlYF06IHRoaXMuX2lzQ2xpY2tpbmdDbGVhclxuICAgIH07XG4gIH1cbiAgc2V0Q2hhcmFjdGVyTGVuZ3RoKCkge1xuICAgIHRoaXMuY2hhcmFjdGVyTGVuZ3RoID0gdGhpcy5jb3VudFN5bWJvbHModGhpcy5fdmFsdWUpO1xuICAgIGlmICh0aGlzLl9jb3VudCA+IDApIHtcbiAgICAgIHRoaXMubWF4TGVuZ3RoID0gdGhpcy5fY291bnQgLSB0aGlzLmNoYXJhY3Rlckxlbmd0aCArICh0aGlzLl92YWx1ZSA/IHRoaXMuX3ZhbHVlLmxlbmd0aCA6IDApO1xuICAgIH1cbiAgfVxuXG4gIGlucHV0Q2hhbmdlKGUpIHtcbiAgICB0aGlzLl92YWx1ZSA9IGU7XG4gICAgdGhpcy50ZXh0UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICB0aGlzLnNldENoYXJhY3Rlckxlbmd0aCgpO1xuICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5fdmFsdWUpO1xuICB9XG5cbiAgaW5wdXRGb2N1cyh2YWx1ZSkge1xuICAgIHRoaXMuX2ZvY3VzID0gdHJ1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9uRm9jdXMuZW1pdCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgaW5wdXRCbHVyKHZhbHVlLCBldmVudCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fZm9jdXMgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0Q2xzKCk7XG4gICAgICB0aGlzLm9uQmx1ci5lbWl0KHZhbHVlKTtcbiAgICAgIHRoaXMuX2lzQ2xlYXIgPSBmYWxzZTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgY2xlYXJJbnB1dCgpIHtcbiAgICB0aGlzLl9pc0NsaWNraW5nQ2xlYXIgPSB0cnVlO1xuICAgIHRoaXMuc2V0Q2xzKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl92YWx1ZSA9ICcnO1xuICAgICAgdGhpcy5pbnB1dENoYW5nZSgnJyk7XG4gICAgICB0aGlzLmlucHV0Rm9jdXModGhpcy5fdmFsdWUpO1xuICAgICAgdGhpcy5faXNDbGlja2luZ0NsZWFyID0gZmFsc2U7XG4gICAgICB0aGlzLnNldENscygpO1xuICAgIH0sIDEwMCk7XG4gIH1cbiAgZXJyb3JDbGljayhlKSB7XG4gICAgaWYgKHRoaXMub25FcnJvckNsaWNrKSB7XG4gICAgICB0aGlzLm9uRXJyb3JDbGljay5lbWl0KGUpO1xuICAgIH1cbiAgfVxuICByZUFsaWduSGVpZ2h0KCkge1xuICAgIGNvbnN0IHRleHRhcmVhRG9tID0gdGhpcy50ZXh0UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgdGV4dGFyZWFEb20uc3R5bGUuaGVpZ2h0ID0gJyc7XG4gICAgdGV4dGFyZWFEb20uc3R5bGUuaGVpZ2h0ID0gYCR7dGV4dGFyZWFEb20uc2Nyb2xsSGVpZ2h0fXB4YDtcbiAgfVxuXG4gIGNvdW50U3ltYm9scyh0ZXh0ID0gJycpIHtcbiAgICBjb25zdCByZWdleEFzdHJhbFN5bWJvbHMgPSAvW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXXxcXG4vZztcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKHJlZ2V4QXN0cmFsU3ltYm9scywgJ18nKS5sZW5ndGg7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fdmFsdWUgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKF86IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnRleHRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgIHRoaXMuc2V0Q2xzKCk7XG4gICAgdGhpcy5zZXRDaGFyYWN0ZXJMZW5ndGgoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcbiAgICBpZiAodGhpcy5fYXV0b0hlaWdodCkge1xuICAgICAgdGhpcy5yZUFsaWduSGVpZ2h0KCk7XG4gICAgfVxuICB9XG59XG4iXX0=