UNPKG

ng-zorro-antd-mobile

Version:

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

573 lines (572 loc) 39.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Component, Input, Output, EventEmitter, ViewChild, HostBinding, Renderer2, ElementRef, forwardRef } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; export class InputItem { /** * @param {?} element * @param {?} render */ constructor(element, render) { this.element = element; this.render = render; this.prefixCls = 'am-input'; this.setFocus = {}; this.pattern = ''; this.autoFocus = false; this.inputType = 'text'; this._type = 'text'; this._defaultValue = ''; this._placeholder = ''; this._editable = true; this._disabled = false; this._clear = false; this._error = false; this._extra = ''; this._labelNumber = 5; this._updatePlaceholder = false; this._prefixListCls = 'am-list'; this._moneyKeyboardAlign = 'right'; this._focus = false; this._isClear = false; this.onChange = new EventEmitter(); this.onBlur = new EventEmitter(); this.onFocus = new EventEmitter(); this.onErrorClick = new EventEmitter(); this.onExtraClick = new EventEmitter(); this.clsItem = true; this.clsDisabled = this._disabled; this.clsError = this._error; this.clsFocus = this._focus; this.clsAndroid = this._focus; this._onChange = (_) => { }; this._el = element.nativeElement; } /** * @return {?} */ get type() { return this._type; } /** * @param {?} value * @return {?} */ set type(value) { if (value && value.length > 0) { this.inputType = value; if (value === 'bankCard' || value === 'phone') { this._type = 'tel'; } else if (value === 'password') { this._type = 'password'; } else if (value === 'digit') { this._type = 'number'; } else if (value !== 'text' && value !== 'number') { this._type = value; } if (value === 'number') { this.pattern = '[0-9]*'; } } } /** * @return {?} */ get value() { return this._value; } /** * @param {?} v * @return {?} */ set value(v) { if (typeof v === undefined || v === null) { this._value = ''; } this._value = v; } /** * @return {?} */ get defaultValue() { return this._defaultValue; } /** * @param {?} value * @return {?} */ set defaultValue(value) { this._defaultValue = value; this._value = this._defaultValue; } /** * @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.clsDisabled = value; } /** * @return {?} */ get clear() { return this._clear; } /** * @param {?} value * @return {?} */ set clear(value) { this._clear = value; } /** * @return {?} */ get maxLength() { return this._maxLength; } /** * @param {?} value * @return {?} */ set maxLength(value) { this._maxLength = value; } /** * @return {?} */ get error() { return this._error; } /** * @param {?} value * @return {?} */ set error(value) { this._error = value; this.clsError = value; } /** * @return {?} */ get extra() { return this._extra; } /** * @param {?} value * @return {?} */ set extra(value) { this._extra = value; } /** * @param {?} value * @return {?} */ set labelNumber(value) { this._labelNumber = value; this.setCls(); } /** * @param {?} value * @return {?} */ set updatePlaceholder(value) { this._updatePlaceholder = value; } /** * @return {?} */ get prefixListCls() { return this._prefixListCls; } /** * @param {?} value * @return {?} */ set prefixListCls(value) { this._prefixListCls = value; this.render.addClass(this._el, value + '-item'); this.render.addClass(this._el, value + '-item-middle'); } /** * @return {?} */ get name() { return this._name; } /** * @param {?} value * @return {?} */ set name(value) { this._name = value; } /** * @return {?} */ get moneyKeyboardAlign() { return this._moneyKeyboardAlign; } /** * @param {?} value * @return {?} */ set moneyKeyboardAlign(value) { this._moneyKeyboardAlign = value; } /** * @param {?} value * @return {?} */ set locale(value) { this._locale = value; } /** * @param {?} value * @return {?} */ set focus(value) { if (value && value.focus) { this.autoFocus = value.focus; if (this._type === 'money') { this.setFocus = value; } else if (this.inputElementRef) { this._focus = true; this.inputElementRef.nativeElement.focus(); this.inputFocus(''); } } } /** * @return {?} */ setCls() { if (this.lableRef.nativeElement.children.length > 0 || (this.lableRef.nativeElement && this.lableRef.nativeElement.innerText !== '')) { 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 }; } /** * @param {?} e * @return {?} */ inputChange(e) { /** @type {?} */ let value = e; switch (this.inputType) { case 'text': break; case 'bankCard': value = value.replace(/\D/g, '').replace(/(....)(?=.)/g, '$1 '); break; case 'phone': value = value.replace(/\D/g, '').substring(0, 11); /** @type {?} */ const valueLen = value.length; if (valueLen > 3 && valueLen < 8) { value = `${value.substr(0, 3)} ${value.substr(3)}`; } else if (valueLen >= 8) { value = `${value.substr(0, 3)} ${value.substr(3, 4)} ${value.substr(7)}`; } break; case 'number': value = value.replace(/\D/g, ''); break; case 'password': break; default: this._value = value; break; } this._value = value; if (this._type !== 'money') { this.inputElementRef.nativeElement.value = this._value; } this._onChange(this._value); this.onChange.emit(this._value); } /** * @param {?} value * @return {?} */ inputFocus(value) { setTimeout(() => { this._focus = true; this.clsFocus = true; this.clsAndroid = true; }, 100); this.onFocus.emit(value); } /** * @param {?} value * @param {?} event * @return {?} */ inputBlur(value, event) { setTimeout(() => { if (!this._isClear) { this._focus = false; this.clsFocus = false; this.clsAndroid = false; this.onBlur.emit(value); } this._isClear = false; }, 100); } /** * @return {?} */ clearInput() { if (this._type !== 'password' && this._updatePlaceholder) { this._placeholder = this._value; } this._value = ''; this.onChange.emit(''); this._isClear = true; if (this._type !== 'money') { this.inputElementRef.nativeElement.value = this._value; } this.inputFocus(this._value); } /** * @param {?} e * @return {?} */ errorClick(e) { if (this.onErrorClick) { this.onErrorClick.emit(e); } } /** * @param {?} e * @return {?} */ extraClick(e) { if (this.onExtraClick) { this.onExtraClick.emit(e); } } /** * @param {?} value * @return {?} */ writeValue(value) { if (value) { this._value = value; } } /** * @param {?} fn * @return {?} */ registerOnChange(fn) { this._onChange = fn; } /** * @param {?} fn * @return {?} */ registerOnTouched(fn) { } /** * @return {?} */ ngOnChanges() { if (this.inputElementRef && this._type !== 'money' && this._value !== undefined) { this.inputElementRef.nativeElement.value = this._value; } } /** * @return {?} */ ngOnInit() { this.setCls(); this.render.addClass(this._el, this._prefixListCls + '-item'); this.render.addClass(this._el, this._prefixListCls + '-item-middle'); } } InputItem.decorators = [ { type: Component, args: [{ selector: 'InputItem, nzm-input-item', template: "<div class=\"{{prefixListCls}}-line\">\n <div #lableContent [ngClass]=\"labelCls\">\n <ng-content></ng-content>\n </div>\n <div [ngClass]=\"controlCls\">\n <CustomInput *ngIf=\"type==='money'\"\n [value]=\"value\"\n [defaultValue]=\"defaultValue\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [editable]=\"editable\"\n [moneyKeyboardAlign]=\"moneyKeyboardAlign\"\n [setFocus]=\"setFocus\"\n [maxLength]=\"maxLength\"\n (onChange)=\"inputChange($event)\"\n (onBlur)=\"inputBlur(value)\"\n (onFocus)=\"inputFocus(value)\">\n </CustomInput>\n <div *ngIf=\"type!=='money'\">\n <input #inputElement\n [type]=\"type\"\n [name]=\"name\"\n [(ngModel)]=\"value\"\n [defaultValue]=\"defaultValue\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readOnly]=\"!editable\"\n [autofocus]=\"autoFocus\"\n [maxlength]=\"maxLength\"\n [pattern]=\"pattern\"\n (ngModelChange)=\"inputChange($event)\"\n (blur)=\"inputBlur(value , $event)\"\n (focus)=\"inputFocus(value)\"\n style=\"outline:none\" />\n </div>\n </div>\n <div *ngIf=\"clear && editable && !disabled && (value && value.length >0 )\"\n class=\"{{prefixCls}}-clear\"\n (click)=\"clearInput()\"\n ></div>\n <div *ngIf=\"error\"\n class=\"{{prefixCls}}-error-extra\"\n (click)=\"errorClick($event)\"\n ></div>\n <div *ngIf=\"extra!==''\"\n class=\"{{prefixCls}}-extra\"\n (click)=\"extraClick($event)\"\n >{{extra}}</div>\n</div>", providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => InputItem), multi: true } ] }] } ]; /** @nocollapse */ InputItem.ctorParameters = () => [ { type: ElementRef }, { type: Renderer2 } ]; InputItem.propDecorators = { lableRef: [{ type: ViewChild, args: ['lableContent',] }], inputElementRef: [{ type: ViewChild, args: ['inputElement',] }], type: [{ type: Input }], value: [{ type: Input }], defaultValue: [{ type: Input }], placeholder: [{ type: Input }], editable: [{ type: Input }], disabled: [{ type: Input }], clear: [{ type: Input }], maxLength: [{ type: Input }], error: [{ type: Input }], extra: [{ type: Input }], labelNumber: [{ type: Input }], updatePlaceholder: [{ type: Input }], prefixListCls: [{ type: Input }], name: [{ type: Input }], moneyKeyboardAlign: [{ type: Input }], locale: [{ type: Input }], focus: [{ type: Input }], onChange: [{ type: Output }], onBlur: [{ type: Output }], onFocus: [{ type: Output }], onErrorClick: [{ type: Output }], onExtraClick: [{ type: Output }], clsItem: [{ type: HostBinding, args: ['class.am-input-item',] }], clsDisabled: [{ type: HostBinding, args: ['class.am-input-disabled',] }], clsError: [{ type: HostBinding, args: ['class.am-input-error',] }], clsFocus: [{ type: HostBinding, args: ['class.am-input-focus',] }], clsAndroid: [{ type: HostBinding, args: ['class.am-input-android,',] }] }; if (false) { /** @type {?} */ InputItem.prototype.prefixCls; /** @type {?} */ InputItem.prototype.wrapCls; /** @type {?} */ InputItem.prototype.labelCls; /** @type {?} */ InputItem.prototype.controlCls; /** @type {?} */ InputItem.prototype.setFocus; /** @type {?} */ InputItem.prototype.pattern; /** @type {?} */ InputItem.prototype.autoFocus; /** @type {?} */ InputItem.prototype.inputType; /** @type {?} */ InputItem.prototype._el; /** @type {?} */ InputItem.prototype._type; /** @type {?} */ InputItem.prototype._value; /** @type {?} */ InputItem.prototype._defaultValue; /** @type {?} */ InputItem.prototype._placeholder; /** @type {?} */ InputItem.prototype._editable; /** @type {?} */ InputItem.prototype._disabled; /** @type {?} */ InputItem.prototype._clear; /** @type {?} */ InputItem.prototype._maxLength; /** @type {?} */ InputItem.prototype._error; /** @type {?} */ InputItem.prototype._extra; /** @type {?} */ InputItem.prototype._labelNumber; /** @type {?} */ InputItem.prototype._updatePlaceholder; /** @type {?} */ InputItem.prototype._prefixListCls; /** @type {?} */ InputItem.prototype._name; /** @type {?} */ InputItem.prototype._moneyKeyboardAlign; /** @type {?} */ InputItem.prototype._locale; /** @type {?} */ InputItem.prototype._focus; /** @type {?} */ InputItem.prototype._isClear; /** @type {?} */ InputItem.prototype.lableRef; /** @type {?} */ InputItem.prototype.inputElementRef; /** @type {?} */ InputItem.prototype.onChange; /** @type {?} */ InputItem.prototype.onBlur; /** @type {?} */ InputItem.prototype.onFocus; /** @type {?} */ InputItem.prototype.onErrorClick; /** @type {?} */ InputItem.prototype.onExtraClick; /** @type {?} */ InputItem.prototype.clsItem; /** @type {?} */ InputItem.prototype.clsDisabled; /** @type {?} */ InputItem.prototype.clsError; /** @type {?} */ InputItem.prototype.clsFocus; /** @type {?} */ InputItem.prototype.clsAndroid; /** @type {?} */ InputItem.prototype._onChange; /** @type {?} */ InputItem.prototype.element; /** @type {?} */ InputItem.prototype.render; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS8iLCJzb3VyY2VzIjpbImlucHV0LWl0ZW0vaW5wdXQtaXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFhekUsTUFBTTs7Ozs7SUF1TUosWUFBb0IsT0FBbUIsRUFBVSxNQUFpQjtRQUE5QyxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBVzt5QkF0TTlDLFVBQVU7d0JBSVgsRUFBRTt1QkFDSCxFQUFFO3lCQUNDLEtBQUs7eUJBQ04sTUFBTTtxQkFHRixNQUFNOzZCQUVFLEVBQUU7NEJBQ0gsRUFBRTt5QkFDSixJQUFJO3lCQUNKLEtBQUs7c0JBQ1IsS0FBSztzQkFFTCxLQUFLO3NCQUNOLEVBQUU7NEJBQ0ksQ0FBQztrQ0FDTSxLQUFLOzhCQUNWLFNBQVM7bUNBRUosT0FBTztzQkFFbkIsS0FBSzt3QkFDSCxLQUFLO3dCQXNKSCxJQUFJLFlBQVksRUFBTztzQkFFekIsSUFBSSxZQUFZLEVBQU87dUJBRXRCLElBQUksWUFBWSxFQUFPOzRCQUVsQixJQUFJLFlBQVksRUFBTzs0QkFFdkIsSUFBSSxZQUFZLEVBQU87dUJBR3RDLElBQUk7MkJBRUEsSUFBSSxDQUFDLFNBQVM7d0JBRWpCLElBQUksQ0FBQyxNQUFNO3dCQUVYLElBQUksQ0FBQyxNQUFNOzBCQUVULElBQUksQ0FBQyxNQUFNO3lCQU1yQixDQUFDLENBQU0sRUFBRSxFQUFFLElBQUc7UUFIeEIsSUFBSSxDQUFDLEdBQUcsR0FB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LEtBQUs7b0JBcUJMLEtBQUs7MkJBVUwsS0FBSzswQkFRTCxLQUFLO3VCQVFMLEtBQUs7dUJBUUwsS0FBSztvQkFRTCxLQUFLO3dCQU9MLEtBQUs7b0JBT0wsS0FBSztvQkFRTCxLQUFLOzBCQU9MLEtBQUs7Z0NBS0wsS0FBSzs0QkFJTCxLQUFLO21CQVNMLEtBQUs7aUNBT0wsS0FBSztxQkFPTCxLQUFLO29CQUlMLEtBQUs7dUJBY0wsTUFBTTtxQkFFTixNQUFNO3NCQUVOLE1BQU07MkJBRU4sTUFBTTsyQkFFTixNQUFNO3NCQUdOLFdBQVcsU0FBQyxxQkFBcUI7MEJBRWpDLFdBQVcsU0FBQyx5QkFBeUI7dUJBRXJDLFdBQVcsU0FBQyxzQkFBc0I7dUJBRWxDLFdBQVcsU0FBQyxzQkFBc0I7eUJBRWxDLFdBQVcsU0FBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBWaWV3Q2hpbGQsXG4gIE9uQ2hhbmdlcyxcbiAgSG9zdEJpbmRpbmcsXG4gIFJlbmRlcmVyMixcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnSW5wdXRJdGVtLCBuem0taW5wdXQtaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJbnB1dEl0ZW0pLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIElucHV0SXRlbSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHByZWZpeENsczogc3RyaW5nID0gJ2FtLWlucHV0JztcbiAgd3JhcENsczogb2JqZWN0O1xuICBsYWJlbENsczogb2JqZWN0O1xuICBjb250cm9sQ2xzOiBvYmplY3Q7XG4gIHNldEZvY3VzOiBvYmplY3QgPSB7fTtcbiAgcGF0dGVybjogc3RyaW5nID0gJyc7XG4gIGF1dG9Gb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuICBpbnB1dFR5cGU6IHN0cmluZyA9ICd0ZXh0JztcblxuICBwcml2YXRlIF9lbDogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3R5cGU6IHN0cmluZyA9ICd0ZXh0JztcbiAgcHJpdmF0ZSBfdmFsdWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfZGVmYXVsdFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9lZGl0YWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2NsZWFyOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX21heExlbmd0aDogbnVtYmVyO1xuICBwcml2YXRlIF9lcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9leHRyYTogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2xhYmVsTnVtYmVyOiBudW1iZXIgPSA1O1xuICBwcml2YXRlIF91cGRhdGVQbGFjZWhvbGRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9wcmVmaXhMaXN0Q2xzOiBzdHJpbmcgPSAnYW0tbGlzdCc7XG4gIHByaXZhdGUgX25hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfbW9uZXlLZXlib2FyZEFsaWduOiBzdHJpbmcgPSAncmlnaHQnO1xuICBwcml2YXRlIF9sb2NhbGU7XG4gIHByaXZhdGUgX2ZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2lzQ2xlYXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCdsYWJsZUNvbnRlbnQnKVxuICBsYWJsZVJlZjtcbiAgQFZpZXdDaGlsZCgnaW5wdXRFbGVtZW50JylcbiAgaW5wdXRFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpXG4gIGdldCB0eXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gIH1cbiAgc2V0IHR5cGUodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmlucHV0VHlwZSA9IHZhbHVlO1xuICAgICAgaWYgKHZhbHVlID09PSAnYmFua0NhcmQnIHx8IHZhbHVlID09PSAncGhvbmUnKSB7XG4gICAgICAgIHRoaXMuX3R5cGUgPSAndGVsJztcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdwYXNzd29yZCcpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9ICdwYXNzd29yZCc7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnZGlnaXQnKSB7XG4gICAgICAgIHRoaXMuX3R5cGUgPSAnbnVtYmVyJztcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgIT09ICd0ZXh0JyAmJiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICB0aGlzLnBhdHRlcm4gPSAnWzAtOV0qJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIHNldCB2YWx1ZSh2OiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBudWxsKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9ICcnO1xuICAgIH1cbiAgICB0aGlzLl92YWx1ZSA9IHY7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGRlZmF1bHRWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmFsdWU7XG4gIH1cbiAgc2V0IGRlZmF1bHRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZGVmYXVsdFZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5fdmFsdWUgPSB0aGlzLl9kZWZhdWx0VmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xuICB9XG4gIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcGxhY2Vob2xkZXIgPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCBlZGl0YWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZWRpdGFibGU7XG4gIH1cbiAgc2V0IGVkaXRhYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZWRpdGFibGUgPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICB0aGlzLmNsc0Rpc2FibGVkID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGNsZWFyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jbGVhcjtcbiAgfVxuICBzZXQgY2xlYXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jbGVhciA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBtYXhMZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4TGVuZ3RoO1xuICB9XG4gIHNldCBtYXhMZW5ndGgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX21heExlbmd0aCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBlcnJvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZXJyb3I7XG4gIH1cbiAgc2V0IGVycm9yKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZXJyb3IgPSB2YWx1ZTtcbiAgICB0aGlzLmNsc0Vycm9yID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGV4dHJhKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2V4dHJhO1xuICB9XG4gIHNldCBleHRyYSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZXh0cmEgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgbGFiZWxOdW1iZXIodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2xhYmVsTnVtYmVyID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbHMoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgdXBkYXRlUGxhY2Vob2xkZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl91cGRhdGVQbGFjZWhvbGRlciA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBwcmVmaXhMaXN0Q2xzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3ByZWZpeExpc3RDbHM7XG4gIH1cbiAgc2V0IHByZWZpeExpc3RDbHModmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3ByZWZpeExpc3RDbHMgPSB2YWx1ZTtcbiAgICB0aGlzLnJlbmRlci5hZGRDbGFzcyh0aGlzLl9lbCwgdmFsdWUgKyAnLWl0ZW0nKTtcbiAgICB0aGlzLnJlbmRlci5hZGRDbGFzcyh0aGlzLl9lbCwgdmFsdWUgKyAnLWl0ZW0tbWlkZGxlJyk7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuICBzZXQgbmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbmFtZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBtb25leUtleWJvYXJkQWxpZ24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbW9uZXlLZXlib2FyZEFsaWduO1xuICB9XG4gIHNldCBtb25leUtleWJvYXJkQWxpZ24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX21vbmV5S2V5Ym9hcmRBbGlnbiA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBsb2NhbGUodmFsdWUpIHtcbiAgICB0aGlzLl9sb2NhbGUgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgZm9jdXModmFsdWUpIHtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUuZm9jdXMpIHtcbiAgICAgIHRoaXMuYXV0b0ZvY3VzID0gdmFsdWUuZm9jdXM7XG4gICAgICBpZiAodGhpcy5fdHlwZSA9PT0gJ21vbmV5Jykge1xuICAgICAgICB0aGlzLnNldEZvY3VzID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaW5wdXRFbGVtZW50UmVmKSB7XG4gICAgICAgIHRoaXMuX2ZvY3VzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLmlucHV0Rm9jdXMoJycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBPdXRwdXQoKVxuICBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uQmx1cjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uRm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKVxuICBvbkVycm9yQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKVxuICBvbkV4dHJhQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1pbnB1dC1pdGVtJylcbiAgY2xzSXRlbTogYm9vbGVhbiA9IHRydWU7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0taW5wdXQtZGlzYWJsZWQnKVxuICBjbHNEaXNhYmxlZDogYm9vbGVhbiA9IHRoaXMuX2Rpc2FibGVkO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWlucHV0LWVycm9yJylcbiAgY2xzRXJyb3I6IGJvb2xlYW4gPSB0aGlzLl9lcnJvcjtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1pbnB1dC1mb2N1cycpXG4gIGNsc0ZvY3VzOiBib29sZWFuID0gdGhpcy5fZm9jdXM7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0taW5wdXQtYW5kcm9pZCwnKVxuICBjbHNBbmRyb2lkOiBib29sZWFuID0gdGhpcy5fZm9jdXM7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLCBwcml2YXRlIHJlbmRlcjogUmVuZGVyZXIyKSB7XG4gICAgdGhpcy5fZWwgPSBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBfb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcblxuICBzZXRDbHMoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5sYWJsZVJlZi5uYXRpdmVFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA+IDAgfHxcbiAgICAgICh0aGlzLmxhYmxlUmVmLm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy5sYWJsZVJlZi5uYXRpdmVFbGVtZW50LmlubmVyVGV4dCAhPT0gJycpXG4gICAgKSB7XG4gICAgICB0aGlzLmxhYmVsQ2xzID0ge1xuICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsYF06IHRydWUsXG4gICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbGFiZWwtMmBdOiB0aGlzLl9sYWJlbE51bWJlciA9PT0gMixcbiAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC0zYF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSAzLFxuICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTRgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDQsXG4gICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbGFiZWwtNWBdOiB0aGlzLl9sYWJlbE51bWJlciA9PT0gNSxcbiAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC02YF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSA2LFxuICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTdgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDdcbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMuY29udHJvbENscyA9IHsgW2Ake3RoaXMucHJlZml4Q2xzfS1jb250cm9sYF06IHRydWUgfTtcbiAgfVxuXG4gIGlucHV0Q2hhbmdlKGUpIHtcbiAgICBsZXQgdmFsdWUgPSBlO1xuICAgIHN3aXRjaCAodGhpcy5pbnB1dFR5cGUpIHtcbiAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2JhbmtDYXJkJzpcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpLnJlcGxhY2UoLyguLi4uKSg/PS4pL2csICckMSAnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwaG9uZSc6XG4gICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXFxEL2csICcnKS5zdWJzdHJpbmcoMCwgMTEpO1xuICAgICAgICBjb25zdCB2YWx1ZUxlbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgaWYgKHZhbHVlTGVuID4gMyAmJiB2YWx1ZUxlbiA8IDgpIHtcbiAgICAgICAgICB2YWx1ZSA9IGAke3ZhbHVlLnN1YnN0cigwLCAzKX0gJHt2YWx1ZS5zdWJzdHIoMyl9YDtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZUxlbiA+PSA4KSB7XG4gICAgICAgICAgdmFsdWUgPSBgJHt2YWx1ZS5zdWJzdHIoMCwgMyl9ICR7dmFsdWUuc3Vic3RyKDMsIDQpfSAke3ZhbHVlLnN1YnN0cig3KX1gO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Bhc3N3b3JkJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcblxuICAgIGlmICh0aGlzLl90eXBlICE9PSAnbW9uZXknKSB7XG4gICAgICB0aGlzLmlucHV0RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5fdmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5fb25DaGFuZ2UodGhpcy5fdmFsdWUpO1xuICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLl92YWx1ZSk7XG4gIH1cblxuICBpbnB1dEZvY3VzKHZhbHVlKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9mb2N1cyA9IHRydWU7XG4gICAgICB0aGlzLmNsc0ZvY3VzID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2xzQW5kcm9pZCA9IHRydWU7XG4gICAgfSwgMTAwKTtcbiAgICB0aGlzLm9uRm9jdXMuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBpbnB1dEJsdXIodmFsdWUsIGV2ZW50KSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2lzQ2xlYXIpIHtcbiAgICAgICAgdGhpcy5fZm9jdXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jbHNGb2N1cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNsc0FuZHJvaWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vbkJsdXIuZW1pdCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLl9pc0NsZWFyID0gZmFsc2U7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGNsZWFySW5wdXQoKSB7XG4gICAgaWYgKHRoaXMuX3R5cGUgIT09ICdwYXNzd29yZCcgJiYgdGhpcy5fdXBkYXRlUGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIHRoaXMuX3ZhbHVlID0gJyc7XG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KCcnKTtcbiAgICB0aGlzLl9pc0NsZWFyID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5fdHlwZSAhPT0gJ21vbmV5Jykge1xuICAgICAgdGhpcy5pbnB1dEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgICB0aGlzLmlucHV0Rm9jdXModGhpcy5fdmFsdWUpO1xuICB9XG5cbiAgZXJyb3JDbGljayhlKSB7XG4gICAgaWYgKHRoaXMub25FcnJvckNsaWNrKSB7XG4gICAgICB0aGlzLm9uRXJyb3JDbGljay5lbWl0KGUpO1xuICAgIH1cbiAgfVxuXG4gIGV4dHJhQ2xpY2soZSkge1xuICAgIGlmICh0aGlzLm9uRXh0cmFDbGljaykge1xuICAgICAgdGhpcy5vbkV4dHJhQ2xpY2suZW1pdChlKTtcbiAgICB9XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKF86IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7fVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIGlmICh0aGlzLmlucHV0RWxlbWVudFJlZiAmJiB0aGlzLl90eXBlICE9PSAnbW9uZXknICYmIHRoaXMuX3ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNldENscygpO1xuICAgIHRoaXMucmVuZGVyLmFkZENsYXNzKHRoaXMuX2VsLCB0aGlzLl9wcmVmaXhMaXN0Q2xzICsgJy1pdGVtJyk7XG4gICAgdGhpcy5yZW5kZXIuYWRkQ2xhc3ModGhpcy5fZWwsIHRoaXMuX3ByZWZpeExpc3RDbHMgKyAnLWl0ZW0tbWlkZGxlJyk7XG4gIH1cbn1cbiJdfQ==