@davvidess/angular-split
Version:
Angular UI library to split views and allow dragging to resize areas using CSS flexbox layout.
343 lines • 22.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Directive, Input, ElementRef, Renderer2, NgZone } from '@angular/core';
import { SplitComponent } from '../component/split.component';
import { getInputPositiveNumber, getInputBoolean } from '../utils';
var SplitAreaDirective = /** @class */ (function () {
function SplitAreaDirective(ngZone, elRef, renderer, split) {
this.ngZone = ngZone;
this.elRef = elRef;
this.renderer = renderer;
this.split = split;
this._order = null;
////
this._size = null;
////
this._minSize = null;
////
this._maxSize = null;
////
this._lockSize = false;
////
this._visible = true;
this.lockListeners = [];
this.renderer.addClass(this.elRef.nativeElement, 'as-split-area');
}
Object.defineProperty(SplitAreaDirective.prototype, "order", {
get: /**
* @return {?}
*/
function () {
return this._order;
},
set: /**
* @param {?} v
* @return {?}
*/
function (v) {
this._order = getInputPositiveNumber(v, null);
this.split.updateArea(this, true, false);
},
enumerable: true,
configurable: true
});
Object.defineProperty(SplitAreaDirective.prototype, "size", {
get: /**
* @return {?}
*/
function () {
return this._size;
},
set: /**
* @param {?} v
* @return {?}
*/
function (v) {
this._size = getInputPositiveNumber(v, null);
this.split.updateArea(this, false, true);
},
enumerable: true,
configurable: true
});
Object.defineProperty(SplitAreaDirective.prototype, "minSize", {
get: /**
* @return {?}
*/
function () {
return this._minSize;
},
set: /**
* @param {?} v
* @return {?}
*/
function (v) {
this._minSize = getInputPositiveNumber(v, null);
this.split.updateArea(this, false, true);
},
enumerable: true,
configurable: true
});
Object.defineProperty(SplitAreaDirective.prototype, "maxSize", {
get: /**
* @return {?}
*/
function () {
return this._maxSize;
},
set: /**
* @param {?} v
* @return {?}
*/
function (v) {
this._maxSize = getInputPositiveNumber(v, null);
this.split.updateArea(this, false, true);
},
enumerable: true,
configurable: true
});
Object.defineProperty(SplitAreaDirective.prototype, "lockSize", {
get: /**
* @return {?}
*/
function () {
return this._lockSize;
},
set: /**
* @param {?} v
* @return {?}
*/
function (v) {
this._lockSize = getInputBoolean(v);
this.split.updateArea(this, false, true);
},
enumerable: true,
configurable: true
});
Object.defineProperty(SplitAreaDirective.prototype, "visible", {
get: /**
* @return {?}
*/
function () {
return this._visible;
},
set: /**
* @param {?} v
* @return {?}
*/
function (v) {
this._visible = getInputBoolean(v);
if (this._visible) {
this.split.showArea(this);
this.renderer.removeClass(this.elRef.nativeElement, 'as-hidden');
}
else {
this.split.hideArea(this);
this.renderer.addClass(this.elRef.nativeElement, 'as-hidden');
}
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
SplitAreaDirective.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
this.split.addArea(this);
this.ngZone.runOutsideAngular((/**
* @return {?}
*/
function () {
_this.transitionListener = _this.renderer.listen(_this.elRef.nativeElement, 'transitionend', (/**
* @param {?} event
* @return {?}
*/
function (event) {
// Limit only flex-basis transition to trigger the event
if (event.propertyName === 'flex-basis') {
_this.split.notify('transitionEnd', -1);
}
}));
}));
};
/**
* @param {?} value
* @return {?}
*/
SplitAreaDirective.prototype.setStyleOrder = /**
* @param {?} value
* @return {?}
*/
function (value) {
this.renderer.setStyle(this.elRef.nativeElement, 'order', value);
};
/**
* @param {?} grow
* @param {?} shrink
* @param {?} basis
* @param {?} isMin
* @param {?} isMax
* @return {?}
*/
SplitAreaDirective.prototype.setStyleFlex = /**
* @param {?} grow
* @param {?} shrink
* @param {?} basis
* @param {?} isMin
* @param {?} isMax
* @return {?}
*/
function (grow, shrink, basis, isMin, isMax) {
// Need 3 separated properties to work on IE11 (https://github.com/angular/flex-layout/issues/323)
this.renderer.setStyle(this.elRef.nativeElement, 'flex-grow', grow);
this.renderer.setStyle(this.elRef.nativeElement, 'flex-shrink', shrink);
this.renderer.setStyle(this.elRef.nativeElement, 'flex-basis', basis);
if (isMin === true)
this.renderer.addClass(this.elRef.nativeElement, 'as-min');
else
this.renderer.removeClass(this.elRef.nativeElement, 'as-min');
if (isMax === true)
this.renderer.addClass(this.elRef.nativeElement, 'as-max');
else
this.renderer.removeClass(this.elRef.nativeElement, 'as-max');
};
/**
* @return {?}
*/
SplitAreaDirective.prototype.lockEvents = /**
* @return {?}
*/
function () {
var _this = this;
this.ngZone.runOutsideAngular((/**
* @return {?}
*/
function () {
_this.lockListeners.push(_this.renderer.listen(_this.elRef.nativeElement, 'selectstart', (/**
* @param {?} e
* @return {?}
*/
function (e) { return false; })));
_this.lockListeners.push(_this.renderer.listen(_this.elRef.nativeElement, 'dragstart', (/**
* @param {?} e
* @return {?}
*/
function (e) { return false; })));
}));
};
/**
* @return {?}
*/
SplitAreaDirective.prototype.unlockEvents = /**
* @return {?}
*/
function () {
while (this.lockListeners.length > 0) {
/** @type {?} */
var fct = this.lockListeners.pop();
if (fct)
fct();
}
};
/**
* @return {?}
*/
SplitAreaDirective.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.unlockEvents();
if (this.transitionListener) {
this.transitionListener();
}
this.split.removeArea(this);
};
SplitAreaDirective.decorators = [
{ type: Directive, args: [{
selector: 'as-split-area, [as-split-area]',
exportAs: 'asSplitArea',
},] }
];
/** @nocollapse */
SplitAreaDirective.ctorParameters = function () { return [
{ type: NgZone },
{ type: ElementRef },
{ type: Renderer2 },
{ type: SplitComponent }
]; };
SplitAreaDirective.propDecorators = {
order: [{ type: Input }],
size: [{ type: Input }],
minSize: [{ type: Input }],
maxSize: [{ type: Input }],
lockSize: [{ type: Input }],
visible: [{ type: Input }]
};
return SplitAreaDirective;
}());
export { SplitAreaDirective };
if (false) {
/**
* @type {?}
* @private
*/
SplitAreaDirective.prototype._order;
/**
* @type {?}
* @private
*/
SplitAreaDirective.prototype._size;
/**
* @type {?}
* @private
*/
SplitAreaDirective.prototype._minSize;
/**
* @type {?}
* @private
*/
SplitAreaDirective.prototype._maxSize;
/**
* @type {?}
* @private
*/
SplitAreaDirective.prototype._lockSize;
/**
* @type {?}
* @private
*/
SplitAreaDirective.prototype._visible;
/**
* @type {?}
* @private
*/
SplitAreaDirective.prototype.transitionListener;
/**
* @type {?}
* @private
*/
SplitAreaDirective.prototype.lockListeners;
/**
* @type {?}
* @private
*/
SplitAreaDirective.prototype.ngZone;
/** @type {?} */
SplitAreaDirective.prototype.elRef;
/**
* @type {?}
* @private
*/
SplitAreaDirective.prototype.renderer;
/**
* @type {?}
* @private
*/
SplitAreaDirective.prototype.split;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXRBcmVhLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXZ2aWRlc3MvYW5ndWxhci1zcGxpdC8iLCJzb3VyY2VzIjpbImxpYi9kaXJlY3RpdmUvc3BsaXRBcmVhLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRWxHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBRWxFO0lBa0dFLDRCQUNVLE1BQWMsRUFDZixLQUFpQixFQUNoQixRQUFtQixFQUNuQixLQUFxQjtRQUhyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2YsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUNoQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBakd2QixXQUFNLEdBQWtCLElBQUksQ0FBQTs7UUFjNUIsVUFBSyxHQUFrQixJQUFJLENBQUE7O1FBYzNCLGFBQVEsR0FBa0IsSUFBSSxDQUFBOztRQWM5QixhQUFRLEdBQWtCLElBQUksQ0FBQTs7UUFjOUIsY0FBUyxHQUFZLEtBQUssQ0FBQTs7UUFjMUIsYUFBUSxHQUFZLElBQUksQ0FBQTtRQXFCZixrQkFBYSxHQUFvQixFQUFFLENBQUE7UUFRbEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsZUFBZSxDQUFDLENBQUE7SUFDbkUsQ0FBQztJQWxHRCxzQkFBYSxxQ0FBSzs7OztRQU1sQjtZQUNFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQTtRQUNwQixDQUFDOzs7OztRQVJELFVBQW1CLENBQWdCO1lBQ2pDLElBQUksQ0FBQyxN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Q0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDN0IsQ0FBQzs7Z0JBbktGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsZ0NBQWdDO29CQUMxQyxRQUFRLEVBQUUsYUFBYTtpQkFDeEI7Ozs7Z0JBUm9FLE1BQU07Z0JBQWhELFVBQVU7Z0JBQUUsU0FBUztnQkFFdkMsY0FBYzs7O3dCQVVwQixLQUFLO3VCQWNMLEtBQUs7MEJBY0wsS0FBSzswQkFjTCxLQUFLOzJCQWNMLEtBQUs7MEJBY0wsS0FBSzs7SUF1RlIseUJBQUM7Q0FBQSxBQXBLRCxJQW9LQztTQWhLWSxrQkFBa0I7Ozs7OztJQUM3QixvQ0FBb0M7Ozs7O0lBY3BDLG1DQUFtQzs7Ozs7SUFjbkMsc0NBQXNDOzs7OztJQWN0QyxzQ0FBc0M7Ozs7O0lBY3RDLHVDQUFrQzs7Ozs7SUFjbEMsc0NBQWdDOzs7OztJQW9CaEMsZ0RBQW9DOzs7OztJQUNwQywyQ0FBb0Q7Ozs7O0lBR2xELG9DQUFzQjs7SUFDdEIsbUNBQXdCOzs7OztJQUN4QixzQ0FBMkI7Ozs7O0lBQzNCLG1DQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIEVsZW1lbnRSZWYsIFJlbmRlcmVyMiwgT25Jbml0LCBPbkRlc3Ryb3ksIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5cbmltcG9ydCB7IFNwbGl0Q29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50L3NwbGl0LmNvbXBvbmVudCdcbmltcG9ydCB7IGdldElucHV0UG9zaXRpdmVOdW1iZXIsIGdldElucHV0Qm9vbGVhbiB9IGZyb20gJy4uL3V0aWxzJ1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdhcy1zcGxpdC1hcmVhLCBbYXMtc3BsaXQtYXJlYV0nLFxuICBleHBvcnRBczogJ2FzU3BsaXRBcmVhJyxcbn0pXG5leHBvcnQgY2xhc3MgU3BsaXRBcmVhRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9vcmRlcjogbnVtYmVyIHwgbnVsbCA9IG51bGxcblxuICBASW5wdXQoKSBzZXQgb3JkZXIodjogbnVtYmVyIHwgbnVsbCkge1xuICAgIHRoaXMuX29yZGVyID0gZ2V0SW5wdXRQb3NpdGl2ZU51bWJlcih2LCBudWxsKVxuXG4gICAgdGhpcy5zcGxpdC51cGRhdGVBcmVhKHRoaXMsIHRydWUsIGZhbHNlKVxuICB9XG5cbiAgZ2V0IG9yZGVyKCk6IG51bWJlciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9vcmRlclxuICB9XG5cbiAgLy8vL1xuXG4gIHByaXZhdGUgX3NpemU6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgQElucHV0KCkgc2V0IHNpemUodjogbnVtYmVyIHwgbnVsbCkge1xuICAgIHRoaXMuX3NpemUgPSBnZXRJbnB1dFBvc2l0aXZlTnVtYmVyKHYsIG51bGwpXG5cbiAgICB0aGlzLnNwbGl0LnVwZGF0ZUFyZWEodGhpcywgZmFsc2UsIHRydWUpXG4gIH1cblxuICBnZXQgc2l6ZSgpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fc2l6ZVxuICB9XG5cbiAgLy8vL1xuXG4gIHByaXZhdGUgX21pblNpemU6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgQElucHV0KCkgc2V0IG1pblNpemUodjogbnVtYmVyIHwgbnVsbCkge1xuICAgIHRoaXMuX21pblNpemUgPSBnZXRJbnB1dFBvc2l0aXZlTnVtYmVyKHYsIG51bGwpXG5cbiAgICB0aGlzLnNwbGl0LnVwZGF0ZUFyZWEodGhpcywgZmFsc2UsIHRydWUpXG4gIH1cblxuICBnZXQgbWluU2l6ZSgpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWluU2l6ZVxuICB9XG5cbiAgLy8vL1xuXG4gIHByaXZhdGUgX21heFNpemU6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgQElucHV0KCkgc2V0IG1heFNpemUodjogbnVtYmVyIHwgbnVsbCkge1xuICAgIHRoaXMuX21heFNpemUgPSBnZXRJbnB1dFBvc2l0aXZlTnVtYmVyKHYsIG51bGwpXG5cbiAgICB0aGlzLnNwbGl0LnVwZGF0ZUFyZWEodGhpcywgZmFsc2UsIHRydWUpXG4gIH1cblxuICBnZXQgbWF4U2l6ZSgpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4U2l6ZVxuICB9XG5cbiAgLy8vL1xuXG4gIHByaXZhdGUgX2xvY2tTaXplOiBib29sZWFuID0gZmFsc2VcblxuICBASW5wdXQoKSBzZXQgbG9ja1NpemUodjogYm9vbGVhbikge1xuICAgIHRoaXMuX2xvY2tTaXplID0gZ2V0SW5wdXRCb29sZWFuKHYpXG5cbiAgICB0aGlzLnNwbGl0LnVwZGF0ZUFyZWEodGhpcywgZmFsc2UsIHRydWUpXG4gIH1cblxuICBnZXQgbG9ja1NpemUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2xvY2tTaXplXG4gIH1cblxuICAvLy8vXG5cbiAgcHJpdmF0ZSBfdmlzaWJsZTogYm9vbGVhbiA9IHRydWVcblxuICBASW5wdXQoKSBzZXQgdmlzaWJsZSh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5fdmlzaWJsZSA9IGdldElucHV0Qm9vbGVhbih2KVxuXG4gICAgaWYgKHRoaXMuX3Zpc2libGUpIHtcbiAgICAgIHRoaXMuc3BsaXQuc2hvd0FyZWEodGhpcylcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnYXMtaGlkZGVuJylcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zcGxpdC5oaWRlQXJlYSh0aGlzKVxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdhcy1oaWRkZW4nKVxuICAgIH1cbiAgfVxuXG4gIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlXG4gIH1cblxuICAvLy8vXG5cbiAgcHJpdmF0ZSB0cmFuc2l0aW9uTGlzdGVuZXI6IEZ1bmN0aW9uXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9ja0xpc3RlbmVyczogQXJyYXk8RnVuY3Rpb24+ID0gW11cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHB1YmxpYyBlbFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBzcGxpdDogU3BsaXRDb21wb25lbnQsXG4gICkge1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnYXMtc3BsaXQtYXJlYScpXG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zcGxpdC5hZGRBcmVhKHRoaXMpXG5cbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLnRyYW5zaXRpb25MaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKFxuICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICd0cmFuc2l0aW9uZW5kJyxcbiAgICAgICAgKGV2ZW50OiBUcmFuc2l0aW9uRXZlbnQpID0+IHtcbiAgICAgICAgICAvLyBMaW1pdCBvbmx5IGZsZXgtYmFzaXMgdHJhbnNpdGlvbiB0byB0cmlnZ2VyIHRoZSBldmVudFxuICAgICAgICAgIGlmIChldmVudC5wcm9wZXJ0eU5hbWUgPT09ICdmbGV4LWJhc2lzJykge1xuICAgICAgICAgICAgdGhpcy5zcGxpdC5ub3RpZnkoJ3RyYW5zaXRpb25FbmQnLCAtMSlcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBzZXRTdHlsZU9yZGVyKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgJ29yZGVyJywgdmFsdWUpXG4gIH1cblxuICBwdWJsaWMgc2V0U3R5bGVGbGV4KGdyb3c6IG51bWJlciwgc2hyaW5rOiBudW1iZXIsIGJhc2lzOiBzdHJpbmcsIGlzTWluOiBib29sZWFuLCBpc01heDogYm9vbGVhbik6IHZvaWQge1xuICAgIC8vIE5lZWQgMyBzZXBhcmF0ZWQgcHJvcGVydGllcyB0byB3b3JrIG9uIElFMTEgKGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2ZsZXgtbGF5b3V0L2lzc3Vlcy8zMjMpXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdmbGV4LWdyb3cnLCBncm93KVxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnZmxleC1zaHJpbmsnLCBzaHJpbmspXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdmbGV4LWJhc2lzJywgYmFzaXMpXG5cbiAgICBpZiAoaXNNaW4gPT09IHRydWUpIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnYXMtbWluJylcbiAgICBlbHNlIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnYXMtbWluJylcblxuICAgIGlmIChpc01heCA9PT0gdHJ1ZSkgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdhcy1tYXgnKVxuICAgIGVsc2UgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdhcy1tYXgnKVxuICB9XG5cbiAgcHVibGljIGxvY2tFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5sb2NrTGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnc2VsZWN0c3RhcnQnLCAoZTogRXZlbnQpID0+IGZhbHNlKSlcbiAgICAgIHRoaXMubG9ja0xpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgJ2RyYWdzdGFydCcsIChlOiBFdmVudCkgPT4gZmFsc2UpKVxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgdW5sb2NrRXZlbnRzKCk6IHZvaWQge1xuICAgIHdoaWxlICh0aGlzLmxvY2tMaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmN0ID0gdGhpcy5sb2NrTGlzdGVuZXJzLnBvcCgpXG4gICAgICBpZiAoZmN0KSBmY3QoKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVubG9ja0V2ZW50cygpXG5cbiAgICBpZiAodGhpcy50cmFuc2l0aW9uTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMudHJhbnNpdGlvbkxpc3RlbmVyKClcbiAgICB9XG5cbiAgICB0aGlzLnNwbGl0LnJlbW92ZUFyZWEodGhpcylcbiAgfVxufVxuIl19