UNPKG

@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
/** * @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==