UNPKG

ng-zorro-antd-mobile

Version:

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

579 lines (578 loc) 36 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Component, Input, Output, EventEmitter, ViewChild, forwardRef } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; var TextareaItem = /** @class */ (function () { function TextareaItem() { 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(); } Object.defineProperty(TextareaItem.prototype, "value", { get: /** * @return {?} */ function () { return this._value; }, set: /** * @param {?} v * @return {?} */ function (v) { if (typeof v === undefined || v === null) { this._value = ''; } this._value = v; this.textRef.nativeElement.value = this._value; }, enumerable: true, configurable: true }); Object.defineProperty(TextareaItem.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(TextareaItem.prototype, "placeholder", { get: /** * @return {?} */ function () { return this._placeholder; }, set: /** * @param {?} value * @return {?} */ function (value) { this._placeholder = value; }, enumerable: true, configurable: true }); Object.defineProperty(TextareaItem.prototype, "editable", { get: /** * @return {?} */ function () { return this._editable; }, set: /** * @param {?} value * @return {?} */ function (value) { this._editable = value; }, enumerable: true, configurable: true }); Object.defineProperty(TextareaItem.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(TextareaItem.prototype, "clear", { get: /** * @return {?} */ function () { return this._clear; }, set: /** * @param {?} value * @return {?} */ function (value) { this._clear = value; }, enumerable: true, configurable: true }); Object.defineProperty(TextareaItem.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(TextareaItem.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(TextareaItem.prototype, "labelNumber", { set: /** * @param {?} value * @return {?} */ function (value) { this._labelNumber = value; this.setCls(); }, enumerable: true, configurable: true }); Object.defineProperty(TextareaItem.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(TextareaItem.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(TextareaItem.prototype, "name", { set: /** * @param {?} value * @return {?} */ function (value) { this._name = value; this.textRef.nativeElement.name = this._name; }, enumerable: true, configurable: true }); Object.defineProperty(TextareaItem.prototype, "autoHeight", { set: /** * @param {?} value * @return {?} */ function (value) { this._autoHeight = value; }, enumerable: true, configurable: true }); Object.defineProperty(TextareaItem.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(TextareaItem.prototype, "focus", { set: /** * @param {?} value * @return {?} */ function (value) { if (value && value.focus) { this.textRef.nativeElement.focus(); this.inputFocus(''); } }, enumerable: true, configurable: true }); Object.defineProperty(TextareaItem.prototype, "autoFocus", { get: /** * @return {?} */ function () { return this._autoFocus; }, set: /** * @param {?} value * @return {?} */ function (value) { this._autoFocus = value; }, enumerable: true, configurable: true }); /** * @return {?} */ TextareaItem.prototype.setCls = /** * @return {?} */ function () { var _a, _b, _c, _d; this.hasCount = this._count > 0 && this._rows > 1; this.wrapCls = (_a = {}, _a[this._prefixListCls + "-item"] = true, _a[this.prefixCls + "-item"] = true, _a[this.prefixCls + "-disabled"] = this._disabled, _a[this.prefixCls + "-error"] = this._error, _a[this.prefixCls + "-focus"] = this._focus, _a[this.prefixCls + "-item-single-line"] = this._rows === 1 && !this._autoHeight, _a[this.prefixCls + "-has-count"] = this.hasCount, _a); this.labelCls = (_b = {}, _b[this.prefixCls + "-label"] = true, _b[this.prefixCls + "-label-2"] = this._labelNumber === 2, _b[this.prefixCls + "-label-3"] = this._labelNumber === 3, _b[this.prefixCls + "-label-4"] = this._labelNumber === 4, _b[this.prefixCls + "-label-5"] = this._labelNumber === 5, _b[this.prefixCls + "-label-6"] = this._labelNumber === 6, _b[this.prefixCls + "-label-7"] = this._labelNumber === 7, _b); this.controlCls = (_c = {}, _c[this.prefixCls + "-control"] = true, _c); this.clearCls = (_d = {}, _d[this.prefixCls + "-clear-active"] = this._isClickingClear, _d); }; /** * @return {?} */ TextareaItem.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 {?} */ TextareaItem.prototype.inputChange = /** * @param {?} e * @return {?} */ function (e) { this._value = e; this.textRef.nativeElement.value = this._value; this.setCharacterLength(); this.onChange.emit(this._value); }; /** * @param {?} value * @return {?} */ TextareaItem.prototype.inputFocus = /** * @param {?} value * @return {?} */ function (value) { this._focus = true; this.setCls(); if (value !== undefined) { this.onFocus.emit(value); } }; /** * @param {?} value * @param {?} event * @return {?} */ TextareaItem.prototype.inputBlur = /** * @param {?} value * @param {?} event * @return {?} */ function (value, event) { var _this = this; setTimeout(function () { _this._focus = false; _this.setCls(); _this.onBlur.emit(value); _this._isClear = false; }, 100); }; /** * @return {?} */ TextareaItem.prototype.clearInput = /** * @return {?} */ function () { var _this = this; this._isClickingClear = true; this.setCls(); setTimeout(function () { _this._value = ''; _this.inputChange(''); _this.inputFocus(_this._value); _this._isClickingClear = false; _this.setCls(); }, 100); }; /** * @param {?} e * @return {?} */ TextareaItem.prototype.errorClick = /** * @param {?} e * @return {?} */ function (e) { if (this.onErrorClick) { this.onErrorClick.emit(e); } }; /** * @return {?} */ TextareaItem.prototype.reAlignHeight = /** * @return {?} */ function () { /** @type {?} */ var textareaDom = this.textRef.nativeElement; textareaDom.style.height = ''; textareaDom.style.height = textareaDom.scrollHeight + "px"; }; /** * @param {?=} text * @return {?} */ TextareaItem.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; }; /** * @return {?} */ TextareaItem.prototype.ngOnInit = /** * @return {?} */ function () { this.setCls(); this.setCharacterLength(); this.textRef.nativeElement.value = this._value; }; /** * @return {?} */ TextareaItem.prototype.ngAfterContentChecked = /** * @return {?} */ function () { if (this._autoHeight && this._focus) { this.reAlignHeight(); } }; TextareaItem.decorators = [ { type: Component, args: [{ selector: 'TextareaItem , nzm-textarea-item', template: "<div [ngClass]=\"wrapCls\">\n <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 #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 *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>/{{count}}\n </span>\n</div>\n", providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(function () { return TextareaItem; }), multi: true } ] }] } ]; /** @nocollapse */ TextareaItem.ctorParameters = function () { return []; }; TextareaItem.propDecorators = { textRef: [{ type: ViewChild, args: ['text',] }], 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 }] }; return TextareaItem; }()); export { TextareaItem }; if (false) { /** @type {?} */ TextareaItem.prototype.prefixCls; /** @type {?} */ TextareaItem.prototype.wrapCls; /** @type {?} */ TextareaItem.prototype.labelCls; /** @type {?} */ TextareaItem.prototype.controlCls; /** @type {?} */ TextareaItem.prototype.clearCls; /** @type {?} */ TextareaItem.prototype.hasCount; /** @type {?} */ TextareaItem.prototype.characterLength; /** @type {?} */ TextareaItem.prototype.isTitleString; /** @type {?} */ TextareaItem.prototype.maxLength; /** @type {?} */ TextareaItem.prototype._prefixListCls; /** @type {?} */ TextareaItem.prototype._value; /** @type {?} */ TextareaItem.prototype._defaultValue; /** @type {?} */ TextareaItem.prototype._placeholder; /** @type {?} */ TextareaItem.prototype._editable; /** @type {?} */ TextareaItem.prototype._disabled; /** @type {?} */ TextareaItem.prototype._clear; /** @type {?} */ TextareaItem.prototype._rows; /** @type {?} */ TextareaItem.prototype._count; /** @type {?} */ TextareaItem.prototype._autoHeight; /** @type {?} */ TextareaItem.prototype._error; /** @type {?} */ TextareaItem.prototype._labelNumber; /** @type {?} */ TextareaItem.prototype._name; /** @type {?} */ TextareaItem.prototype._title; /** @type {?} */ TextareaItem.prototype._focus; /** @type {?} */ TextareaItem.prototype._autoFocus; /** @type {?} */ TextareaItem.prototype._isClear; /** @type {?} */ TextareaItem.prototype._isClickingClear; /** @type {?} */ TextareaItem.prototype.textRef; /** @type {?} */ TextareaItem.prototype.onChange; /** @type {?} */ TextareaItem.prototype.onBlur; /** @type {?} */ TextareaItem.prototype.onFocus; /** @type {?} */ TextareaItem.prototype.onErrorClick; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGFyZWEtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS8iLCJzb3VyY2VzIjpbInRleHRhcmVhLWl0ZW0vdGV4dGFyZWEtaXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUdULFVBQVUsRUFDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7SUFnTGpEO3lCQWxLb0IsYUFBYTs2QkFPUixJQUFJO3lCQUNULFFBQVE7OEJBRUgsU0FBUzs2QkFFRixFQUFFOzRCQUNILEVBQUU7eUJBQ0osSUFBSTt5QkFDSixLQUFLO3NCQUNSLEtBQUs7cUJBQ1AsQ0FBQztzQkFHQyxLQUFLOzRCQUNBLENBQUM7cUJBQ1IsRUFBRTtzQkFFQSxLQUFLOzBCQUNELEtBQUs7d0JBQ1AsS0FBSztnQ0FDRyxLQUFLO3dCQStIWCxJQUFJLFlBQVksRUFBTztzQkFFekIsSUFBSSxZQUFZLEVBQU87dUJBRXRCLElBQUksWUFBWSxFQUFPOzRCQUVsQixJQUFJLFlBQVksRUFBTztLQUV6QztJQWxJaEIsc0JBQ0ksK0JBQUs7Ozs7UUFEVDtZQUVFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNwQjs7Ozs7UUFDRCxVQUFVLENBQVM7WUFDakIsSUFBSSxPQUFPLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDeEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7YUFDbEI7WUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNoRDs7O09BUEE7SUFRRCxz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LElBQUksQ0FBQyxNQUFNLENBQUM7S0FDaEQ7Ozs7SUFFRCw0Q0FBcUI7OztJQUFyQjtRQUNFLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ25DLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN0QjtLQUNGOztnQkE3UUYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxrQ0FBa0M7b0JBQzVDLGt0Q0FBNkM7b0JBQzdDLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLGNBQU0sT0FBQSxZQUFZLEVBQVosQ0FBWSxDQUFDOzRCQUMzQyxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtpQkFDRjs7Ozs7MEJBK0JFLFNBQVMsU0FBQyxNQUFNO3dCQUdoQixLQUFLOytCQVdMLEtBQUs7OEJBU0wsS0FBSzsyQkFPTCxLQUFLOzJCQU9MLEtBQUs7d0JBUUwsS0FBSzt1QkFPTCxLQUFLO3dCQVFMLEtBQUs7OEJBUUwsS0FBSzt3QkFLTCxLQUFLO2dDQVNMLEtBQUs7dUJBUUwsS0FBSzs2QkFLTCxLQUFLO3dCQUlMLEtBQUs7d0JBV0wsS0FBSzs0QkFPTCxLQUFLOzJCQU9MLE1BQU07eUJBRU4sTUFBTTswQkFFTixNQUFNOytCQUVOLE1BQU07O3VCQXhMVDs7U0F3QmEsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdDaGlsZCxcbiAgVGVtcGxhdGVSZWYsXG4gIEFmdGVyQ29udGVudENoZWNrZWQsXG4gIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnVGV4dGFyZWFJdGVtICwgbnptLXRleHRhcmVhLWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dGFyZWEtaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGV4dGFyZWFJdGVtKSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBUZXh0YXJlYUl0ZW0gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudENoZWNrZWQge1xuICBwcmVmaXhDbHM6IHN0cmluZyA9ICdhbS10ZXh0YXJlYSc7XG4gIHdyYXBDbHM6IG9iamVjdDtcbiAgbGFiZWxDbHM6IG9iamVjdDtcbiAgY29udHJvbENsczogb2JqZWN0O1xuICBjbGVhckNsczogb2JqZWN0O1xuICBoYXNDb3VudDogYm9vbGVhbjtcbiAgY2hhcmFjdGVyTGVuZ3RoOiBudW1iZXI7XG4gIGlzVGl0bGVTdHJpbmc6IGJvb2xlYW4gPSB0cnVlO1xuICBtYXhMZW5ndGg6IG51bWJlciA9IEluZmluaXR5O1xuXG4gIHByaXZhdGUgX3ByZWZpeExpc3RDbHMgPSAnYW0tbGlzdCc7XG4gIHByaXZhdGUgX3ZhbHVlOiBzdHJpbmc7XG4gIHByaXZhdGUgX2RlZmF1bHRWYWx1ZTogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX3BsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfZWRpdGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9jbGVhcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9yb3dzOiBudW1iZXIgPSAxO1xuICBwcml2YXRlIF9jb3VudDogbnVtYmVyO1xuICBwcml2YXRlIF9hdXRvSGVpZ2h0OiBib29sZWFuO1xuICBwcml2YXRlIF9lcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9sYWJlbE51bWJlcjogbnVtYmVyID0gNTtcbiAgcHJpdmF0ZSBfbmFtZTogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX3RpdGxlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIF9mb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9hdXRvRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXNDbGVhcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9pc0NsaWNraW5nQ2xlYXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCd0ZXh0JylcbiAgdGV4dFJlZjtcblxuICBASW5wdXQoKVxuICBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbiAgc2V0IHZhbHVlKHY6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgdiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gJyc7XG4gICAgfVxuICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICB0aGlzLnRleHRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBkZWZhdWx0VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZhbHVlO1xuICB9XG4gIHNldCBkZWZhdWx0VmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2RlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fZGVmYXVsdFZhbHVlO1xuICAgIHRoaXMudGV4dFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5fdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xuICB9XG4gIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcGxhY2Vob2xkZXIgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgZWRpdGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2VkaXRhYmxlO1xuICB9XG4gIHNldCBlZGl0YWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2VkaXRhYmxlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xzKCk7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGNsZWFyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jbGVhcjtcbiAgfVxuICBzZXQgY2xlYXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jbGVhciA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCByb3dzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd3M7XG4gIH1cbiAgc2V0IHJvd3ModmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3Jvd3MgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBlcnJvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZXJyb3I7XG4gIH1cbiAgc2V0IGVycm9yKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZXJyb3IgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBsYWJlbE51bWJlcih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGFiZWxOdW1iZXIgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBjb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jb3VudDtcbiAgfVxuICBzZXQgY291bnQodmFsdWUpIHtcbiAgICB0aGlzLl9jb3VudCA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xzKCk7XG4gICAgdGhpcy5zZXRDaGFyYWN0ZXJMZW5ndGgoKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgcHJlZml4TGlzdENscygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wcmVmaXhMaXN0Q2xzO1xuICB9XG4gIHNldCBwcmVmaXhMaXN0Q2xzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wcmVmaXhMaXN0Q2xzID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbHMoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgbmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbmFtZSA9IHZhbHVlO1xuICAgIHRoaXMudGV4dFJlZi5uYXRpdmVFbGVtZW50Lm5hbWUgPSB0aGlzLl9uYW1lO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBhdXRvSGVpZ2h0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fYXV0b0hlaWdodCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCB0aXRsZSgpOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gIH1cbiAgc2V0IHRpdGxlKHZhbHVlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgdGhpcy5fdGl0bGUgPSB2YWx1ZTtcbiAgICB0aGlzLmlzVGl0bGVTdHJpbmcgPSB0cnVlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLmlzVGl0bGVTdHJpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGZvY3VzKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLmZvY3VzKSB7XG4gICAgICB0aGlzLnRleHRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgdGhpcy5pbnB1dEZvY3VzKCcnKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGF1dG9Gb2N1cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYXV0b0ZvY3VzO1xuICB9XG4gIHNldCBhdXRvRm9jdXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9hdXRvRm9jdXMgPSB2YWx1ZTtcbiAgfVxuICBAT3V0cHV0KClcbiAgb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKVxuICBvbkJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKVxuICBvbkZvY3VzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25FcnJvckNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBzZXRDbHMoKSB7XG4gICAgdGhpcy5oYXNDb3VudCA9IHRoaXMuX2NvdW50ID4gMCAmJiB0aGlzLl9yb3dzID4gMTtcbiAgICB0aGlzLndyYXBDbHMgPSB7XG4gICAgICBbYCR7dGhpcy5fcHJlZml4TGlzdENsc30taXRlbWBdOiB0cnVlLFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1pdGVtYF06IHRydWUsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWRpc2FibGVkYF06IHRoaXMuX2Rpc2FibGVkLFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1lcnJvcmBdOiB0aGlzLl9lcnJvcixcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tZm9jdXNgXTogdGhpcy5fZm9jdXMsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWl0ZW0tc2luZ2xlLWxpbmVgXTogdGhpcy5fcm93cyA9PT0gMSAmJiAhdGhpcy5fYXV0b0hlaWdodCxcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30taGFzLWNvdW50YF06IHRoaXMuaGFzQ291bnRcbiAgICB9O1xuICAgIHRoaXMubGFiZWxDbHMgPSB7XG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsYF06IHRydWUsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTJgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDIsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTNgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDMsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTRgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDQsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTVgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDUsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTZgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDYsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTdgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDdcbiAgICB9O1xuICAgIHRoaXMuY29udHJvbENscyA9IHsgW2Ake3RoaXMucHJlZml4Q2xzfS1jb250cm9sYF06IHRydWUgfTtcbiAgICB0aGlzLmNsZWFyQ2xzID0ge1xuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1jbGVhci1hY3RpdmVgXTogdGhpcy5faXNDbGlja2luZ0NsZWFyXG4gICAgfTtcbiAgfVxuICBzZXRDaGFyYWN0ZXJMZW5ndGgoKSB7XG4gICAgdGhpcy5jaGFyYWN0ZXJMZW5ndGggPSB0aGlzLmNvdW50U3ltYm9scyh0aGlzLl92YWx1ZSk7XG4gICAgaWYgKHRoaXMuX2NvdW50ID4gMCkge1xuICAgICAgdGhpcy5tYXhMZW5ndGggPSB0aGlzLl9jb3VudCAtIHRoaXMuY2hhcmFjdGVyTGVuZ3RoICsgKHRoaXMuX3ZhbHVlID8gdGhpcy5fdmFsdWUubGVuZ3RoIDogMCk7XG4gICAgfVxuICB9XG5cbiAgaW5wdXRDaGFuZ2UoZSkge1xuICAgIHRoaXMuX3ZhbHVlID0gZTtcbiAgICB0aGlzLnRleHRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgIHRoaXMuc2V0Q2hhcmFjdGVyTGVuZ3RoKCk7XG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgfVxuXG4gIGlucHV0Rm9jdXModmFsdWUpIHtcbiAgICB0aGlzLl9mb2N1cyA9IHRydWU7XG4gICAgdGhpcy5zZXRDbHMoKTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vbkZvY3VzLmVtaXQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGlucHV0Qmx1cih2YWx1ZSwgZXZlbnQpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2ZvY3VzID0gZmFsc2U7XG4gICAgICB0aGlzLnNldENscygpO1xuICAgICAgdGhpcy5vbkJsdXIuZW1pdCh2YWx1ZSk7XG4gICAgICB0aGlzLl9pc0NsZWFyID0gZmFsc2U7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGNsZWFySW5wdXQoKSB7XG4gICAgdGhpcy5faXNDbGlja2luZ0NsZWFyID0gdHJ1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fdmFsdWUgPSAnJztcbiAgICAgIHRoaXMuaW5wdXRDaGFuZ2UoJycpO1xuICAgICAgdGhpcy5pbnB1dEZvY3VzKHRoaXMuX3ZhbHVlKTtcbiAgICAgIHRoaXMuX2lzQ2xpY2tpbmdDbGVhciA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXRDbHMoKTtcbiAgICB9LCAxMDApO1xuICB9XG4gIGVycm9yQ2xpY2soZSkge1xuICAgIGlmICh0aGlzLm9uRXJyb3JDbGljaykge1xuICAgICAgdGhpcy5vbkVycm9yQ2xpY2suZW1pdChlKTtcbiAgICB9XG4gIH1cbiAgcmVBbGlnbkhlaWdodCgpIHtcbiAgICBjb25zdCB0ZXh0YXJlYURvbSA9IHRoaXMudGV4dFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIHRleHRhcmVhRG9tLnN0eWxlLmhlaWdodCA9ICcnO1xuICAgIHRleHRhcmVhRG9tLnN0eWxlLmhlaWdodCA9IGAke3RleHRhcmVhRG9tLnNjcm9sbEhlaWdodH1weGA7XG4gIH1cblxuICBjb3VudFN5bWJvbHModGV4dCA9ICcnKSB7XG4gICAgY29uc3QgcmVnZXhBc3RyYWxTeW1ib2xzID0gL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl18XFxuL2c7XG4gICAgcmV0dXJuIHRleHQucmVwbGFjZShyZWdleEFzdHJhbFN5bWJvbHMsICdfJykubGVuZ3RoO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXRDbHMoKTtcbiAgICB0aGlzLnNldENoYXJhY3Rlckxlbmd0aCgpO1xuICAgIHRoaXMudGV4dFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XG4gICAgaWYgKHRoaXMuX2F1dG9IZWlnaHQgJiYgdGhpcy5fZm9jdXMpIHtcbiAgICAgIHRoaXMucmVBbGlnbkhlaWdodCgpO1xuICAgIH1cbiAgfVxufVxuIl19