UNPKG

ngx-surveys

Version:
156 lines 20.5 kB
import { Component, Input, ViewChild, Output, EventEmitter } from '@angular/core'; import { FormItemDirective } from './form-item.directive'; import { FormItemString, FormItemStringComponent } from './form-item-string/form-item-string.component'; import { FormItemRating, FormItemRatingComponent } from './form-item-rating/form-item-rating.component'; import { FormItemText, FormItemTextComponent } from './form-item-text/form-item-text.component'; import { FormItemDate, FormItemDateComponent } from './form-item-date/form-item-date.component'; import { FormItemSegments, FormItemSegmentsComponent } from './form-item-segments/form-item-segments.component'; import { FormItemRadio, FormItemRadioComponent } from './form-item-radio/form-item-radio.component'; import { FormItemNumericRating, FormItemNumericRatingComponent } from './form-item-numeric-rating/form-item-numeric-rating.component'; import { FormItemSelect, FormItemSelectComponent } from './form-item-select/form-item-select.component'; import { FormItemOptionsEditor, FormItemOptionsEditorComponent } from './form-item-options-editor/form-item-options-editor.component'; import { FormItemCheckbox, FormItemCheckboxComponent } from './form-item-checkbox/form-item-checkbox.component'; import { FormItemFile, FormItemFileComponent } from './form-item-file/form-item-file.component'; import { FormItemVoice, FormItemVoiceComponent } from './form-item-voice/form-item-voice.component'; import { FormItemLabel, FormItemLabelComponent } from './form-item-label/form-item-label.component'; import * as i0 from "@angular/core"; import * as i1 from "./form-item.directive"; export const FormItemTypes = { label: { component: FormItemLabelComponent, model: FormItemLabel, label: 'Label' }, 'string': { component: FormItemStringComponent, model: FormItemString, label: 'Short text' }, text: { component: FormItemTextComponent, model: FormItemText, label: 'Long text' }, rating: { component: FormItemRatingComponent, model: FormItemRating, label: 'Star rating' }, numericRating: { component: FormItemNumericRatingComponent, model: FormItemNumericRating, label: 'Numeric rating' }, segments: { component: FormItemSegmentsComponent, model: FormItemSegments, label: 'Segments' }, radio: { component: FormItemRadioComponent, model: FormItemRadio, label: 'Multi Choice' }, select: { component: FormItemSelectComponent, model: FormItemSelect, //label: 'Select' }, optionsEditor: { component: FormItemOptionsEditorComponent, model: FormItemOptionsEditor }, checkbox: { component: FormItemCheckboxComponent, model: FormItemCheckbox, label: 'Checkbox' }, date: { component: FormItemDateComponent, model: FormItemDate, label: 'Date' }, file: { component: FormItemFileComponent, model: FormItemFile, label: 'File Upload' }, voice: { component: FormItemVoiceComponent, model: FormItemVoice, label: 'Voice Record' }, }; export function buildOption(optionValue, label) { return { optionValue, label }; } export function buildField(type, data, required) { const obj = Object.assign(new (FormItemTypes[type].model), data); obj.type = type; if (required) { obj.fieldValidations = { rules: [ { minLength: 1 } ] }; } return obj; } export class FormItemComponent { constructor(componentFactoryResolver) { this.componentFactoryResolver = componentFactoryResolver; this.editable = true; this.isMobile = false; this.changes = new EventEmitter(); } ngOnInit() { this.loadComponent(); } ngOnChanges(changes) { if (changes && (changes.type || changes.id)) { this.loadComponent(); } } ngOnDestroy() { if (this.subscription) { this.subscription.unsubscribe(); } } loadComponent() { if (!FormItemTypes[this.type]) { return; } let componentFactory = this.componentFactoryResolver.resolveComponentFactory(FormItemTypes[this.type].component); let viewContainerRef = this.itemHost.viewContainerRef; viewContainerRef.clear(); let componentRef = viewContainerRef.createComponent(componentFactory); componentRef.instance.item = this.item; componentRef.instance.editable = this.editable; componentRef.instance.isMobile = this.isMobile; this.subscription = componentRef.instance.changes.subscribe(item => this.changes.emit(item)); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FormItemComponent, deps: [{ token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: FormItemComponent, selector: "ngx-survey-form-item", inputs: { type: "type", item: "item", editable: "editable", isMobile: "isMobile", id: "id" }, outputs: { changes: "changes" }, viewQueries: [{ propertyName: "itemHost", first: true, predicate: FormItemDirective, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template form-item-host></ng-template>\n", styles: [":host ::ng-deep label,:host ::ng-deep .label{color:#0000008a}:host ::ng-deep label.has-error,:host ::ng-deep .label.has-error{color:#f44336}\n"], dependencies: [{ kind: "directive", type: i1.FormItemDirective, selector: "[form-item-host]" }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FormItemComponent, decorators: [{ type: Component, args: [{ selector: 'ngx-survey-form-item', template: "<ng-template form-item-host></ng-template>\n", styles: [":host ::ng-deep label,:host ::ng-deep .label{color:#0000008a}:host ::ng-deep label.has-error,:host ::ng-deep .label.has-error{color:#f44336}\n"] }] }], ctorParameters: () => [{ type: i0.ComponentFactoryResolver }], propDecorators: { type: [{ type: Input }], item: [{ type: Input }], editable: [{ type: Input }], isMobile: [{ type: Input }], id: [{ type: Input }], changes: [{ type: Output }], itemHost: [{ type: ViewChild, args: [FormItemDirective, { static: true }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdXJ2ZXlzL3NyYy9saWIvZm9ybS1pdGVtL2Zvcm0taXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3VydmV5cy9zcmMvbGliL2Zvcm0taXRlbS9mb3JtLWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsS0FBSyxFQUFFLFNBQVMsRUFBNEIsTUFBTSxFQUFFLFlBQVksRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFDekosT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxjQUFjLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN4RyxPQUFPLEVBQUUsWUFBWSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDaEcsT0FBTyxFQUFFLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ2hILE9BQU8sRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNwRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUN0SSxPQUFPLEVBQUUsY0FBYyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLDhCQUE4QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDdEksT0FBTyxFQUFF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UUFBUSxDQUFDO1FBQzlDLFlBQVksQ0FBQyxRQUFTLENBQUMsUUFBUSxHQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFFL0QsSUFBSSxDQUFDLFlBQVksR0FBa0IsWUFBWSxDQUFDLFFBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQSxFQUFFLENBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMvRyxDQUFDOytHQXZEUSxpQkFBaUI7bUdBQWpCLGlCQUFpQixxT0FVZixpQkFBaUIsbUZDM0hoQyw4Q0FDQTs7NEZEZ0hhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxzQkFBc0I7NkZBTXJCLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDSSxPQUFPO3NCQUFoQixNQUFNO2dCQUVnRCxRQUFRO3NCQUE5RCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIElucHV0LCBWaWV3Q2hpbGQsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuL2Zvcm0taXRlbS5kaXJlY3RpdmUnO1xuXG5pbXBvcnQgeyBGb3JtSXRlbSwgRm9ybUl0ZW1XaWRnZXQsIEZvcm1JdGVtVmFsaWRhdGlvbiwgRm9ybUl0ZW1PcHRpb25JdGVtIH0gZnJvbSAnLi9mb3JtLWl0ZW0nO1xuaW1wb3J0IHsgRm9ybUl0ZW1TdHJpbmcsIEZvcm1JdGVtU3RyaW5nQ29tcG9uZW50IH0gZnJvbSAnLi9mb3JtLWl0ZW0tc3RyaW5nL2Zvcm0taXRlbS1zdHJpbmcuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1JdGVtUmF0aW5nLCBGb3JtSXRlbVJhdGluZ0NvbXBvbmVudCB9IGZyb20gJy4vZm9ybS1pdGVtLXJhdGluZy9mb3JtLWl0ZW0tcmF0aW5nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JtSXRlbVRleHQsIEZvcm1JdGVtVGV4dENvbXBvbmVudCB9IGZyb20gJy4vZm9ybS1pdGVtLXRleHQvZm9ybS1pdGVtLXRleHQuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1JdGVtRGF0ZSwgRm9ybUl0ZW1EYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9mb3JtLWl0ZW0tZGF0ZS9mb3JtLWl0ZW0tZGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybUl0ZW1TZWdtZW50cywgRm9ybUl0ZW1TZWdtZW50c0NvbXBvbmVudCB9IGZyb20gJy4vZm9ybS1pdGVtLXNlZ21lbnRzL2Zvcm0taXRlbS1zZWdtZW50cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybUl0ZW1SYWRpbywgRm9ybUl0ZW1SYWRpb0NvbXBvbmVudCB9IGZyb20gJy4vZm9ybS1pdGVtLXJhZGlvL2Zvcm0taXRlbS1yYWRpby5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybUl0ZW1OdW1lcmljUmF0aW5nLCBGb3JtSXRlbU51bWVyaWNSYXRpbmdDb21wb25lbnQgfSBmcm9tICcuL2Zvcm0taXRlbS1udW1lcmljLXJhdGluZy9mb3JtLWl0ZW0tbnVtZXJpYy1yYXRpbmcuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1JdGVtU2VsZWN0LCBGb3JtSXRlbVNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4vZm9ybS1pdGVtLXNlbGVjdC9mb3JtLWl0ZW0tc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JtSXRlbU9wdGlvbnNFZGl0b3IsIEZvcm1JdGVtT3B0aW9uc0VkaXRvckNvbXBvbmVudCB9IGZyb20gJy4vZm9ybS1pdGVtLW9wdGlvbnMtZWRpdG9yL2Zvcm0taXRlbS1vcHRpb25zLWVkaXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybUl0ZW1DaGVja2JveCwgRm9ybUl0ZW1DaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4vZm9ybS1pdGVtLWNoZWNrYm94L2Zvcm0taXRlbS1jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGb3JtSXRlbUZpbGUsIEZvcm1JdGVtRmlsZUNvbXBvbmVudCB9IGZyb20gJy4vZm9ybS1pdGVtLWZpbGUvZm9ybS1pdGVtLWZpbGUuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1JdGVtVm9pY2UsIEZvcm1JdGVtVm9pY2VDb21wb25lbnQgfSBmcm9tICcuL2Zvcm0taXRlbS12b2ljZS9mb3JtLWl0ZW0tdm9pY2UuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1JdGVtTGFiZWwsIEZvcm1JdGVtTGFiZWxDb21wb25lbnQgfSBmcm9tICcuL2Zvcm0taXRlbS1sYWJlbC9mb3JtLWl0ZW0tbGFiZWwuY29tcG9uZW50JztcblxuZXhwb3J0IGNvbnN0IEZvcm1JdGVtVHlwZXM9e1xuICAgIGxhYmVsIDoge1xuICAgICAgICBjb21wb25lbnQ6IEZvcm1JdGVtTGFiZWxDb21wb25lbnQsXG4gICAgICAgIG1vZGVsOiBGb3JtSXRlbUxhYmVsLFxuICAgICAgICBsYWJlbDogJ0xhYmVsJ1xuICAgIH0sXG4gICAgJ3N0cmluZycgOiB7XG4gICAgICAgIGNvbXBvbmVudDogRm9ybUl0ZW1TdHJpbmdDb21wb25lbnQsXG4gICAgICAgIG1vZGVsOiBGb3JtSXRlbVN0cmluZyxcbiAgICAgICAgbGFiZWw6ICdTaG9ydCB0ZXh0J1xuICAgIH0sXG4gICAgdGV4dCA6IHtcbiAgICAgICAgY29tcG9uZW50OiBGb3JtSXRlbVRleHRDb21wb25lbnQsXG4gICAgICAgIG1vZGVsOiBGb3JtSXRlbVRleHQsXG4gICAgICAgIGxhYmVsOiAnTG9uZyB0ZXh0J1xuICAgIH0sXG4gICAgcmF0aW5nIDoge1xuICAgICAgICBjb21wb25lbnQ6IEZvcm1JdGVtUmF0aW5nQ29tcG9uZW50LFxuICAgICAgICBtb2RlbDogRm9ybUl0ZW1SYXRpbmcsXG4gICAgICAgIGxhYmVsOiAnU3RhciByYXRpbmcnXG4gICAgfSxcbiAgICBudW1lcmljUmF0aW5nIDoge1xuICAgICAgICBjb21wb25lbnQ6IEZvcm1JdGVtTnVtZXJpY1JhdGluZ0NvbXBvbmVudCxcbiAgICAgICAgbW9kZWw6IEZvcm1JdGVtTnVtZXJpY1JhdGluZyxcbiAgICAgICAgbGFiZWw6ICdOdW1lcmljIHJhdGluZydcbiAgICB9LFxuICAgIHNlZ21lbnRzIDoge1xuICAgICAgICBjb21wb25lbnQ6IEZvcm1JdGVtU2VnbWVudHNDb21wb25lbnQsXG4gICAgICAgIG1vZGVsOiBGb3JtSXRlbVNlZ21lbnRzLFxuICAgICAgICBsYWJlbDogJ1NlZ21lbnRzJ1xuICAgIH0sXG4gICAgcmFkaW8gOiB7XG4gICAgICAgIGNvbXBvbmVudDogRm9ybUl0ZW1SYWRpb0NvbXBvbmVudCxcbiAgICAgICAgbW9kZWw6IEZvcm1JdGVtUmFkaW8sXG4gICAgICAgIGxhYmVsOiAnTXVsdGkgQ2hvaWNlJ1xuICAgIH0sXG4gICAgc2VsZWN0IDogeyAvL0RlcHJpY2F0ZWRcbiAgICAgICAgY29tcG9uZW50OiBGb3JtSXRlbVNlbGVjdENvbXBvbmVudCxcbiAgICAgICAgbW9kZWw6IEZvcm1JdGVtU2VsZWN0LFxuICAgICAgICAvL2xhYmVsOiAnU2VsZWN0J1xuICAgIH0sXG4gICAgb3B0aW9uc0VkaXRvciA6IHtcbiAgICAgICAgY29tcG9uZW50OiBGb3JtSXRlbU9wdGlvbnNFZGl0b3JDb21wb25lbnQsXG4gICAgICAgIG1vZGVsOiBGb3JtSXRlbU9wdGlvbnNFZGl0b3JcbiAgICB9LFxuICAgIGNoZWNrYm94IDoge1xuICAgICAgICBjb21wb25lbnQ6IEZvcm1JdGVtQ2hlY2tib3hDb21wb25lbnQsXG4gICAgICAgIG1vZGVsOiBGb3JtSXRlbUNoZWNrYm94LFxuICAgICAgICBsYWJlbDogJ0NoZWNrYm94J1xuICAgIH0sXG4gICAgZGF0ZSA6IHtcbiAgICAgICAgY29tcG9uZW50OiBGb3JtSXRlbURhdGVDb21wb25lbnQsXG4gICAgICAgIG1vZGVsOiBGb3JtSXRlbURhdGUsXG4gICAgICAgIGxhYmVsOiAnRGF0ZSdcbiAgICB9LFxuICAgIGZpbGUgOiB7XG4gICAgICAgIGNvbXBvbmVudDogRm9ybUl0ZW1GaWxlQ29tcG9uZW50LFxuICAgICAgICBtb2RlbDogRm9ybUl0ZW1GaWxlLFxuICAgICAgICBsYWJlbDogJ0ZpbGUgVXBsb2FkJ1xuICAgIH0sXG4gICAgdm9pY2UgOiB7XG4gICAgICAgIGNvbXBvbmVudDogRm9ybUl0ZW1Wb2ljZUNvbXBvbmVudCxcbiAgICAgICAgbW9kZWw6IEZvcm1JdGVtVm9pY2UsXG4gICAgICAgIGxhYmVsOiAnVm9pY2UgUmVjb3JkJ1xuICAgIH0sXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRPcHRpb24ob3B0aW9uVmFsdWU6IHN0cmluZywgbGFiZWw6IHN0cmluZyk6IEZvcm1JdGVtT3B0aW9uSXRlbSB7XG4gICAgcmV0dXJuIDxGb3JtSXRlbU9wdGlvbkl0ZW0+IHsgb3B0aW9uVmFsdWUsIGxhYmVsIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEZpZWxkKHR5cGU6c3RyaW5nLCBkYXRhOmFueSwgcmVxdWlyZWQ/OmJvb2xlYW4pOiBGb3JtSXRlbSB7XG4gICAgY29uc3Qgb2JqPU9iamVjdC5hc3NpZ24obmV3IChGb3JtSXRlbVR5cGVzW3R5cGVdLm1vZGVsKSwgZGF0YSk7XG4gICAgb2JqLnR5cGU9dHlwZTtcblxuICAgIGlmIChyZXF1aXJlZCkge1xuICAgICAgICAoPEZvcm1JdGVtVmFsaWRhdGlvbj5vYmouZmllbGRWYWxpZGF0aW9ucyk9e1xuICAgICAgICAgICAgcnVsZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG1pbkxlbmd0aDogMVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG59XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LXN1cnZleS1mb3JtLWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1pdGVtLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRm9ybUl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcblxuICAgIEBJbnB1dCgpIHR5cGU6IHN0cmluZztcbiAgICBASW5wdXQoKSBpdGVtOiBGb3JtSXRlbSB8IEZvcm1JdGVtU3RyaW5nIHwgRm9ybUl0ZW1SYXRpbmcgfCBGb3JtSXRlbVRleHQgfCBGb3JtSXRlbURhdGUgfCBGb3JtSXRlbVNlZ21lbnRzIHwgRm9ybUl0ZW1SYWRpbyB8IEZvcm1JdGVtTnVtZXJpY1JhdGluZ1xuICAgICAgICB8IEZvcm1JdGVtU2VsZWN0IHwgRm9ybUl0ZW1PcHRpb25zRWRpdG9yIHwgRm9ybUl0ZW1DaGVja2JveCB8IEZvcm1JdGVtRmlsZSB8IEZvcm1JdGVtTGFiZWw7XG4gICAgQElucHV0KCkgZWRpdGFibGU6IGJvb2xlYW49dHJ1ZTtcbiAgICBASW5wdXQoKSBpc01vYmlsZTogYm9vbGVhbj1mYWxzZTtcbiAgICBASW5wdXQoKSBpZDogc3RyaW5nO1xuICAgIEBPdXRwdXQoKSBjaGFuZ2VzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBAVmlld0NoaWxkKEZvcm1JdGVtRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgaXRlbUhvc3Q6IEZvcm1JdGVtRGlyZWN0aXZlO1xuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICkge1xuXG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMubG9hZENvbXBvbmVudCgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6U2ltcGxlQ2hhbmdlcykge1xuXG4gICAgICAgIGlmIChjaGFuZ2VzICYmIChjaGFuZ2VzLnR5cGUgfHwgY2hhbmdlcy5pZCkpe1xuICAgICAgICAgICAgdGhpcy5sb2FkQ29tcG9uZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKXtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cblxuXG4gICAgfVxuXG4gICAgbG9hZENvbXBvbmVudCgpIHtcbiAgICAgICAgaWYgKCFGb3JtSXRlbVR5cGVzW3RoaXMudHlwZV0pe1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbXBvbmVudEZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShGb3JtSXRlbVR5cGVzW3RoaXMudHlwZV0uY29tcG9uZW50KTtcblxuICAgICAgICBsZXQgdmlld0NvbnRhaW5lclJlZiA9IHRoaXMuaXRlbUhvc3Qudmlld0NvbnRhaW5lclJlZjtcbiAgICAgICAgdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuXG4gICAgICAgIGxldCBjb21wb25lbnRSZWYgPSB2aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5KTtcbiAgICAgICAgKDxGb3JtSXRlbVdpZGdldD5jb21wb25lbnRSZWYuaW5zdGFuY2UpLml0ZW09dGhpcy5pdGVtO1xuICAgICAgICAoPEZvcm1JdGVtV2lkZ2V0PmNvbXBvbmVudFJlZi5pbnN0YW5jZSkuZWRpdGFibGU9dGhpcy5lZGl0YWJsZTtcbiAgICAgICAgKDxGb3JtSXRlbVdpZGdldD5jb21wb25lbnRSZWYuaW5zdGFuY2UpLmlzTW9iaWxlPXRoaXMuaXNNb2JpbGU7XG5cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb249KDxGb3JtSXRlbVdpZGdldD5jb21wb25lbnRSZWYuaW5zdGFuY2UpLmNoYW5nZXMuc3Vic2NyaWJlKGl0ZW09PnRoaXMuY2hhbmdlcy5lbWl0KGl0ZW0pKTtcbiAgICB9XG5cbn1cbiIsIjxuZy10ZW1wbGF0ZSBmb3JtLWl0ZW0taG9zdD48L25nLXRlbXBsYXRlPlxuIl19