UNPKG

@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
/** * @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]=\"'&#9660;'\"></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