UNPKG

@formql/core

Version:

FormQL - A framework for building dynamic forms

139 lines 20 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 */ let DndDropDirective = class DndDropDirective { constructor(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'; } onDrop($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(); const sourceIds = $event.dataTransfer.getData('Text'); const arr = sourceIds.split('#'); let targetIndexId = null; const element = this.getPositionElement($event.srcElement); if (element) targetIndexId = this.getPositionAttribute(element); this.synchronise.emit({ sourceObjectId: arr[0], sourceWrapperId: arr[1], targetIndexId: targetIndexId }); } } onDragOver($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'; const nativeElement = this.view.element.nativeElement; const currentDropAreaBorderClasses = nativeElement.getAttribute('class') ? nativeElement.getAttribute('class').trim() : ''; if (currentDropAreaBorderClasses.indexOf(this.dropAreaClass) === -1) { const newDropAreaClasses = `${currentDropAreaBorderClasses} ${this.dropAreaClass}`; this.renderer.setAttribute(nativeElement, 'class', newDropAreaClasses); } const element = this.getPositionElement($event.srcElement); if (element) { const currentDropSeparatorBoderStyle = element.getAttribute('class') ? element.getAttribute('class').trim() : ''; if (currentDropSeparatorBoderStyle.indexOf(this.dropSeparatorBorderClass) === -1) { const newDropSeparatorBorderStyling = `${currentDropSeparatorBoderStyle} ${this.dropSeparatorBorderClass}`; this.renderer.setAttribute(element, 'class', newDropSeparatorBorderStyling); } } } } onDragLeave($event) { if (this.mode !== FormQLMode.View && $event) { const nativeElement = this.view.element.nativeElement; const currentDropAreaClasses = nativeElement.getAttribute('class') ? nativeElement.getAttribute('class') : ''; if (currentDropAreaClasses.indexOf(this.dropAreaClass) !== -1) this.renderer.setAttribute(nativeElement, 'class', currentDropAreaClasses.replace(this.dropAreaClass, '')); const element = this.getPositionElement($event.srcElement); if (element) { const currentDropSeparatorBoderStyle = element.getAttribute('class') ? element.getAttribute('class') : ''; if (currentDropSeparatorBoderStyle.indexOf(this.dropSeparatorBorderClass) !== -1) this.renderer.setAttribute(element, 'class', currentDropSeparatorBoderStyle.replace(this.dropSeparatorBorderClass, '')); } } } getPositionElement(sourceELement) { let className = 'fql-component-container-wrapper'; if (this.type === ContainerType.Section) className = 'fql-section-wrapper-edit'; let element = sourceELement; let 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; } getPositionAttribute(element) { let 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); export { DndDropDirective }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLWRyb3AuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGZvcm1xbC9jb3JlLyIsInNvdXJjZXMiOlsiZGlyZWN0aXZlcy9kbmQtZHJvcC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pFOztFQUVFO0FBSUYsSUFBYSxnQkFBZ0IsR0FBN0IsTUFBYSxnQkFBZ0I7SUFDM0IsWUFBb0IsSUFBc0IsRUFBVSxRQUFtQjtRQUFuRCxTQUFJLEdBQUosSUFBSSxDQUFrQjtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVc7UUFNN0QsZ0JBQVcsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUU5RCxrQkFBYSxHQUFHLDZCQUE2QixDQUFDO1FBQzlDLDZCQUF3QixHQUFHLDZCQUE2QixDQUFDO0lBVGlCLENBQUM7SUFXbEMsTUFBTSxDQUFDLE1BQU07UUFDcEQsSUFDRSxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJO1lBQzdCLE1BQU07WUFDTixDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNwRCxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUk7b0JBQzdCLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ2pDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxD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QUF5QjtBQUV2QjtJQUFULE1BQU0sRUFBRTs4QkFBYyxZQUFZO3FEQUEyQjtBQUs1QjtJQUFqQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7Ozs7OENBd0JoQztBQUVxQztJQUFyQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7Ozs7a0RBNkJwQztBQUVzQztJQUF0QyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7Ozs7bURBZXJDO0FBcEZVLGdCQUFnQjtJQUg1QixTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsaUJBQWlCO0tBQzVCLENBQUM7cUNBRTBCLGdCQUFnQixFQUFvQixTQUFTO0dBRDVELGdCQUFnQixDQThHNUI7U0E5R1ksZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE91dHB1dCwgUmVuZGVyZXIyLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERuZFRyYW5zZmVyIH0gZnJvbSAnLi4vbW9kZWxzL2RuZC5tb2RlbCc7XHJcbmltcG9ydCB7IEdyaWRQb3NpdGlvblR5cGUgfSBmcm9tICcuLi9tb2RlbHMvc3R5bGUubW9kZWwnO1xyXG5pbXBvcnQgeyBDb250YWluZXJUeXBlLCBGb3JtUUxNb2RlIH0gZnJvbSAnLi4vbW9kZWxzL3R5cGUubW9kZWwnO1xyXG4vKlxyXG4gICAgRGlyZWN0aXZlIHRvIGhhbmRsZSB0aGUgZHJvcCBhbmQgcmVjZWl2ZSB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgZG5kIGRpcmVjdGl2ZVxyXG4qL1xyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tmb3JtcWxEbmREcm9wXSdcclxufSlcclxuZXhwb3J0IGNsYXNzIERuZERyb3BEaXJlY3RpdmUge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdmlldzogVmlld0NvbnRhaW5lclJlZiwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7fVxyXG5cclxuICBASW5wdXQoKSBwdWJsaWMgdHlwZTogQ29udGFpbmVyVHlwZTtcclxuICBASW5wdXQoKSBwdWJsaWMgcG9zaXRpb25UeXBlOiBHcmlkUG9zaXRpb25UeXBlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtb2RlOiBGb3JtUUxNb2RlO1xyXG5cclxuICBAT3V0cHV0KCkgc3luY2hyb25pc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBkcm9wQXJlYUNsYXNzID0gJ2ZxbC1kbmQtY29udGFpbmVyLWRyb3AtYXJlYSc7XHJcbiAgZHJvcFNlcGFyYXRvckJvcmRlckNsYXNzID0gJ2ZxbC1kbmQtY29udGFpbmVyLXNlcGFyYXRvcic7XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2Ryb3AnLCBbJyRldmVudCddKSBwdWJsaWMgb25Ecm9wKCRldmVudCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLm1vZGUgIT09IEZvcm1RTE1vZGUuVmlldyAmJlxyXG4gICAgICAkZXZlbnQgJiZcclxuICAgICAgKCRldmVudC5kYXRhVHJhbnNmZXIudHlwZXNbMV0gPT09IHRoaXMudHlwZS50b1N0cmluZygpIHx8XHJcbiAgICAgICAgKCRldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaXRlbSAmJlxyXG4gICAgICAgICAgJGV2ZW50LmRhdGFUcmFuc2Zlci50eXBlcy5pdGVtWzFdICYmXHJcbiAgICAgICAgICAkZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLml0ZW1bMV0gPT09IHRoaXMudHlwZS50b1N0cmluZygpKSlcclxuICAgICkge1xyXG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBjb25zdCBzb3VyY2VJZHMgPSAkZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoJ1RleHQnKTtcclxuICAgICAgY29uc3QgYXJyID0gc291cmNlSWRzLnNwbGl0KCcjJyk7XHJcblxyXG4gICAgICBsZXQgdGFyZ2V0SW5kZXhJZCA9IG51bGw7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdldFBvc2l0aW9uRWxlbWVudCgkZXZlbnQuc3JjRWxlbWVudCk7XHJcbiAgICAgIGlmIChlbGVtZW50KSB0YXJnZXRJbmRleElkID0gdGhpcy5nZXRQb3NpdGlvbkF0dHJpYnV0ZShlbGVtZW50KTtcclxuXHJcbiAgICAgIHRoaXMuc3luY2hyb25pc2UuZW1pdCg8RG5kVHJhbnNmZXI+e1xyXG4gICAgICAgIHNvdXJjZU9iamVjdElkOiBhcnJbMF0sXHJcbiAgICAgICAgc291cmNlV3JhcHBlcklkOiBhcnJbMV0sXHJcbiAgICAgICAgdGFyZ2V0SW5kZXhJZDogdGFyZ2V0SW5kZXhJZFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RyYWdvdmVyJywgWyckZXZlbnQnXSkgcHVibGljIG9uRHJhZ092ZXIoJGV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5tb2RlICE9PSBGb3JtUUxNb2RlLlZpZXcgJiYgJGV2ZW50KVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgJGV2ZW50LmRhdGFUcmFuc2Zlci50eXBlc1sxXSA9PT0gdGhpcy50eXBlLnRvU3RyaW5nKCkgfHxcclxuICAgICAgICAoJGV2ZW50LmRhdGFUcmFuc2Zlci50eXBlcy5pdGVtICYmXHJcbiAgICAgICAgICAkZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLml0ZW1bMV0gJiZcclxuICAgICAgICAgICRldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaXRlbVsxXSA9PT0gdGhpcy50eXBlLnRvU3RyaW5nKCkpXHJcbiAgICAgICkge1xyXG4gICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAkZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbW92ZSc7XHJcblxyXG4gICAgICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQgPSB0aGlzLnZpZXcuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnREcm9wQXJlYUJvcmRlckNsYXNzZXMgPSBuYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnY2xhc3MnKSA/IG5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdjbGFzcycpLnRyaW0oKSA6ICcnO1xyXG5cclxuICAgICAgICBpZiAoY3VycmVudERyb3BBcmVhQm9yZGVyQ2xhc3Nlcy5pbmRleE9mKHRoaXMuZHJvcEFyZWFDbGFzcykgPT09IC0xKSB7XHJcbiAgICAgICAgICBjb25zdCBuZXdEcm9wQXJlYUNsYXNzZXMgPSBgJHtjdXJyZW50RHJvcEFyZWFCb3JkZXJDbGFzc2VzfSAke3RoaXMuZHJvcEFyZWFDbGFzc31gO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUobmF0aXZlRWxlbWVudCwgJ2NsYXNzJywgbmV3RHJvcEFyZWFDbGFzc2VzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdldFBvc2l0aW9uRWxlbWVudCgkZXZlbnQuc3JjRWxlbWVudCk7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICAgIGNvbnN0IGN1cnJlbnREcm9wU2VwYXJhdG9yQm9kZXJTdHlsZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdjbGFzcycpID8gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykudHJpbSgpIDogJyc7XHJcbiAgICAgICAgICBpZiAoY3VycmVudERyb3BTZXBhcmF0b3JCb2RlclN0eWxlLmluZGV4T2YodGhpcy5kcm9wU2VwYXJhdG9yQm9yZGVyQ2xhc3MpID09PSAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdEcm9wU2VwYXJhdG9yQm9yZGVyU3R5bGluZyA9IGAke2N1cnJlbnREcm9wU2VwYXJhdG9yQm9kZXJTdHlsZX0gJHt0aGlzLmRyb3BTZXBhcmF0b3JCb3JkZXJDbGFzc31gO1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShlbGVtZW50LCAnY2xhc3MnLCBuZXdEcm9wU2VwYXJhdG9yQm9yZGVyU3R5bGluZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkcmFnbGVhdmUnLCBbJyRldmVudCddKSBwdWJsaWMgb25EcmFnTGVhdmUoJGV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5tb2RlICE9PSBGb3JtUUxNb2RlLlZpZXcgJiYgJGV2ZW50KSB7XHJcbiAgICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQgPSB0aGlzLnZpZXcuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgICAgY29uc3QgY3VycmVudERyb3BBcmVhQ2xhc3NlcyA9IG5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdjbGFzcycpID8gbmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgOiAnJztcclxuICAgICAgaWYgKGN1cnJlbnREcm9wQXJlYUNsYXNzZXMuaW5kZXhPZih0aGlzLmRyb3BBcmVhQ2xhc3MpICE9PSAtMSlcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShuYXRpdmVFbGVtZW50LCAnY2xhc3MnLCBjdXJyZW50RHJvcEFyZWFDbGFzc2VzLnJlcGxhY2UodGhpcy5kcm9wQXJlYUNsYXNzLCAnJykpO1xyXG5cclxuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0UG9zaXRpb25FbGVtZW50KCRldmVudC5zcmNFbGVtZW50KTtcclxuICAgICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50RHJvcFNlcGFyYXRvckJvZGVyU3R5bGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnY2xhc3MnKSA/IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdjbGFzcycpIDogJyc7XHJcbiAgICAgICAgaWYgKGN1cnJlbnREcm9wU2VwYXJhdG9yQm9kZXJTdHlsZS5pbmRleE9mKHRoaXMuZHJvcFNlcGFyYXRvckJvcmRlckNsYXNzKSAhPT0gLTEpXHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShlbGVtZW50LCAnY2xhc3MnLCBjdXJyZW50RHJvcFNlcGFyYXRvckJvZGVyU3R5bGUucmVwbGFjZSh0aGlzLmRyb3BTZXBhcmF0b3JCb3JkZXJDbGFzcywgJycpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UG9zaXRpb25FbGVtZW50KHNvdXJjZUVMZW1lbnQpOiBIVE1MRWxlbWVudCB7XHJcbiAgICBsZXQgY2xhc3NOYW1lID0gJ2ZxbC1jb21wb25lbnQtY29udGFpbmVyLXdyYXBwZXInO1xyXG5cclxuICAgIGlmICh0aGlzLnR5cGUgPT09IENvbnRhaW5lclR5cGUuU2VjdGlvbikgY2xhc3NOYW1lID0gJ2ZxbC1zZWN0aW9uLXdyYXBwZXItZWRpdCc7XHJcblxyXG4gICAgbGV0IGVsZW1lbnQgPSBzb3VyY2VFTGVtZW50O1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgd2hpbGUgKGVsZW1lbnQuY2xhc3NOYW1lICYmIGVsZW1lbnQuY2xhc3NOYW1lLmluZGV4T2YoY2xhc3NOYW1lKSA9PT0gLTEgJiYgaSA8IDEwKSB7XHJcbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgIGkrKztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZWxlbWVudC5jbGFzc05hbWUgJiYgZWxlbWVudC5jbGFzc05hbWUuaW5kZXhPZihjbGFzc05hbWUpICE9PSAtMSkgcmV0dXJuIGVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXRQb3NpdGlvbkF0dHJpYnV0ZShlbGVtZW50KTogbnVtYmVyIHtcclxuICAgIGxldCBhdHRyaWJ1dGVOYW1lID0gJ2NvbXBvbmVudElkJztcclxuXHJcbiAgICBpZiAodGhpcy50eXBlID09PSBDb250YWluZXJUeXBlLlNlY3Rpb24pIGF0dHJpYnV0ZU5hbWUgPSAnc2VjdGlvbklkJztcclxuXHJcbiAgICByZXR1cm4gZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==