@asi-ngtools/lib
Version:
This project is a little components library, simple to use, which will help you to simplify your project.
264 lines (263 loc) • 21.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { DefaultControlValueAccessor } from './../common/default-control-value-accessor';
import { AsiRadioButtonComponent } from './asi-radio-button/asi-radio-button.component';
import { Input, Component, TemplateRef, ViewChild, ContentChildren, QueryList, forwardRef, ElementRef, Renderer2 } from '@angular/core';
import * as nh from '../../native-helper';
var AsiRadioButtonGroupComponent = /** @class */ (function (_super) {
tslib_1.__extends(AsiRadioButtonGroupComponent, _super);
function AsiRadioButtonGroupComponent(renderer, elementRef) {
var _this = _super.call(this) || this;
_this.renderer = renderer;
_this.elementRef = elementRef;
/**
* Label position
*/
_this.labelPosition = 'top';
/**
* Vertical / Horizontal
*/
_this.vertical = false;
/**
* Allow you to select multiple value
*/
_this.multiple = false;
/**
* Track data base on a sub attribute rather than reference
*/
_this.trackBy = null;
_this.radios = new Array();
return _this;
}
/**
* @return {?}
*/
AsiRadioButtonGroupComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.renderer.addClass(this.elementRef.nativeElement, 'label-' + this.labelPosition);
if (this.vertical) {
this.renderer.addClass(this.elementRef.nativeElement, 'asi-vertical');
}
};
/**
* @return {?}
*/
AsiRadioButtonGroupComponent.prototype.getRadios = /**
* @return {?}
*/
function () {
return this.radios;
};
/**
* @param {?} radioEvent
* @return {?}
*/
AsiRadioButtonGroupComponent.prototype.onRadioChecked = /**
* @param {?} radioEvent
* @return {?}
*/
function (radioEvent) {
var _this = this;
/** @type {?} */
var radio = this.getRadioForIndex(radioEvent.index);
if (radioEvent.value) {
if (this.multiple) {
if (this.value == null) {
this._value = [];
}
this._value.push(radio.value);
}
else {
this._value = radio.value;
}
}
else {
if (this.multiple) {
nh.remove(this._value, function (value) {
if (_this.trackBy != null) {
return radio.value[_this.trackBy] === value[_this.trackBy];
}
else {
return radio.value === value;
}
});
}
else {
this._value = null;
}
}
// fire model change
this.value = this._value;
this.initRadioButton(this.value);
};
/**
* @param {?} index
* @return {?}
*/
AsiRadioButtonGroupComponent.prototype.getRadioForIndex = /**
* @param {?} index
* @return {?}
*/
function (index) {
return nh.find(this.radios, function (radio) {
return radio.index === index;
});
};
/**
* @return {?}
*/
AsiRadioButtonGroupComponent.prototype.ngAfterContentInit = /**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var index = -1;
this.queryRadios.forEach(function (radio) {
radio.index = ++index;
_this.radios.push(radio);
});
this.queryRadios.changes.subscribe(function (items) {
_this.radios = [];
index = -1;
items.forEach(function (radio) {
radio.index = ++index;
_this.radios.push(radio);
});
});
this.initRadioButton(this.value);
};
/**
* @param {?} value
* @return {?}
*/
AsiRadioButtonGroupComponent.prototype.writeValue = /**
* @param {?} value
* @return {?}
*/
function (value) {
if (this.multiple && !nh.isArray(value) && value != null) {
value = [value];
}
this._value = value;
this.initRadioButton(value);
};
/**
* @param {?} value
* @return {?}
*/
AsiRadioButtonGroupComponent.prototype.initRadioButton = /**
* @param {?} value
* @return {?}
*/
function (value) {
var _this = this;
if (nh.isEmpty(value)) {
this.radios.forEach(function (radio) {
radio.active = false;
});
}
else {
if (nh.isArray(value)) {
this.radios.forEach(function (radio) {
if (_this.trackBy != null) {
radio.active = nh.find(_this.value, function (val) {
return radio.value[_this.trackBy] === val[_this.trackBy];
}) != null;
}
else {
radio.active = nh.find(_this.value, function (val) {
return radio.value === val;
}) != null;
}
});
}
else {
if (this.trackBy != null) {
this.radios.forEach(function (radio) {
radio.active = radio.value[_this.trackBy] === value[_this.trackBy];
});
}
else {
this.radios.forEach(function (radio) {
radio.active = (radio.value === value);
});
}
}
}
};
AsiRadioButtonGroupComponent.decorators = [
{ type: Component, args: [{
selector: 'asi-radio-button-group',
template: "<label class=\"input-label\" *ngIf=\"label != null\">{{label | translate}}</label>\n<div class=\"asi-radio-button-container\">\n <asi-radio-button-element *ngFor=\"let radio of getRadios()\"\n [radio]=\"radio\"\n [disabled]=\"disabled\"\n [value]=\"radio.active\"\n (onValueChange)=\"onRadioChecked($event)\">\n </asi-radio-button-element>\n</div>\n",
host: { 'class': 'asi-component asi-radio-button-group' },
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(function () { return AsiRadioButtonGroupComponent; }),
multi: true
}
]
}] }
];
/** @nocollapse */
AsiRadioButtonGroupComponent.ctorParameters = function () { return [
{ type: Renderer2 },
{ type: ElementRef }
]; };
AsiRadioButtonGroupComponent.propDecorators = {
label: [{ type: Input }],
labelPosition: [{ type: Input }],
vertical: [{ type: Input }],
multiple: [{ type: Input }],
trackBy: [{ type: Input }],
queryRadios: [{ type: ContentChildren, args: [AsiRadioButtonComponent,] }],
contentTemplate: [{ type: ViewChild, args: [TemplateRef,] }]
};
return AsiRadioButtonGroupComponent;
}(DefaultControlValueAccessor));
export { AsiRadioButtonGroupComponent };
if (false) {
/**
* Label to display (is translated)
* @type {?}
*/
AsiRadioButtonGroupComponent.prototype.label;
/**
* Label position
* @type {?}
*/
AsiRadioButtonGroupComponent.prototype.labelPosition;
/**
* Vertical / Horizontal
* @type {?}
*/
AsiRadioButtonGroupComponent.prototype.vertical;
/**
* Allow you to select multiple value
* @type {?}
*/
AsiRadioButtonGroupComponent.prototype.multiple;
/**
* Track data base on a sub attribute rather than reference
* @type {?}
*/
AsiRadioButtonGroupComponent.prototype.trackBy;
/** @type {?} */
AsiRadioButtonGroupComponent.prototype.queryRadios;
/** @type {?} */
AsiRadioButtonGroupComponent.prototype.contentTemplate;
/** @type {?} */
AsiRadioButtonGroupComponent.prototype.radios;
/** @type {?} */
AsiRadioButtonGroupComponent.prototype.renderer;
/** @type {?} */
AsiRadioButtonGroupComponent.prototype.elementRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLXJhZGlvLWJ1dHRvbi1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYXNpLW5ndG9vbHMvbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYXNpLXJhZGlvLWJ1dHRvbi1ncm91cC9hc2ktcmFkaW8tYnV0dG9uLWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3hGLE9BQU8sRUFDTCxLQUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFDcEUsVUFBVSxFQUE0QixVQUFVLEVBQUUsU0FBUyxFQUM1RCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFBOztJQWNTLHdEQUEyQjtJQXNCM0Usc0NBQW9CLFFBQW1CLEVBQzdCO1FBRFYsWUFFRSxpQkFBTyxTQUNSO1FBSG1CLGNBQVEsR0FBUixRQUFRLENBQVc7UUFDN0IsZ0JBQVUsR0FBVixVQUFVOzs7OzhCQWxCMkUsS0FBSzs7Ozt5QkFHaEYsS0FBSzs7Ozt5QkFHTCxLQUFLOzs7O3dCQUdFLElBQUk7dUJBTXRCLElBQUksS0FBSyxFQUEyQjs7S0FLNUM7Ozs7SUFFRCwrQ0FBUTs7O0lBQVI7UUFDRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JGLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLElBQUksQ0FBQyxRQUFRLENB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QUNaO3FCQUNGO2lCQUNGOzs7O2dCQWhCbUQsU0FBUztnQkFBckIsVUFBVTs7O3dCQW9CL0MsS0FBSztnQ0FFTCxLQUFLOzJCQUdMLEtBQUs7MkJBR0wsS0FBSzswQkFHTCxLQUFLOzhCQUVMLGVBQWUsU0FBQyx1QkFBdUI7a0NBRXZDLFNBQVMsU0FBQyxXQUFXOzt1Q0F4Q3hCO0VBc0JrRCwyQkFBMkI7U0FBaEUsNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERlZmF1bHRDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJy4vLi4vY29tbW9uL2RlZmF1bHQtY29udHJvbC12YWx1ZS1hY2Nlc3Nvcic7XHJcbmltcG9ydCB7IEFzaVJhZGlvQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9hc2ktcmFkaW8tYnV0dG9uL2FzaS1yYWRpby1idXR0b24uY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBJbnB1dCwgQ29tcG9uZW50LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBDb250ZW50Q2hpbGRyZW4sIFF1ZXJ5TGlzdCxcclxuICBmb3J3YXJkUmVmLCBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIEVsZW1lbnRSZWYsIFJlbmRlcmVyMlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0ICogYXMgbmggZnJvbSAnLi4vLi4vbmF0aXZlLWhlbHBlcidcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXNpLXJhZGlvLWJ1dHRvbi1ncm91cCcsXHJcbiAgdGVtcGxhdGVVcmw6ICdhc2ktcmFkaW8tYnV0dG9uLWdyb3VwLmNvbXBvbmVudC5odG1sJyxcclxuICBob3N0OiB7ICdjbGFzcyc6ICdhc2ktY29tcG9uZW50IGFzaS1yYWRpby1idXR0b24tZ3JvdXAnIH0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBc2lSYWRpb0J1dHRvbkdyb3VwQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBc2lSYWRpb0J1dHRvbkdyb3VwQ29tcG9uZW50IGV4dGVuZHMgRGVmYXVsdENvbnRyb2xWYWx1ZUFjY2Vzc29yIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0IHtcclxuXHJcbiAgLyoqIExhYmVsIHRvIGRpc3BsYXkgKGlzIHRyYW5zbGF0ZWQpICovXHJcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcclxuICAvKiogTGFiZWwgcG9zaXRpb24gKi9cclxuICBASW5wdXQoKSBsYWJlbFBvc2l0aW9uOiAndG9wJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAnYm90dG9tJyB8ICdib3R0b20tY2VudGVyJyB8ICd0b3AtY2VudGVyJyA9ICd0b3AnO1xyXG5cclxuICAvKiogVmVydGljYWwgLyBIb3Jpem9udGFsICovXHJcbiAgQElucHV0KCkgdmVydGljYWwgPSBmYWxzZTtcclxuXHJcbiAgLyoqIEFsbG93IHlvdSB0byBzZWxlY3QgbXVsdGlwbGUgdmFsdWUgKi9cclxuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlO1xyXG5cclxuICAvKiogVHJhY2sgZGF0YSBiYXNlIG9uIGEgc3ViIGF0dHJpYnV0ZSByYXRoZXIgdGhhbiByZWZlcmVuY2UgICovXHJcbiAgQElucHV0KCkgdHJhY2tCeTogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgQENvbnRlbnRDaGlsZHJlbihBc2lSYWRpb0J1dHRvbkNvbXBvbmVudCkgcXVlcnlSYWRpb3M6IFF1ZXJ5TGlzdDxBc2lSYWRpb0J1dHRvbkNvbXBvbmVudD47XHJcblxyXG4gIEBWaWV3Q2hpbGQoVGVtcGxhdGVSZWYpIGNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgcmFkaW9zID0gbmV3IEFycmF5PEFzaVJhZGlvQnV0dG9uQ29tcG9uZW50PigpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdsYWJlbC0nICsgdGhpcy5sYWJlbFBvc2l0aW9uKTtcclxuICAgIGlmICh0aGlzLnZlcnRpY2FsKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdhc2ktdmVydGljYWwnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJhZGlvcygpIHtcclxuICAgIHJldHVybiB0aGlzLnJhZGlvcztcclxuICB9XHJcblxyXG4gIG9uUmFkaW9DaGVja2VkKHJhZGlvRXZlbnQ6IHsgaW5kZXg6IG51bWJlciwgdmFsdWU6IGJvb2xlYW4gfSkge1xyXG4gICAgY29uc3QgcmFkaW8gPSB0aGlzLmdldFJhZGlvRm9ySW5kZXgocmFkaW9FdmVudC5pbmRleCk7XHJcbiAgICBpZiAocmFkaW9FdmVudC52YWx1ZSkge1xyXG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlID09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuX3ZhbHVlID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3ZhbHVlLnB1c2gocmFkaW8udmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gcmFkaW8udmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgbmgucmVtb3ZlKHRoaXMuX3ZhbHVlLCAodmFsdWUpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLnRyYWNrQnkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmFkaW8udmFsdWVbdGhpcy50cmFja0J5XSA9PT0gdmFsdWVbdGhpcy50cmFja0J5XTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiByYWRpby52YWx1ZSA9PT0gdmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZmlyZSBtb2RlbCBjaGFuZ2VcclxuICAgIHRoaXMudmFsdWUgPSB0aGlzLl92YWx1ZTtcclxuICAgIHRoaXMuaW5pdFJhZGlvQnV0dG9uKHRoaXMudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSYWRpb0ZvckluZGV4KGluZGV4OiBudW1iZXIpIHtcclxuICAgIHJldHVybiBuaC5maW5kKHRoaXMucmFkaW9zLCAocmFkaW8pID0+IHtcclxuICAgICAgcmV0dXJuIHJhZGlvLmluZGV4ID09PSBpbmRleDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgbGV0IGluZGV4ID0gLTE7XHJcbiAgICB0aGlzLnF1ZXJ5UmFkaW9zLmZvckVhY2gocmFkaW8gPT4ge1xyXG4gICAgICByYWRpby5pbmRleCA9ICsraW5kZXg7XHJcbiAgICAgIHRoaXMucmFkaW9zLnB1c2gocmFkaW8pXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnF1ZXJ5UmFkaW9zLmNoYW5nZXMuc3Vic2NyaWJlKChpdGVtcykgPT4ge1xyXG4gICAgICB0aGlzLnJhZGlvcyA9IFtdO1xyXG4gICAgICBpbmRleCA9IC0xO1xyXG4gICAgICBpdGVtcy5mb3JFYWNoKHJhZGlvID0+IHtcclxuICAgICAgICByYWRpby5pbmRleCA9ICsraW5kZXg7XHJcbiAgICAgICAgdGhpcy5yYWRpb3MucHVzaChyYWRpbylcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmluaXRSYWRpb0J1dHRvbih0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgIW5oLmlzQXJyYXkodmFsdWUpICYmIHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgdmFsdWUgPSBbdmFsdWVdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuaW5pdFJhZGlvQnV0dG9uKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdFJhZGlvQnV0dG9uKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmIChuaC5pc0VtcHR5KHZhbHVlKSkge1xyXG4gICAgICB0aGlzLnJhZGlvcy5mb3JFYWNoKChyYWRpbykgPT4ge1xyXG4gICAgICAgIHJhZGlvLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChuaC5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgIHRoaXMucmFkaW9zLmZvckVhY2goKHJhZGlvKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy50cmFja0J5ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmFkaW8uYWN0aXZlID0gbmguZmluZCh0aGlzLnZhbHVlLCAodmFsKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJhZGlvLnZhbHVlW3RoaXMudHJhY2tCeV0gPT09IHZhbFt0aGlzLnRyYWNrQnldO1xyXG4gICAgICAgICAgICB9KSAhPSBudWxsO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmFkaW8uYWN0aXZlID0gbmguZmluZCh0aGlzLnZhbHVlLCAodmFsKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJhZGlvLnZhbHVlID09PSB2YWw7XHJcbiAgICAgICAgICAgIH0pICE9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMudHJhY2tCeSAhPSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLnJhZGlvcy5mb3JFYWNoKChyYWRpbykgPT4ge1xyXG4gICAgICAgICAgICByYWRpby5hY3RpdmUgPSByYWRpby52YWx1ZVt0aGlzLnRyYWNrQnldID09PSB2YWx1ZVt0aGlzLnRyYWNrQnldO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmFkaW9zLmZvckVhY2goKHJhZGlvKSA9PiB7XHJcbiAgICAgICAgICAgIHJhZGlvLmFjdGl2ZSA9IChyYWRpby52YWx1ZSA9PT0gdmFsdWUpXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19