UNPKG

chi-app-lib

Version:

This is a custom component (input dropdown grid textarea map captcha) published to npm.

285 lines 22.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input, forwardRef, Output, EventEmitter } from '@angular/core'; import { FormControl, Validators, NG_VALUE_ACCESSOR } from '@angular/forms'; /** @type {?} */ const noop = (/** * @return {?} */ () => { }); const ɵ0 = noop; /** * Error when invalid control is dirty or touched */ export class TextAreaErrorStateMatcher { /** * @param {?} control * @param {?} form * @return {?} */ isErrorState(control, form) { return !!(control && control.invalid && (control.dirty || control.touched)); } } /** @type {?} */ export const Text_Area_Component_CONTROL_VALUE_ACCESSOR = { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ () => TextAreaComponent)), multi: true }; export class TextAreaComponent { constructor() { this.type = 'text'; this.direction = 'rtl'; this.pattern = ''; this.showValidatorMessage = true; this.isValid = new EventEmitter(); this.matcher = new TextAreaErrorStateMatcher(); this.id = 'chi-textarea' + this.idGenerator(); this.element = new FormControl(''); // The internal data model this.innerValue = ''; // Placeholders for the callbacks which are later provided // by the Control Value Accessor this.onTouchedCallback = noop; this.onChangeCallback = noop; if (this.required && this.minLength && this.maxLength && this.pattern) { this.element = new FormControl('', [ Validators.required, Validators.pattern(this.pattern), Validators.minLength(this.minLength), Validators.maxLength(this.maxLength) ]); } else if (this.required && !this.minLength && !this.maxLength && !this.pattern) { this.element = new FormControl('', [Validators.required]); } else if (!this.required && !this.minLength && !this.maxLength && this.pattern) { this.element = new FormControl('', [Validators.maxLength(this.maxLength)]); } else if (!this.required && this.minLength && !this.maxLength && !this.pattern) { this.element = new FormControl('', [Validators.minLength(this.minLength)]); } else if (!this.required && !this.minLength && this.maxLength && !this.pattern) { this.element = new FormControl('', [Validators.maxLength(this.maxLength)]); } } // // get accessor /** * @return {?} */ get value() { return this.innerValue; } // set accessor including call the onchange callback /** * @param {?} v * @return {?} */ set value(v) { if (v !== this.innerValue) { this.innerValue = v; this.onChangeCallback(v); setTimeout((/** * @param {?} _ * @return {?} */ _ => { this.isValid.emit(this.element.valid); }), 100); } } // Set touched on blur /** * @param {?} validate * @return {?} */ onBlur(validate) { this.onTouchedCallback(); this.isValid.emit(this.element.valid); } // From ControlValueAccessor interface /** * @param {?} value * @return {?} */ writeValue(value) { if (value !== this.innerValue) { this.innerValue = value; setTimeout((/** * @param {?} _ * @return {?} */ _ => { this.isValid.emit(this.element.valid); }), 100); } } // From ControlValueAccessor interface /** * @param {?} fn * @return {?} */ registerOnChange(fn) { this.onChangeCallback = fn; } // From ControlValueAccessor interface /** * @param {?} fn * @return {?} */ registerOnTouched(fn) { this.onTouchedCallback = fn; } /** * @param {?} event * @param {?} validate * @return {?} */ changedInput(event, validate) { setTimeout((/** * @param {?} _ * @return {?} */ _ => { this.isValid.emit(this.element.valid); }), 100); } /** * @param {?} validate * @return {?} */ onFocused(validate) { this.isValid.emit(this.element.valid); } /** * @return {?} */ ngOnInit() { } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { /** @type {?} */ const name = changes.isDirty; if ((name || {})['currentValue']) { this.element.markAsDirty({ onlySelf: true }); } } /** * @return {?} */ getErrorMessage() { return this.element.hasError('required') ? ' لا يمكن أن يكون هذا الحقل فارغًا!' : this.element.hasError('pattern') ? 'رقم غیر صحیح!' : this.element.hasError('minlength') ? ' حداقل ' + this.minLength + ' کاراکتر وارد نمایید!' : this.element.hasError('maxlength') ? ' حداکثر ' + this.maxLength + ' کاراکتر وارد نمایید!' : ''; } /** * @param {?} val * @return {?} */ getElement(val) { // console.log(val); } /** * @return {?} */ idGenerator() { /** @type {?} */ const number = Math.random(); number.toString(36); return number.toString(36).substr(2, 9); } } TextAreaComponent.decorators = [ { type: Component, args: [{ selector: 'lib-text-area', template: "<div class=\"element-container\" [ngClass]=\"className\" dir=\"{{direction}}\">\n <mat-form-field [hideRequiredMarker]=\"true\">\n <textarea matInput\n id=\"{{id}}\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"2\"\n cdkAutosizeMaxRows=\"5\"\n placeholder=\"{{placeHolder}}\"\n [formControl]=\"element\"\n required=\"{{required}}\"\n [(ngModel)]=\"value\"\n (input)=\"getElement($event)\"\n [disabled]=\"readonly\"\n [minlength]=\"minLength\"\n [maxlength]=\"maxLength\"\n (ngModelChange)=\"changedInput($event,element.valid)\"\n (focus)=\"onFocused(element.valid)\"\n (blur)=\"onBlur(element.valid)\"\n [errorStateMatcher]=\"matcher\">\n </textarea>\n\n <mat-hint align=\"end\" *ngIf=\"showCountValue\">\n {{(value || '').length}}/{{maxLength}}\n </mat-hint>\n\n <mat-hint align=\"start\" *ngIf=\"hintText\"><strong>{{hintText}}</strong></mat-hint>\n <mat-error *ngIf=\"element.invalid&&showValidatorMessage\">{{getErrorMessage()}}</mat-error>\n </mat-form-field>\n</div>\n", providers: [Text_Area_Component_CONTROL_VALUE_ACCESSOR], styles: [".element-container{display:flex;flex-direction:column}.element-container>*{width:100%}"] }] } ]; /** @nocollapse */ TextAreaComponent.ctorParameters = () => []; TextAreaComponent.propDecorators = { type: [{ type: Input }], direction: [{ type: Input }], pattern: [{ type: Input }], className: [{ type: Input }], readonly: [{ type: Input }], required: [{ type: Input }], placeHolder: [{ type: Input }], hintText: [{ type: Input }], minLength: [{ type: Input }], maxLength: [{ type: Input }], showCountValue: [{ type: Input }], isDirty: [{ type: Input }], showValidatorMessage: [{ type: Input }], isValid: [{ type: Output }] }; if (false) { /** @type {?} */ TextAreaComponent.prototype.type; /** @type {?} */ TextAreaComponent.prototype.direction; /** @type {?} */ TextAreaComponent.prototype.pattern; /** @type {?} */ TextAreaComponent.prototype.className; /** @type {?} */ TextAreaComponent.prototype.readonly; /** @type {?} */ TextAreaComponent.prototype.required; /** @type {?} */ TextAreaComponent.prototype.placeHolder; /** @type {?} */ TextAreaComponent.prototype.hintText; /** @type {?} */ TextAreaComponent.prototype.minLength; /** @type {?} */ TextAreaComponent.prototype.maxLength; /** @type {?} */ TextAreaComponent.prototype.showCountValue; /** @type {?} */ TextAreaComponent.prototype.isDirty; /** @type {?} */ TextAreaComponent.prototype.showValidatorMessage; /** @type {?} */ TextAreaComponent.prototype.isValid; /** @type {?} */ TextAreaComponent.prototype.name; /** @type {?} */ TextAreaComponent.prototype.matcher; /** @type {?} */ TextAreaComponent.prototype.id; /** @type {?} */ TextAreaComponent.prototype.element; /** * @type {?} * @private */ TextAreaComponent.prototype.innerValue; /** * @type {?} * @private */ TextAreaComponent.prototype.onTouchedCallback; /** * @type {?} * @private */ TextAreaComponent.prototype.onChangeCallback; } export { ɵ0 }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1hcmVhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NoaS1hcHAtbGliLyIsInNvdXJjZXMiOlsibGliL3RleHQtYXJlYS90ZXh0LWFyZWEuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFVLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFFM0QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLFdBQVcsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBRTNDLE1BQU0sZ0JBQWdCLENBQUM7O01BSWxCLElBQUk7OztBQUFHLEdBQUcsRUFBRTtBQUNsQixDQUFDLENBQUE7Ozs7O0FBR0QsTUFBTSxPQUFPLHlCQUF5Qjs7Ozs7O0lBQ3BDLFlBQVksQ0FBQyxPQUEyQixFQUFFLElBQXdDO1FBQ2hGLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUUsQ0FBQyxDQUFDO0lBQy9FLENBQUM7Q0FDRjs7QUFFRCxNQUFNLE9BQU8sMENBQTBDLEdBQVE7SUFDN0QsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVTs7O0lBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUM7SUFDaEQsS0FBSyxFQUFFLElBQUk7Q0FDWjtBQU9ELE1BQU0sT0FBTyxpQkFBaUI7SUFnRjVCO1FBOUVTLFNBQUksR0FBRyxNQUFNLENBQUM7UUFDZCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFVYix5QkFBb0IsR0FBRyxJQUFJLENBQUU7UUFDNUIsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFaEQsWUFBTyxHQUFHLElBQUkseUJBQXlCLEVBQUUsQ0FBQztRQUMxQyxPQUFFLEdBQUcsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QyxZQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7O1FBR3RCLGVBQVUsR0FBUSxFQUFFLENBQUM7OztRQUlyQixzQkFBaUIsR0FBZSxJQUFJLENBQUM7UUFDckMscUJBQWdCLEdBQXFCLElBQUksQ0FBQztRQXNEaEQsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3JFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFO2dCQUNqQyxVQUFVLENBQUMsUUFBUTtnQkFDbkIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUNoQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ3BDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQzthQUFDLENBQ3RDLENBQUM7U0FDSDthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUMvRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQzNEO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQy9FLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVFO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQy9FLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVFO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQy9FLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVFO0lBRUgsQ0FBQzs7Ozs7O0lBcEVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDOzs7Ozs7SUFHRCxJQUFJLEtBQUssQ0FBQyxDQUFNO1FBQ2QsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztZQUNwQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIsVUFBVTs7OztZQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEMsQ0FBQyxHQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ1Q7SUFDSCxDQUFDOzs7Ozs7SUFHRCxNQUFNLENBQUMsUUFBUTtRQUNiLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQzs7Ozs7O0lBR0QsVUFBVSxDQUFDLEtBQVU7UUFDbEIsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN4QixVQUFVOzs7O1lBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QyxDQUFDLEdBQUUsR0FBRyxDQUFDLENBQUM7U0FDVDtJQUNILENBQUM7Ozs7OztJQUdELGdCQUFnQixDQUFDLEVBQU87UUFDdEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUM3QixDQUFDOzs7Ozs7SUFHRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFDOUIsQ0FBQzs7Ozs7O0lBRUQsWUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRO1FBQzFCLFVBQVU7Ozs7UUFBQyxDQUFDLENBQUMsRUFBRTtZQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsQ0FBQyxHQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQzs7Ozs7SUFFRCxTQUFTLENBQUMsUUFBUTtRQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Ozs7SUFzQkQsUUFBUTtJQUNSLENBQUM7Ozs7O0lBRUQsV0FBVyxDQUFDLE9BQXNCOztjQUMxQixJQUFJLEdBQWlCLE9BQU8sQ0FBQyxPQUFPO1FBRTFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUM5QztJQUNILENBQUM7Ozs7SUFDRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsb0NBQW9DLENBQUMsQ0FBQztZQUMvRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDO29CQUN6RixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsdUJBQXVCLENBQUMsQ0FBQzt3QkFDMUYsRUFBRSxDQUFDO0lBQ2IsQ0FBQzs7Ozs7SUFDRCxVQUFVLENBQUMsR0FBRztRQUNaLG9CQUFvQjtJQUN0QixDQUFDOzs7O0lBQ0QsV0FBVzs7Y0FDSCxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUM1QixNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7OztZQW5JRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGVBQWU7Z0JBQ3pCLHNzQ0FBeUM7Z0JBRXpDLFNBQVMsRUFBRSxDQUFDLDBDQUEwQyxDQUFDOzthQUN4RDs7Ozs7bUJBR0UsS0FBSzt3QkFDTCxLQUFLO3NCQUNMLEtBQUs7d0JBQ0wsS0FBSzt1QkFDTCxLQUFLO3VCQUNMLEtBQUs7MEJBQ0wsS0FBSzt1QkFDTCxLQUFLO3dCQUNMLEtBQUs7d0JBQ0wsS0FBSzs2QkFDTCxLQUFLO3NCQUNMLEtBQUs7bUNBQ0wsS0FBSztzQkFDTCxNQUFNOzs7O0lBYlAsaUNBQXVCOztJQUN2QixzQ0FBMkI7O0lBQzNCLG9DQUFzQjs7SUFDdEIsc0NBQW1COztJQUNuQixxQ0FBa0I7O0lBQ2xCLHFDQUFrQjs7SUFDbEIsd0NBQXFCOztJQUNyQixxQ0FBa0I7O0lBQ2xCLHNDQUFvQjs7SUFDcEIsc0NBQW9COztJQUNwQiwyQ0FBeUI7O0lBQ3pCLG9DQUFrQjs7SUFDbEIsaURBQXNDOztJQUN0QyxvQ0FBZ0Q7O0lBQ2hELGlDQUFLOztJQUNMLG9DQUEwQzs7SUFDMUMsK0JBQXlDOztJQUN6QyxvQ0FBOEI7Ozs7O0lBRzlCLHVDQUE2Qjs7Ozs7SUFJN0IsOENBQTZDOzs7OztJQUM3Qyw2Q0FBa0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIGZvcndhcmRSZWYsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBTaW1wbGVDaGFuZ2VzLCBTaW1wbGVDaGFuZ2UsXG4gIE9uQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEZvcm1Db250cm9sLCBWYWxpZGF0b3JzLCBOR19WQUxVRV9BQ0NFU1NPUiwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgTmdGb3JtXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtFcnJvclN0YXRlTWF0Y2hlcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwnO1xuXG5jb25zdCBub29wID0gKCkgPT4ge1xufTtcblxuLyoqIEVycm9yIHdoZW4gaW52YWxpZCBjb250cm9sIGlzIGRpcnR5IG9yIHRvdWNoZWQqL1xuZXhwb3J0IGNsYXNzIFRleHRBcmVhRXJyb3JTdGF0ZU1hdGNoZXIgaW1wbGVtZW50cyBFcnJvclN0YXRlTWF0Y2hlciB7XG4gIGlzRXJyb3JTdGF0ZShjb250cm9sOiBGb3JtQ29udHJvbCB8IG51bGwsIGZvcm06IEZvcm1Hcm91cERpcmVjdGl2ZSB8IE5nRm9ybSB8IG51bGwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEoY29udHJvbCAmJiBjb250cm9sLmludmFsaWQgJiYgKGNvbnRyb2wuZGlydHkgfHwgY29udHJvbC50b3VjaGVkICkpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBUZXh0X0FyZWFfQ29tcG9uZW50X0NPTlRST0xfVkFMVUVfQUNDRVNTT1I6IGFueSA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRleHRBcmVhQ29tcG9uZW50KSxcbiAgbXVsdGk6IHRydWVcbn07XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItdGV4dC1hcmVhJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RleHQtYXJlYS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RleHQtYXJlYS5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtUZXh0X0FyZWFfQ29tcG9uZW50X0NPTlRST0xfVkFMVUVfQUNDRVNTT1JdXG59KVxuZXhwb3J0IGNsYXNzIFRleHRBcmVhQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzIHtcblxuICBASW5wdXQoKSB0eXBlID0gJ3RleHQnO1xuICBASW5wdXQoKSBkaXJlY3Rpb24gPSAncnRsJztcbiAgQElucHV0KCkgcGF0dGVybiA9ICcnO1xuICBASW5wdXQoKSBjbGFzc05hbWU7XG4gIEBJbnB1dCgpIHJlYWRvbmx5O1xuICBASW5wdXQoKSByZXF1aXJlZDtcbiAgQElucHV0KCkgcGxhY2VIb2xkZXI7XG4gIEBJbnB1dCgpIGhpbnRUZXh0O1xuICBASW5wdXQoKSBtaW5MZW5ndGggO1xuICBASW5wdXQoKSBtYXhMZW5ndGggO1xuICBASW5wdXQoKSBzaG93Q291bnRWYWx1ZSA7XG4gIEBJbnB1dCgpIGlzRGlydHkgO1xuICBASW5wdXQoKSBzaG93VmFsaWRhdG9yTWVzc2FnZSA9IHRydWUgO1xuICBAT3V0cHV0KCkgaXNWYWxpZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgbmFtZTtcbiAgbWF0Y2hlciA9IG5ldyBUZXh0QXJlYUVycm9yU3RhdGVNYXRjaGVyKCk7XG4gIGlkID0gJ2NoaS10ZXh0YXJlYScgKyB0aGlzLmlkR2VuZXJhdG9yKCk7XG4gIGVsZW1lbnQgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuXG4gIC8vIFRoZSBpbnRlcm5hbCBkYXRhIG1vZGVsXG4gIHByaXZhdGUgaW5uZXJWYWx1ZTogYW55ID0gJyc7XG5cbiAgLy8gUGxhY2Vob2xkZXJzIGZvciB0aGUgY2FsbGJhY2tzIHdoaWNoIGFyZSBsYXRlciBwcm92aWRlZFxuICAvLyBieSB0aGUgQ29udHJvbCBWYWx1ZSBBY2Nlc3NvclxuICBwcml2YXRlIG9uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBvbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcbiAgLy9cbiAgLy8gZ2V0IGFjY2Vzc29yXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmlubmVyVmFsdWU7XG4gIH1cblxuICAvLyBzZXQgYWNjZXNzb3IgaW5jbHVkaW5nIGNhbGwgdGhlIG9uY2hhbmdlIGNhbGxiYWNrXG4gIHNldCB2YWx1ZSh2OiBhbnkpIHtcbiAgICBpZiAodiAhPT0gdGhpcy5pbm5lclZhbHVlKSB7XG4gICAgICB0aGlzLmlubmVyVmFsdWUgPSB2O1xuICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHYpO1xuICAgICAgc2V0VGltZW91dChfID0+IHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkLmVtaXQodGhpcy5lbGVtZW50LnZhbGlkKTtcbiAgICAgIH0sIDEwMCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IHRvdWNoZWQgb24gYmx1clxuICBvbkJsdXIodmFsaWRhdGUpIHtcbiAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5pc1ZhbGlkLmVtaXQodGhpcy5lbGVtZW50LnZhbGlkKTtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgICBpZiAodmFsdWUgIT09IHRoaXMuaW5uZXJWYWx1ZSkge1xuICAgICAgdGhpcy5pbm5lclZhbHVlID0gdmFsdWU7XG4gICAgICBzZXRUaW1lb3V0KF8gPT4ge1xuICAgICAgICB0aGlzLmlzVmFsaWQuZW1pdCh0aGlzLmVsZW1lbnQudmFsaWQpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gIH1cblxuICBjaGFuZ2VkSW5wdXQoZXZlbnQsIHZhbGlkYXRlKSB7XG4gICAgc2V0VGltZW91dChfID0+IHtcbiAgICAgIHRoaXMuaXNWYWxpZC5lbWl0KHRoaXMuZWxlbWVudC52YWxpZCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIG9uRm9jdXNlZCh2YWxpZGF0ZSkge1xuICAgIHRoaXMuaXNWYWxpZC5lbWl0KHRoaXMuZWxlbWVudC52YWxpZCk7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgdGhpcy5taW5MZW5ndGggJiYgdGhpcy5tYXhMZW5ndGggJiYgdGhpcy5wYXR0ZXJuKSB7XG4gICAgICB0aGlzLmVsZW1lbnQgPSBuZXcgRm9ybUNvbnRyb2woJycsIFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMucGF0dGVybiksXG4gICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKHRoaXMubWluTGVuZ3RoKSxcbiAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgodGhpcy5tYXhMZW5ndGgpXSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnJlcXVpcmVkICYmICF0aGlzLm1pbkxlbmd0aCAmJiAhdGhpcy5tYXhMZW5ndGggJiYgIXRoaXMucGF0dGVybikge1xuICAgICAgdGhpcy5lbGVtZW50ID0gbmV3IEZvcm1Db250cm9sKCcnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMucmVxdWlyZWQgJiYgIXRoaXMubWluTGVuZ3RoICYmICF0aGlzLm1heExlbmd0aCAmJiB0aGlzLnBhdHRlcm4pIHtcbiAgICAgIHRoaXMuZWxlbWVudCA9IG5ldyBGb3JtQ29udHJvbCgnJywgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMubWF4TGVuZ3RoKV0pO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMucmVxdWlyZWQgJiYgdGhpcy5taW5MZW5ndGggJiYgIXRoaXMubWF4TGVuZ3RoICYmICF0aGlzLnBhdHRlcm4pIHtcbiAgICAgIHRoaXMuZWxlbWVudCA9IG5ldyBGb3JtQ29udHJvbCgnJywgW1ZhbGlkYXRvcnMubWluTGVuZ3RoKHRoaXMubWluTGVuZ3RoKV0pO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMucmVxdWlyZWQgJiYgIXRoaXMubWluTGVuZ3RoICYmIHRoaXMubWF4TGVuZ3RoICYmICF0aGlzLnBhdHRlcm4pIHtcbiAgICAgIHRoaXMuZWxlbWVudCA9IG5ldyBGb3JtQ29udHJvbCgnJywgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMubWF4TGVuZ3RoKV0pO1xuICAgIH1cblxuICB9XG5cblxuICBuZ09uSW5pdCgpIHtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBjb25zdCBuYW1lOiBTaW1wbGVDaGFuZ2UgPSBjaGFuZ2VzLmlzRGlydHk7XG5cbiAgICBpZiAoKG5hbWUgfHwge30pWydjdXJyZW50VmFsdWUnXSkge1xuICAgICAgdGhpcy5lbGVtZW50Lm1hcmtBc0RpcnR5KHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgfVxuICB9XG4gIGdldEVycm9yTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Lmhhc0Vycm9yKCdyZXF1aXJlZCcpID8gJyDZhNinINmK2YXZg9mGINij2YYg2YrZg9mI2YYg2YfYsNinINin2YTYrdmC2YQg2YHYp9ix2LrZi9inIScgOlxuICAgICAgdGhpcy5lbGVtZW50Lmhhc0Vycm9yKCdwYXR0ZXJuJykgPyAn2LHZgtmFINi624zYsSDYtdit24zYrSEnIDpcbiAgICAgICAgdGhpcy5lbGVtZW50Lmhhc0Vycm9yKCdtaW5sZW5ndGgnKSA/ICcg2K3Yr9in2YLZhCAnICsgdGhpcy5taW5MZW5ndGggKyAnINqp2KfYsdin2qnYqtixINmI2KfYsdivINmG2YXYp9uM24zYryEnIDpcbiAgICAgICAgICB0aGlzLmVsZW1lbnQuaGFzRXJyb3IoJ21heGxlbmd0aCcpID8gJyDYrdiv2Kfaqdir2LEgJyArIHRoaXMubWF4TGVuZ3RoICsgJyDaqdin2LHYp9qp2KrYsSDZiNin2LHYryDZhtmF2KfbjNuM2K8hJyA6XG4gICAgICAgICAgICAnJztcbiAgfVxuICBnZXRFbGVtZW50KHZhbCkge1xuICAgIC8vIGNvbnNvbGUubG9nKHZhbCk7XG4gIH1cbiAgaWRHZW5lcmF0b3IoKSB7XG4gICAgY29uc3QgbnVtYmVyID0gTWF0aC5yYW5kb20oKTtcbiAgICBudW1iZXIudG9TdHJpbmcoMzYpO1xuICAgIHJldHVybiBudW1iZXIudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KTtcbiAgfVxufVxuIl19