UNPKG

@iotize/ionic

Version:

Iotize specific building blocks on top of @ionic/angular.

195 lines 22.4 kB
import { __decorate, __metadata } from "tslib"; import { Component, HostListener, Input, ViewChild, } from '@angular/core'; import { ActionSheetController, Platform } from '@ionic/angular'; import { TapValueEditorContainerComponent } from '@iotize/ionic'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { MonitoringAppGenComponent } from '../../metadata/decorators'; import * as i0 from "@angular/core"; import * as i1 from "@ionic/angular"; import * as i2 from "@angular/common"; import * as i3 from "@iotize/ionic"; import * as i4 from "@iotize/app-common"; let TapVariablePushButtonComponent = class TapVariablePushButtonComponent { onTouchStart() { this._onTouchStartOrMouseDown(); } onMouseDown() { if (this.platform.is('desktop')) { this._onTouchStartOrMouseDown(); if (this._handleMouseUp) { document.removeEventListener('mouseup', this._handleMouseUp); } this._handleMouseUp = () => { if (this._handleMouseUp) { document.removeEventListener('mouseup', this._handleMouseUp); } this._onTouchEndOrMouseUp(); }; document.addEventListener('mouseup', this._handleMouseUp); } } onTouchEnd() { this._onTouchEndOrMouseUp(); } _onTouchStartOrMouseDown() { if (isConfiguredValue(this.mouseDownValue)) this.writeValue(this.mouseDownValue); } _onTouchEndOrMouseUp() { if (isConfiguredValue(this.mouseUpValue)) this.writeValue(this.mouseUpValue); } /** * @deprecated */ set defineValueOnClick(v) { this.value = v; } set fieldError(err) { this.error = err; } set variable(variable) { this._variable = variable; } constructor(actionSheetController, platform) { this.actionSheetController = actionSheetController; this.platform = platform; this.mouseDownValue = undefined; this.mouseUpValue = undefined; this.value = 1; this.buttonText = 'Write'; this.size = 'default'; this.color = 'primary'; this.iconPosition = 'start'; this.strong = false; this.confirm = false; this.confirmMessage = 'Are you sure ?'; this.editable = true; this.destroyed = new Subject(); this.loading = false; } ngAfterViewInit() { this.ctx?.valueToDisplay ?.pipe(takeUntil(this.destroyed)) .subscribe((newValue) => { }); } ngOnDestroy() { this.destroyed.next(); } async onClick() { if (!isConfiguredValue(this.value)) { return; } if (this.confirm) { const actionSheet = await this.actionSheetController.create({ header: this.confirmMessage, buttons: [ { text: 'Confirm', icon: 'checkmark', handler: () => { this.writeValue(this.value); }, }, { text: 'Cancel', icon: 'close', }, ], }); await actionSheet.present(); } else { this.writeValue(this.value); } } async writeValue(valueToWrite) { this.loading = true; await this.ctx.notifyValueChange(valueToWrite, true); this.loading = false; } }; /** @nocollapse */ TapVariablePushButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TapVariablePushButtonComponent, deps: [{ token: i1.ActionSheetController }, { token: i1.Platform }], target: i0.ɵɵFactoryTarget.Component }); /** @nocollapse */ TapVariablePushButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TapVariablePushButtonComponent, selector: "tap-variable-push-button", inputs: { mouseDownValue: "mouseDownValue", mouseUpValue: "mouseUpValue", value: "value", buttonText: "buttonText", size: "size", color: "color", icon: "icon", iconPosition: "iconPosition", fill: "fill", expand: "expand", strong: "strong", shape: "shape", confirm: "confirm", confirmMessage: "confirmMessage", editable: "editable", defineValueOnClick: "defineValueOnClick", fieldError: "fieldError", variable: "variable" }, host: { listeners: { "touchstart": "onTouchStart()", "mousedown": "onMouseDown()", "touchend": "onTouchEnd()" } }, viewQueries: [{ propertyName: "ctx", first: true, predicate: ["ctx"], descendants: true }], ngImport: i0, template: "<tap-value-editor-container #ctx [variable]=\"_variable\">\n <ion-button\n [disabled]=\"loading || !editable\"\n [color]=\"color\"\n [size]=\"size\"\n [fill]=\"fill\"\n [strong]=\"strong\"\n [shape]=\"shape\"\n [expand]=\"expand\"\n [ngClass]=\"{ 'full-width': expand === 'block' || expand === 'full' }\"\n (click)=\"onClick()\"\n >\n <span *ngIf=\"icon\" [slot]=\"iconPosition\">\n &nbsp;\n <app-common-icon [image]=\"icon\"> </app-common-icon>\n &nbsp;\n </span>\n <ion-text *ngIf=\"buttonText\">{{ buttonText }}</ion-text>\n </ion-button>\n</tap-value-editor-container>\n", styles: [".full-width{width:100%!important}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i3.TapValueEditorContainerComponent, selector: "tap-value-editor-container", inputs: ["button", "variable", "inputOptions", "showRefreshButton", "showSubmitButton", "showEditButton", "error", "lines", "modalEdition", "value"], outputs: ["submit", "refresh"] }, { kind: "component", type: i4.IconComponent, selector: "app-common-icon", inputs: ["imageSize", "color", "image"] }] }); TapVariablePushButtonComponent = __decorate([ MonitoringAppGenComponent({ constraints: { isArray: 'NO', isNumber: 'YES', }, events: [ { name: 'submit', dataType: 'void', }, { dataType: 'void', name: 'mouseUp', }, { dataType: 'void', name: 'mouseDown', }, ], }), __metadata("design:paramtypes", [ActionSheetController, Platform]) ], TapVariablePushButtonComponent); export { TapVariablePushButtonComponent }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TapVariablePushButtonComponent, decorators: [{ type: Component, args: [{ selector: 'tap-variable-push-button', template: "<tap-value-editor-container #ctx [variable]=\"_variable\">\n <ion-button\n [disabled]=\"loading || !editable\"\n [color]=\"color\"\n [size]=\"size\"\n [fill]=\"fill\"\n [strong]=\"strong\"\n [shape]=\"shape\"\n [expand]=\"expand\"\n [ngClass]=\"{ 'full-width': expand === 'block' || expand === 'full' }\"\n (click)=\"onClick()\"\n >\n <span *ngIf=\"icon\" [slot]=\"iconPosition\">\n &nbsp;\n <app-common-icon [image]=\"icon\"> </app-common-icon>\n &nbsp;\n </span>\n <ion-text *ngIf=\"buttonText\">{{ buttonText }}</ion-text>\n </ion-button>\n</tap-value-editor-container>\n", styles: [".full-width{width:100%!important}\n"] }] }], ctorParameters: function () { return [{ type: i1.ActionSheetController }, { type: i1.Platform }]; }, propDecorators: { ctx: [{ type: ViewChild, args: ['ctx'] }], onTouchStart: [{ type: HostListener, args: ['touchstart'] }], onMouseDown: [{ type: HostListener, args: ['mousedown'] }], onTouchEnd: [{ type: HostListener, args: ['touchend'] }], mouseDownValue: [{ type: Input }], mouseUpValue: [{ type: Input }], value: [{ type: Input }], buttonText: [{ type: Input }], size: [{ type: Input }], color: [{ type: Input }], icon: [{ type: Input }], iconPosition: [{ type: Input }], fill: [{ type: Input }], expand: [{ type: Input }], strong: [{ type: Input }], shape: [{ type: Input }], confirm: [{ type: Input }], confirmMessage: [{ type: Input }], editable: [{ type: Input }], defineValueOnClick: [{ type: Input }], fieldError: [{ type: Input }], variable: [{ type: Input }] } }); function isConfiguredValue(value) { return value !== undefined && value !== null; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwLXZhcmlhYmxlLXB1c2gtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvdGl6ZS1pb25pYy9tb25pdG9yaW5nL3NyYy9saWIvdWktY29tcG9uZW50cy90YXAtdmFyaWFibGUtcHVzaC1idXR0b24vdGFwLXZhcmlhYmxlLXB1c2gtYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvdGl6ZS1pb25pYy9tb25pdG9yaW5nL3NyYy9saWIvdWktY29tcG9uZW50cy90YXAtdmFyaWFibGUtcHVzaC1idXR0b24vdGFwLXZhcmlhYmxlLXB1c2gtYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7OztBQTJCL0QsSUFBTSw4QkFBOEIsR0FBcEMsTUFBTSw4QkFBOEI7SUFRYixZQUFZO1FBQ3RDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFMEIsV0FBVztRQUNwQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQy9CLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2hDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDdkIsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDOUQ7WUFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLEdBQUcsRUFBRTtnQkFDekIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO29CQUN2QixRQUFRLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztpQkFDOUQ7Z0JBQ0QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDOUIsQ0FBQyxDQUFDO1lBQ0YsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDM0Q7SUFDSCxDQUFDO0lBRXlCLFVBQVU7UUFDbEMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVPLHdCQUF3QjtRQUM5QixJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQStDRDs7T0FFRztJQUNILElBQ0ksa0JBQWtCLENBQUMsQ0FBUztRQUM5QixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRUQsSUFBYSxVQUFVLENBQUMsR0FBVTtRQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFDSSxRQUFRLENBQUMsUUFBbUQ7UUFDOUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDNUIsQ0FBQztJQVNELFlBQ1MscUJBQTRDLEVBQzNDLFFBQWtCO1FBRG5CLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFDM0MsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQXRFNUIsbUJBQWMsR0FBWSxTQUFTLENBQUM7UUFHcEMsaUJBQVksR0FBWSxTQUFTLENBQUM7UUFHbEMsVUFBSyxHQUFHLENBQUMsQ0FBQztRQUdWLGVBQVUsR0FBRyxPQUFPLENBQUM7UUFHckIsU0FBSSxHQUFHLFNBQVMsQ0FBQztRQUdqQixVQUFLLEdBQVcsU0FBUyxDQUFDO1FBTTFCLGlCQUFZLEdBQVcsT0FBTyxDQUFDO1FBUy9CLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFNZixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBR2hCLG1CQUFjLEdBQUcsZ0JBQWdCLENBQUM7UUFHbEMsYUFBUSxHQUFHLElBQUksQ0FBQztRQW1CUixjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUl4QyxZQUFPLEdBQUcsS0FBSyxDQUFDO0lBTWIsQ0FBQztJQUVKLGVBQWU7UUFDYixJQUFJLENBQUMsR0FBRyxFQUFFLGNBQWM7WUFDdEIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNoQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU87UUFDWCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2xDLE9BQU87U0FDUjtRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUM7Z0JBQzFELE1BQU0sRUFBRSxJQUFJLENBQUMsY0FBYztnQkFDM0IsT0FBTyxFQUFFO29CQUNQO3dCQUNFLElBQUksRUFBRSxTQUFTO3dCQUNmLElBQUksRUFBRSxXQUFXO3dCQUNqQixPQUFPLEVBQUUsR0FBRyxFQUFFOzRCQUNaLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUM5QixDQUFDO3FCQUNGO29CQUNEO3dCQUNFLElBQUksRUFBRSxRQUFRO3dCQUNkLElBQUksRUFBRSxPQUFPO3FCQUNkO2lCQUNGO2FBQ0YsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDN0I7YUFBTTtZQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxVQUFVLENBQUMsWUFBb0I7UUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDOzsrSUE3SlUsOEJBQThCO21JQUE5Qiw4QkFBOEIsdXJCQ3ZDM0Msc25CQW9CQTtBRG1CYSw4QkFBOEI7SUF6QjFDLHlCQUF5QixDQUFDO1FBQ3pCLFdBQVcsRUFBRTtZQUNYLE9BQU8sRUFBRSxJQUFJO1lBQ2IsUUFBUSxFQUFFLEtBQUs7U0FDaEI7UUFDRCxNQUFNLEVBQUU7WUFDTjtnQkFDRSxJQUFJLEVBQUUsUUFBUTtnQkFDZCxRQUFRLEVBQUUsTUFBTTthQUNqQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxNQUFNO2dCQUNoQixJQUFJLEVBQUUsU0FBUzthQUNoQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxNQUFNO2dCQUNoQixJQUFJLEVBQUUsV0FBVzthQUNsQjtTQUNGO0tBQ0YsQ0FBQztxQ0FzSGdDLHFCQUFxQjtRQUNqQyxRQUFRO0dBakhqQiw4QkFBOEIsQ0E4SjFDO1NBOUpZLDhCQUE4Qjs0RkFBOUIsOEJBQThCO2tCQUwxQyxTQUFTOytCQUNFLDBCQUEwQjttSUFLbEIsR0FBRztzQkFBcEIsU0FBUzt1QkFBQyxLQUFLO2dCQU9ZLFlBQVk7c0JBQXZDLFlBQVk7dUJBQUMsWUFBWTtnQkFJQyxXQUFXO3NCQUFyQyxZQUFZO3VCQUFDLFdBQVc7Z0JBZ0JDLFVBQVU7c0JBQW5DLFlBQVk7dUJBQUMsVUFBVTtnQkFleEIsY0FBYztzQkFEYixLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSztnQkFJTixLQUFLO3NCQURKLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJTixLQUFLO3NCQURKLEtBQUs7Z0JBSU4sSUFBSTtzQkFESCxLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSztnQkFJTixJQUFJO3NCQURILEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxLQUFLO2dCQUlOLE1BQU07c0JBREwsS0FBSztnQkFJTixLQUFLO3NCQURKLEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSztnQkFJTixRQUFRO3NCQURQLEtBQUs7Z0JBT0Ysa0JBQWtCO3NCQURyQixLQUFLO2dCQUtPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBS0YsUUFBUTtzQkFEWCxLQUFLOztBQTZEUixTQUFTLGlCQUFpQixDQUFDLEtBQXlCO0lBQ2xELE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDO0FBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGlvblNoZWV0Q29udHJvbGxlciwgUGxhdGZvcm0gfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBUYXBWYWx1ZUVkaXRvckNvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJ0Bpb3RpemUvaW9uaWMnO1xuaW1wb3J0IHsgQWJzdHJhY3RWYXJpYWJsZSB9IGZyb20gJ0Bpb3RpemUvdGFwL2RhdGEnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTW9uaXRvcmluZ0FwcEdlbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21ldGFkYXRhL2RlY29yYXRvcnMnO1xuXG5ATW9uaXRvcmluZ0FwcEdlbkNvbXBvbmVudCh7XG4gIGNvbnN0cmFpbnRzOiB7XG4gICAgaXNBcnJheTogJ05PJyxcbiAgICBpc051bWJlcjogJ1lFUycsXG4gIH0sXG4gIGV2ZW50czogW1xuICAgIHtcbiAgICAgIG5hbWU6ICdzdWJtaXQnLFxuICAgICAgZGF0YVR5cGU6ICd2b2lkJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRhdGFUeXBlOiAndm9pZCcsXG4gICAgICBuYW1lOiAnbW91c2VVcCcsXG4gICAgfSxcbiAgICB7XG4gICAgICBkYXRhVHlwZTogJ3ZvaWQnLFxuICAgICAgbmFtZTogJ21vdXNlRG93bicsXG4gICAgfSxcbiAgXSxcbn0pXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0YXAtdmFyaWFibGUtcHVzaC1idXR0b24nLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFwLXZhcmlhYmxlLXB1c2gtYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFwLXZhcmlhYmxlLXB1c2gtYnV0dG9uLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFRhcFZhcmlhYmxlUHVzaEJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2N0eCcpIGN0eCE6IFRhcFZhbHVlRWRpdG9yQ29udGFpbmVyQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgX2hhbmRsZU1vdXNlVXA/OiAoXG4gICAgdGhpczogRG9jdW1lbnQsXG4gICAgZXY6IERvY3VtZW50RXZlbnRNYXBbJ21vdXNldXAnXVxuICApID0+IGFueTtcblxuICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0Jykgb25Ub3VjaFN0YXJ0KCkge1xuICAgIHRoaXMuX29uVG91Y2hTdGFydE9yTW91c2VEb3duKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nKSBvbk1vdXNlRG93bigpIHtcbiAgICBpZiAodGhpcy5wbGF0Zm9ybS5pcygnZGVza3RvcCcpKSB7XG4gICAgICB0aGlzLl9vblRvdWNoU3RhcnRPck1vdXNlRG93bigpO1xuICAgICAgaWYgKHRoaXMuX2hhbmRsZU1vdXNlVXApIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMuX2hhbmRsZU1vdXNlVXApO1xuICAgICAgfVxuICAgICAgdGhpcy5faGFuZGxlTW91c2VVcCA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2hhbmRsZU1vdXNlVXApIHtcbiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5faGFuZGxlTW91c2VVcCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb25Ub3VjaEVuZE9yTW91c2VVcCgpO1xuICAgICAgfTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9oYW5kbGVNb3VzZVVwKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd0b3VjaGVuZCcpIG9uVG91Y2hFbmQoKSB7XG4gICAgdGhpcy5fb25Ub3VjaEVuZE9yTW91c2VVcCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25Ub3VjaFN0YXJ0T3JNb3VzZURvd24oKSB7XG4gICAgaWYgKGlzQ29uZmlndXJlZFZhbHVlKHRoaXMubW91c2VEb3duVmFsdWUpKVxuICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMubW91c2VEb3duVmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25Ub3VjaEVuZE9yTW91c2VVcCgpIHtcbiAgICBpZiAoaXNDb25maWd1cmVkVmFsdWUodGhpcy5tb3VzZVVwVmFsdWUpKVxuICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMubW91c2VVcFZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIG1vdXNlRG93blZhbHVlPzogbnVtYmVyID0gdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpXG4gIG1vdXNlVXBWYWx1ZT86IG51bWJlciA9IHVuZGVmaW5lZDtcblxuICBASW5wdXQoKVxuICB2YWx1ZSA9IDE7XG5cbiAgQElucHV0KClcbiAgYnV0dG9uVGV4dCA9ICdXcml0ZSc7XG5cbiAgQElucHV0KClcbiAgc2l6ZSA9ICdkZWZhdWx0JztcblxuICBASW5wdXQoKVxuICBjb2xvcjogc3RyaW5nID0gJ3ByaW1hcnknO1xuXG4gIEBJbnB1dCgpXG4gIGljb24/OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgaWNvblBvc2l0aW9uOiBzdHJpbmcgPSAnc3RhcnQnO1xuXG4gIEBJbnB1dCgpXG4gIGZpbGw/OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgZXhwYW5kPzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHN0cm9uZyA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNoYXBlPzogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBjb25maXJtID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgY29uZmlybU1lc3NhZ2UgPSAnQXJlIHlvdSBzdXJlID8nO1xuXG4gIEBJbnB1dCgpXG4gIGVkaXRhYmxlID0gdHJ1ZTtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBkZWZpbmVWYWx1ZU9uQ2xpY2sodjogbnVtYmVyKSB7XG4gICAgdGhpcy52YWx1ZSA9IHY7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZmllbGRFcnJvcihlcnI6IEVycm9yKSB7XG4gICAgdGhpcy5lcnJvciA9IGVycjtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB2YXJpYWJsZSh2YXJpYWJsZTogQWJzdHJhY3RWYXJpYWJsZTxhbnkgfCBhbnlbXT4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl92YXJpYWJsZSA9IHZhcmlhYmxlO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXN0cm95ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHB1YmxpYyBlcnJvcj86IEVycm9yO1xuICBwZW5kaW5nU3VibWl0VmFsdWU6IGFueTtcbiAgbG9hZGluZyA9IGZhbHNlO1xuICBfdmFyaWFibGU/OiBBYnN0cmFjdFZhcmlhYmxlPGFueT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGFjdGlvblNoZWV0Q29udHJvbGxlcjogQWN0aW9uU2hlZXRDb250cm9sbGVyLFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtXG4gICkge31cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5jdHg/LnZhbHVlVG9EaXNwbGF5XG4gICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKSlcbiAgICAgIC5zdWJzY3JpYmUoKG5ld1ZhbHVlKSA9PiB7fSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3llZC5uZXh0KCk7XG4gIH1cblxuICBhc3luYyBvbkNsaWNrKCkge1xuICAgIGlmICghaXNDb25maWd1cmVkVmFsdWUodGhpcy52YWx1ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlybSkge1xuICAgICAgY29uc3QgYWN0aW9uU2hlZXQgPSBhd2FpdCB0aGlzLmFjdGlvblNoZWV0Q29udHJvbGxlci5jcmVhdGUoe1xuICAgICAgICBoZWFkZXI6IHRoaXMuY29uZmlybU1lc3NhZ2UsXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiAnQ29uZmlybScsXG4gICAgICAgICAgICBpY29uOiAnY2hlY2ttYXJrJyxcbiAgICAgICAgICAgIGhhbmRsZXI6ICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRleHQ6ICdDYW5jZWwnLFxuICAgICAgICAgICAgaWNvbjogJ2Nsb3NlJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBhY3Rpb25TaGVldC5wcmVzZW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgd3JpdGVWYWx1ZSh2YWx1ZVRvV3JpdGU6IG51bWJlcikge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5jdHgubm90aWZ5VmFsdWVDaGFuZ2UodmFsdWVUb1dyaXRlLCB0cnVlKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NvbmZpZ3VyZWRWYWx1ZSh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKTogdmFsdWUgaXMgbnVtYmVyIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGw7XG59XG4iLCI8dGFwLXZhbHVlLWVkaXRvci1jb250YWluZXIgI2N0eCBbdmFyaWFibGVdPVwiX3ZhcmlhYmxlXCI+XG4gIDxpb24tYnV0dG9uXG4gICAgW2Rpc2FibGVkXT1cImxvYWRpbmcgfHwgIWVkaXRhYmxlXCJcbiAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgIFtzaXplXT1cInNpemVcIlxuICAgIFtmaWxsXT1cImZpbGxcIlxuICAgIFtzdHJvbmddPVwic3Ryb25nXCJcbiAgICBbc2hhcGVdPVwic2hhcGVcIlxuICAgIFtleHBhbmRdPVwiZXhwYW5kXCJcbiAgICBbbmdDbGFzc109XCJ7ICdmdWxsLXdpZHRoJzogZXhwYW5kID09PSAnYmxvY2snIHx8IGV4cGFuZCA9PT0gJ2Z1bGwnIH1cIlxuICAgIChjbGljayk9XCJvbkNsaWNrKClcIlxuICA+XG4gICAgPHNwYW4gKm5nSWY9XCJpY29uXCIgW3Nsb3RdPVwiaWNvblBvc2l0aW9uXCI+XG4gICAgICAmbmJzcDtcbiAgICAgIDxhcHAtY29tbW9uLWljb24gW2ltYWdlXT1cImljb25cIj4gPC9hcHAtY29tbW9uLWljb24+XG4gICAgICAmbmJzcDtcbiAgICA8L3NwYW4+XG4gICAgPGlvbi10ZXh0ICpuZ0lmPVwiYnV0dG9uVGV4dFwiPnt7IGJ1dHRvblRleHQgfX08L2lvbi10ZXh0PlxuICA8L2lvbi1idXR0b24+XG48L3RhcC12YWx1ZS1lZGl0b3ItY29udGFpbmVyPlxuIl19