UNPKG

ng-zorro-antd-mobile

Version:

An enterprise-class mobile UI components based on Ant Design and Angular

608 lines 38.3 kB
/** * @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=