ngx-pluto
Version:
214 lines • 19 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, ViewEncapsulation, forwardRef, ContentChildren, QueryList, ChangeDetectorRef, Input, } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { NpRadioButton } from './radio-button.component';
/**
* 单选按钮组 - 此标签作为一个单选按钮分组使用,内部可包含多个单选按钮组件{\@link NpRadioButton|RadioButton}。
*
* <example-url>https://stackblitz.com/edit/np-radio-button-sample?embed=1&file=src/app/app.component.html</example-url>
*/
export class NpRadioGroup {
/**
* @param {?} _changeDetector
*/
constructor(_changeDetector) {
this._changeDetector = _changeDetector;
this._selected = null;
/**
* 单选框分组标签
*/
this.label = '';
/**
* 单选框分组是否必填,如为true,则标签前有红色星号,false则没有。注:此属性不作为校验属性,仅展示星号与否。
*/
this.isRequired = false;
this._controlValueAccessorChangeFn = (/**
* @return {?}
*/
() => { });
this.onTouched = (/**
* @return {?}
*/
() => { });
}
/**
* Value for the radio-group. Should equal the value of the selected radio button if there is
* a corresponding radio button with a matching value. If there is not such a corresponding
* radio button, this value persists to be applied in case a new radio button is added with a
* matching value.
* @return {?}
*/
get value() { return this._value; }
/**
* @param {?} newValue
* @return {?}
*/
set value(newValue) {
if (this._value !== newValue) {
// Set this before proceeding to ensure no circular loop occurs with selection.
this._value = newValue;
this._updateSelectedRadioFromValue();
this._checkSelectedRadioButton();
}
}
/**
* @return {?}
*/
ngAfterContentInit() {
this._radios.toArray().forEach((/**
* @param {?} cp
* @param {?} index
* @return {?}
*/
(cp, index) => {
cp.onSelectChanged.subscribe((/**
* @param {?} result
* @return {?}
*/
result => {
this.value = result;
console.log('<<<>>>', result);
this._controlValueAccessorChangeFn(result);
this._updateSelectedRadioFromValue();
// this._changeDetector.detectChanges();
}));
}));
//TODO: 第一次reactive form 赋值问题
setTimeout((/**
* @return {?}
*/
() => {
this._updateSelectedRadioFromValue();
this._checkSelectedRadioButton();
}), 0);
// this._selected = this._radios.find((cp, index) => cp.value === this.value);
// this._selected.checked=true
// this._selected.onChange();
}
/**
* Sets the model value. Implemented as part of ControlValueAccessor.
* @param {?} value
* @return {?}
*/
writeValue(value) {
this.value = value;
this._changeDetector.markForCheck();
}
/**
* Registers a callback to be triggered when the model value changes.
* Implemented as part of ControlValueAccessor.
* @param {?} fn Callback to be registered.
* @return {?}
*/
registerOnChange(fn) {
this._controlValueAccessorChangeFn = fn;
}
/**
* Registers a callback to be triggered when the control is touched.
* Implemented as part of ControlValueAccessor.
* @param {?} fn Callback to be registered.
* @return {?}
*/
registerOnTouched(fn) {
this.onTouched = fn;
}
/**
* @return {?}
*/
_checkSelectedRadioButton() {
if (this._selected && !this._selected.checked) {
this._selected.checked = true;
}
}
/**
* Updates the `selected` radio button from the internal _value state.
* @private
* @return {?}
*/
_updateSelectedRadioFromValue() {
// If the value already matches the selected radio, do nothing.
/** @type {?} */
const isAlreadySelected = this._selected !== null && this._selected.value === this._value;
if (this._radios && !isAlreadySelected) {
this._selected = null;
this._radios.forEach((/**
* @param {?} radio
* @return {?}
*/
radio => {
radio.checked = this.value === radio.value;
if (radio.checked) {
this._selected = radio;
}
}));
}
}
}
NpRadioGroup.decorators = [
{ type: Component, args: [{
selector: `np-radio-group`,
template: "<div class=\"np-radio-group-wrapper flex-wrap row-flex\">\r\n <div class=\"flex-wrap col-flex\" *ngIf=\"label\">\r\n <label for=\"np-input\" class=\"np-lbl\">\r\n <span class=\"form-required\" *ngIf=\"isRequired\">*</span>\r\n {{ label }}\r\n </label>\r\n </div>\r\n <div class=\"flex-wrap row-flex\" style=\"width: auto\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n",
encapsulation: ViewEncapsulation.None,
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef((/**
* @return {?}
*/
() => NpRadioGroup)),
multi: true,
}
],
styles: [".backdrop-transparent{opacity:0}.flex-wrap{display:flex}.wrap{flex-wrap:wrap}.col-flex{flex-direction:column}.row-flex{flex-direction:row}.middle-flex{justify-content:center;align-items:center}.space-between{justify-content:space-between;align-items:center}.align-center{align-items:center}.np-row{display:flex;flex-direction:row;flex-wrap:wrap;width:100%}.np-column{display:flex;flex-direction:column;flex-basis:100%;flex:1}.np-radio-group-wrapper{align-items:baseline;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.np-radio-group-wrapper .np-lbl{width:80px;margin-right:20px;text-align:right;font-size:13px;font-weight:700}.np-radio-button-wrapper{margin:.5em 1.428571em 0 0;padding-left:1.785714em;position:relative;font-weight:400;font-size:14px;line-height:1.5em;cursor:pointer;display:inline-block}.np-radio-button-wrapper.rectangle{padding-left:0}.np-radio-button-wrapper .radio{opacity:0;z-index:1;left:.214286em;top:0;position:absolute;width:1em;height:1em;margin:0;display:block}.np-radio-button-wrapper .radio.radio-checked+span::after{position:absolute;content:'';width:.857142em;height:.857142em;top:.071429em;left:.071429em;border-radius:1em}.np-radio-button-wrapper .rectangle-radio{text-align:center;padding:6px 10px}.np-radio-button-wrapper span.input-helper{position:absolute;left:.142857em;top:.142857em;width:1.142857em;height:1.142857em;box-sizing:border-box}.np-radio-button-wrapper .radio+span.input-helper{border-radius:1em}.np-radio-button-wrapper input[type=radio]::before,.np-radio-button-wrapper input[type=radio]:checked::before{content:none}"]
}] }
];
/** @nocollapse */
NpRadioGroup.ctorParameters = () => [
{ type: ChangeDetectorRef }
];
NpRadioGroup.propDecorators = {
value: [{ type: Input }],
label: [{ type: Input }],
isRequired: [{ type: Input }],
_radios: [{ type: ContentChildren, args: [forwardRef((/**
* @return {?}
*/
() => NpRadioButton)), { descendants: true },] }]
};
if (false) {
/**
* @type {?}
* @private
*/
NpRadioGroup.prototype._selected;
/**
* @type {?}
* @private
*/
NpRadioGroup.prototype._value;
/**
* 单选框分组标签
* @type {?}
*/
NpRadioGroup.prototype.label;
/**
* 单选框分组是否必填,如为true,则标签前有红色星号,false则没有。注:此属性不作为校验属性,仅展示星号与否。
* @type {?}
*/
NpRadioGroup.prototype.isRequired;
/** @type {?} */
NpRadioGroup.prototype._radios;
/** @type {?} */
NpRadioGroup.prototype._controlValueAccessorChangeFn;
/** @type {?} */
NpRadioGroup.prototype.onTouched;
/**
* @type {?}
* @private
*/
NpRadioGroup.prototype._changeDetector;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXBsdXRvLyIsInNvdXJjZXMiOlsibGliL3JhZGlvLWdyb3VwL3JhZGlvLWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEdBQW1DLE1BQU0sZUFBZSxDQUFDO0FBQ2hLLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7OztBQW9CekQsTUFBTSxPQUFPLFlBQVk7Ozs7SUFtQnZCLFlBQ1UsZUFBa0M7UUFBbEMsb0JBQWUsR0FBZixlQUFlLENBQW1CO1FBSXBDLGNBQVMsR0FBeUIsSUFBSSxDQUFDOzs7O1FBSy9DLFVBQUssR0FBRyxFQUFFLENBQUM7Ozs7UUFHWCxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBR25CLGtDQUE2Qjs7O1FBQXlCLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBQztRQUNoRSxjQUFTOzs7UUFBYyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUM7SUFkakMsQ0FBQzs7Ozs7Ozs7SUFmRCxJQUNJLEtBQUssS0FBVSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOzs7OztJQUN4QyxJQUFJLEtBQUssQ0FBQyxRQUFhO1FBQ3JCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUU7WUFDNUIsK0VBQStFO1lBQy9FLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO1lBRXZCLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQzs7OztJQW9CRCxrQkFBa0I7UUFFaEIs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SUFFWCxrQ0FDbUI7O0lBQ25CLCtCQUNrQzs7SUFDbEMscURBQWdFOztJQUNoRSxpQ0FBaUM7Ozs7O0lBaEIvQix1Q0FBMEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBmb3J3YXJkUmVmLCBDb250ZW50Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIElucHV0LCBIb3N0TGlzdGVuZXIsIEFmdGVyQ29udGVudEluaXQsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTnBSYWRpb0J1dHRvbiB9IGZyb20gJy4vcmFkaW8tYnV0dG9uLmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICog5Y2V6YCJ5oyJ6ZKu57uEIC0g5q2k5qCH562+5L2c5Li65LiA5Liq5Y2V6YCJ5oyJ6ZKu5YiG57uE5L2/55So77yM5YaF6YOo5Y+v5YyF5ZCr5aSa5Liq5Y2V6YCJ5oyJ6ZKu57uE5Lu2e0BsaW5rIE5wUmFkaW9CdXR0b258UmFkaW9CdXR0b25944CCXHJcbiAqIFxyXG4gKiA8ZXhhbXBsZS11cmw+aHR0cHM6Ly9zdGFja2JsaXR6LmNvbS9lZGl0L25wLXJhZGlvLWJ1dHRvbi1zYW1wbGU/ZW1iZWQ9MSZmaWxlPXNyYy9hcHAvYXBwLmNvbXBvbmVudC5odG1sPC9leGFtcGxlLXVybD5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBgbnAtcmFkaW8tZ3JvdXBgLFxyXG4gIHRlbXBsYXRlVXJsOiAncmFkaW8tZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWydyYWRpby1ncm91cC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOcFJhZGlvR3JvdXApLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH1dXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgTnBSYWRpb0dyb3VwIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIC8qKlxyXG4gICAqIFZhbHVlIGZvciB0aGUgcmFkaW8tZ3JvdXAuIFNob3VsZCBlcXVhbCB0aGUgdmFsdWUgb2YgdGhlIHNlbGVjdGVkIHJhZGlvIGJ1dHRvbiBpZiB0aGVyZSBpc1xyXG4gICAqIGEgY29ycmVzcG9uZGluZyByYWRpbyBidXR0b24gd2l0aCBhIG1hdGNoaW5nIHZhbHVlLiBJZiB0aGVyZSBpcyBub3Qgc3VjaCBhIGNvcnJlc3BvbmRpbmdcclxuICAgKiByYWRpbyBidXR0b24sIHRoaXMgdmFsdWUgcGVyc2lzdHMgdG8gYmUgYXBwbGllZCBpbiBjYXNlIGEgbmV3IHJhZGlvIGJ1dHRvbiBpcyBhZGRlZCB3aXRoIGFcclxuICAgKiBtYXRjaGluZyB2YWx1ZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIGdldCB2YWx1ZSgpOiBhbnkgeyByZXR1cm4gdGhpcy5fdmFsdWU7IH1cclxuICBzZXQgdmFsdWUobmV3VmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuX3ZhbHVlICE9PSBuZXdWYWx1ZSkge1xyXG4gICAgICAvLyBTZXQgdGhpcyBiZWZvcmUgcHJvY2VlZGluZyB0byBlbnN1cmUgbm8gY2lyY3VsYXIgbG9vcCBvY2N1cnMgd2l0aCBzZWxlY3Rpb24uXHJcbiAgICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XHJcblxyXG4gICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZFJhZGlvRnJvbVZhbHVlKCk7XHJcbiAgICAgIHRoaXMuX2NoZWNrU2VsZWN0ZWRSYWRpb0J1dHRvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NlbGVjdGVkOiBOcFJhZGlvQnV0dG9uIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfdmFsdWU7XHJcblxyXG4gIC8qKuWNlemAieahhuWIhue7hOagh+etviAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgbGFiZWwgPSAnJztcclxuICAvKirljZXpgInmoYbliIbnu4TmmK/lkKblv4XloavvvIzlpoLkuLp0cnVl77yM5YiZ5qCH562+5YmN5pyJ57qi6Imy5pif5Y+377yMZmFsc2XliJnmsqHmnInjgILms6jvvJrmraTlsZ7mgKfkuI3kvZzkuLrmoKHpqozlsZ7mgKfvvIzku4XlsZXnpLrmmJ/lj7fkuI7lkKbjgIIgKi9cclxuICBASW5wdXQoKVxyXG4gIGlzUmVxdWlyZWQgPSBmYWxzZTtcclxuICBAQ29udGVudENoaWxkcmVuKGZvcndhcmRSZWYoKCkgPT4gTnBSYWRpb0J1dHRvbiksIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcclxuICBfcmFkaW9zOiBRdWVyeUxpc3Q8TnBSYWRpb0J1dHRvbj47XHJcbiAgX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm46ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4geyB9O1xyXG4gIG9uVG91Y2hlZDogKCkgPT4gYW55ID0gKCkgPT4geyB9O1xyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLl9yYWRpb3MudG9BcnJheSgpLmZvckVhY2goKGNwLCBpbmRleCkgPT4ge1xyXG4gICAgICBjcC5vblNlbGVjdENoYW5nZWQuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHJlc3VsdDtcclxuICAgICAgICBjb25zb2xlLmxvZygnPDw8Pj4+JywgcmVzdWx0KTtcclxuICAgICAgICB0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKHJlc3VsdCk7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRSYWRpb0Zyb21WYWx1ZSgpO1xyXG4gICAgICAgIC8vIHRoaXMuX2NoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgICAvL1RPRE86IOesrOS4gOasoXJlYWN0aXZlIGZvcm0g6LWL5YC86Zeu6aKYXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRSYWRpb0Zyb21WYWx1ZSgpO1xyXG4gICAgICB0aGlzLl9jaGVja1NlbGVjdGVkUmFkaW9CdXR0b24oKTtcclxuICAgIH0sIDApO1xyXG5cclxuICAgIC8vIHRoaXMuX3NlbGVjdGVkID0gdGhpcy5fcmFkaW9zLmZpbmQoKGNwLCBpbmRleCkgPT4gY3AudmFsdWUgPT09IHRoaXMudmFsdWUpO1xyXG4gICAgLy8gdGhpcy5fc2VsZWN0ZWQuY2hlY2tlZD10cnVlXHJcbiAgICAvLyB0aGlzLl9zZWxlY3RlZC5vbkNoYW5nZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gKiBTZXRzIHRoZSBtb2RlbCB2YWx1ZS4gSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cclxuICogQHBhcmFtIHZhbHVlXHJcbiAqL1xyXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayB0byBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgbW9kZWwgdmFsdWUgY2hhbmdlcy5cclxuICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxyXG4gICAqIEBwYXJhbSBmbiBDYWxsYmFjayB0byBiZSByZWdpc3RlcmVkLlxyXG4gICAqL1xyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKSB7XHJcbiAgICB0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuID0gZm47XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayB0byBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgY29udHJvbCBpcyB0b3VjaGVkLlxyXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXHJcbiAgICogQHBhcmFtIGZuIENhbGxiYWNrIHRvIGJlIHJlZ2lzdGVyZWQuXHJcbiAgICovXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIF9jaGVja1NlbGVjdGVkUmFkaW9CdXR0b24oKSB7XHJcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWQgJiYgIXRoaXMuX3NlbGVjdGVkLmNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWQuY2hlY2tlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogVXBkYXRlcyB0aGUgYHNlbGVjdGVkYCByYWRpbyBidXR0b24gZnJvbSB0aGUgaW50ZXJuYWwgX3ZhbHVlIHN0YXRlLiAqL1xyXG4gIHByaXZhdGUgX3VwZGF0ZVNlbGVjdGVkUmFkaW9Gcm9tVmFsdWUoKTogdm9pZCB7XHJcbiAgICAvLyBJZiB0aGUgdmFsdWUgYWxyZWFkeSBtYXRjaGVzIHRoZSBzZWxlY3RlZCByYWRpbywgZG8gbm90aGluZy5cclxuICAgIGNvbnN0IGlzQWxyZWFkeVNlbGVjdGVkID0gdGhpcy5fc2VsZWN0ZWQgIT09IG51bGwgJiYgdGhpcy5fc2VsZWN0ZWQudmFsdWUgPT09IHRoaXMuX3ZhbHVlO1xyXG5cclxuICAgIGlmICh0aGlzLl9yYWRpb3MgJiYgIWlzQWxyZWFkeVNlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkID0gbnVsbDtcclxuICAgICAgdGhpcy5fcmFkaW9zLmZvckVhY2gocmFkaW8gPT4ge1xyXG4gICAgICAgIHJhZGlvLmNoZWNrZWQgPSB0aGlzLnZhbHVlID09PSByYWRpby52YWx1ZTtcclxuICAgICAgICBpZiAocmFkaW8uY2hlY2tlZCkge1xyXG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSByYWRpbztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=