UNPKG

@formql/core

Version:

FormQL - A framework for building dynamic forms

140 lines 20.4 kB
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=