ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
864 lines • 53.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Input, Output, EventEmitter, ViewChild, HostBinding, Renderer2, ElementRef, forwardRef, TemplateRef } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { isTemplateRef } from '../core/util/check';
var InputItemComponent = /** @class */ (function () {
function InputItemComponent(element, render) {
this.element = element;
this.render = render;
this.prefixCls = 'am-input';
this.setFocus = {};
this.pattern = '';
this.autoFocus = false;
this.inputType = 'text';
this.ngTemplate = false;
this.isTemplateRef = isTemplateRef;
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._content = '';
this._inputLock = 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 = (/**
* @param {?} _
* @return {?}
*/
function (_) { });
this._el = element.nativeElement;
}
Object.defineProperty(InputItemComponent.prototype, "type", {
get: /**
* @return {?}
*/
function () {
return this._type;
},
set: /**
* @param {?} value
* @return {?}
*/
function (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]*';
}
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItemComponent.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;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItemComponent.prototype, "defaultValue", {
get: /**
* @return {?}
*/
function () {
return this._defaultValue;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._defaultValue = value;
if (!this._value) {
this._value = this._defaultValue;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItemComponent.prototype, "placeholder", {
get: /**
* @return {?}
*/
function () {
return this._placeholder;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._placeholder = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItemComponent.prototype, "editable", {
get: /**
* @return {?}
*/
function () {
return this._editable;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._editable = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItemComponent.prototype, "disabled", {
get: /**
* @return {?}
*/
function () {
return this._disabled;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._disabled = value;
this.clsDisabled = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItemComponent.prototype, "clear", {
get: /**
* @return {?}
*/
function () {
return this._clear;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._clear = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItemComponent.prototype, "maxLength", {
get: /**
* @return {?}
*/
function () {
return this._maxLength;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._maxLength = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItemComponent.prototype, "error", {
get: /**
* @return {?}
*/
function () {
return this._error;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._error = value;
this.clsError = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItemComponent.prototype, "extra", {
get: /**
* @return {?}
*/
function () {
return this._extra;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
if (value instanceof TemplateRef) {
this.ngTemplate = true;
}
else {
this.ngTemplate = false;
}
this._extra = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItemComponent.prototype, "labelNumber", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._labelNumber = value;
this.setCls();
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItemComponent.prototype, "updatePlaceholder", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._updatePlaceholder = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItemComponent.prototype, "prefixListCls", {
get: /**
* @return {?}
*/
function () {
return this._prefixListCls;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._prefixListCls = value;
this.render.addClass(this._el, value + '-item');
this.render.addClass(this._el, value + '-item-middle');
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItemComponent.prototype, "name", {
get: /**
* @return {?}
*/
function () {
return this._name;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._name = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItemComponent.prototype, "moneyKeyboardAlign", {
get: /**
* @return {?}
*/
function () {
return this._moneyKeyboardAlign;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._moneyKeyboardAlign = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItemComponent.prototype, "locale", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._locale = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItemComponent.prototype, "fontColor", {
get: /**
* @return {?}
*/
function () {
return this._fontColor;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._fontColor = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItemComponent.prototype, "focus", {
set: /**
* @param {?} value
* @return {?}
*/
function (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('');
}
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItemComponent.prototype, "content", {
get: /**
* @return {?}
*/
function () {
return this._content;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._content = value;
this.setCls();
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
InputItemComponent.prototype.setCls = /**
* @return {?}
*/
function () {
var _a, _b;
if (this.lableRef.nativeElement.children.length > 0 ||
(this.lableRef.nativeElement && this.lableRef.nativeElement.innerText !== '') ||
this._content != undefined) {
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);
};
/**
* @param {?} e
* @return {?}
*/
InputItemComponent.prototype.inputChange = /**
* @param {?} e
* @return {?}
*/
function (e) {
var _this = this;
setTimeout((/**
* @return {?}
*/
function () {
if (_this._inputLock && _this.inputType === 'text') {
return;
}
/** @type {?} */
var 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 {?} */
var 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;
_this._onChange(_this._value);
_this.onChange.emit(_this._value);
}), 0);
};
/**
* @return {?}
*/
InputItemComponent.prototype.compositionStart = /**
* @return {?}
*/
function () {
this._inputLock = true;
};
/**
* @return {?}
*/
InputItemComponent.prototype.compositionEnd = /**
* @return {?}
*/
function () {
this._inputLock = false;
};
/**
* @param {?} value
* @return {?}
*/
InputItemComponent.prototype.inputFocus = /**
* @param {?} value
* @return {?}
*/
function (value) {
var _this = this;
if (!this._editable && document.activeElement instanceof HTMLElement) {
document.activeElement.blur();
}
setTimeout((/**
* @return {?}
*/
function () {
_this._focus = true;
_this.clsFocus = true;
_this.clsAndroid = true;
}), 100);
this.onFocus.emit(value);
};
/**
* @param {?} value
* @return {?}
*/
InputItemComponent.prototype.inputBlur = /**
* @param {?} value
* @return {?}
*/
function (value) {
var _this = this;
setTimeout((/**
* @return {?}
*/
function () {
if (!_this._isClear) {
_this._focus = false;
_this.clsFocus = false;
_this.clsAndroid = false;
_this.onBlur.emit(value);
}
_this._isClear = false;
}), 100);
};
/**
* @return {?}
*/
InputItemComponent.prototype.clearInput = /**
* @return {?}
*/
function () {
if (this._type !== 'password' && this._updatePlaceholder) {
this._placeholder = this._value;
}
this._value = '';
this.onChange.emit(this._value);
this._onChange(this._value);
this._isClear = true;
this.inputFocus(this._value);
};
/**
* @param {?} e
* @return {?}
*/
InputItemComponent.prototype.errorClick = /**
* @param {?} e
* @return {?}
*/
function (e) {
if (this.onErrorClick) {
this.onErrorClick.emit(e);
}
};
/**
* @param {?} e
* @return {?}
*/
InputItemComponent.prototype.extraClick = /**
* @param {?} e
* @return {?}
*/
function (e) {
if (this.onExtraClick) {
this.onExtraClick.emit(e);
}
};
/**
* @param {?} value
* @return {?}
*/
InputItemComponent.prototype.writeValue = /**
* @param {?} value
* @return {?}
*/
function (value) {
if (typeof value === undefined || value === null) {
this._value = '';
}
else {
this._value = value;
}
};
/**
* @param {?} fn
* @return {?}
*/
InputItemComponent.prototype.registerOnChange = /**
* @param {?} fn
* @return {?}
*/
function (fn) {
this._onChange = fn;
};
/**
* @param {?} fn
* @return {?}
*/
InputItemComponent.prototype.registerOnTouched = /**
* @param {?} fn
* @return {?}
*/
function (fn) { };
/**
* @return {?}
*/
InputItemComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.setCls();
this.render.addClass(this._el, this._prefixListCls + '-item');
this.render.addClass(this._el, this._prefixListCls + '-item-middle');
};
/**
* @return {?}
*/
InputItemComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
var _this = this;
setTimeout((/**
* @return {?}
*/
function () {
_this.setCls();
}), 0);
};
InputItemComponent.decorators = [
{ type: Component, args: [{
selector: 'InputItem, nzm-input-item',
template: "<div class=\"{{ prefixListCls }}-line\">\n <div #lableContent [ngClass]=\"labelCls\">\n <ng-template *ngIf=\"isTemplateRef(content)\" [ngTemplateOutlet]=\"content\"></ng-template>\n <ng-container *ngIf=\"!isTemplateRef(content)\">{{ content }}</ng-container>\n </div>\n <div [ngClass]=\"controlCls\">\n <CustomInput\n *ngIf=\"type === 'money'\"\n [value]=\"value\"\n [defaultValue]=\"defaultValue\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [editable]=\"editable\"\n [fontColor]=\"fontColor\"\n [moneyKeyboardAlign]=\"moneyKeyboardAlign\"\n [setFocus]=\"setFocus\"\n [maxLength]=\"maxLength\"\n (onChange)=\"inputChange($event)\"\n (onBlur)=\"inputBlur(value)\"\n (onFocus)=\"inputFocus(value)\"\n >\n </CustomInput>\n <div *ngIf=\"type !== 'money'\">\n <input\n #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 [style.color]=\"fontColor\"\n (ngModelChange)=\"inputChange($event)\"\n (compositionstart)=\"compositionStart()\"\n (compositionend)=\"compositionEnd()\"\n (blur)=\"inputBlur(value)\"\n (focus)=\"inputFocus(value)\"\n style=\"outline:none\"\n />\n </div>\n </div>\n <div\n *ngIf=\"clear && editable && !disabled && (value && value.length > 0)\"\n class=\"{{ prefixCls }}-clear\"\n (click)=\"clearInput()\"\n ></div>\n <div *ngIf=\"error\" class=\"{{ prefixCls }}-error-extra\" (click)=\"errorClick($event)\"></div>\n <div *ngIf=\"extra !== ''\" class=\"{{ prefixCls }}-extra\" (click)=\"extraClick($event)\">\n <ng-container *ngIf=\"!ngTemplate\">{{ extra }}</ng-container>\n <ng-template *ngIf=\"ngTemplate\" [ngTemplateOutlet]=\"extra\"></ng-template>\n </div>\n</div>\n",
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef((/**
* @return {?}
*/
function () { return InputItemComponent; })),
multi: true
}
]
}] }
];
/** @nocollapse */
InputItemComponent.ctorParameters = function () { return [
{ type: ElementRef },
{ type: Renderer2 }
]; };
InputItemComponent.propDecorators = {
lableRef: [{ type: ViewChild, args: ['lableContent', { static: true },] }],
inputElementRef: [{ type: ViewChild, args: ['inputElement', { static: false },] }],
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 }],
fontColor: [{ type: Input }],
focus: [{ type: Input }],
content: [{ 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,',] }]
};
return InputItemComponent;
}());
export { InputItemComponent };
if (false) {
/** @type {?} */
InputItemComponent.prototype.prefixCls;
/** @type {?} */
InputItemComponent.prototype.wrapCls;
/** @type {?} */
InputItemComponent.prototype.labelCls;
/** @type {?} */
InputItemComponent.prototype.controlCls;
/** @type {?} */
InputItemComponent.prototype.setFocus;
/** @type {?} */
InputItemComponent.prototype.pattern;
/** @type {?} */
InputItemComponent.prototype.autoFocus;
/** @type {?} */
InputItemComponent.prototype.inputType;
/** @type {?} */
InputItemComponent.prototype.ngTemplate;
/** @type {?} */
InputItemComponent.prototype.isTemplateRef;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype._el;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype._type;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype._value;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype._defaultValue;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype._placeholder;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype._editable;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype._disabled;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype._clear;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype._maxLength;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype._error;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype._extra;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype._labelNumber;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype._updatePlaceholder;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype._prefixListCls;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype._name;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype._moneyKeyboardAlign;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype._locale;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype._focus;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype._isClear;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype._fontColor;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype._content;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype._inputLock;
/** @type {?} */
InputItemComponent.prototype.lableRef;
/** @type {?} */
InputItemComponent.prototype.inputElementRef;
/** @type {?} */
InputItemComponent.prototype.onChange;
/** @type {?} */
InputItemComponent.prototype.onBlur;
/** @type {?} */
InputItemComponent.prototype.onFocus;
/** @type {?} */
InputItemComponent.prototype.onErrorClick;
/** @type {?} */
InputItemComponent.prototype.onExtraClick;
/** @type {?} */
InputItemComponent.prototype.clsItem;
/** @type {?} */
InputItemComponent.prototype.clsDisabled;
/** @type {?} */
InputItemComponent.prototype.clsError;
/** @type {?} */
InputItemComponent.prototype.clsFocus;
/** @type {?} */
InputItemComponent.prototype.clsAndroid;
/** @type {?} */
InputItemComponent.prototype._onChange;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype.element;
/**
* @type {?}
* @private
*/
InputItemComponent.prototype.render;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS8iLCJzb3VyY2VzIjpbImlucHV0LWl0ZW0vaW5wdXQtaXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUdULFdBQVcsRUFDWCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixXQUFXLEVBRVosTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRDtJQThPRSw0QkFBb0IsT0FBbUIsRUFBVSxNQUFpQjtRQUE5QyxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQWxPbEUsY0FBUyxHQUFXLFVBQVUsQ0FBQztRQUkvQixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFDckIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixjQUFTLEdBQVcsTUFBTSxDQUFDO1FBQzNCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsa0JBQWEsR0FBRyxhQUFhLENBQUM7UUFHdEIsVUFBSyxHQUFXLE1BQU0sQ0FBQztRQUV2QixrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUMzQixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQixjQUFTLEdBQVksSUFBSSxDQUFDO1FBQzFCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUV4QixXQUFNLEdBQVksS0FBSyxDQUFDO1FBQ3hCLFdBQU0sR0FBOEIsRUFBRSxDQUFDO1FBQ3ZDLGlCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBQ3pCLHVC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MkI7O0lBRTNCLHNDQUNTOztJQUNULDZDQUNnQjs7SUF1S2hCLHNDQUNzRDs7SUFDdEQsb0NBQ29EOztJQUNwRCxxQ0FDcUQ7O0lBQ3JELDBDQUMwRDs7SUFDMUQsMENBQzBEOztJQUUxRCxxQ0FDd0I7O0lBQ3hCLHlDQUNzQzs7SUFDdEMsc0NBQ2dDOztJQUNoQyxzQ0FDZ0M7O0lBQ2hDLHdDQUNrQzs7SUFNbEMsdUNBQTJCOzs7OztJQUpmLHFDQUEyQjs7Ozs7SUFBRSxvQ0FBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEFmdGVyVmlld0luaXQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgVmlld0NoaWxkLFxuICBPbkluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgSG9zdEJpbmRpbmcsXG4gIFJlbmRlcmVyMixcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgVGVtcGxhdGVSZWYsXG4gIEFmdGVyVmlld0NoZWNrZWRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBpc1RlbXBsYXRlUmVmIH0gZnJvbSAnLi4vY29yZS91dGlsL2NoZWNrJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnSW5wdXRJdGVtLCBuem0taW5wdXQtaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJbnB1dEl0ZW1Db21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHByZWZpeENsczogc3RyaW5nID0gJ2FtLWlucHV0JztcbiAgd3JhcENsczogb2JqZWN0O1xuICBsYWJlbENsczogb2JqZWN0O1xuICBjb250cm9sQ2xzOiBvYmplY3Q7XG4gIHNldEZvY3VzOiBvYmplY3QgPSB7fTtcbiAgcGF0dGVybjogc3RyaW5nID0gJyc7XG4gIGF1dG9Gb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuICBpbnB1dFR5cGU6IHN0cmluZyA9ICd0ZXh0JztcbiAgbmdUZW1wbGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1RlbXBsYXRlUmVmID0gaXNUZW1wbGF0ZVJlZjtcblxuICBwcml2YXRlIF9lbDogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3R5cGU6IHN0cmluZyA9ICd0ZXh0JztcbiAgcHJpdmF0ZSBfdmFsdWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfZGVmYXVsdFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9lZGl0YWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2NsZWFyOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX21heExlbmd0aDogbnVtYmVyO1xuICBwcml2YXRlIF9lcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9leHRyYTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiA9ICcnO1xuICBwcml2YXRlIF9sYWJlbE51bWJlcjogbnVtYmVyID0gNTtcbiAgcHJpdmF0ZSBfdXBkYXRlUGxhY2Vob2xkZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfcHJlZml4TGlzdENsczogc3RyaW5nID0gJ2FtLWxpc3QnO1xuICBwcml2YXRlIF9uYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX21vbmV5S2V5Ym9hcmRBbGlnbjogc3RyaW5nID0gJ3JpZ2h0JztcbiAgcHJpdmF0ZSBfbG9jYWxlO1xuICBwcml2YXRlIF9mb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9pc0NsZWFyOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2ZvbnRDb2xvcjogc3RyaW5nO1xuICBwcml2YXRlIF9jb250ZW50OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+ID0gJyc7XG4gIHByaXZhdGUgX2lucHV0TG9jayA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ2xhYmxlQ29udGVudCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGxhYmxlUmVmO1xuICBAVmlld0NoaWxkKCdpbnB1dEVsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgaW5wdXRFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpXG4gIGdldCB0eXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gIH1cbiAgc2V0IHR5cGUodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmlucHV0VHlwZSA9IHZhbHVlO1xuICAgICAgaWYgKHZhbHVlID09PSAnYmFua0NhcmQnIHx8IHZhbHVlID09PSAncGhvbmUnKSB7XG4gICAgICAgIHRoaXMuX3R5cGUgPSAndGVsJztcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdwYXNzd29yZCcpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9ICdwYXNzd29yZCc7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnZGlnaXQnKSB7XG4gICAgICAgIHRoaXMuX3R5cGUgPSAnbnVtYmVyJztcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgIT09ICd0ZXh0JyAmJiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICB0aGlzLnBhdHRlcm4gPSAnWzAtOV0qJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIHNldCB2YWx1ZSh2OiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHYgPT09ICd1bmRlZmluZWQnIHx8IHYgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGRlZmF1bHRWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmFsdWU7XG4gIH1cbiAgc2V0IGRlZmF1bHRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZGVmYXVsdFZhbHVlID0gdmFsdWU7XG4gICAgaWYgKCF0aGlzLl92YWx1ZSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLl9kZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgfVxuICBzZXQgcGxhY2Vob2xkZXIodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgZWRpdGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2VkaXRhYmxlO1xuICB9XG4gIHNldCBlZGl0YWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2VkaXRhYmxlID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy5jbHNEaXNhYmxlZCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBjbGVhcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2xlYXI7XG4gIH1cbiAgc2V0IGNsZWFyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fY2xlYXIgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgbWF4TGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heExlbmd0aDtcbiAgfVxuICBzZXQgbWF4TGVuZ3RoKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhMZW5ndGggPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgZXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Vycm9yO1xuICB9XG4gIHNldCBlcnJvcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Vycm9yID0gdmFsdWU7XG4gICAgdGhpcy5jbHNFcnJvciA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBleHRyYSgpOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fZXh0cmE7XG4gIH1cbiAgc2V0IGV4dHJhKHZhbHVlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgIHRoaXMubmdUZW1wbGF0ZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubmdUZW1wbGF0ZSA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLl9leHRyYSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBsYWJlbE51bWJlcih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGFiZWxOdW1iZXIgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCB1cGRhdGVQbGFjZWhvbGRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3VwZGF0ZVBsYWNlaG9sZGVyID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHByZWZpeExpc3RDbHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcHJlZml4TGlzdENscztcbiAgfVxuICBzZXQgcHJlZml4TGlzdENscyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcHJlZml4TGlzdENscyA9IHZhbHVlO1xuICAgIHRoaXMucmVuZGVyLmFkZENsYXNzKHRoaXMuX2VsLCB2YWx1ZSArICctaXRlbScpO1xuICAgIHRoaXMucmVuZGVyLmFkZENsYXNzKHRoaXMuX2VsLCB2YWx1ZSArICctaXRlbS1taWRkbGUnKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG4gIHNldCBuYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9uYW1lID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IG1vbmV5S2V5Ym9hcmRBbGlnbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9tb25leUtleWJvYXJkQWxpZ247XG4gIH1cbiAgc2V0IG1vbmV5S2V5Ym9hcmRBbGlnbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbW9uZXlLZXlib2FyZEFsaWduID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGxvY2FsZSh2YWx1ZSkge1xuICAgIHRoaXMuX2xvY2FsZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBmb250Q29sb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvbnRDb2xvcjtcbiAgfVxuICBzZXQgZm9udENvbG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9mb250Q29sb3IgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgZm9jdXModmFsdWUpIHtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUuZm9jdXMpIHtcbiAgICAgIHRoaXMuYXV0b0ZvY3VzID0gdmFsdWUuZm9jdXM7XG4gICAgICBpZiAodGhpcy5fdHlwZSA9PT0gJ21vbmV5Jykge1xuICAgICAgICB0aGlzLnNldEZvY3VzID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaW5wdXRFbGVtZW50UmVmKSB7XG4gICAgICAgIHRoaXMuX2ZvY3VzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLmlucHV0Rm9jdXMoJycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBASW5wdXQoKVxuICBnZXQgY29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGVudDtcbiAgfVxuICBzZXQgY29udGVudCh2YWx1ZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIHRoaXMuX2NvbnRlbnQgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICB9XG5cbiAgQE91dHB1dCgpXG4gIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25CbHVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25Gb2N1czogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uRXJyb3JDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uRXh0cmFDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWlucHV0LWl0ZW0nKVxuICBjbHNJdGVtOiBib29sZWFuID0gdHJ1ZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1pbnB1dC1kaXNhYmxlZCcpXG4gIGNsc0Rpc2FibGVkOiBib29sZWFuID0gdGhpcy5fZGlzYWJsZWQ7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0taW5wdXQtZXJyb3InKVxuICBjbHNFcnJvcjogYm9vbGVhbiA9IHRoaXMuX2Vycm9yO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWlucHV0LWZvY3VzJylcbiAgY2xzRm9jdXM6IGJvb2xlYW4gPSB0aGlzLl9mb2N1cztcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1pbnB1dC1hbmRyb2lkLCcpXG4gIGNsc0FuZHJvaWQ6IGJvb2xlYW4gPSB0aGlzLl9mb2N1cztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyOiBSZW5kZXJlcjIpIHtcbiAgICB0aGlzLl9lbCA9IGVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIF9vbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuXG4gIHNldENscygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmxhYmxlUmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID4gMCB8fFxuICAgICAgKHRoaXMubGFibGVSZWYubmF0aXZlRWxlbWVudCAmJiB0aGlzLmxhYmxlUmVmLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0ICE9PSAnJykgfHxcbiAgICAgIHRoaXMuX2NvbnRlbnQgIT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aGlzLmxhYmVsQ2xzID0ge1xuICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsYF06IHRydWUsXG4gICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbGFiZWwtMmBdOiB0aGlzLl9sYWJlbE51bWJlciA9PT0gMixcbiAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC0zYF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSAzLFxuICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTRgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDQsXG4gICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbGFiZWwtNWBdOiB0aGlzLl9sYWJlbE51bWJlciA9PT0gNSxcbiAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC02YF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSA2LFxuICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTdgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDdcbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMuY29udHJvbENscyA9IHsgW2Ake3RoaXMucHJlZml4Q2xzfS1jb250cm9sYF06IHRydWUgfTtcbiAgfVxuXG4gIGlucHV0Q