@asi-ngtools/lib
Version:
This project is a little components library, simple to use, which will help you to simplify your project.
356 lines (355 loc) • 28 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 } from '@angular/forms';
import { Component, Input, ContentChild, forwardRef, Renderer2, ElementRef } from '@angular/core';
import { AsiComponentTemplateOptionDef, AsiComponentTemplateEmptyDef, AsiComponentTemplateSelectedDef } from '../common/asi-component-template';
import * as nh from '../../native-helper';
var AsiSelectComponent = /** @class */ (function (_super) {
tslib_1.__extends(AsiSelectComponent, _super);
function AsiSelectComponent(renderer, elementRef) {
var _this = _super.call(this) || this;
_this.renderer = renderer;
_this.elementRef = elementRef;
/**
* Label position
*/
_this.labelPosition = 'top';
/**
* Multi selection
*/
_this.multiple = false;
/**
* Add an empty value (template must be define)
*/
_this.withEmptyValue = false;
_this.open = false;
_this.allChecked = false;
return _this;
}
/**
* @return {?}
*/
AsiSelectComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.renderer.addClass(this.elementRef.nativeElement, 'label-' + this.labelPosition);
if (this.multiple) {
this.renderer.addClass(this.elementRef.nativeElement, 'multiple');
}
};
/**
* @return {?}
*/
AsiSelectComponent.prototype.onDropdownClose = /**
* @return {?}
*/
function () {
this.open = false;
};
/**
* @return {?}
*/
AsiSelectComponent.prototype.isOpened = /**
* @return {?}
*/
function () {
return this.open;
};
/**
* @return {?}
*/
AsiSelectComponent.prototype.ngOnChanges = /**
* @return {?}
*/
function () {
this.initData();
};
/**
* @return {?}
*/
AsiSelectComponent.prototype.initData = /**
* @return {?}
*/
function () {
var _this = this;
this.selectDatas = [];
this.data = this.data || [];
if (this.withEmptyValue) {
this.selectDatas.push(null);
}
this.data.forEach(function (data) {
/** @type {?} */
var proxyData = {
selected: false,
value: data
};
_this.selectDatas.push(proxyData);
});
};
/**
* @param {?} value
* @return {?}
*/
AsiSelectComponent.prototype.checkAll = /**
* @param {?} value
* @return {?}
*/
function (value) {
var _this = this;
this.allChecked = value;
this.selectDatas.forEach(function (data) {
if (data != null && (value !== data.selected)) {
_this.internalSelectValue(null, data);
}
});
this.onModelChange(this._value);
};
/**
* @return {?}
*/
AsiSelectComponent.prototype.updateAllChecked = /**
* @return {?}
*/
function () {
this.allChecked = nh.find(this.selectDatas, function (data) {
return data != null ? !data.selected : false;
}) == null;
};
/**
* @param {?} event
* @param {?} data
* @return {?}
*/
AsiSelectComponent.prototype.selectValue = /**
* @param {?} event
* @param {?} data
* @return {?}
*/
function (event, data) {
this.internalSelectValue(event, data);
this.onModelChange(this._value);
};
/**
* @param {?} event
* @param {?} data
* @return {?}
*/
AsiSelectComponent.prototype.internalSelectValue = /**
* @param {?} event
* @param {?} data
* @return {?}
*/
function (event, data) {
var _this = this;
if (data == null) {
this.onModelChange(null);
this.open = false;
return;
}
/** @type {?} */
var realValue = data.value;
if (this.multiple) {
if (event != null) {
event.stopPropagation();
}
if (this._value == null) {
this._value = [];
}
/** @type {?} */
var removed = nh.remove(this._value, function (value) {
if (value != null) {
if (_this.trackBy != null) {
return value[_this.trackBy] === realValue[_this.trackBy];
}
else {
return value === realValue;
}
}
return false;
});
if (nh.isEmpty(removed)) {
this.value.push(realValue);
data.selected = true;
}
else {
data.selected = false;
}
if (nh.isEmpty(this._value)) {
this._value = null;
}
if (event != null) {
this.updateAllChecked();
}
}
else {
this.open = false;
this._value = realValue;
}
};
/**
* @return {?}
*/
AsiSelectComponent.prototype.toggleSelect = /**
* @return {?}
*/
function () {
this.open = !this.open;
};
/**
* @param {?} value
* @return {?}
*/
AsiSelectComponent.prototype.writeValue = /**
* @param {?} value
* @return {?}
*/
function (value) {
var _this = this;
if (isNaN(value) && nh.isEmpty(value)) {
this._value = null;
}
else {
this._value = value;
}
if (this.multiple) {
if (this._value != null) {
this.selectDatas.forEach(function (data) {
if (data != null) {
data.selected = nh.find(_this.value, function (possibleValue) {
if (possibleValue != null) {
if (_this.trackBy != null) {
return possibleValue[_this.trackBy] === data.value[_this.trackBy];
}
else {
return possibleValue === data.value;
}
}
return false;
}) != null;
}
});
}
else {
this.selectDatas.forEach(function (data) {
if (data != null) {
data.selected = false;
}
});
}
this.updateAllChecked();
}
this.manageHasValue();
};
/**
* @param {?} value
* @return {?}
*/
AsiSelectComponent.prototype.onModelChange = /**
* @param {?} value
* @return {?}
*/
function (value) {
this.value = value;
this.manageHasValue();
};
/**
* @return {?}
*/
AsiSelectComponent.prototype.manageHasValue = /**
* @return {?}
*/
function () {
if (this.value != null) {
this.renderer.addClass(this.elementRef.nativeElement, 'has-value');
}
else {
this.renderer.removeClass(this.elementRef.nativeElement, 'has-value');
}
};
AsiSelectComponent.decorators = [
{ type: Component, args: [{
selector: 'asi-select',
host: { 'class': 'asi-component asi-select' },
template: "<label class=\"input-label\" *ngIf=\"label != null\">{{label | translate}}</label>\r\n\r\n<div class=\"asi-select-container\" aria-labelledby=\"select\">\r\n <div class=\"asi-select-header asi-focus-error\" (keyup.esc)=\"toggleSelect()\">\r\n <asi-checkbox *ngIf=\"multiple\" [disabled]=\"disabled\" [ngModel]=\"allChecked\" (onValueChange)=\"checkAll($event)\">\r\n </asi-checkbox>\r\n <button type=\"button\" class=\"item-container\" [disabled]=\"disabled\" (click)=\"toggleSelect()\">\r\n <span>\r\n <div class=\"item\">\r\n <ng-template *ngIf=\"value != null\" [ngTemplateOutlet]=\"selectedDef.template\"\r\n [ngTemplateOutletContext]=\"{$implicit : value}\"></ng-template>\r\n <ng-template *ngIf=\"value == null\" [ngTemplateOutlet]=\"emptyDef?.template\"\r\n [ngTemplateOutletContext]=\"{$implicit : value}\"></ng-template>\r\n </div>\r\n <div class=\"drop-icon-container\">\r\n <span class=\"drop-icon\" [innerHtml]=\"'▼'\"></span>\r\n </div>\r\n </span>\r\n </button>\r\n </div>\r\n\r\n <asi-dropdown [open]=\"open\" (onClose)=\"onDropdownClose()\" dropDownClass=\"asi-select-dropdown\">\r\n <div class=\"drop-down-select\">\r\n <div class=\"drop-down-panel\">\r\n <button type=\"button\" class=\"drop-down-item\" [ngClass]=\"{'empty' : data == null , 'selected' : data?.selected}\"\r\n (keyup.esc)=\"toggleSelect()\" (click)=\"selectValue($event, data)\" *ngFor=\"let data of selectDatas\">\r\n <span class=\"option\">\r\n <asi-checkbox *ngIf=\"multiple && data != null\" [ngModel]=\"data.selected\"\r\n (click)=\"selectValue($event, data)\"></asi-checkbox>\r\n <div class=\"item\" aria-labelledby=\"item\">\r\n <ng-template *ngIf=\"data != null\" [ngTemplateOutlet]=\"optionDef.template\"\r\n [ngTemplateOutletContext]=\"{$implicit : data.value}\"></ng-template>\r\n </div>\r\n </span>\r\n </button>\r\n </div>\r\n </div>\r\n </asi-dropdown>\r\n</div>\r\n",
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(function () { return AsiSelectComponent; }),
multi: true
}
]
}] }
];
/** @nocollapse */
AsiSelectComponent.ctorParameters = function () { return [
{ type: Renderer2 },
{ type: ElementRef }
]; };
AsiSelectComponent.propDecorators = {
label: [{ type: Input }],
labelPosition: [{ type: Input }],
data: [{ type: Input }],
multiple: [{ type: Input }],
trackBy: [{ type: Input }],
withEmptyValue: [{ type: Input }],
optionDef: [{ type: ContentChild, args: [AsiComponentTemplateOptionDef,] }],
emptyDef: [{ type: ContentChild, args: [AsiComponentTemplateEmptyDef,] }],
selectedDef: [{ type: ContentChild, args: [AsiComponentTemplateSelectedDef,] }]
};
return AsiSelectComponent;
}(DefaultControlValueAccessor));
export { AsiSelectComponent };
if (false) {
/**
* Label to display (is translated)
* @type {?}
*/
AsiSelectComponent.prototype.label;
/**
* Label position
* @type {?}
*/
AsiSelectComponent.prototype.labelPosition;
/**
* Data to display
* @type {?}
*/
AsiSelectComponent.prototype.data;
/**
* Multi selection
* @type {?}
*/
AsiSelectComponent.prototype.multiple;
/**
* Track data base on a sub attribute rather than reference
* @type {?}
*/
AsiSelectComponent.prototype.trackBy;
/**
* Add an empty value (template must be define)
* @type {?}
*/
AsiSelectComponent.prototype.withEmptyValue;
/** @type {?} */
AsiSelectComponent.prototype.optionDef;
/** @type {?} */
AsiSelectComponent.prototype.emptyDef;
/** @type {?} */
AsiSelectComponent.prototype.selectedDef;
/** @type {?} */
AsiSelectComponent.prototype.selectDatas;
/** @type {?} */
AsiSelectComponent.prototype.open;
/** @type {?} */
AsiSelectComponent.prototype.allChecked;
/** @type {?} */
AsiSelectComponent.prototype.renderer;
/** @type {?} */
AsiSelectComponent.prototype.elementRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYXNpLW5ndG9vbHMvbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYXNpLXNlbGVjdC9hc2ktc2VsZWN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBcUIsVUFBVSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckgsT0FBTyxFQUNMLDZCQUE2QixFQUFFLDRCQUE0QixFQUMzRCwrQkFBK0IsRUFDaEMsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxQyxPQUFPLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDOztJQWNGLDhDQUEyQjtJQTZCakUsNEJBQW9CLFFBQW1CLEVBQzdCO1FBRFYsWUFFRSxpQkFBTyxTQUNSO1FBSG1CLGNBQVEsR0FBUixRQUFRLENBQVc7UUFDN0IsZ0JBQVUsR0FBVixVQUFVOzs7OzhCQXhCMkUsS0FBSzs7Ozt5QkFNaEYsS0FBSzs7OzsrQkFNQyxLQUFLO3FCQVF4QixLQUFLOzJCQUNDLEtBQUs7O0tBS2pCOzs7O0lBRUQscUNBQVE7OztJQUFSO1FBQ0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNyRixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FB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LGNBQU0sT0FBQSxrQkFBa0IsRUFBbEIsQ0FBa0IsQ0FBQzs0QkFDakQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0Y7Ozs7Z0JBcEJ1RSxTQUFTO2dCQUFFLFVBQVU7Ozt3QkF3QjFGLEtBQUs7Z0NBR0wsS0FBSzt1QkFHTCxLQUFLOzJCQUdMLEtBQUs7MEJBR0wsS0FBSztpQ0FHTCxLQUFLOzRCQUVMLFlBQVksU0FBQyw2QkFBNkI7MkJBQzFDLFlBQVksU0FBQyw0QkFBNEI7OEJBQ3pDLFlBQVksU0FBQywrQkFBK0I7OzZCQTdDL0M7RUF1QndDLDJCQUEyQjtTQUF0RCxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWZhdWx0Q29udHJvbFZhbHVlQWNjZXNzb3IgfSBmcm9tICcuLy4uL2NvbW1vbi9kZWZhdWx0LWNvbnRyb2wtdmFsdWUtYWNjZXNzb3InO1xyXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgQ29udGVudENoaWxkLCBPbkluaXQsIE9uQ2hhbmdlcywgZm9yd2FyZFJlZiwgUmVuZGVyZXIyLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEFzaUNvbXBvbmVudFRlbXBsYXRlT3B0aW9uRGVmLCBBc2lDb21wb25lbnRUZW1wbGF0ZUVtcHR5RGVmLFxyXG4gIEFzaUNvbXBvbmVudFRlbXBsYXRlU2VsZWN0ZWREZWZcclxufSBmcm9tICcuLi9jb21tb24vYXNpLWNvbXBvbmVudC10ZW1wbGF0ZSc7XHJcblxyXG5pbXBvcnQgKiBhcyBuaCBmcm9tICcuLi8uLi9uYXRpdmUtaGVscGVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXNpLXNlbGVjdCcsXHJcbiAgaG9zdDogeyAnY2xhc3MnOiAnYXNpLWNvbXBvbmVudCBhc2ktc2VsZWN0JyB9LFxyXG4gIHRlbXBsYXRlVXJsOiAnYXNpLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBc2lTZWxlY3RDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEFzaVNlbGVjdENvbXBvbmVudCBleHRlbmRzIERlZmF1bHRDb250cm9sVmFsdWVBY2Nlc3NvciBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgLyoqIExhYmVsIHRvIGRpc3BsYXkgKGlzIHRyYW5zbGF0ZWQpICovXHJcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcclxuXHJcbiAgLyoqIExhYmVsIHBvc2l0aW9uICovXHJcbiAgQElucHV0KCkgbGFiZWxQb3NpdGlvbjogJ3RvcCcgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnYm90dG9tLWNlbnRlcicgfCAndG9wLWNlbnRlcicgPSAndG9wJztcclxuXHJcbiAgLyoqIERhdGEgdG8gZGlzcGxheSAgKi9cclxuICBASW5wdXQoKSBkYXRhOiBBcnJheTxhbnk+O1xyXG5cclxuICAvKiogTXVsdGkgc2VsZWN0aW9uICAqL1xyXG4gIEBJbnB1dCgpIG11bHRpcGxlID0gZmFsc2U7XHJcblxyXG4gIC8qKiBUcmFjayBkYXRhIGJhc2Ugb24gYSBzdWIgYXR0cmlidXRlIHJhdGhlciB0aGFuIHJlZmVyZW5jZSAgKi9cclxuICBASW5wdXQoKSB0cmFja0J5OiBzdHJpbmc7XHJcblxyXG4gIC8qKiBBZGQgYW4gZW1wdHkgdmFsdWUgKHRlbXBsYXRlIG11c3QgYmUgZGVmaW5lKSAqL1xyXG4gIEBJbnB1dCgpIHdpdGhFbXB0eVZhbHVlID0gZmFsc2U7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoQXNpQ29tcG9uZW50VGVtcGxhdGVPcHRpb25EZWYpIG9wdGlvbkRlZjogQXNpQ29tcG9uZW50VGVtcGxhdGVPcHRpb25EZWY7XHJcbiAgQENvbnRlbnRDaGlsZChBc2lDb21wb25lbnRUZW1wbGF0ZUVtcHR5RGVmKSBlbXB0eURlZjogQXNpQ29tcG9uZW50VGVtcGxhdGVFbXB0eURlZjtcclxuICBAQ29udGVudENoaWxkKEFzaUNvbXBvbmVudFRlbXBsYXRlU2VsZWN0ZWREZWYpIHNlbGVjdGVkRGVmOiBBc2lDb21wb25lbnRUZW1wbGF0ZVNlbGVjdGVkRGVmO1xyXG5cclxuICAvLyBDb3BpZSBkZXMgZG9ubsOpZXMgZCdlbnRyw6llXHJcbiAgc2VsZWN0RGF0YXM6IEFycmF5PGFueT47XHJcbiAgb3BlbiA9IGZhbHNlO1xyXG4gIGFsbENoZWNrZWQgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnbGFiZWwtJyArIHRoaXMubGFiZWxQb3NpdGlvbik7XHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnbXVsdGlwbGUnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRHJvcGRvd25DbG9zZSgpIHtcclxuICAgIHRoaXMub3BlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzT3BlbmVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3BlbjtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgdGhpcy5pbml0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0RGF0YSgpIHtcclxuICAgIHRoaXMuc2VsZWN0RGF0YXMgPSBbXTtcclxuICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YSB8fCBbXTtcclxuXHJcbiAgICBpZiAodGhpcy53aXRoRW1wdHlWYWx1ZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdERhdGFzLnB1c2gobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kYXRhLmZvckVhY2goKGRhdGEpID0+IHtcclxuICAgICAgY29uc3QgcHJveHlEYXRhID0ge1xyXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICB2YWx1ZTogZGF0YVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VsZWN0RGF0YXMucHVzaChwcm94eURhdGEpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjaGVja0FsbCh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmFsbENoZWNrZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMuc2VsZWN0RGF0YXMuZm9yRWFjaCgoZGF0YSkgPT4ge1xyXG4gICAgICBpZiAoZGF0YSAhPSBudWxsICYmICh2YWx1ZSAhPT0gZGF0YS5zZWxlY3RlZCkpIHtcclxuICAgICAgICB0aGlzLmludGVybmFsU2VsZWN0VmFsdWUobnVsbCwgZGF0YSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUFsbENoZWNrZWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFsbENoZWNrZWQgPSBuaC5maW5kKHRoaXMuc2VsZWN0RGF0YXMsIChkYXRhKSA9PiB7XHJcbiAgICAgIHJldHVybiBkYXRhICE9IG51bGwgPyAhZGF0YS5zZWxlY3RlZCA6IGZhbHNlO1xyXG4gICAgfSkgPT0gbnVsbDtcclxuICB9XHJcblxyXG4gIHNlbGVjdFZhbHVlKGV2ZW50OiBNb3VzZUV2ZW50LCBkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuaW50ZXJuYWxTZWxlY3RWYWx1ZShldmVudCwgZGF0YSk7XHJcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5fdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnRlcm5hbFNlbGVjdFZhbHVlKGV2ZW50OiBNb3VzZUV2ZW50LCBkYXRhOiBhbnkpIHtcclxuICAgIGlmIChkYXRhID09IG51bGwpIHtcclxuICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKG51bGwpO1xyXG4gICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZWFsVmFsdWUgPSBkYXRhLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgaWYgKGV2ZW50ICE9IG51bGwpIHtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuX3ZhbHVlID09IG51bGwpIHtcclxuICAgICAgICB0aGlzLl92YWx1ZSA9IFtdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgcmVtb3ZlZCA9IG5oLnJlbW92ZSh0aGlzLl92YWx1ZSwgKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMudHJhY2tCeSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZVt0aGlzLnRyYWNrQnldID09PSByZWFsVmFsdWVbdGhpcy50cmFja0J5XTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gcmVhbFZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKG5oLmlzRW1wdHkocmVtb3ZlZCkpIHtcclxuICAgICAgICB0aGlzLnZhbHVlLnB1c2gocmVhbFZhbHVlKTtcclxuICAgICAgICBkYXRhLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBkYXRhLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChuaC5pc0VtcHR5KHRoaXMuX3ZhbHVlKSkge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gbnVsbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGV2ZW50ICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUFsbENoZWNrZWQoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuX3ZhbHVlID0gcmVhbFZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlU2VsZWN0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5vcGVuID0gIXRoaXMub3BlbjtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKGlzTmFOKHZhbHVlKSAmJiBuaC5pc0VtcHR5KHZhbHVlKSkge1xyXG4gICAgICB0aGlzLl92YWx1ZSA9IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgaWYgKHRoaXMuX3ZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdERhdGFzLmZvckVhY2goKGRhdGEpID0+IHtcclxuICAgICAgICAgIGlmIChkYXRhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgZGF0YS5zZWxlY3RlZCA9IG5oLmZpbmQodGhpcy52YWx1ZSwgKHBvc3NpYmxlVmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChwb3NzaWJsZVZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYWNrQnkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gcG9zc2libGVWYWx1ZVt0aGlzLnRyYWNrQnldID09PSBkYXRhLnZhbHVlW3RoaXMudHJhY2tCeV07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gcG9zc2libGVWYWx1ZSA9PT0gZGF0YS52YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9KSAhPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0RGF0YXMuZm9yRWFjaCgoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkYXRhLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cGRhdGVBbGxDaGVja2VkKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1hbmFnZUhhc1ZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBvbk1vZGVsQ2hhbmdlKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIHRoaXMubWFuYWdlSGFzVmFsdWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWFuYWdlSGFzVmFsdWUoKSB7XHJcbiAgICBpZiAodGhpcy52YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdoYXMtdmFsdWUnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdoYXMtdmFsdWUnKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19