UNPKG

@asoftwareworld/form-builder-pro

Version:

ASW Form Builder Pro helps you with rapid development and designed web forms which includes several controls. The key feature of Form Builder is to make your content attractive and effective. We can customize our control at run time and preview the same b

92 lines 20.9 kB
/** * @license * Copyright ASW (A Software World) All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file */ import { Component, EventEmitter, Input, Output } from '@angular/core'; import { CSSFrameworkEnum } from '@asoftwareworld/form-builder-pro/api'; import { Constants, Icons } from '@asoftwareworld/form-builder-pro/common'; import { AswConfirmDialog } from '@asoftwareworld/form-builder-pro/form-control/confirm-dialog'; import { AswSlideToggleDialog } from './slide-toggle-dialog'; import * as i0 from "@angular/core"; import * as i1 from "@angular/material/dialog"; import * as i2 from "@angular/common"; import * as i3 from "@angular/material/button"; import * as i4 from "@angular/material/slide-toggle"; import * as i5 from "@angular/material/tooltip"; import * as i6 from "@asoftwareworld/form-builder-pro/core"; import * as i7 from "@asoftwareworld/form-builder-pro/common"; export class AswSlideToggle { dialog; constants = Constants; icons = Icons; /** * SlideToggle control */ control = null; CSSFramework = CSSFrameworkEnum.Material; isPreviewTemplate = false; propertyPersonalization = []; slidetoggleUpdateEvent = new EventEmitter(); slidetoggleDeleteEvent = new EventEmitter(); selectionChange = new EventEmitter(); duplicateControl = new EventEmitter(); constructor(dialog) { this.dialog = dialog; } deleteSlideToggleDialog(control) { const dialogRef = this.dialog.open(AswConfirmDialog, { width: '350px', data: { name: control.controlType, message: this.constants.messages.waringMessage } }); dialogRef.afterClosed().subscribe((result) => { if (result !== undefined) { this.slidetoggleDeleteEvent.emit(control); } }); } editSlideToggleDialog(control) { const dialogRef = this.dialog.open(AswSlideToggleDialog, { width: '50%', disableClose: true, data: { control, CSSFramework: this.CSSFramework, propertyPersonalization: this.propertyPersonalization } }); dialogRef.afterClosed().subscribe((result) => { if (result !== undefined) { this.slidetoggleUpdateEvent.emit(result); } }); } onChange(event, control) { control.value = event.checked === undefined ? event.target.checked : event.checked; this.selectionChange.emit(control); } duplicateSlideToggleControl(control) { this.duplicateControl.emit(control); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AswSlideToggle, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: AswSlideToggle, selector: "asw-slide-toggle", inputs: { control: "control", CSSFramework: "CSSFramework", isPreviewTemplate: "isPreviewTemplate", propertyPersonalization: "propertyPersonalization" }, outputs: { slidetoggleUpdateEvent: "slidetoggleUpdateEvent", slidetoggleDeleteEvent: "slidetoggleDeleteEvent", selectionChange: "selectionChange", duplicateControl: "duplicateControl" }, ngImport: i0, template: "<ng-container *ngIf=\"control as control\">\r\n <ng-container *ngIf=\"CSSFramework === 'material'; else bootstrap\">\r\n <mat-slide-toggle [color]=\"control.color\"\r\n [class]=\"control.customClass\"\r\n [required]=\"control.isRequired\"\r\n (change)=\"onChange($event, control)\"\r\n [checked]=\"control.value\"\r\n [disabled]=\"control.isDisabled ? true : false\">{{control.label | aswTranslate}}\r\n </mat-slide-toggle>\r\n </ng-container>\r\n <ng-template #bootstrap>\r\n <div class=\"asw-mb-3\">\r\n <div class=\"asw-form-check asw-form-switch\">\r\n <input class=\"asw-form-check-input\" \r\n type=\"checkbox\"\r\n [class]=\"control.customClass\"\r\n [required]=\"control.isRequired\"\r\n (change)=\"onChange($event, control)\"\r\n [checked]=\"control.value\"\r\n [disabled]=\"control.isDisabled ? true : false\">\r\n <label class=\"asw-form-check-label\" for=\"isDisable\">\r\n {{control.label | aswTranslate}}\r\n </label>\r\n </div>\r\n </div>\r\n </ng-template> \r\n <div class=\"asw-row\" *ngIf=\"isPreviewTemplate\">\r\n <div class=\"asw-col-md-12\" align=\"right\">\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"{{'FormControl.Duplicate' | aswTranslate}}\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"duplicateSlideToggleControl(control)\">\r\n <div [innerHTML]=\"icons.contentCopy | aswSafeHtml\"></div>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"{{'FormControl.Edit' | aswTranslate}}\"\r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"editSlideToggleDialog(control)\">\r\n <div [innerHTML]=\"icons.edit | aswSafeHtml\"></div>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"{{'FormControl.Delete' | aswTranslate}}\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"deleteSlideToggleDialog(control)\">\r\n <div [innerHTML]=\"icons.delete2 | aswSafeHtml\"></div>\r\n </button>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i4.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i6.AswTranslatePipe, name: "aswTranslate" }, { kind: "pipe", type: i7.AswSafeHtmlPipe, name: "aswSafeHtml" }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AswSlideToggle, decorators: [{ type: Component, args: [{ selector: 'asw-slide-toggle', template: "<ng-container *ngIf=\"control as control\">\r\n <ng-container *ngIf=\"CSSFramework === 'material'; else bootstrap\">\r\n <mat-slide-toggle [color]=\"control.color\"\r\n [class]=\"control.customClass\"\r\n [required]=\"control.isRequired\"\r\n (change)=\"onChange($event, control)\"\r\n [checked]=\"control.value\"\r\n [disabled]=\"control.isDisabled ? true : false\">{{control.label | aswTranslate}}\r\n </mat-slide-toggle>\r\n </ng-container>\r\n <ng-template #bootstrap>\r\n <div class=\"asw-mb-3\">\r\n <div class=\"asw-form-check asw-form-switch\">\r\n <input class=\"asw-form-check-input\" \r\n type=\"checkbox\"\r\n [class]=\"control.customClass\"\r\n [required]=\"control.isRequired\"\r\n (change)=\"onChange($event, control)\"\r\n [checked]=\"control.value\"\r\n [disabled]=\"control.isDisabled ? true : false\">\r\n <label class=\"asw-form-check-label\" for=\"isDisable\">\r\n {{control.label | aswTranslate}}\r\n </label>\r\n </div>\r\n </div>\r\n </ng-template> \r\n <div class=\"asw-row\" *ngIf=\"isPreviewTemplate\">\r\n <div class=\"asw-col-md-12\" align=\"right\">\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"{{'FormControl.Duplicate' | aswTranslate}}\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"duplicateSlideToggleControl(control)\">\r\n <div [innerHTML]=\"icons.contentCopy | aswSafeHtml\"></div>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"{{'FormControl.Edit' | aswTranslate}}\"\r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"editSlideToggleDialog(control)\">\r\n <div [innerHTML]=\"icons.edit | aswSafeHtml\"></div>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"{{'FormControl.Delete' | aswTranslate}}\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"deleteSlideToggleDialog(control)\">\r\n <div [innerHTML]=\"icons.delete2 | aswSafeHtml\"></div>\r\n </button>\r\n </div>\r\n </div>\r\n</ng-container>\r\n" }] }], ctorParameters: () => [{ type: i1.MatDialog }], propDecorators: { control: [{ type: Input }], CSSFramework: [{ type: Input }], isPreviewTemplate: [{ type: Input }], propertyPersonalization: [{ type: Input }], slidetoggleUpdateEvent: [{ type: Output }], slidetoggleDeleteEvent: [{ type: Output }], selectionChange: [{ type: Output }], duplicateControl: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGUtdG9nZ2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvZm9ybS1jb250cm9sL3NsaWRlLXRvZ2dsZS9zbGlkZS10b2dnbGUudHMiLCIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2wvc2xpZGUtdG9nZ2xlL3NsaWRlLXRvZ2dsZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUVoRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7O0FBTTdELE1BQU0sT0FBTyxjQUFjO0lBZ0JKO0lBZm5CLFNBQVMsR0FBUSxTQUFTLENBQUM7SUFDM0IsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNkOztPQUVHO0lBQ00sT0FBTyxHQUE4QixJQUFJLENBQUM7SUFDMUMsWUFBWSxHQUFxQixnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7SUFDM0QsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQzFCLHVCQUF1QixHQUFhLEVBQUUsQ0FBQztJQUV0QyxzQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFBc0IsQ0FBQztJQUNoRSxzQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFBc0IsQ0FBQztJQUNoRSxlQUFlLEdBQUcsSUFBSSxZQUFZLEVBQXNCLENBQUM7SUFDekQsZ0JBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQXNCLENBQUM7SUFFcEUsWUFBbUIsTUFBaUI7UUFBakIsV0FBTSxHQUFOLE1BQU0sQ0FBVztJQUFHLENBQUM7SUFFeEMsdUJBQXVCLENBQUMsT0FBMkI7UUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDakQsS0FBSyxFQUFFLE9BQU87WUFDZCxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFO1NBQ3RGLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN6QyxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQscUJBQXFCLENBQUMsT0FBMkI7UUFDN0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDckQsS0FBSyxFQUFFLEtBQUs7WUFDWixZQUFZLEVBQUUsSUFBSTtZQUNsQixJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixFQUFFO1NBQzVHLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN6QyxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVUsRUFBRSxPQUEyQjtRQUM1QyxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNuRixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsMkJBQTJCLENBQUMsT0FBMkI7UUFDbkQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxDQUFDO3VHQWxEUSxjQUFjOzJGQUFkLGNBQWMsNllDckIzQiwwaUZBb0RBOzsyRkQvQmEsY0FBYztrQkFKMUIsU0FBUzsrQkFDSSxrQkFBa0I7OEVBU25CLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBRUksc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBBU1cgKEEgU29mdHdhcmUgV29ybGQpIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGVcbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlQ2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcbmltcG9ydCB7IENTU0ZyYW1ld29ya0VudW0gfSBmcm9tICdAYXNvZnR3YXJld29ybGQvZm9ybS1idWlsZGVyLXByby9hcGknO1xuaW1wb3J0IHsgQ29uc3RhbnRzLCBJY29ucyB9IGZyb20gJ0Bhc29mdHdhcmV3b3JsZC9mb3JtLWJ1aWxkZXItcHJvL2NvbW1vbic7XG5pbXBvcnQgeyBBc3dDb25maXJtRGlhbG9nIH0gZnJvbSAnQGFzb2Z0d2FyZXdvcmxkL2Zvcm0tYnVpbGRlci1wcm8vZm9ybS1jb250cm9sL2NvbmZpcm0tZGlhbG9nJztcbmltcG9ydCB7IFNsaWRlVG9nZ2xlQ29udHJvbCB9IGZyb20gJy4vc2xpZGUtdG9nZ2xlLWNvbnRyb2wnO1xuaW1wb3J0IHsgQXN3U2xpZGVUb2dnbGVEaWFsb2cgfSBmcm9tICcuL3NsaWRlLXRvZ2dsZS1kaWFsb2cnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2Fzdy1zbGlkZS10b2dnbGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zbGlkZS10b2dnbGUuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQXN3U2xpZGVUb2dnbGUge1xuICAgIGNvbnN0YW50czogYW55ID0gQ29uc3RhbnRzO1xuICAgIGljb25zID0gSWNvbnM7XG4gICAgLyoqXG4gICAgICogU2xpZGVUb2dnbGUgY29udHJvbFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGNvbnRyb2w6IFNsaWRlVG9nZ2xlQ29udHJvbCB8IG51bGwgPSBudWxsO1xuICAgIEBJbnB1dCgpIENTU0ZyYW1ld29yazogQ1NTRnJhbWV3b3JrRW51bSA9IENTU0ZyYW1ld29ya0VudW0uTWF0ZXJpYWw7XG4gICAgQElucHV0KCkgaXNQcmV2aWV3VGVtcGxhdGUgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwcm9wZXJ0eVBlcnNvbmFsaXphdGlvbjogc3RyaW5nW10gPSBbXTtcblxuICAgIEBPdXRwdXQoKSBzbGlkZXRvZ2dsZVVwZGF0ZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxTbGlkZVRvZ2dsZUNvbnRyb2w+KCk7XG4gICAgQE91dHB1dCgpIHNsaWRldG9nZ2xlRGVsZXRlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFNsaWRlVG9nZ2xlQ29udHJvbD4oKTtcbiAgICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTbGlkZVRvZ2dsZUNvbnRyb2w+KCk7XG4gICAgQE91dHB1dCgpIGR1cGxpY2F0ZUNvbnRyb2wgPSBuZXcgRXZlbnRFbWl0dGVyPFNsaWRlVG9nZ2xlQ29udHJvbD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZykge31cblxuICAgIGRlbGV0ZVNsaWRlVG9nZ2xlRGlhbG9nKGNvbnRyb2w6IFNsaWRlVG9nZ2xlQ29udHJvbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFzd0NvbmZpcm1EaWFsb2csIHtcbiAgICAgICAgICAgIHdpZHRoOiAnMzUwcHgnLFxuICAgICAgICAgICAgZGF0YTogeyBuYW1lOiBjb250cm9sLmNvbnRyb2xUeXBlLCBtZXNzYWdlOiB0aGlzLmNvbnN0YW50cy5tZXNzYWdlcy53YXJpbmdNZXNzYWdlIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNsaWRldG9nZ2xlRGVsZXRlRXZlbnQuZW1pdChjb250cm9sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZWRpdFNsaWRlVG9nZ2xlRGlhbG9nKGNvbnRyb2w6IFNsaWRlVG9nZ2xlQ29udHJvbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFzd1NsaWRlVG9nZ2xlRGlhbG9nLCB7XG4gICAgICAgICAgICB3aWR0aDogJzUwJScsXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICAgICAgICBkYXRhOiB7IGNvbnRyb2wsIENTU0ZyYW1ld29yazogdGhpcy5DU1NGcmFtZXdvcmssIHByb3BlcnR5UGVyc29uYWxpemF0aW9uOiB0aGlzLnByb3BlcnR5UGVyc29uYWxpemF0aW9uIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNsaWRldG9nZ2xlVXBkYXRlRXZlbnQuZW1pdChyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkNoYW5nZShldmVudDogYW55LCBjb250cm9sOiBTbGlkZVRvZ2dsZUNvbnRyb2wpOiB2b2lkIHtcbiAgICAgICAgY29udHJvbC52YWx1ZSA9IGV2ZW50LmNoZWNrZWQgPT09IHVuZGVmaW5lZCA/IGV2ZW50LnRhcmdldC5jaGVja2VkIDogZXZlbnQuY2hlY2tlZDtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChjb250cm9sKTtcbiAgICB9XG5cbiAgICBkdXBsaWNhdGVTbGlkZVRvZ2dsZUNvbnRyb2woY29udHJvbDogU2xpZGVUb2dnbGVDb250cm9sKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZHVwbGljYXRlQ29udHJvbC5lbWl0KGNvbnRyb2wpO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJjb250cm9sIGFzIGNvbnRyb2xcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJDU1NGcmFtZXdvcmsgPT09ICdtYXRlcmlhbCc7IGVsc2UgYm9vdHN0cmFwXCI+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgW2NvbG9yXT1cImNvbnRyb2wuY29sb3JcIlxyXG4gICAgICAgICAgICBbY2xhc3NdPVwiY29udHJvbC5jdXN0b21DbGFzc1wiXHJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJjb250cm9sLmlzUmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudCwgY29udHJvbClcIlxyXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJjb250cm9sLnZhbHVlXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbnRyb2wuaXNEaXNhYmxlZCA/IHRydWUgOiBmYWxzZVwiPnt7Y29udHJvbC5sYWJlbCB8IGFzd1RyYW5zbGF0ZX19XHJcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctdGVtcGxhdGUgI2Jvb3RzdHJhcD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXN3LW1iLTNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFzdy1mb3JtLWNoZWNrIGFzdy1mb3JtLXN3aXRjaFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYXN3LWZvcm0tY2hlY2staW5wdXRcIiBcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjb250cm9sLmN1c3RvbUNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiY29udHJvbC5pc1JlcXVpcmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudCwgY29udHJvbClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImNvbnRyb2wudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb250cm9sLmlzRGlzYWJsZWQgPyB0cnVlIDogZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImFzdy1mb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiaXNEaXNhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tjb250cm9sLmxhYmVsIHwgYXN3VHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT4gICAgXHJcbiAgICA8ZGl2IGNsYXNzPVwiYXN3LXJvd1wiICpuZ0lmPVwiaXNQcmV2aWV3VGVtcGxhdGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXN3LWNvbC1tZC0xMlwiIGFsaWduPVwicmlnaHRcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJ7eydGb3JtQ29udHJvbC5EdXBsaWNhdGUnIHwgYXN3VHJhbnNsYXRlfX1cIiBcclxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcFBvc2l0aW9uXT1cIidiZWxvdydcIiBcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZHVwbGljYXRlU2xpZGVUb2dnbGVDb250cm9sKGNvbnRyb2wpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiaWNvbnMuY29udGVudENvcHkgfCBhc3dTYWZlSHRtbFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJ7eydGb3JtQ29udHJvbC5FZGl0JyB8IGFzd1RyYW5zbGF0ZX19XCJcclxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcFBvc2l0aW9uXT1cIidiZWxvdydcIiBcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdFNsaWRlVG9nZ2xlRGlhbG9nKGNvbnRyb2wpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiaWNvbnMuZWRpdCB8IGFzd1NhZmVIdG1sXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cInt7J0Zvcm1Db250cm9sLkRlbGV0ZScgfCBhc3dUcmFuc2xhdGV9fVwiIFxyXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25dPVwiJ2JlbG93J1wiIFxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVTbGlkZVRvZ2dsZURpYWxvZyhjb250cm9sKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImljb25zLmRlbGV0ZTIgfCBhc3dTYWZlSHRtbFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19