UNPKG

@formql/core

Version:

FormQL - A framework for building dynamic forms

105 lines 24.2 kB
import { __decorate, __metadata } from "tslib"; import { Component, Input, ViewChild, ViewContainerRef } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { InternalEventHandlerService } from '../services/internal-event-handler.service'; import { InternalEventType } from '../models/internal-event.model'; import { ComponentResolverService } from '../services/component-resolver.service'; import { FormQLMode, ContainerType } from '../models/type.model'; import { GridPositionType } from '../models/style.model'; import { DndService } from '../services/dnd.service'; import { StoreService } from '../services/store.service'; var SectionWrapperComponent = /** @class */ (function () { function SectionWrapperComponent(internalEventHandlerService, componentResolverService, viewContainerRef, dndService, storeService) { this.internalEventHandlerService = internalEventHandlerService; this.componentResolverService = componentResolverService; this.viewContainerRef = viewContainerRef; this.dndService = dndService; this.storeService = storeService; this.FormQLMode = FormQLMode; this.ContainerType = ContainerType; this.ComponentPositionType = GridPositionType; } SectionWrapperComponent.prototype.ngOnInit = function () { this.components = this.createComponents(this.section); if (this.mode === FormQLMode.Edit) { var tooltip = this.viewContainerRef.createComponent(this.componentResolverService.resolveComponent('TooltipComponent')); tooltip.instance.wrapper = this.wrapper; tooltip.instance.type = ContainerType.Section; tooltip.instance.object = this.section; this.tooltip.insert(tooltip.hostView); } }; SectionWrapperComponent.prototype.editField = function () { if (this.mode === FormQLMode.Edit) this.internalEventHandlerService.send(InternalEventType.EditingSection, this.section); }; SectionWrapperComponent.prototype.synchroniseModel = function ($event, positionId, positionType) { var dndEvent = { sourceObjectId: $event.sourceObjectId, sourceWrapperId: $event.sourceWrapperId, targetPositionId: positionId, targetWrapperId: this.section.sectionId, targetIndexId: $event.targetIndexId, positionType: positionType }; this.page = this.dndService.synchroniseSectionModel(this.page, dndEvent); this.storeService.reSetForm(InternalEventType.DndFormChanged, this.page); }; SectionWrapperComponent.prototype.trackByFn = function (index, item) { return item.id; }; SectionWrapperComponent.prototype.createComponents = function (section) { var components = {}; if (section && section.components) section.components.sort(function (left, right) { return left.position.index - right.position.index; }); section.components.forEach(function (component) { if (components && components[component.position.type + '_' + component.position.id]) components[component.position.type + '_' + component.position.id].push(component); else components[component.position.type + '_' + component.position.id] = [component]; }); return components; }; __decorate([ ViewChild('wrapper', { read: ViewContainerRef, static: true }), __metadata("design:type", ViewContainerRef) ], SectionWrapperComponent.prototype, "wrapper", void 0); __decorate([ ViewChild('tooltip', { read: ViewContainerRef, static: true }), __metadata("design:type", ViewContainerRef) ], SectionWrapperComponent.prototype, "tooltip", void 0); __decorate([ Input(), __metadata("design:type", Object) ], SectionWrapperComponent.prototype, "section", void 0); __decorate([ Input(), __metadata("design:type", FormGroup) ], SectionWrapperComponent.prototype, "reactiveSection", void 0); __decorate([ Input(), __metadata("design:type", Object) ], SectionWrapperComponent.prototype, "page", void 0); __decorate([ Input(), __metadata("design:type", Number) ], SectionWrapperComponent.prototype, "mode", void 0); SectionWrapperComponent = __decorate([ Component({ // tslint:disable-next-line: component-selector selector: '[formql-section-wrapper]', template: "\n <div #wrapper formqlDnd\n [sourceObjectId]=\"section.sectionId\"\n [attr.sectionId]=\"section.sectionId\"\n [sourceWrapperId]=\"page.pageId\"\n [type]=\"ContainerType.Section\"\n [mode]=\"mode\"\n [ngClass]=\"[(mode === FormQLMode.Edit) ? 'fql-section-wrapper-edit' : 'fql-section-wrapper']\">\n <div class=\"fql-section-tooltip\">\n <ng-container #tooltip></ng-container>\n </div>\n <div *ngIf=\"section.template && !section.template.header.hidden\" class=\"fql-section-header\">\n <ng-template formqlGdConfig\n [formqlGdConfigOf]=\"section.template.header\" let-headeritem let-i=\"index\">\n <ng-container *ngTemplateOutlet=\"templateRef;\n context: {\n templateitem: headeritem,\n positionType: ComponentPositionType.Header\n }\">\n </ng-container>\n </ng-template>\n </div>\n <div *ngIf=\"section.template && !section.template.body.hidden\" class=\"fql-section-body\">\n <ng-template formqlGdConfig\n [formqlGdConfigOf]=\"section.template.body\" let-bodyitem let-i=\"index\">\n <ng-container *ngTemplateOutlet=\"templateRef;\n context: {\n templateitem: bodyitem,\n positionType: ComponentPositionType.Body\n }\">\n </ng-container>\n </ng-template>\n </div>\n </div>\n <ng-template #templateRef let-templateitem=\"templateitem\" let-positionType=\"positionType\">\n <div [ngStyle]=\"templateitem.style\">\n <div formqlDndDrop\n *ngIf=\"(mode === FormQLMode.Edit)\"\n [type]=\"ContainerType.Component\"\n class=\"fql-section-container\"\n (synchronise)=\"synchroniseModel($event, templateitem.id, positionType)\">\n <ng-container *ngFor=\"let component of components[positionType + '_' + templateitem.id]; trackBy: trackByFn\">\n <div formql-component-container\n [ngClass]=\"{'fql-component-container-hidden': component.rules?.hidden?.value}\"\n [component]=\"component\"\n [sectionId]=\"section.sectionId\"\n [value]=\"component.value\"\n [reactiveSection]=\"reactiveSection\"\n [mode]=\"mode\"></div>\n </ng-container>\n </div>\n <div *ngIf=\"mode !== FormQLMode.Edit\">\n <ng-container *ngFor=\"let component of components[positionType + '_' + templateitem.id]; trackBy: trackByFn\">\n <div formql-component-container *ngIf=\"!component.rules?.hidden?.value\"\n [component]=\"component\"\n [sectionId]=\"section.sectionId\"\n [value]=\"component.value\"\n [reactiveSection]=\"reactiveSection\"\n [mode]=\"mode\"></div>\n </ng-container>\n </div>\n </div>\n </ng-template>\n ", styles: [".fql-bundle-field-input{width:100%;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.fql-bundle-checkbox-input{cursor:pointer;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.fql-bundle-label-required:after{content:\" *\";color:red}.fql-bundle-field-radio{cursor:pointer}.fql-error-message{text-align:center;padding:20px}.fql-dnd-container-separator{box-shadow:0 -2px 0 #00f}.fql-dnd-container-drop-area{outline:dashed 3px}.fql-section-wrapper,.fql-section-wrapper-edit{display:-ms-grid;display:grid;padding:1px;-ms-grid-columns:100%;grid-template-columns:100%;-ms-grid-rows:auto auto;grid-template-rows:auto auto;position:relative}.fql-section-wrapper-edit:hover .fql-section-tooltip{opacity:1}.fql-section-tooltip{opacity:0;display:block;position:absolute;right:0;z-index:1;transition:opacity .3s}.fql-section-header{display:-ms-grid;display:grid;min-height:30px;-ms-grid-row:1;-ms-grid-column:1}.fql-section-body{display:-ms-grid;display:grid;min-height:30px;-ms-grid-row:2;-ms-grid-column:1}.fql-section-container{display:table;height:100%;width:100%;min-height:15px}.fql-section-container:hover{outline:solid 1px}.fql-component-container-hidden{background-color:#ffecf2}"] }), __metadata("design:paramtypes", [InternalEventHandlerService, ComponentResolverService, ViewContainerRef, DndService, StoreService]) ], SectionWrapperComponent); return SectionWrapperComponent; }()); export { SectionWrapperComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bmb3JtcWwvY29yZS8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc2VjdGlvbi13cmFwcGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN6RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUduRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXpELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUF3RXpEO0lBaUJFLGlDQUNZLDJCQUF3RCxFQUN4RCx3QkFBa0QsRUFDbEQsZ0JBQWtDLEVBQ2xDLFVBQXNCLEVBQ3RCLFlBQTBCO1FBSjFCLGdDQUEyQixHQUEzQiwyQkFBMkIsQ0FBNkI7UUFDeEQsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFUL0IsZUFBVSxHQUFHLFVBQVUsQ0FBQztRQUN4QixrQkFBYSxHQUFHLGFBQWEsQ0FBQztRQUM5QiwwQkFBcUIsR0FBRyxnQkFBZ0Is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QyxTQUFTLENBQUMsQ0FBQztRQUNwRixDQUFDLENBQUMsQ0FBQztRQUVMLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUF6RStEO1FBQS9ELFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO2tDQUFVLGdCQUFnQjs0REFBQztJQUMxQjtRQUEvRCxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztrQ0FBVSxnQkFBZ0I7NERBQUM7SUFFakY7UUFBUixLQUFLLEVBQUU7OzREQUFzQjtJQUNyQjtRQUFSLEtBQUssRUFBRTtrQ0FBa0IsU0FBUztvRUFBQztJQUMzQjtRQUFSLEtBQUssRUFBRTs7eURBQWdCO0lBQ2Y7UUFBUixLQUFLLEVBQUU7O3lEQUFrQjtJQVJmLHVCQUF1QjtRQXJFbkMsU0FBUyxDQUFDO1lBQ1QsK0NBQStDO1lBQy9DLFFBQVEsRUFBRSwwQkFBMEI7WUFDcEMsUUFBUSxFQUFFLHl3R0ErREg7O1NBRVIsQ0FBQzt5Q0FtQnlDLDJCQUEyQjtZQUM5Qix3QkFBd0I7WUFDaEMsZ0JBQWdCO1lBQ3RCLFVBQVU7WUFDUixZQUFZO09BdEIzQix1QkFBdUIsQ0E2RW5DO0lBQUQsOEJBQUM7Q0FBQSxBQTdFRCxJQTZFQztTQTdFWSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEZvcm1TZWN0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0tc2VjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IEludGVybmFsRXZlbnRIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ludGVybmFsLWV2ZW50LWhhbmRsZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEludGVybmFsRXZlbnRUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL2ludGVybmFsLWV2ZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybVBhZ2UgfSBmcm9tICcuLi9tb2RlbHMvZm9ybS1wYWdlLm1vZGVsJztcclxuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2hlbHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50UmVzb2x2ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29tcG9uZW50LXJlc29sdmVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtUUxNb2RlLCBDb250YWluZXJUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3R5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBHcmlkUG9zaXRpb25UeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3N0eWxlLm1vZGVsJztcclxuaW1wb3J0IHsgRG5kVHJhbnNmZXIsIERuZEV2ZW50IH0gZnJvbSAnLi4vbW9kZWxzL2RuZC5tb2RlbCc7XHJcbmltcG9ydCB7IERuZFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9kbmQuc2VydmljZSc7XHJcbmltcG9ydCB7IFN0b3JlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRHcm91cCwgRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL21vZGVscy9mb3JtLWNvbXBvbmVudC5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1zZWxlY3RvclxyXG4gIHNlbGVjdG9yOiAnW2Zvcm1xbC1zZWN0aW9uLXdyYXBwZXJdJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxkaXYgI3dyYXBwZXIgZm9ybXFsRG5kXHJcbiAgICAgICAgICAgIFtzb3VyY2VPYmplY3RJZF09XCJzZWN0aW9uLnNlY3Rpb25JZFwiXHJcbiAgICAgICAgICAgIFthdHRyLnNlY3Rpb25JZF09XCJzZWN0aW9uLnNlY3Rpb25JZFwiXHJcbiAgICAgICAgICAgIFtzb3VyY2VXcmFwcGVySWRdPVwicGFnZS5wYWdlSWRcIlxyXG4gICAgICAgICAgICBbdHlwZV09XCJDb250YWluZXJUeXBlLlNlY3Rpb25cIlxyXG4gICAgICAgICAgICBbbW9kZV09XCJtb2RlXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiWyhtb2RlID09PSBGb3JtUUxNb2RlLkVkaXQpID8gJ2ZxbC1zZWN0aW9uLXdyYXBwZXItZWRpdCcgOiAnZnFsLXNlY3Rpb24td3JhcHBlciddXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcWwtc2VjdGlvbi10b29sdGlwXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICN0b29sdGlwPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlY3Rpb24udGVtcGxhdGUgJiYgIXNlY3Rpb24udGVtcGxhdGUuaGVhZGVyLmhpZGRlblwiIGNsYXNzPVwiZnFsLXNlY3Rpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgZm9ybXFsR2RDb25maWdcclxuICAgICAgICAgICAgICAgICAgICBbZm9ybXFsR2RDb25maWdPZl09XCJzZWN0aW9uLnRlbXBsYXRlLmhlYWRlclwiIGxldC1oZWFkZXJpdGVtIGxldC1pPVwiaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVSZWY7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlaXRlbTogaGVhZGVyaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25UeXBlOiBDb21wb25lbnRQb3NpdGlvblR5cGUuSGVhZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlY3Rpb24udGVtcGxhdGUgJiYgIXNlY3Rpb24udGVtcGxhdGUuYm9keS5oaWRkZW5cIiBjbGFzcz1cImZxbC1zZWN0aW9uLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmb3JtcWxHZENvbmZpZ1xyXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtcWxHZENvbmZpZ09mXT1cInNlY3Rpb24udGVtcGxhdGUuYm9keVwiIGxldC1ib2R5aXRlbSBsZXQtaT1cImluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlUmVmO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZWl0ZW06IGJvZHlpdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvblR5cGU6IENvbXBvbmVudFBvc2l0aW9uVHlwZS5Cb2R5XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI3RlbXBsYXRlUmVmIGxldC10ZW1wbGF0ZWl0ZW09XCJ0ZW1wbGF0ZWl0ZW1cIiBsZXQtcG9zaXRpb25UeXBlPVwicG9zaXRpb25UeXBlXCI+XHJcbiAgICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cInRlbXBsYXRlaXRlbS5zdHlsZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGZvcm1xbERuZERyb3BcclxuICAgICAgICAgICAgICAqbmdJZj1cIihtb2RlID09PSBGb3JtUUxNb2RlLkVkaXQpXCJcclxuICAgICAgICAgICAgICBbdHlwZV09XCJDb250YWluZXJUeXBlLkNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmcWwtc2VjdGlvbi1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgIChzeW5jaHJvbmlzZSk9XCJzeW5jaHJvbmlzZU1vZGVsKCRldmVudCwgdGVtcGxhdGVpdGVtLmlkLCBwb3NpdGlvblR5cGUpXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29tcG9uZW50IG9mIGNvbXBvbmVudHNbcG9zaXRpb25UeXBlICsgJ18nICsgdGVtcGxhdGVpdGVtLmlkXTsgdHJhY2tCeTogdHJhY2tCeUZuXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgZm9ybXFsLWNvbXBvbmVudC1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnZnFsLWNvbXBvbmVudC1jb250YWluZXItaGlkZGVuJzogY29tcG9uZW50LnJ1bGVzPy5oaWRkZW4/LnZhbHVlfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50XT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc2VjdGlvbklkXT1cInNlY3Rpb24uc2VjdGlvbklkXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjb21wb25lbnQudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3JlYWN0aXZlU2VjdGlvbl09XCJyZWFjdGl2ZVNlY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwibW9kZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1vZGUgIT09IEZvcm1RTE1vZGUuRWRpdFwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzW3Bvc2l0aW9uVHlwZSArICdfJyArIHRlbXBsYXRlaXRlbS5pZF07IHRyYWNrQnk6IHRyYWNrQnlGblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmb3JtcWwtY29tcG9uZW50LWNvbnRhaW5lciAqbmdJZj1cIiFjb21wb25lbnQucnVsZXM/LmhpZGRlbj8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICBbc2VjdGlvbklkXT1cInNlY3Rpb24uc2VjdGlvbklkXCJcclxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY29tcG9uZW50LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVhY3RpdmVTZWN0aW9uXT1cInJlYWN0aXZlU2VjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwibW9kZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgYCxcclxuICBzdHlsZVVybHM6IFsnLi9zZWN0aW9uLXdyYXBwZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VjdGlvbldyYXBwZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBAVmlld0NoaWxkKCd3cmFwcGVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSkgd3JhcHBlcjogVmlld0NvbnRhaW5lclJlZjtcclxuICBAVmlld0NoaWxkKCd0b29sdGlwJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSkgdG9vbHRpcDogVmlld0NvbnRhaW5lclJlZjtcclxuXHJcbiAgQElucHV0KCkgc2VjdGlvbjogRm9ybVNlY3Rpb247XHJcbiAgQElucHV0KCkgcmVhY3RpdmVTZWN0aW9uOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgcGFnZTogRm9ybVBhZ2U7XHJcbiAgQElucHV0KCkgbW9kZTogRm9ybVFMTW9kZTtcclxuXHJcbiAgZXJyb3I6IHN0cmluZztcclxuICBjb21wb25lbnRzOiBDb21wb25lbnRHcm91cDtcclxuXHJcbiAgcHVibGljIEZvcm1RTE1vZGUgPSBGb3JtUUxNb2RlO1xyXG4gIHB1YmxpYyBDb250YWluZXJUeXBlID0gQ29udGFpbmVyVHlwZTtcclxuICBwdWJsaWMgQ29tcG9uZW50UG9zaXRpb25UeXBlID0gR3JpZFBvc2l0aW9uVHlwZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgaW50ZXJuYWxFdmVudEhhbmRsZXJTZXJ2aWNlOiBJbnRlcm5hbEV2ZW50SGFuZGxlclNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgY29tcG9uZW50UmVzb2x2ZXJTZXJ2aWNlOiBDb21wb25lbnRSZXNvbHZlclNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcclxuICAgICAgcHJpdmF0ZSBkbmRTZXJ2aWNlOiBEbmRTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHN0b3JlU2VydmljZTogU3RvcmVTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgdGhpcy5jb21wb25lbnRzID0gdGhpcy5jcmVhdGVDb21wb25lbnRzKHRoaXMuc2VjdGlvbik7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gRm9ybVFMTW9kZS5FZGl0KSB7XHJcbiAgICAgIGNvbnN0IHRvb2x0aXAgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KHRoaXMuY29tcG9uZW50UmVzb2x2ZXJTZXJ2aWNlLnJlc29sdmVDb21wb25lbnQoJ1Rvb2x0aXBDb21wb25lbnQnKSk7XHJcbiAgICAgICg8YW55PnRvb2x0aXApLmluc3RhbmNlLndyYXBwZXIgPSB0aGlzLndyYXBwZXI7XHJcbiAgICAgICg8YW55PnRvb2x0aXApLmluc3RhbmNlLnR5cGUgPSBDb250YWluZXJUeXBlLlNlY3Rpb247XHJcbiAgICAgICg8YW55PnRvb2x0aXApLmluc3RhbmNlLm9iamVjdCA9IHRoaXMuc2VjdGlvbjtcclxuICAgICAgdGhpcy50b29sdGlwLmluc2VydCh0b29sdGlwLmhvc3RWaWV3KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVkaXRGaWVsZCgpIHtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09IEZvcm1RTE1vZGUuRWRpdClcclxuICAgICAgdGhpcy5pbnRlcm5hbEV2ZW50SGFuZGxlclNlcnZpY2Uuc2VuZChJbnRlcm5hbEV2ZW50VHlwZS5FZGl0aW5nU2VjdGlvbiwgdGhpcy5zZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIHN5bmNocm9uaXNlTW9kZWwoJGV2ZW50OiBEbmRUcmFuc2ZlciwgcG9zaXRpb25JZDogc3RyaW5nLCBwb3NpdGlvblR5cGU6IEdyaWRQb3NpdGlvblR5cGUpIHtcclxuICAgIGNvbnN0IGRuZEV2ZW50ID0gPERuZEV2ZW50PntcclxuICAgICAgc291cmNlT2JqZWN0SWQ6ICRldmVudC5zb3VyY2VPYmplY3RJZCxcclxuICAgICAgc291cmNlV3JhcHBlcklkOiAkZXZlbnQuc291cmNlV3JhcHBlcklkLFxyXG4gICAgICB0YXJnZXRQb3NpdGlvbklkOiBwb3NpdGlvbklkLFxyXG4gICAgICB0YXJnZXRXcmFwcGVySWQ6IHRoaXMuc2VjdGlvbi5zZWN0aW9uSWQsXHJcbiAgICAgIHRhcmdldEluZGV4SWQ6ICRldmVudC50YXJnZXRJbmRleElkLFxyXG4gICAgICBwb3NpdGlvblR5cGU6IHBvc2l0aW9uVHlwZVxyXG4gICAgfTtcclxuICAgIHRoaXMucGFnZSA9IHRoaXMuZG5kU2VydmljZS5zeW5jaHJvbmlzZVNlY3Rpb25Nb2RlbCh0aGlzLnBhZ2UsIGRuZEV2ZW50KTtcclxuICAgIHRoaXMuc3RvcmVTZXJ2aWNlLnJlU2V0Rm9ybShJbnRlcm5hbEV2ZW50VHlwZS5EbmRGb3JtQ2hhbmdlZCwgdGhpcy5wYWdlKTtcclxuICB9XHJcblxyXG4gIHRyYWNrQnlGbihpbmRleCwgaXRlbSkge1xyXG4gICAgcmV0dXJuIGl0ZW0uaWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUNvbXBvbmVudHMoc2VjdGlvbjogRm9ybVNlY3Rpb24pOiBDb21wb25lbnRHcm91cCB7XHJcbiAgICBjb25zdCBjb21wb25lbnRzID0gPENvbXBvbmVudEdyb3VwPnt9O1xyXG4gICAgaWYgKHNlY3Rpb24gJiYgc2VjdGlvbi5jb21wb25lbnRzKVxyXG4gICAgICBzZWN0aW9uLmNvbXBvbmVudHMuc29ydCgobGVmdDogRm9ybUNvbXBvbmVudDxhbnk+LCByaWdodDogRm9ybUNvbXBvbmVudDxhbnk+KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gbGVmdC5wb3NpdGlvbi5pbmRleCAtIHJpZ2h0LnBvc2l0aW9uLmluZGV4O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHNlY3Rpb24uY29tcG9uZW50cy5mb3JFYWNoKGNvbXBvbmVudCA9PiB7XHJcbiAgICAgICAgaWYgKGNvbXBvbmVudHMgJiYgY29tcG9uZW50c1tjb21wb25lbnQucG9zaXRpb24udHlwZSArICdfJyArIGNvbXBvbmVudC5wb3NpdGlvbi5pZF0pXHJcbiAgICAgICAgICBjb21wb25lbnRzW2NvbXBvbmVudC5wb3NpdGlvbi50eXBlICsgJ18nICsgY29tcG9uZW50LnBvc2l0aW9uLmlkXS5wdXNoKGNvbXBvbmVudCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgY29tcG9uZW50c1tjb21wb25lbnQucG9zaXRpb24udHlwZSArICdfJyArIGNvbXBvbmVudC5wb3NpdGlvbi5pZF0gPSBbY29tcG9uZW50XTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGNvbXBvbmVudHM7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=