UNPKG

@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
/** * @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