UNPKG

ng-zorro-antd-mobile

Version:

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

725 lines 43.4 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'; 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