@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
170 lines • 21.5 kB
JavaScript
import { __decorate, __extends, __metadata } from "tslib";
import { Directive, OnDestroy, Input, ElementRef, ViewContainerRef, NgZone, Renderer2, ChangeDetectorRef } from '@angular/core';
import { IgxDragDirective } from '../../directives/drag-drop/drag-drop.directive';
import { fromEvent } from 'rxjs';
import { IgxColumnMovingService } from './moving.service';
/**
* @hidden
* @internal
*/
var IgxColumnMovingDragDirective = /** @class */ (function (_super) {
__extends(IgxColumnMovingDragDirective, _super);
function IgxColumnMovingDragDirective(element, viewContainer, zone, renderer, cdr, cms) {
var _this = _super.call(this, cdr, element, viewContainer, zone, renderer) || this;
_this.element = element;
_this.viewContainer = viewContainer;
_this.zone = zone;
_this.renderer = renderer;
_this.cdr = cdr;
_this.cms = cms;
_this._ghostClass = 'igx-grid__drag-ghost-image';
_this.ghostImgIconClass = 'igx-grid__drag-ghost-image-icon';
_this.ghostImgIconGroupClass = 'igx-grid__drag-ghost-image-icon-group';
return _this;
}
Object.defineProperty(IgxColumnMovingDragDirective.prototype, "data", {
set: function (val) {
this._column = val;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxColumnMovingDragDirective.prototype, "column", {
get: function () {
return this._column;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxColumnMovingDragDirective.prototype, "draggable", {
get: function () {
return this.column && (this.column.movable || (this.column.groupable && !this.column.columnGroup));
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxColumnMovingDragDirective.prototype, "icon", {
get: function () {
return this.cms.icon;
},
enumerable: true,
configurable: true
});
IgxColumnMovingDragDirective.prototype.ngOnDestroy = function () {
this._unsubscribe();
};
IgxColumnMovingDragDirective.prototype.onEscape = function (event) {
this.cms.cancelDrop = true;
this.onPointerUp(event);
};
IgxColumnMovingDragDirective.prototype.onPointerDown = function (event) {
var _this = this;
if (!this.draggable || event.target.getAttribute('draggable') === 'false') {
return;
}
event.preventDefault();
event.stopPropagation();
this._removeOnDestroy = false;
this.cms.column = this.column;
this.ghostClass = this._ghostClass;
_super.prototype.onPointerDown.call(this, event);
this.cms.isColumnMoving = true;
this.column.grid.cdr.detectChanges();
var args = {
source: this.column
};
this.column.grid.onColumnMovingStart.emit(args);
this.subscription$ = fromEvent(this.column.grid.document.defaultView, 'keydown').subscribe(function (ev) {
if (ev.key === "Escape" /* ESCAPE */ || ev.key === "Esc" /* ESCAPE_IE */) {
_this.onEscape(ev);
}
});
};
IgxColumnMovingDragDirective.prototype.onPointerMove = function (event) {
event.preventDefault();
_super.prototype.onPointerMove.call(this, event);
if (this._dragStarted && this.ghostElement && !this.column.grid.draggedColumn) {
this.column.grid.draggedColumn = this.column;
this.column.grid.cdr.detectChanges();
}
if (this.cms.isColumnMoving) {
var args = {
source: this.column,
cancel: false
};
this.column.grid.onColumnMoving.emit(args);
if (args.cancel) {
this.onEscape(event);
}
}
};
IgxColumnMovingDragDirective.prototype.onPointerUp = function (event) {
var _this = this;
// Run it explicitly inside the zone because sometimes onPointerUp executes after the code below.
this.zone.run(function () {
_super.prototype.onPointerUp.call(_this, event);
_this.cms.isColumnMoving = false;
_this.column.grid.draggedColumn = null;
_this.column.grid.cdr.detectChanges();
});
this._unsubscribe();
};
IgxColumnMovingDragDirective.prototype.createGhost = function (pageX, pageY) {
_super.prototype.createGhost.call(this, pageX, pageY);
this.ghostElement.style.height = null;
this.ghostElement.style.minWidth = null;
this.ghostElement.style.flexBasis = null;
this.ghostElement.style.position = null;
var icon = document.createElement('i');
var text = document.createTextNode('block');
icon.appendChild(text);
icon.classList.add('material-icons');
this.cms.icon = icon;
if (!this.column.columnGroup) {
this.renderer.addClass(icon, this.ghostImgIconClass);
this.ghostElement.insertBefore(icon, this.ghostElement.firstElementChild);
this.ghostLeft = this._ghostStartX = pageX - ((this.ghostElement.getBoundingClientRect().width / 3) * 2);
this.ghostTop = this._ghostStartY = pageY - ((this.ghostElement.getBoundingClientRect().height / 3) * 2);
}
else {
this.ghostElement.insertBefore(icon, this.ghostElement.childNodes[0]);
this.renderer.addClass(icon, this.ghostImgIconGroupClass);
this.ghostElement.children[0].style.paddingLeft = '0px';
this.ghostLeft = this._ghostStartX = pageX - ((this.ghostElement.getBoundingClientRect().width / 3) * 2);
this.ghostTop = this._ghostStartY = pageY - ((this.ghostElement.getBoundingClientRect().height / 3) * 2);
}
};
IgxColumnMovingDragDirective.prototype._unsubscribe = function () {
if (this.subscription$) {
this.subscription$.unsubscribe();
this.subscription$ = null;
}
};
IgxColumnMovingDragDirective.ctorParameters = function () { return [
{ type: ElementRef },
{ type: ViewContainerRef },
{ type: NgZone },
{ type: Renderer2 },
{ type: ChangeDetectorRef },
{ type: IgxColumnMovingService }
]; };
__decorate([
Input('igxColumnMovingDrag'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [Object])
], IgxColumnMovingDragDirective.prototype, "data", null);
IgxColumnMovingDragDirective = __decorate([
Directive({
selector: '[igxColumnMovingDrag]',
}),
__metadata("design:paramtypes", [ElementRef,
ViewContainerRef,
NgZone,
Renderer2,
ChangeDetectorRef,
IgxColumnMovingService])
], IgxColumnMovingDragDirective);
return IgxColumnMovingDragDirective;
}(IgxDragDirective));
export { IgxColumnMovingDragDirective };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92aW5nLmRyYWcuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkcy9tb3ZpbmcvbW92aW5nLmRyYWcuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEksT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDbEYsT0FBTyxFQUFnQixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHL0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHMUQ7OztHQUdHO0FBS0g7SUFBa0QsZ0RBQWdCO0lBeUI5RCxzQ0FDVyxPQUFnQyxFQUNoQyxhQUErQixFQUMvQixJQUFZLEVBQ1osUUFBbUIsRUFDbkIsR0FBc0IsRUFDckIsR0FBMkI7UUFOdkMsWUFRSSxrQkFBTSxHQUFHLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLFNBQ3JEO1FBUlUsYUFBTyxHQUFQLE9BQU8sQ0FBeUI7UUFDaEMsbUJBQWEsR0FBYixhQUFhLENBQWtCO1FBQy9CLFVBQUksR0FBSixJQUFJLENBQVE7UUFDWixjQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFNBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3JCLFNBQUcsR0FBSCxHQUFHLENBQXdCO1FBVi9CLGlCQUFXLEdBQUcsNEJBQTRCLENBQUM7UUFDM0MsdUJBQWlCLEdBQUcsaUNBQWlDLENBQUM7UUFDdEQsNEJBQXNCLEdBQUcsdUNBQXVDLENBQUM7O0lBV3pFLENBQUM7SUEvQkQsc0JBQUksOENBQUk7YUFBUixVQUFTLEdBQUc7WUFDUixJQUFJLENBQUMs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Q29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIE9uRGVzdHJveSwgSW5wdXQsIEVsZW1lbnRSZWYsIFZpZXdDb250YWluZXJSZWYsIE5nWm9uZSwgUmVuZGVyZXIyLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4RHJhZ0RpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZHJhZy1kcm9wL2RyYWctZHJvcC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElneENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4uL2NvbHVtbnMvY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBLRVlTIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Nb3ZpbmdTZXJ2aWNlIH0gZnJvbSAnLi9tb3Zpbmcuc2VydmljZSc7XG5cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4Q29sdW1uTW92aW5nRHJhZ10nLFxuXG59KVxuZXhwb3J0IGNsYXNzIElneENvbHVtbk1vdmluZ0RyYWdEaXJlY3RpdmUgZXh0ZW5kcyBJZ3hEcmFnRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAgIEBJbnB1dCgnaWd4Q29sdW1uTW92aW5nRHJhZycpXG4gICAgc2V0IGRhdGEodmFsKSB7XG4gICAgICAgIHRoaXMuX2NvbHVtbiA9IHZhbDtcbiAgICB9XG5cbiAgICBnZXQgY29sdW1uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uO1xuICAgIH1cblxuICAgIGdldCBkcmFnZ2FibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbiAmJiAodGhpcy5jb2x1bW4ubW92YWJsZSB8fCAodGhpcy5jb2x1bW4uZ3JvdXBhYmxlICYmICF0aGlzLmNvbHVtbi5jb2x1bW5Hcm91cCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaWNvbigpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNtcy5pY29uO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uJDogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgX2NvbHVtbjogSWd4Q29sdW1uQ29tcG9uZW50O1xuICAgIHByaXZhdGUgX2dob3N0Q2xhc3MgPSAnaWd4LWdyaWRfX2RyYWctZ2hvc3QtaW1hZ2UnO1xuICAgIHByaXZhdGUgZ2hvc3RJbWdJY29uQ2xhc3MgPSAnaWd4LWdyaWRfX2RyYWctZ2hvc3QtaW1hZ2UtaWNvbic7XG4gICAgcHJpdmF0ZSBnaG9zdEltZ0ljb25Hcm91cENsYXNzID0gJ2lneC1ncmlkX19kcmFnLWdob3N0LWltYWdlLWljb24tZ3JvdXAnO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcHVibGljIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHB1YmxpYyB6b25lOiBOZ1pvbmUsXG4gICAgICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBjbXM6IElneENvbHVtbk1vdmluZ1NlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGNkciwgZWxlbWVudCwgdmlld0NvbnRhaW5lciwgem9uZSwgcmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Fc2NhcGUoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5jbXMuY2FuY2VsRHJvcCA9IHRydWU7XG4gICAgICAgIHRoaXMub25Qb2ludGVyVXAoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBvaW50ZXJEb3duKGV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5kcmFnZ2FibGUgfHwgZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZHJhZ2dhYmxlJykgPT09ICdmYWxzZScpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuX3JlbW92ZU9uRGVzdHJveSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNtcy5jb2x1bW4gPSB0aGlzLmNvbHVtbjtcbiAgICAgICAgdGhpcy5naG9zdENsYXNzID0gdGhpcy5fZ2hvc3RDbGFzcztcblxuICAgICAgICBzdXBlci5vblBvaW50ZXJEb3duKGV2ZW50KTtcblxuICAgICAgICB0aGlzLmNtcy5pc0NvbHVtbk1vdmluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuY29sdW1uLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICBjb25zdCBhcmdzID0ge1xuICAgICAgICAgICAgc291cmNlOiB0aGlzLmNvbHVtblxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNvbHVtbi5ncmlkLm9uQ29sdW1uTW92aW5nU3RhcnQuZW1pdChhcmdzKTtcblxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiQgPSBmcm9tRXZlbnQodGhpcy5jb2x1bW4uZ3JpZC5kb2N1bWVudC5kZWZhdWx0VmlldywgJ2tleWRvd24nKS5zdWJzY3JpYmUoKGV2OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXYua2V5ID09PSBLRVlTLkVTQ0FQRSB8fCBldi5rZXkgPT09IEtFWVMuRVNDQVBFX0lFKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkVzY2FwZShldik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBvaW50ZXJNb3ZlKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHN1cGVyLm9uUG9pbnRlck1vdmUoZXZlbnQpO1xuXG4gICAgICAgIGlmICh0aGlzLl9kcmFnU3RhcnRlZCAmJiB0aGlzLmdob3N0RWxlbWVudCAmJiAhdGhpcy5jb2x1bW4uZ3JpZC5kcmFnZ2VkQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbi5ncmlkLmRyYWdnZWRDb2x1bW4gPSB0aGlzLmNvbHVtbjtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNtcy5pc0NvbHVtbk1vdmluZykge1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IHtcbiAgICAgICAgICAgICAgICBzb3VyY2U6IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmNvbHVtbi5ncmlkLm9uQ29sdW1uTW92aW5nLmVtaXQoYXJncyk7XG5cbiAgICAgICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25Fc2NhcGUoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uUG9pbnRlclVwKGV2ZW50KSB7XG4gICAgICAgIC8vIFJ1biBpdCBleHBsaWNpdGx5IGluc2lkZSB0aGUgem9uZSBiZWNhdXNlIHNvbWV0aW1lcyBvblBvaW50ZXJVcCBleGVjdXRlcyBhZnRlciB0aGUgY29kZSBiZWxvdy5cbiAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICBzdXBlci5vblBvaW50ZXJVcChldmVudCk7XG5cbiAgICAgICAgICAgIHRoaXMuY21zLmlzQ29sdW1uTW92aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbi5ncmlkLmRyYWdnZWRDb2x1bW4gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW4uZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjcmVhdGVHaG9zdChwYWdlWCwgcGFnZVkpIHtcbiAgICAgICAgc3VwZXIuY3JlYXRlR2hvc3QocGFnZVgsIHBhZ2VZKTtcblxuICAgICAgICB0aGlzLmdob3N0RWxlbWVudC5zdHlsZS5oZWlnaHQgPSBudWxsO1xuICAgICAgICB0aGlzLmdob3N0RWxlbWVudC5zdHlsZS5taW5XaWR0aCA9IG51bGw7XG4gICAgICAgIHRoaXMuZ2hvc3RFbGVtZW50LnN0eWxlLmZsZXhCYXNpcyA9IG51bGw7XG4gICAgICAgIHRoaXMuZ2hvc3RFbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gbnVsbDtcblxuICAgICAgICBjb25zdCBpY29uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaScpO1xuICAgICAgICBjb25zdCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ2Jsb2NrJyk7XG4gICAgICAgIGljb24uYXBwZW5kQ2hpbGQodGV4dCk7XG5cbiAgICAgICAgaWNvbi5jbGFzc0xpc3QuYWRkKCdtYXRlcmlhbC1pY29ucycpO1xuICAgICAgICB0aGlzLmNtcy5pY29uID0gaWNvbjtcblxuICAgICAgICBpZiAoIXRoaXMuY29sdW1uLmNvbHVtbkdyb3VwKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGljb24sIHRoaXMuZ2hvc3RJbWdJY29uQ2xhc3MpO1xuXG4gICAgICAgICAgICB0aGlzLmdob3N0RWxlbWVudC5pbnNlcnRCZWZvcmUoaWNvbiwgdGhpcy5naG9zdEVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQpO1xuXG4gICAgICAgICAgICB0aGlzLmdob3N0TGVmdCA9IHRoaXMuX2dob3N0U3RhcnRYID0gcGFnZVggLSAoKHRoaXMuZ2hvc3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC8gMykgKiAyKTtcbiAgICAgICAgICAgIHRoaXMuZ2hvc3RUb3AgPSB0aGlzLl9naG9zdFN0YXJ0WSA9IHBhZ2VZIC0gKCh0aGlzLmdob3N0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgLyAzKSAqIDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5naG9zdEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGljb24sIHRoaXMuZ2hvc3RFbGVtZW50LmNoaWxkTm9kZXNbMF0pO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGljb24sIHRoaXMuZ2hvc3RJbWdJY29uR3JvdXBDbGFzcyk7XG4gICAgICAgICAgICB0aGlzLmdob3N0RWxlbWVudC5jaGlsZHJlblswXS5zdHlsZS5wYWRkaW5nTGVmdCA9ICcwcHgnO1xuXG4gICAgICAgICAgICB0aGlzLmdob3N0TGVmdCA9IHRoaXMuX2dob3N0U3RhcnRYID0gcGFnZVggLSAoKHRoaXMuZ2hvc3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC8gMykgKiAyKTtcbiAgICAgICAgICAgIHRoaXMuZ2hvc3RUb3AgPSB0aGlzLl9naG9zdFN0YXJ0WSA9IHBhZ2VZIC0gKCh0aGlzLmdob3N0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgLyAzKSAqIDIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdW5zdWJzY3JpYmUoKSB7XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbiQpIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uJC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24kID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==