@asi-ngtools/lib
Version:
This project is a little components library, simple to use, which will help you to simplify your project.
296 lines (295 loc) • 23.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { DefaultControlValueAccessor } from './../common/default-control-value-accessor';
import { NG_VALUE_ACCESSOR, FormControl } from '@angular/forms';
import { Component, forwardRef, Input, ElementRef, ViewChild, Renderer2 } from '@angular/core';
import { debounceTime } from 'rxjs/operators';
import { Subject } from 'rxjs';
var AsiInputNumberComponent = /** @class */ (function (_super) {
tslib_1.__extends(AsiInputNumberComponent, _super);
function AsiInputNumberComponent(renderer, elementRef) {
var _this = _super.call(this) || this;
_this.renderer = renderer;
_this.elementRef = elementRef;
/**
* Label position
*/
_this.labelPosition = 'top';
/**
* Increment value when click on + or -
*/
_this.step = 1;
/**
* Allow you to disable the input
*/
_this.disableInput = false;
/**
* Allow you to hide the action button
*/
_this.hideAction = false;
/**
* Delay before value change
*/
_this.delay = 0;
/**
* Number regex
*/
_this.pattern = new RegExp('^-?[0-9]*[,\.]{0,1}[0-9]{0,2}$');
/**
* pattern used to managed typed value, if this pattern is true the 'value' will be the last valide one
*/
_this.toleratePattern = new RegExp('^[0-9]*[,\.]{1}$');
/**
* use a non decimal pattern '^-?[0-9]*$'
*/
_this.noDecimal = false;
_this.inputControl = new FormControl();
_this.outputDelayValue = new Subject();
return _this;
}
/**
* @return {?}
*/
AsiInputNumberComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
if (this.noDecimal) {
this.pattern = new RegExp('^-?[0-9]*$');
}
this.renderer.addClass(this.elementRef.nativeElement, 'label-' + this.labelPosition);
this.inputControl.valueChanges.subscribe(function (value) {
if (value === '' || value == null) {
_this.outputDelayValue.next(null);
_this.oldValideValue = null;
return;
}
/** @type {?} */
var tolerateValue = !_this.noDecimal && _this.toleratePattern.test(value);
/** @type {?} */
var minusPossible = (_this.min == null || _this.min < 0) && value.length === 1 && value.indexOf('-') !== -1;
value = value.replace(',', '\.');
if (_this.pattern.test(value)) {
if (!isNaN(Number(value))) {
// The value is a number
if (!(_this.max != null && value > _this.max)
&& !(_this.min != null && value < _this.min) && !tolerateValue) {
_this.outputDelayValue.next(Number(value));
if (Number(value) !== 0) {
_this.oldValideValue = value;
}
else {
_this.oldValideValue = 0;
}
return;
}
}
else if (minusPossible) {
_this.outputDelayValue.next(null);
_this.oldValideValue = value;
return;
}
}
if (!tolerateValue && !minusPossible) {
_this.inputControl.setValue(_this.oldValideValue, { emitEvent: false });
}
else {
_this.oldValideValue = value;
_this.inputControl.setValue(value, { emitEvent: false });
}
});
this.outputDelayValue.pipe(debounceTime(this.delay)).subscribe(function (value) {
_this.value = value;
});
if (this.stepIncrease == null) {
this.stepIncrease = this.step;
}
if (this.stepDecrease == null) {
this.stepDecrease = this.step;
}
};
/**
* @return {?}
*/
AsiInputNumberComponent.prototype.increase = /**
* @return {?}
*/
function () {
if (this.inputControl.value == null || this.inputControl.value === '') {
this.inputControl.setValue(this.stepIncrease + '');
}
else {
/** @type {?} */
var number = Number(this.inputControl.value);
this.inputControl.setValue(number + this.stepIncrease + '');
}
};
/**
* @return {?}
*/
AsiInputNumberComponent.prototype.decrease = /**
* @return {?}
*/
function () {
if (this.inputControl.value == null || this.inputControl.value === '') {
this.inputControl.setValue(-this.stepDecrease + '');
}
else {
/** @type {?} */
var number = Number(this.inputControl.value);
this.inputControl.setValue(number - this.stepDecrease + '');
}
};
/**
* @param {?} value
* @return {?}
*/
AsiInputNumberComponent.prototype.writeValue = /**
* @param {?} value
* @return {?}
*/
function (value) {
if (value != null && this.pattern.test(value)) {
this.inputControl.setValue(value, { emitEvent: false });
this._value = value;
}
else {
this.inputControl.setValue(null, { emitEvent: false });
this._value = null;
}
this.oldValideValue = this._value;
};
AsiInputNumberComponent.decorators = [
{ type: Component, args: [{
selector: 'asi-input-number',
host: { 'class': 'asi-component asi-input-number' },
template: "<label class=\"input-label\" *ngIf=\"label != null\">{{label | translate}}</label>\n<div class=\"number-select\">\n <asi-button *ngIf=\"!hideAction\" class=\"minus\" size=\"mini\" [disabled]=\"disabled\" type=\"button\" (click)=\"decrease()\">-</asi-button>\n <input #input [attr.disabled]=\"disabled || disableInput ? '' : null\"\n [attr.id]=\"id\" [attr.name]=\"name\" type=\"text\" class=\"asi-focus-error\" [formControl]=\"inputControl\" />\n <asi-button *ngIf=\"!hideAction\" class=\"plus\" size=\"mini\" [disabled]=\"disabled\" type=\"button\" (click)=\"increase()\">+</asi-button>\n</div>\n",
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(function () { return AsiInputNumberComponent; }),
multi: true
}
]
}] }
];
/** @nocollapse */
AsiInputNumberComponent.ctorParameters = function () { return [
{ type: Renderer2 },
{ type: ElementRef }
]; };
AsiInputNumberComponent.propDecorators = {
id: [{ type: Input }],
name: [{ type: Input }],
label: [{ type: Input }],
labelPosition: [{ type: Input }],
step: [{ type: Input }],
stepIncrease: [{ type: Input }],
stepDecrease: [{ type: Input }],
disableInput: [{ type: Input }],
hideAction: [{ type: Input }],
min: [{ type: Input }],
max: [{ type: Input }],
delay: [{ type: Input }],
pattern: [{ type: Input }],
toleratePattern: [{ type: Input }],
noDecimal: [{ type: Input }],
inputElm: [{ type: ViewChild, args: ['input',] }]
};
return AsiInputNumberComponent;
}(DefaultControlValueAccessor));
export { AsiInputNumberComponent };
if (false) {
/**
* html id
* @type {?}
*/
AsiInputNumberComponent.prototype.id;
/**
* html name
* @type {?}
*/
AsiInputNumberComponent.prototype.name;
/**
* Label to display (is translated)
* @type {?}
*/
AsiInputNumberComponent.prototype.label;
/**
* Label position
* @type {?}
*/
AsiInputNumberComponent.prototype.labelPosition;
/**
* Increment value when click on + or -
* @type {?}
*/
AsiInputNumberComponent.prototype.step;
/**
* Increment value when click on +
* @type {?}
*/
AsiInputNumberComponent.prototype.stepIncrease;
/**
* Decrement value when click on -
* @type {?}
*/
AsiInputNumberComponent.prototype.stepDecrease;
/**
* Allow you to disable the input
* @type {?}
*/
AsiInputNumberComponent.prototype.disableInput;
/**
* Allow you to hide the action button
* @type {?}
*/
AsiInputNumberComponent.prototype.hideAction;
/**
* Min value
* @type {?}
*/
AsiInputNumberComponent.prototype.min;
/**
* Max value
* @type {?}
*/
AsiInputNumberComponent.prototype.max;
/**
* Delay before value change
* @type {?}
*/
AsiInputNumberComponent.prototype.delay;
/**
* Number regex
* @type {?}
*/
AsiInputNumberComponent.prototype.pattern;
/**
* pattern used to managed typed value, if this pattern is true the 'value' will be the last valide one
* @type {?}
*/
AsiInputNumberComponent.prototype.toleratePattern;
/**
* use a non decimal pattern '^-?[0-9]*$'
* @type {?}
*/
AsiInputNumberComponent.prototype.noDecimal;
/** @type {?} */
AsiInputNumberComponent.prototype.inputElm;
/** @type {?} */
AsiInputNumberComponent.prototype.inputControl;
/** @type {?} */
AsiInputNumberComponent.prototype.oldValideValue;
/** @type {?} */
AsiInputNumberComponent.prototype.outputDelayValue;
/** @type {?} */
AsiInputNumberComponent.prototype.renderer;
/** @type {?} */
AsiInputNumberComponent.prototype.elementRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLWlucHV0LW51bWJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYXNpLW5ndG9vbHMvbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYXNpLWlucHV0LW51bWJlci9hc2ktaW5wdXQtbnVtYmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFVLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0lBZWMsbURBQTJCO0lBb0R0RSxpQ0FBb0IsUUFBbUIsRUFDN0I7UUFEVixZQUVFLGlCQUFPLFNBQ1I7UUFIbUIsY0FBUSxHQUFSLFFBQVEsQ0FBVztRQUM3QixnQkFBVSxHQUFWLFVBQVU7Ozs7OEJBM0MyRSxLQUFLOzs7O3FCQUdwRixDQUFDOzs7OzZCQVNPLEtBQUs7Ozs7MkJBR1AsS0FBSzs7OztzQkFTVixDQUFDOzs7O3dCQUdDLElBQUksTUFBTSxDQUFDLGdDQUFnQyxDQUFDOzs7O2dDQUdwQyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQzs7OzswQkFHcEMsS0FBSzs2QkFJWCxJQUFJLFdBQVcsRUFBRTtpQ0FHYixJQUFJLE9BQU8sRUFBVTs7S0FLdkM7Ozs7SUFFRCwwQ0FBUTs7O0lBQVI7UUFBQSxpQkEyREM7UUExREMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJ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QXZCLENBQXVCLENBQUM7NEJBQ3RELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO2lCQUNGOzs7O2dCQWhCcUUsU0FBUztnQkFBeEMsVUFBVTs7O3FCQW9COUMsS0FBSzt1QkFFTCxLQUFLO3dCQUdMLEtBQUs7Z0NBRUwsS0FBSzt1QkFHTCxLQUFLOytCQUdMLEtBQUs7K0JBR0wsS0FBSzsrQkFHTCxLQUFLOzZCQUdMLEtBQUs7c0JBR0wsS0FBSztzQkFHTCxLQUFLO3dCQUdMLEtBQUs7MEJBR0wsS0FBSztrQ0FHTCxLQUFLOzRCQUdMLEtBQUs7MkJBRUwsU0FBUyxTQUFDLE9BQU87O2tDQWhFcEI7RUFtQjZDLDJCQUEyQjtTQUEzRCx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWZhdWx0Q29udHJvbFZhbHVlQWNjZXNzb3IgfSBmcm9tICcuLy4uL2NvbW1vbi9kZWZhdWx0LWNvbnRyb2wtdmFsdWUtYWNjZXNzb3InO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBJbnB1dCwgRWxlbWVudFJlZiwgT25Jbml0LCBWaWV3Q2hpbGQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FzaS1pbnB1dC1udW1iZXInLFxuICBob3N0OiB7ICdjbGFzcyc6ICdhc2ktY29tcG9uZW50IGFzaS1pbnB1dC1udW1iZXInIH0sXG4gIHRlbXBsYXRlVXJsOiAnYXNpLWlucHV0LW51bWJlci5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQXNpSW5wdXROdW1iZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQXNpSW5wdXROdW1iZXJDb21wb25lbnQgZXh0ZW5kcyBEZWZhdWx0Q29udHJvbFZhbHVlQWNjZXNzb3IgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKiBodG1sIGlkICovXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG4gIC8qKiBodG1sIG5hbWUgKi9cbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKiBMYWJlbCB0byBkaXNwbGF5IChpcyB0cmFuc2xhdGVkKSAqL1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xuICAvKiogTGFiZWwgcG9zaXRpb24gKi9cbiAgQElucHV0KCkgbGFiZWxQb3NpdGlvbjogJ3RvcCcgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnYm90dG9tLWNlbnRlcicgfCAndG9wLWNlbnRlcicgPSAndG9wJztcblxuICAvKiogSW5jcmVtZW50IHZhbHVlIHdoZW4gY2xpY2sgb24gKyBvciAtICovXG4gIEBJbnB1dCgpIHN0ZXAgPSAxO1xuXG4gIC8qKiBJbmNyZW1lbnQgdmFsdWUgd2hlbiBjbGljayBvbiArICovXG4gIEBJbnB1dCgpIHN0ZXBJbmNyZWFzZTogbnVtYmVyO1xuXG4gIC8qKiBEZWNyZW1lbnQgdmFsdWUgd2hlbiBjbGljayBvbiAtICovXG4gIEBJbnB1dCgpIHN0ZXBEZWNyZWFzZTogbnVtYmVyO1xuXG4gIC8qKiBBbGxvdyB5b3UgdG8gZGlzYWJsZSB0aGUgaW5wdXQgKi9cbiAgQElucHV0KCkgZGlzYWJsZUlucHV0ID0gZmFsc2U7XG5cbiAgLyoqIEFsbG93IHlvdSB0byBoaWRlIHRoZSBhY3Rpb24gYnV0dG9uICovXG4gIEBJbnB1dCgpIGhpZGVBY3Rpb24gPSBmYWxzZTtcblxuICAvKiogTWluIHZhbHVlICovXG4gIEBJbnB1dCgpIG1pbjogbnVtYmVyO1xuXG4gIC8qKiBNYXggdmFsdWUgKi9cbiAgQElucHV0KCkgbWF4OiBudW1iZXI7XG5cbiAgLyoqIERlbGF5IGJlZm9yZSB2YWx1ZSBjaGFuZ2UgKi9cbiAgQElucHV0KCkgZGVsYXkgPSAwO1xuXG4gIC8qKiBOdW1iZXIgcmVnZXggKi9cbiAgQElucHV0KCkgcGF0dGVybiA9IG5ldyBSZWdFeHAoJ14tP1swLTldKlssXFwuXXswLDF9WzAtOV17MCwyfSQnKTtcblxuICAvKiogcGF0dGVybiB1c2VkIHRvIG1hbmFnZWQgdHlwZWQgdmFsdWUsIGlmIHRoaXMgcGF0dGVybiBpcyB0cnVlIHRoZSAndmFsdWUnIHdpbGwgYmUgdGhlIGxhc3QgdmFsaWRlIG9uZSAqL1xuICBASW5wdXQoKSB0b2xlcmF0ZVBhdHRlcm4gPSBuZXcgUmVnRXhwKCdeWzAtOV0qWyxcXC5dezF9JCcpO1xuXG4gIC8qKiB1c2UgYSBub24gZGVjaW1hbCBwYXR0ZXJuICdeLT9bMC05XSokJyAqL1xuICBASW5wdXQoKSBub0RlY2ltYWwgPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCdpbnB1dCcpIGlucHV0RWxtOiBFbGVtZW50UmVmO1xuXG4gIGlucHV0Q29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICBwcml2YXRlIG9sZFZhbGlkZVZhbHVlOiBhbnk7XG5cbiAgb3V0cHV0RGVsYXlWYWx1ZSA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLm5vRGVjaW1hbCkge1xuICAgICAgdGhpcy5wYXR0ZXJuID0gbmV3IFJlZ0V4cCgnXi0/WzAtOV0qJCcpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdsYWJlbC0nICsgdGhpcy5sYWJlbFBvc2l0aW9uKTtcblxuICAgIHRoaXMuaW5wdXRDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodmFsdWUgPT09ICcnIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5vdXRwdXREZWxheVZhbHVlLm5leHQobnVsbCk7XG4gICAgICAgIHRoaXMub2xkVmFsaWRlVmFsdWUgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRvbGVyYXRlVmFsdWUgPSAhdGhpcy5ub0RlY2ltYWwgJiYgdGhpcy50b2xlcmF0ZVBhdHRlcm4udGVzdCh2YWx1ZSk7XG4gICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgYSBtaW51cyBhbmQgaXMgYXV0aG9yaXplZFxuICAgICAgY29uc3QgbWludXNQb3NzaWJsZSA9ICh0aGlzLm1pbiA9PSBudWxsIHx8IHRoaXMubWluIDwgMCkgJiYgdmFsdWUubGVuZ3RoID09PSAxICYmIHZhbHVlLmluZGV4T2YoJy0nKSAhPT0gLTE7XG5cbiAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgnLCcsICdcXC4nKTtcblxuICAgICAgaWYgKHRoaXMucGF0dGVybi50ZXN0KHZhbHVlKSkge1xuICAgICAgICBpZiAoIWlzTmFOKE51bWJlcih2YWx1ZSkpKSB7XG4gICAgICAgICAgLy8gVGhlIHZhbHVlIGlzIGEgbnVtYmVyXG4gICAgICAgICAgaWYgKCEodGhpcy5tYXggIT0gbnVsbCAmJiB2YWx1ZSA+IHRoaXMubWF4KVxuICAgICAgICAgICAgJiYgISh0aGlzLm1pbiAhPSBudWxsICYmIHZhbHVlIDwgdGhpcy5taW4pICYmICF0b2xlcmF0ZVZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLm91dHB1dERlbGF5VmFsdWUubmV4dChOdW1iZXIodmFsdWUpKTtcbiAgICAgICAgICAgIGlmIChOdW1iZXIodmFsdWUpICE9PSAwKSB7XG4gICAgICAgICAgICAgIHRoaXMub2xkVmFsaWRlVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMub2xkVmFsaWRlVmFsdWUgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChtaW51c1Bvc3NpYmxlKSB7XG4gICAgICAgICAgdGhpcy5vdXRwdXREZWxheVZhbHVlLm5leHQobnVsbCk7XG4gICAgICAgICAgdGhpcy5vbGRWYWxpZGVWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXRvbGVyYXRlVmFsdWUgJiYgIW1pbnVzUG9zc2libGUpIHtcbiAgICAgICAgdGhpcy5pbnB1dENvbnRyb2wuc2V0VmFsdWUodGhpcy5vbGRWYWxpZGVWYWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vbGRWYWxpZGVWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmlucHV0Q29udHJvbC5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5vdXRwdXREZWxheVZhbHVlLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZGVsYXkpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5zdGVwSW5jcmVhc2UgPT0gbnVsbCkge1xuICAgICAgdGhpcy5zdGVwSW5jcmVhc2UgPSB0aGlzLnN0ZXBcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGVwRGVjcmVhc2UgPT0gbnVsbCkge1xuICAgICAgdGhpcy5zdGVwRGVjcmVhc2UgPSB0aGlzLnN0ZXA7XG4gICAgfVxuICB9XG5cbiAgaW5jcmVhc2UoKSB7XG4gICAgaWYgKHRoaXMuaW5wdXRDb250cm9sLnZhbHVlID09IG51bGwgfHwgdGhpcy5pbnB1dENvbnRyb2wudmFsdWUgPT09ICcnKSB7XG4gICAgICB0aGlzLmlucHV0Q29udHJvbC5zZXRWYWx1ZSh0aGlzLnN0ZXBJbmNyZWFzZSArICcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbnVtYmVyID0gTnVtYmVyKHRoaXMuaW5wdXRDb250cm9sLnZhbHVlKTtcbiAgICAgIHRoaXMuaW5wdXRDb250cm9sLnNldFZhbHVlKG51bWJlciArIHRoaXMuc3RlcEluY3JlYXNlICsgJycpO1xuICAgIH1cbiAgfVxuXG4gIGRlY3JlYXNlKCkge1xuICAgIGlmICh0aGlzLmlucHV0Q29udHJvbC52YWx1ZSA9PSBudWxsIHx8IHRoaXMuaW5wdXRDb250cm9sLnZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy5pbnB1dENvbnRyb2wuc2V0VmFsdWUoLXRoaXMuc3RlcERlY3JlYXNlICsgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBudW1iZXIgPSBOdW1iZXIodGhpcy5pbnB1dENvbnRyb2wudmFsdWUpO1xuICAgICAgdGhpcy5pbnB1dENvbnRyb2wuc2V0VmFsdWUobnVtYmVyIC0gdGhpcy5zdGVwRGVjcmVhc2UgKyAnJyk7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdGhpcy5wYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICB0aGlzLmlucHV0Q29udHJvbC5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnB1dENvbnRyb2wuc2V0VmFsdWUobnVsbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLm9sZFZhbGlkZVZhbHVlID0gdGhpcy5fdmFsdWU7XG4gIH1cbn1cbiJdfQ==