ngx-bootstrap-treeview
Version:
Ngx Bootstrap Treeview - Simple library to visualize, search and interact with tree data
204 lines • 18.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, Input, ElementRef, Renderer2, ViewChild, NgZone, Output, EventEmitter } from '@angular/core';
import { ContextMenuService } from '../../services/context-menu.service';
var NgxBootstrapTreeviewContextMenuComponent = /** @class */ (function () {
function NgxBootstrapTreeviewContextMenuComponent(_renderer, _zone, _contextMenuService) {
this._renderer = _renderer;
this._zone = _zone;
this._contextMenuService = _contextMenuService;
this._defaultConfig = {
containerClass: '',
hoveredItemClass: '',
itemsClass: ''
};
this.config = {};
this.rootContextMenu = null;
this.branchContextMenu = null;
this.leafContextMenu = null;
this.hidden = new EventEmitter();
this.shown = new EventEmitter();
this._activeMenu = null;
}
/**
* @return {?}
*/
NgxBootstrapTreeviewContextMenuComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
this.config = tslib_1.__assign({}, this._defaultConfig, this.config);
this._contextMenuService.lastContextMenuEvent.subscribe(function (lastContextMenuEvent) {
if (lastContextMenuEvent) {
_this.show(lastContextMenuEvent);
}
else {
_this.hide();
}
});
this._renderer.listen(document, 'click.out-zone', this.onDocumentClicked.bind(this));
this._renderer.listen(document, 'keyup.out-zone', this.onKeyPressed.bind(this));
};
/**
* @param {?} changes
* @return {?}
*/
NgxBootstrapTreeviewContextMenuComponent.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
if ('config' in changes) {
this.config = tslib_1.__assign({}, this._defaultConfig, changes.config.currentValue);
}
};
/**
* @param {?} event
* @return {?}
*/
NgxBootstrapTreeviewContextMenuComponent.prototype.onDocumentClicked = /**
* @param {?} event
* @return {?}
*/
function (event) {
if (this.lastContextMenuEvent) {
event.preventDefault();
event.stopPropagation();
this.hide();
}
};
/**
* @param {?} event
* @return {?}
*/
NgxBootstrapTreeviewContextMenuComponent.prototype.onKeyPressed = /**
* @param {?} event
* @return {?}
*/
function (event) {
if (this.lastContextMenuEvent && event.key.toLowerCase() === 'escape') {
this.hide();
}
};
/**
* @return {?}
*/
NgxBootstrapTreeviewContextMenuComponent.prototype.getLabels = /**
* @return {?}
*/
function () {
return this._activeMenu ? Object.keys(this._activeMenu) : [];
};
/**
* @param {?} label
* @return {?}
*/
NgxBootstrapTreeviewContextMenuComponent.prototype.onItemClicked = /**
* @param {?} label
* @return {?}
*/
function (label) {
this._activeMenu[label](this.lastContextMenuEvent.target);
};
/**
* @return {?}
*/
NgxBootstrapTreeviewContextMenuComponent.prototype.hide = /**
* @return {?}
*/
function () {
var _this = this;
this._zone.run(function () {
_this._activeMenu = null;
_this.lastContextMenuEvent = null;
_this.hidden.emit();
});
};
/**
* @param {?} contextMenuEvent
* @return {?}
*/
NgxBootstrapTreeviewContextMenuComponent.prototype.show = /**
* @param {?} contextMenuEvent
* @return {?}
*/
function (contextMenuEvent) {
this.lastContextMenuEvent = contextMenuEvent;
if (!contextMenuEvent.target) {
this._activeMenu = this.rootContextMenu;
}
else if (contextMenuEvent.target.children) {
this._activeMenu = this.branchContextMenu;
}
else {
this._activeMenu = this.leafContextMenu;
}
/** @type {?} */
var nativeElement = this.container.nativeElement;
/** @type {?} */
var x = this.lastContextMenuEvent.event.pageX.toString();
/** @type {?} */
var y = this.lastContextMenuEvent.event.pageY.toString();
this._renderer.setStyle(nativeElement, 'top', y + 'px');
this._renderer.setStyle(nativeElement, 'left', x + 'px');
this.shown.emit();
};
NgxBootstrapTreeviewContextMenuComponent.decorators = [
{ type: Component, args: [{
// tslint:disable-next-line: component-selector
selector: 'ngx-bootstrap-treeview-context-menu',
template: "<div\r\n class=\"context-menu list-group\"\r\n [ngClass]=\"{ 'd-none': !lastContextMenuEvent, 'd-block': lastContextMenuEvent }\"\r\n #container\r\n>\r\n <button\r\n class=\"context-menu-item {{ config.itemsClass }}\"\r\n *ngFor=\"let label of getLabels()\"\r\n (click)=\"onItemClicked(label)\"\r\n [ngClass]=\"{ 'list-group-item list-group-item-action px-3': !config.itemsClass }\"\r\n >\r\n {{ label }}\r\n </button>\r\n</div>\r\n",
styles: [".context-menu{background-color:#fff;border-radius:.25rem;left:0;position:fixed;top:0;z-index:100}.context-menu .context-menu-item{border-top-width:0;border-bottom-width:0;padding-top:.0625rem;padding-bottom:.0625rem;transition:background-color .3s}.context-menu .context-menu-item:first-of-type{padding-top:.125rem;border-top-width:1px}.context-menu .context-menu-item:last-of-type{padding-bottom:.125rem;border-bottom-width:1px}.context-menu .context-menu-item:hover{background:rgba(0,0,0,.8);color:#fff}"]
}] }
];
/** @nocollapse */
NgxBootstrapTreeviewContextMenuComponent.ctorParameters = function () { return [
{ type: Renderer2 },
{ type: NgZone },
{ type: ContextMenuService }
]; };
NgxBootstrapTreeviewContextMenuComponent.propDecorators = {
config: [{ type: Input }],
rootContextMenu: [{ type: Input }],
branchContextMenu: [{ type: Input }],
leafContextMenu: [{ type: Input }],
hidden: [{ type: Output }],
shown: [{ type: Output }],
container: [{ type: ViewChild, args: ['container',] }]
};
return NgxBootstrapTreeviewContextMenuComponent;
}());
export { NgxBootstrapTreeviewContextMenuComponent };
if (false) {
/** @type {?} */
NgxBootstrapTreeviewContextMenuComponent.prototype._defaultConfig;
/** @type {?} */
NgxBootstrapTreeviewContextMenuComponent.prototype.config;
/** @type {?} */
NgxBootstrapTreeviewContextMenuComponent.prototype.rootContextMenu;
/** @type {?} */
NgxBootstrapTreeviewContextMenuComponent.prototype.branchContextMenu;
/** @type {?} */
NgxBootstrapTreeviewContextMenuComponent.prototype.leafContextMenu;
/** @type {?} */
NgxBootstrapTreeviewContextMenuComponent.prototype.hidden;
/** @type {?} */
NgxBootstrapTreeviewContextMenuComponent.prototype.shown;
/** @type {?} */
NgxBootstrapTreeviewContextMenuComponent.prototype.container;
/** @type {?} */
NgxBootstrapTreeviewContextMenuComponent.prototype._activeMenu;
/** @type {?} */
NgxBootstrapTreeviewContextMenuComponent.prototype.lastContextMenuEvent;
/** @type {?} */
NgxBootstrapTreeviewContextMenuComponent.prototype._renderer;
/** @type {?} */
NgxBootstrapTreeviewContextMenuComponent.prototype._zone;
/** @type {?} */
NgxBootstrapTreeviewContextMenuComponent.prototype._contextMenuService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWJvb3RzdHJhcC10cmVldmlldy1jb250ZXh0LW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWJvb3RzdHJhcC10cmVldmlldy8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvbmd4LWJvb3RzdHJhcC10cmVldmlldy1jb250ZXh0LW1lbnUvbmd4LWJvb3RzdHJhcC10cmVldmlldy1jb250ZXh0LW1lbnUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNILFNBQVMsRUFFVCxLQUFLLEVBQ0wsVUFBVSxFQUNWLFNBQVMsRUFHVCxTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFHekU7SUFzQ0ksa0RBQW9CLFNBQW9CLEVBQVUsS0FBYSxFQUFVLG1CQUF1QztRQUE1RixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUFVLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBb0I7UUEvQnpHLG1CQUFjLEdBQTBDO1lBQzNELGNBQWMsRUFBRSxFQUFFO1lBQ2xCLGdCQUFnQixFQUFFLEVBQUU7WUFDcEIsVUFBVSxFQUFFLEVBQUU7U0FDakIsQ0FBQztRQUdLLFdBQU0sR0FBMEMsRUFBRSxDQUFDO1FBR25ELG9CQUFlLEdBQTJDLElBQUksQ0FBQztRQUcvRCxzQkFBaUIsR0FBMkMsSUFBSSxDQUFDO1FBR2pFLG9CQUFlLEdBQTJDLElBQUksQ0FBQztRQUcvRCxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUdsQyxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUtoQyxnQkFBVyxHQUEyQyxJQUFJLENBQUM7SUFJZ0QsQ0FBQzs7OztJQUVwSCwyREFBUTs7O0lBQVI7UUFBQSxpQkFhQztRQVpHLElBQUksQ0FB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U0FBUyxDQUFDLGFBQWE7O1lBQzVDLENBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7O1lBQ3BELENBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7UUFFMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFFekQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QixDQUFDOztnQkFoSEosU0FBUyxTQUFDOztvQkFFUCxRQUFRLEVBQUUscUNBQXFDO29CQUMvQyxpZkFBbUU7O2lCQUV0RTs7OztnQkFsQkcsU0FBUztnQkFJVCxNQUFNO2dCQU1ELGtCQUFrQjs7O3lCQWdCdEIsS0FBSztrQ0FHTCxLQUFLO29DQUdMLEtBQUs7a0NBR0wsS0FBSzt5QkFHTCxNQUFNO3dCQUdOLE1BQU07NEJBR04sU0FBUyxTQUFDLFdBQVc7O0lBa0YxQiwrQ0FBQztDQUFBLEFBakhELElBaUhDO1NBM0dZLHdDQUF3Qzs7O0lBQ2pELGtFQUlFOztJQUVGLDBEQUMwRDs7SUFFMUQsbUVBQ3NFOztJQUV0RSxxRUFDd0U7O0lBRXhFLG1FQUNzRTs7SUFFdEUsMERBQ3lDOztJQUV6Qyx5REFDd0M7O0lBRXhDLDZEQUM2Qzs7SUFFN0MsK0RBQW1FOztJQUVuRSx3RUFBOEM7O0lBRWxDLDZEQUE0Qjs7SUFBRSx5REFBcUI7O0lBQUUsdUVBQStDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIE9uSW5pdCxcclxuICAgIElucHV0LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIFJlbmRlcmVyMixcclxuICAgIFNpbXBsZUNoYW5nZXMsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbiAgICBOZ1pvbmUsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBFdmVudEVtaXR0ZXJcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmd4Qm9vdHN0cmFwVHJlZXZpZXdDb250ZXh0TWVudUNvbmZpZyB9IGZyb20gJy4uLy4uL21vZGVscy9uZ3gtYm9vdHN0cmFwLXRyZWV2aWV3LWNvbnRleHQtbWVudS1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBOZ3hCb290c3RyYXBUcmVldmlld0NvbnRleHRNZW51QWN0aW9ucyB9IGZyb20gJy4uLy4uL21vZGVscy9uZ3gtYm9vdHN0cmFwLXRyZWV2aWV3LWNvbnRleHQtbWVudS1hY3Rpb25zLm1vZGVsJztcclxuaW1wb3J0IHsgQ29udGV4dE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29udGV4dC1tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb250ZXh0TWVudUV2ZW50IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbnRleHQtbWVudS1ldmVudC5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgICBzZWxlY3RvcjogJ25neC1ib290c3RyYXAtdHJlZXZpZXctY29udGV4dC1tZW51JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9uZ3gtYm9vdHN0cmFwLXRyZWV2aWV3LWNvbnRleHQtbWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9uZ3gtYm9vdHN0cmFwLXRyZWV2aWV3LWNvbnRleHQtbWVudS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hCb290c3RyYXBUcmVldmlld0NvbnRleHRNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gICAgcHVibGljIF9kZWZhdWx0Q29uZmlnOiBOZ3hCb290c3RyYXBUcmVldmlld0NvbnRleHRNZW51Q29uZmlnID0ge1xyXG4gICAgICAgIGNvbnRhaW5lckNsYXNzOiAnJyxcclxuICAgICAgICBob3ZlcmVkSXRlbUNsYXNzOiAnJyxcclxuICAgICAgICBpdGVtc0NsYXNzOiAnJ1xyXG4gICAgfTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGNvbmZpZzogTmd4Qm9vdHN0cmFwVHJlZXZpZXdDb250ZXh0TWVudUNvbmZpZyA9IHt9O1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgcm9vdENvbnRleHRNZW51OiBOZ3hCb290c3RyYXBUcmVldmlld0NvbnRleHRNZW51QWN0aW9ucyA9IG51bGw7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBicmFuY2hDb250ZXh0TWVudTogTmd4Qm9vdHN0cmFwVHJlZXZpZXdDb250ZXh0TWVudUFjdGlvbnMgPSBudWxsO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbGVhZkNvbnRleHRNZW51OiBOZ3hCb290c3RyYXBUcmVldmlld0NvbnRleHRNZW51QWN0aW9ucyA9IG51bGw7XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgaGlkZGVuID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHNob3duID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpXHJcbiAgICBwdWJsaWMgY29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuXHJcbiAgICBwcml2YXRlIF9hY3RpdmVNZW51OiBOZ3hCb290c3RyYXBUcmVldmlld0NvbnRleHRNZW51QWN0aW9ucyA9IG51bGw7XHJcblxyXG4gICAgcHVibGljIGxhc3RDb250ZXh0TWVudUV2ZW50OiBDb250ZXh0TWVudUV2ZW50O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgX3pvbmU6IE5nWm9uZSwgcHJpdmF0ZSBfY29udGV4dE1lbnVTZXJ2aWNlOiBDb250ZXh0TWVudVNlcnZpY2UpIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb25maWcgPSB7IC4uLnRoaXMuX2RlZmF1bHRDb25maWcsIC4uLnRoaXMuY29uZmlnIH07XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbnRleHRNZW51U2VydmljZS5sYXN0Q29udGV4dE1lbnVFdmVudC5zdWJzY3JpYmUoKGxhc3RDb250ZXh0TWVudUV2ZW50OiBDb250ZXh0TWVudUV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChsYXN0Q29udGV4dE1lbnVFdmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93KGxhc3RDb250ZXh0TWVudUV2ZW50KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLmxpc3Rlbihkb2N1bWVudCwgJ2NsaWNrLm91dC16b25lJywgdGhpcy5vbkRvY3VtZW50Q2xpY2tlZC5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl9yZW5kZXJlci5saXN0ZW4oZG9jdW1lbnQsICdrZXl1cC5vdXQtem9uZScsIHRoaXMub25LZXlQcmVzc2VkLmJpbmQodGhpcykpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBpZiAoJ2NvbmZpZycgaW4gY2hhbmdlcykge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5fZGVmYXVsdENvbmZpZywgLi4uY2hhbmdlcy5jb25maWcuY3VycmVudFZhbHVlIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkRvY3VtZW50Q2xpY2tlZChldmVudDogRXZlbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5sYXN0Q29udGV4dE1lbnVFdmVudCkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25LZXlQcmVzc2VkKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMubGFzdENvbnRleHRNZW51RXZlbnQgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdlc2NhcGUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TGFiZWxzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlTWVudSA/IE9iamVjdC5rZXlzKHRoaXMuX2FjdGl2ZU1lbnUpIDogW107XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uSXRlbUNsaWNrZWQobGFiZWw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2FjdGl2ZU1lbnVbbGFiZWxdKHRoaXMubGFzdENvbnRleHRNZW51RXZlbnQudGFyZ2V0KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGlkZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl96b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZU1lbnUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmxhc3RDb250ZXh0TWVudUV2ZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaGlkZGVuLmVtaXQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvdyhjb250ZXh0TWVudUV2ZW50OiBDb250ZXh0TWVudUV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5sYXN0Q29udGV4dE1lbnVFdmVudCA9IGNvbnRleHRNZW51RXZlbnQ7XHJcblxyXG4gICAgICAgIGlmICghY29udGV4dE1lbnVFdmVudC50YXJnZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5fYWN0aXZlTWVudSA9IHRoaXMucm9vdENvbnRleHRNZW51O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dE1lbnVFdmVudC50YXJnZXQuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5fYWN0aXZlTWVudSA9IHRoaXMuYnJhbmNoQ29udGV4dE1lbnU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fYWN0aXZlTWVudSA9IHRoaXMubGVhZkNvbnRleHRNZW51O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbmF0aXZlRWxlbWVudCA9IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgeCA9IHRoaXMubGFzdENvbnRleHRNZW51RXZlbnQuZXZlbnQucGFnZVgudG9TdHJpbmcoKTtcclxuICAgICAgICBjb25zdCB5ID0gdGhpcy5sYXN0Q29udGV4dE1lbnVFdmVudC5ldmVudC5wYWdlWS50b1N0cmluZygpO1xyXG5cclxuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShuYXRpdmVFbGVtZW50LCAndG9wJywgeSArICdweCcpO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKG5hdGl2ZUVsZW1lbnQsICdsZWZ0JywgeCArICdweCcpO1xyXG5cclxuICAgICAgICB0aGlzLnNob3duLmVtaXQoKTtcclxuICAgIH1cclxufVxyXG4iXX0=