@formql/core
Version:
FormQL - A framework for building dynamic forms
140 lines • 20.4 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Directive, EventEmitter, HostListener, Input, Output, Renderer2, ViewContainerRef } from '@angular/core';
import { GridPositionType } from '../models/style.model';
import { ContainerType, FormQLMode } from '../models/type.model';
/*
Directive to handle the drop and receive the information from the dnd directive
*/
var DndDropDirective = /** @class */ (function () {
function DndDropDirective(view, renderer) {
this.view = view;
this.renderer = renderer;
this.synchronise = new EventEmitter();
this.dropAreaClass = 'fql-dnd-container-drop-area';
this.dropSeparatorBorderClass = 'fql-dnd-container-separator';
}
DndDropDirective.prototype.onDrop = function ($event) {
if (this.mode !== FormQLMode.View &&
$event &&
($event.dataTransfer.types[1] === this.type.toString() ||
($event.dataTransfer.types.item &&
$event.dataTransfer.types.item[1] &&
$event.dataTransfer.types.item[1] === this.type.toString()))) {
$event.stopPropagation();
$event.preventDefault();
var sourceIds = $event.dataTransfer.getData('Text');
var arr = sourceIds.split('#');
var targetIndexId = null;
var element = this.getPositionElement($event.srcElement);
if (element)
targetIndexId = this.getPositionAttribute(element);
this.synchronise.emit({
sourceObjectId: arr[0],
sourceWrapperId: arr[1],
targetIndexId: targetIndexId
});
}
};
DndDropDirective.prototype.onDragOver = function ($event) {
if (this.mode !== FormQLMode.View && $event)
if ($event.dataTransfer.types[1] === this.type.toString() ||
($event.dataTransfer.types.item &&
$event.dataTransfer.types.item[1] &&
$event.dataTransfer.types.item[1] === this.type.toString())) {
$event.stopPropagation();
$event.preventDefault();
$event.dataTransfer.dropEffect = 'move';
var nativeElement = this.view.element.nativeElement;
var currentDropAreaBorderClasses = nativeElement.getAttribute('class') ? nativeElement.getAttribute('class').trim() : '';
if (currentDropAreaBorderClasses.indexOf(this.dropAreaClass) === -1) {
var newDropAreaClasses = currentDropAreaBorderClasses + " " + this.dropAreaClass;
this.renderer.setAttribute(nativeElement, 'class', newDropAreaClasses);
}
var element = this.getPositionElement($event.srcElement);
if (element) {
var currentDropSeparatorBoderStyle = element.getAttribute('class') ? element.getAttribute('class').trim() : '';
if (currentDropSeparatorBoderStyle.indexOf(this.dropSeparatorBorderClass) === -1) {
var newDropSeparatorBorderStyling = currentDropSeparatorBoderStyle + " " + this.dropSeparatorBorderClass;
this.renderer.setAttribute(element, 'class', newDropSeparatorBorderStyling);
}
}
}
};
DndDropDirective.prototype.onDragLeave = function ($event) {
if (this.mode !== FormQLMode.View && $event) {
var nativeElement = this.view.element.nativeElement;
var currentDropAreaClasses = nativeElement.getAttribute('class') ? nativeElement.getAttribute('class') : '';
if (currentDropAreaClasses.indexOf(this.dropAreaClass) !== -1)
this.renderer.setAttribute(nativeElement, 'class', currentDropAreaClasses.replace(this.dropAreaClass, ''));
var element = this.getPositionElement($event.srcElement);
if (element) {
var currentDropSeparatorBoderStyle = element.getAttribute('class') ? element.getAttribute('class') : '';
if (currentDropSeparatorBoderStyle.indexOf(this.dropSeparatorBorderClass) !== -1)
this.renderer.setAttribute(element, 'class', currentDropSeparatorBoderStyle.replace(this.dropSeparatorBorderClass, ''));
}
}
};
DndDropDirective.prototype.getPositionElement = function (sourceELement) {
var className = 'fql-component-container-wrapper';
if (this.type === ContainerType.Section)
className = 'fql-section-wrapper-edit';
var element = sourceELement;
var i = 0;
while (element.className && element.className.indexOf(className) === -1 && i < 10) {
element = element.parentElement;
i++;
}
if (element.className && element.className.indexOf(className) !== -1)
return element;
return null;
};
DndDropDirective.prototype.getPositionAttribute = function (element) {
var attributeName = 'componentId';
if (this.type === ContainerType.Section)
attributeName = 'sectionId';
return element.getAttribute(attributeName);
};
__decorate([
Input(),
__metadata("design:type", Number)
], DndDropDirective.prototype, "type", void 0);
__decorate([
Input(),
__metadata("design:type", Number)
], DndDropDirective.prototype, "positionType", void 0);
__decorate([
Input(),
__metadata("design:type", Number)
], DndDropDirective.prototype, "mode", void 0);
__decorate([
Output(),
__metadata("design:type", EventEmitter)
], DndDropDirective.prototype, "synchronise", void 0);
__decorate([
HostListener('drop', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", void 0)
], DndDropDirective.prototype, "onDrop", null);
__decorate([
HostListener('dragover', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", void 0)
], DndDropDirective.prototype, "onDragOver", null);
__decorate([
HostListener('dragleave', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", void 0)
], DndDropDirective.prototype, "onDragLeave", null);
DndDropDirective = __decorate([
Directive({
selector: '[formqlDndDrop]'
}),
__metadata("design:paramtypes", [ViewContainerRef, Renderer2])
], DndDropDirective);
return DndDropDirective;
}());
export { DndDropDirective };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLWRyb3AuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGZvcm1xbC9jb3JlLyIsInNvdXJjZXMiOlsiZGlyZWN0aXZlcy9kbmQtZHJvcC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pFOztFQUVFO0FBSUY7SUFDRSwwQkFBb0IsSUFBc0IsRUFBVSxRQUFtQjtRQUFuRCxTQUFJLEdBQUosSUFBSSxDQUFrQjtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVc7UUFNN0QsZ0JBQVcsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUU5RCxrQkFBYSxHQUFHLDZCQUE2QixDQUFDO1FBQzlDLDZCQUF3QixHQUFHLDZCQUE2QixDQUFDO0lBVGlCLENBQUM7SUFXbEMsaUNBQU0sR0FBYixVQUFjLE1BQU07UUFDcEQsSUFDRSxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJO1lBQzdCLE1BQU07WUFDTixDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNwRCxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUk7b0JBQzdCLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ2pDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMs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RTtrQ0FBYyxZQUFZO3lEQUEyQjtJQUs1QjtRQUFqQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7Ozs7a0RBd0JoQztJQUVxQztRQUFyQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7Ozs7c0RBNkJwQztJQUVzQztRQUF0QyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7Ozs7dURBZXJDO0lBcEZVLGdCQUFnQjtRQUg1QixTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsaUJBQWlCO1NBQzVCLENBQUM7eUNBRTBCLGdCQUFnQixFQUFvQixTQUFTO09BRDVELGdCQUFnQixDQThHNUI7SUFBRCx1QkFBQztDQUFBLEFBOUdELElBOEdDO1NBOUdZLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPdXRwdXQsIFJlbmRlcmVyMiwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEbmRUcmFuc2ZlciB9IGZyb20gJy4uL21vZGVscy9kbmQubW9kZWwnO1xyXG5pbXBvcnQgeyBHcmlkUG9zaXRpb25UeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3N0eWxlLm1vZGVsJztcclxuaW1wb3J0IHsgQ29udGFpbmVyVHlwZSwgRm9ybVFMTW9kZSB9IGZyb20gJy4uL21vZGVscy90eXBlLm1vZGVsJztcclxuLypcclxuICAgIERpcmVjdGl2ZSB0byBoYW5kbGUgdGhlIGRyb3AgYW5kIHJlY2VpdmUgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIGRuZCBkaXJlY3RpdmVcclxuKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbZm9ybXFsRG5kRHJvcF0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEbmREcm9wRGlyZWN0aXZlIHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHZpZXc6IFZpZXdDb250YWluZXJSZWYsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge31cclxuXHJcbiAgQElucHV0KCkgcHVibGljIHR5cGU6IENvbnRhaW5lclR5cGU7XHJcbiAgQElucHV0KCkgcHVibGljIHBvc2l0aW9uVHlwZTogR3JpZFBvc2l0aW9uVHlwZTtcclxuICBASW5wdXQoKSBwdWJsaWMgbW9kZTogRm9ybVFMTW9kZTtcclxuXHJcbiAgQE91dHB1dCgpIHN5bmNocm9uaXNlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgZHJvcEFyZWFDbGFzcyA9ICdmcWwtZG5kLWNvbnRhaW5lci1kcm9wLWFyZWEnO1xyXG4gIGRyb3BTZXBhcmF0b3JCb3JkZXJDbGFzcyA9ICdmcWwtZG5kLWNvbnRhaW5lci1zZXBhcmF0b3InO1xyXG5cclxuICBASG9zdExpc3RlbmVyKCdkcm9wJywgWyckZXZlbnQnXSkgcHVibGljIG9uRHJvcCgkZXZlbnQpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5tb2RlICE9PSBGb3JtUUxNb2RlLlZpZXcgJiZcclxuICAgICAgJGV2ZW50ICYmXHJcbiAgICAgICgkZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzWzFdID09PSB0aGlzLnR5cGUudG9TdHJpbmcoKSB8fFxyXG4gICAgICAgICgkZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLml0ZW0gJiZcclxuICAgICAgICAgICRldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaXRlbVsxXSAmJlxyXG4gICAgICAgICAgJGV2ZW50LmRhdGFUcmFuc2Zlci50eXBlcy5pdGVtWzFdID09PSB0aGlzLnR5cGUudG9TdHJpbmcoKSkpXHJcbiAgICApIHtcclxuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgY29uc3Qgc291cmNlSWRzID0gJGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKCdUZXh0Jyk7XHJcbiAgICAgIGNvbnN0IGFyciA9IHNvdXJjZUlkcy5zcGxpdCgnIycpO1xyXG5cclxuICAgICAgbGV0IHRhcmdldEluZGV4SWQgPSBudWxsO1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5nZXRQb3NpdGlvbkVsZW1lbnQoJGV2ZW50LnNyY0VsZW1lbnQpO1xyXG4gICAgICBpZiAoZWxlbWVudCkgdGFyZ2V0SW5kZXhJZCA9IHRoaXMuZ2V0UG9zaXRpb25BdHRyaWJ1dGUoZWxlbWVudCk7XHJcblxyXG4gICAgICB0aGlzLnN5bmNocm9uaXNlLmVtaXQoPERuZFRyYW5zZmVyPntcclxuICAgICAgICBzb3VyY2VPYmplY3RJZDogYXJyWzBdLFxyXG4gICAgICAgIHNvdXJjZVdyYXBwZXJJZDogYXJyWzFdLFxyXG4gICAgICAgIHRhcmdldEluZGV4SWQ6IHRhcmdldEluZGV4SWRcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkcmFnb3ZlcicsIFsnJGV2ZW50J10pIHB1YmxpYyBvbkRyYWdPdmVyKCRldmVudCkge1xyXG4gICAgaWYgKHRoaXMubW9kZSAhPT0gRm9ybVFMTW9kZS5WaWV3ICYmICRldmVudClcclxuICAgICAgaWYgKFxyXG4gICAgICAgICRldmVudC5kYXRhVHJhbnNmZXIudHlwZXNbMV0gPT09IHRoaXMudHlwZS50b1N0cmluZygpIHx8XHJcbiAgICAgICAgKCRldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaXRlbSAmJlxyXG4gICAgICAgICAgJGV2ZW50LmRhdGFUcmFuc2Zlci50eXBlcy5pdGVtWzFdICYmXHJcbiAgICAgICAgICAkZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLml0ZW1bMV0gPT09IHRoaXMudHlwZS50b1N0cmluZygpKVxyXG4gICAgICApIHtcclxuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgJGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ21vdmUnO1xyXG5cclxuICAgICAgICBjb25zdCBuYXRpdmVFbGVtZW50ID0gdGhpcy52aWV3LmVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBjb25zdCBjdXJyZW50RHJvcEFyZWFCb3JkZXJDbGFzc2VzID0gbmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgPyBuYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnY2xhc3MnKS50cmltKCkgOiAnJztcclxuXHJcbiAgICAgICAgaWYgKGN1cnJlbnREcm9wQXJlYUJvcmRlckNsYXNzZXMuaW5kZXhPZih0aGlzLmRyb3BBcmVhQ2xhc3MpID09PSAtMSkge1xyXG4gICAgICAgICAgY29uc3QgbmV3RHJvcEFyZWFDbGFzc2VzID0gYCR7Y3VycmVudERyb3BBcmVhQm9yZGVyQ2xhc3Nlc30gJHt0aGlzLmRyb3BBcmVhQ2xhc3N9YDtcclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKG5hdGl2ZUVsZW1lbnQsICdjbGFzcycsIG5ld0Ryb3BBcmVhQ2xhc3Nlcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5nZXRQb3NpdGlvbkVsZW1lbnQoJGV2ZW50LnNyY0VsZW1lbnQpO1xyXG4gICAgICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgICAgICBjb25zdCBjdXJyZW50RHJvcFNlcGFyYXRvckJvZGVyU3R5bGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnY2xhc3MnKSA/IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdjbGFzcycpLnRyaW0oKSA6ICcnO1xyXG4gICAgICAgICAgaWYgKGN1cnJlbnREcm9wU2VwYXJhdG9yQm9kZXJTdHlsZS5pbmRleE9mKHRoaXMuZHJvcFNlcGFyYXRvckJvcmRlckNsYXNzKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3RHJvcFNlcGFyYXRvckJvcmRlclN0eWxpbmcgPSBgJHtjdXJyZW50RHJvcFNlcGFyYXRvckJvZGVyU3R5bGV9ICR7dGhpcy5kcm9wU2VwYXJhdG9yQm9yZGVyQ2xhc3N9YDtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ2NsYXNzJywgbmV3RHJvcFNlcGFyYXRvckJvcmRlclN0eWxpbmcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZHJhZ2xlYXZlJywgWyckZXZlbnQnXSkgcHVibGljIG9uRHJhZ0xlYXZlKCRldmVudCkge1xyXG4gICAgaWYgKHRoaXMubW9kZSAhPT0gRm9ybVFMTW9kZS5WaWV3ICYmICRldmVudCkge1xyXG4gICAgICBjb25zdCBuYXRpdmVFbGVtZW50ID0gdGhpcy52aWV3LmVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICAgIGNvbnN0IGN1cnJlbnREcm9wQXJlYUNsYXNzZXMgPSBuYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnY2xhc3MnKSA/IG5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdjbGFzcycpIDogJyc7XHJcbiAgICAgIGlmIChjdXJyZW50RHJvcEFyZWFDbGFzc2VzLmluZGV4T2YodGhpcy5kcm9wQXJlYUNsYXNzKSAhPT0gLTEpXHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUobmF0aXZlRWxlbWVudCwgJ2NsYXNzJywgY3VycmVudERyb3BBcmVhQ2xhc3Nlcy5yZXBsYWNlKHRoaXMuZHJvcEFyZWFDbGFzcywgJycpKTtcclxuXHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdldFBvc2l0aW9uRWxlbWVudCgkZXZlbnQuc3JjRWxlbWVudCk7XHJcbiAgICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudERyb3BTZXBhcmF0b3JCb2RlclN0eWxlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgPyBlbGVtZW50LmdldEF0dHJpYnV0ZSgnY2xhc3MnKSA6ICcnO1xyXG4gICAgICAgIGlmIChjdXJyZW50RHJvcFNlcGFyYXRvckJvZGVyU3R5bGUuaW5kZXhPZih0aGlzLmRyb3BTZXBhcmF0b3JCb3JkZXJDbGFzcykgIT09IC0xKVxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ2NsYXNzJywgY3VycmVudERyb3BTZXBhcmF0b3JCb2RlclN0eWxlLnJlcGxhY2UodGhpcy5kcm9wU2VwYXJhdG9yQm9yZGVyQ2xhc3MsICcnKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFBvc2l0aW9uRWxlbWVudChzb3VyY2VFTGVtZW50KTogSFRNTEVsZW1lbnQge1xyXG4gICAgbGV0IGNsYXNzTmFtZSA9ICdmcWwtY29tcG9uZW50LWNvbnRhaW5lci13cmFwcGVyJztcclxuXHJcbiAgICBpZiAodGhpcy50eXBlID09PSBDb250YWluZXJUeXBlLlNlY3Rpb24pIGNsYXNzTmFtZSA9ICdmcWwtc2VjdGlvbi13cmFwcGVyLWVkaXQnO1xyXG5cclxuICAgIGxldCBlbGVtZW50ID0gc291cmNlRUxlbWVudDtcclxuICAgIGxldCBpID0gMDtcclxuICAgIHdoaWxlIChlbGVtZW50LmNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTmFtZS5pbmRleE9mKGNsYXNzTmFtZSkgPT09IC0xICYmIGkgPCAxMCkge1xyXG4gICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xyXG4gICAgICBpKys7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGVsZW1lbnQuY2xhc3NOYW1lICYmIGVsZW1lbnQuY2xhc3NOYW1lLmluZGV4T2YoY2xhc3NOYW1lKSAhPT0gLTEpIHJldHVybiBlbGVtZW50IGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0UG9zaXRpb25BdHRyaWJ1dGUoZWxlbWVudCk6IG51bWJlciB7XHJcbiAgICBsZXQgYXR0cmlidXRlTmFtZSA9ICdjb21wb25lbnRJZCc7XHJcblxyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gQ29udGFpbmVyVHlwZS5TZWN0aW9uKSBhdHRyaWJ1dGVOYW1lID0gJ3NlY3Rpb25JZCc7XHJcblxyXG4gICAgcmV0dXJuIGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xyXG4gIH1cclxufVxyXG4iXX0=