@asoftwareworld/form-builder
Version:
ASW Form Builder 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 befor
1 lines • 29.7 kB
Source Map (JSON)
{"version":3,"file":"asoftwareworld-form-builder-image-drawing.mjs","sources":["../../src/components/image-drawing/image-drawing.ts","../../src/components/image-drawing/image-drawing.html","../../src/components/image-drawing/image-drawing.module.ts","../../src/components/image-drawing/public_api.ts","../../src/components/image-drawing/asoftwareworld-form-builder-image-drawing.ts"],"sourcesContent":["/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { NgForm } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { fabric } from 'fabric';\r\n\r\n@Component({\r\n selector: 'asw-image-drawing',\r\n styleUrls: ['./image-drawing.scss'],\r\n templateUrl: './image-drawing.html'\r\n})\r\nexport class AswImageDrawing implements OnInit, OnChanges {\r\n\r\n @Input() public src?: string;\r\n @Input() public width = 680;\r\n @Input() public height = 250;\r\n\r\n @Input() public forceSizeCanvas = true;\r\n @Input() public forceSizeExport = true;\r\n @Input() public enableRemoveImage = true;\r\n @Input() public enableLoadAnotherImage = true;\r\n @Input() public enableTooltip = true;\r\n @Input() public showCancelButton = true;\r\n\r\n /* @deprecated Use i18n.saveBtn */\r\n @Input() public saveBtnText = 'Save';\r\n /* @deprecated Use i18n.cancelBtn */\r\n @Input() public cancelBtnText = 'Cancel';\r\n /* @deprecated Use i18n.loading */\r\n @Input() public loadingText = 'Loading…';\r\n\r\n @Input() public loadingTemplate?: TemplateRef<any>;\r\n @Input() public errorTemplate?: TemplateRef<any>;\r\n\r\n @Input() public outputMimeType = 'image/jpeg';\r\n @Input() public outputQuality = 0.8;\r\n\r\n // @Input() public borderCss = 'none';\r\n\r\n @Input() public drawingSizes: { [name: string]: number } = {\r\n small: 3, medium: 10, large: 25, extra: 50\r\n };\r\n\r\n @Input() public colors: { [name: string]: string } = {\r\n black: '#000',\r\n white: '#fff',\r\n yellow: '#ffeb3b',\r\n red: '#f44336',\r\n blue: '#2196f3',\r\n green: '#4caf50',\r\n purple: '#7a08af',\r\n };\r\n\r\n @Output() public save: EventEmitter<Blob> = new EventEmitter<Blob>();\r\n @Output() public cancel: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n public currentTool = 'brush';\r\n public currentSize = 3;\r\n public currentColor = 'black';\r\n // public i18n: I18nInterface = I18nEn;\r\n public canUndo = false;\r\n public canRedo = false;\r\n\r\n public isLoading = false;\r\n public hasError = false;\r\n public errorMessage = '';\r\n\r\n private canvas!: fabric.Canvas;\r\n private stack: fabric.Object[] = [];\r\n\r\n public colorsName: string[] = [];\r\n public drawingSizesName: string[] = [];\r\n\r\n private imageUsed?: fabric.Image;\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<AswImageDrawing>,\r\n @Inject(MAT_DIALOG_DATA) public control: any\r\n ) {\r\n }\r\n\r\n public ngOnInit(): void {\r\n if (this.control.controlType === 'signature') {\r\n this.enableLoadAnotherImage = false;\r\n }\r\n this.src = this.control.imageUrl;\r\n this.colorsName = Object.keys(this.colors);\r\n this.drawingSizesName = Object.keys(this.drawingSizes);\r\n this.canvas = new fabric.Canvas('aswCanvas', {\r\n hoverCursor: 'pointer',\r\n isDrawingMode: true\r\n });\r\n this.canvas.backgroundColor = 'white';\r\n\r\n if (this.src) {\r\n this.importPhotoFromSrc(this.src);\r\n } else {\r\n if (!this.width || !this.height) {\r\n throw new Error('No width or hight given !');\r\n }\r\n\r\n this.canvas.setWidth(this.width);\r\n this.canvas.setHeight(this.height);\r\n }\r\n\r\n this.canvas.on('path:created', () => {\r\n this.stack = [];\r\n this.setUndoRedo();\r\n });\r\n\r\n this.selectTool(this.currentTool);\r\n this.selectColor(this.currentColor);\r\n this.selectDrawingSize(this.currentSize);\r\n }\r\n\r\n // Tools\r\n public selectTool(tool: string): void {\r\n this.currentTool = tool;\r\n }\r\n\r\n public selectDrawingSize(size: number): void {\r\n this.currentSize = size;\r\n if (this.canvas) {\r\n this.canvas.freeDrawingBrush.width = size;\r\n }\r\n }\r\n\r\n public selectColor(color: string): void {\r\n this.currentColor = color;\r\n if (this.canvas) {\r\n this.canvas.freeDrawingBrush.color = this.colors[color];\r\n }\r\n }\r\n\r\n // Actions\r\n\r\n public undo(): void {\r\n if (this.canUndo) {\r\n const lastId = this.canvas.getObjects().length - 1;\r\n const lastObj = this.canvas.getObjects()[lastId];\r\n this.stack.push(lastObj);\r\n this.canvas.remove(lastObj);\r\n this.setUndoRedo();\r\n }\r\n }\r\n\r\n public redo(): void {\r\n if (this.canRedo) {\r\n const firstInStack = this.stack.splice(-1, 1)[0];\r\n if (firstInStack) {\r\n this.canvas.insertAt(firstInStack, this.canvas.getObjects().length - 1, false);\r\n }\r\n this.setUndoRedo();\r\n }\r\n }\r\n\r\n public clearCanvas(): void {\r\n if (this.canvas) {\r\n this.canvas.remove(...this.canvas.getObjects());\r\n this.setUndoRedo();\r\n }\r\n }\r\n\r\n public saveImage(): void {\r\n this.canvas.getElement().toBlob(\r\n (data: any) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(data);\r\n reader.onloadend = () => {\r\n const base64data = reader.result;\r\n this.control.imageUrl = base64data;\r\n };\r\n },\r\n this.outputMimeType,\r\n this.outputQuality\r\n );\r\n }\r\n\r\n private setUndoRedo(): void {\r\n this.canUndo = this.canvas.getObjects().length > 0;\r\n this.canRedo = this.stack.length > 0;\r\n // this.canvas.renderAll();\r\n }\r\n\r\n public importPhotoFromFile(event: Event | any): void {\r\n if (event.target.files && event.target.files.length > 0) {\r\n const file = event.target.files[0];\r\n if (file.type.match('image.*')) {\r\n this.importPhotoFromBlob(file);\r\n } else {\r\n throw new Error('Not an image !');\r\n }\r\n }\r\n }\r\n\r\n public removeImage(): void {\r\n if (this.imageUsed) {\r\n this.imageUsed.dispose();\r\n this.imageUsed = null as any;\r\n }\r\n this.canvas.backgroundImage = null as any;\r\n\r\n if (this.width && this.height) {\r\n this.canvas.setWidth(this.width);\r\n this.canvas.setHeight(this.height);\r\n }\r\n\r\n this.canvas.renderAll();\r\n }\r\n\r\n public get hasImage(): boolean {\r\n return !!this.canvas.backgroundImage;\r\n }\r\n\r\n private importPhotoFromSrc(src: string): void {\r\n this.isLoading = true;\r\n let isFirstTry = true;\r\n const imgEl = new Image();\r\n imgEl.setAttribute('crossOrigin', 'anonymous');\r\n imgEl.src = src;\r\n imgEl.onerror = () => {\r\n // Retry with cors proxy\r\n if (isFirstTry) {\r\n imgEl.src = 'https://cors-anywhere.herokuapp.com/' + this.src;\r\n isFirstTry = false;\r\n } else {\r\n this.isLoading = false;\r\n this.hasError = true;\r\n // this.errorMessage = this.getTextTranslated('loadError').replace('%@', this.src as string);\r\n }\r\n };\r\n imgEl.onload = () => {\r\n this.isLoading = false;\r\n this.imageUsed = new fabric.Image(imgEl);\r\n\r\n this.imageUsed.cloneAsImage((image: any) => {\r\n let width = imgEl.width;\r\n let height = imgEl.height;\r\n const ratio = (640 / width < 480 / height\r\n ? 640 / width\r\n : 480 / width\r\n );\r\n width = width * ratio;\r\n height = height * ratio;\r\n\r\n image.scaleToWidth(width, false);\r\n image.scaleToHeight(height, false);\r\n\r\n this.canvas.setBackgroundImage(image, ((img: HTMLImageElement) => {\r\n if (img) {\r\n if (this.forceSizeCanvas) {\r\n this.canvas.setWidth(width);\r\n this.canvas.setHeight(height);\r\n } else {\r\n this.canvas.setWidth(image.getScaledWidth());\r\n this.canvas.setHeight(image.getScaledHeight());\r\n }\r\n }\r\n }), {\r\n crossOrigin: 'anonymous',\r\n originX: 'left',\r\n originY: 'top'\r\n });\r\n });\r\n };\r\n }\r\n\r\n private importPhotoFromBlob(file: Blob | File): void {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = (evtReader: any) => {\r\n if (evtReader.target.readyState === FileReader.DONE) {\r\n this.importPhotoFromSrc(evtReader.target.result);\r\n }\r\n };\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.src && !changes.src.firstChange && changes.src.currentValue) {\r\n if (typeof changes.src.currentValue === 'string') {\r\n this.importPhotoFromSrc(changes.src.currentValue);\r\n } else if (changes.src.currentValue instanceof Blob) {\r\n this.importPhotoFromBlob(changes.src.currentValue);\r\n }\r\n }\r\n }\r\n\r\n onNoClick(): void {\r\n this.dialogRef.close();\r\n }\r\n\r\n onSubmit(aswEditPropertyForm: NgForm): void {\r\n if (aswEditPropertyForm.invalid) {\r\n return;\r\n }\r\n this.saveImage();\r\n this.dialogRef.close(this.control);\r\n }\r\n}\r\n","<h4 mat-dialog-title>Edit Property</h4>\r\n<mat-divider></mat-divider>\r\n<form #aswEditPropertyForm=\"ngForm\" (ngSubmit)=\"onSubmit(aswEditPropertyForm)\" novalidate>\r\n <mat-dialog-content class=\"mat-typography\">\r\n <div class=\"asw-drawing-card\">\r\n <div class=\"loading\" *ngIf=\"isLoading\">\r\n <ng-container *ngTemplateOutlet=\"loadingTemplate ? loadingTemplate : defaultLoading\"></ng-container>\r\n </div>\r\n <div class=\"error\" *ngIf=\"hasError\">\r\n <ng-container *ngTemplateOutlet=\"errorTemplate ? errorTemplate : defaultError\"></ng-container>\r\n </div>\r\n \r\n <ng-template #defaultLoading><p>{{ loadingText }}</p></ng-template>\r\n <ng-template #defaultError> <p>{{ errorMessage }}</p> </ng-template>\r\n \r\n <div class=\"asw-drawing\">\r\n <canvas #aswCanvas id=\"aswCanvas\" class=\"asw-drawing-canvas\"></canvas>\r\n </div>\r\n </div>\r\n <div class=\"row asw-pt-10\" *ngIf=\"!isLoading\">\r\n <div class=\"col-md-12\">\r\n <div class=\"asw-buttons\">\r\n <button class=\"asw-image-load-btn\" type=\"button\"\r\n *ngIf=\"enableLoadAnotherImage && !hasImage\" \r\n (click)=\"fileInput.click();\"\r\n matTooltip=\"Load image\">\r\n <input style=\"display: none\" \r\n type=\"file\" \r\n #fileInput \r\n (change)=\"importPhotoFromFile($event)\"\r\n accept=\"image/*\"/>\r\n Load image\r\n </button>\r\n <button class=\"asw-image-load-btn\" type=\"button\"\r\n *ngIf=\"enableRemoveImage && hasImage\" \r\n (click)=\"removeImage()\"\r\n matTooltip=\"Remove image\">\r\n Remove image\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <ul class=\"asw-options\">\r\n <li class=\"option tool\" style=\"display: none\"\r\n [class.selected]=\"currentTool == 'brush'\" \r\n (click)=\"selectTool('brush')\"\r\n id=\"brush\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14.445\" height=\"14.462\" viewBox=\"0 0 14.445 14.462\">\r\n <path id=\"Path_153\" data-name=\"Path 153\" d=\"M8.319,8.378l6.014-6.535a.4.4,0,0,0-.024-.577L13.155.111a.4.4,0,0,0-.553,0L6.066,6.125a.4.4,0,0,0,0,.577L7.742,8.378a.4.4,0,0,0,.577,0Zm-3.44-.89,2.093,2.1a.8.8,0,0,1,.249.457v.393a3.208,3.208,0,0,1-.938,2.277,6.223,6.223,0,0,1-4.739,1.732,2.326,2.326,0,0,1-1.427-.481.4.4,0,0,1-.048-.505,4.772,4.772,0,0,0,.714-2.609A3.626,3.626,0,0,1,1.744,8.17a3.208,3.208,0,0,1,2.269-.938,3.134,3.134,0,0,1,.393,0A.874.874,0,0,1,4.879,7.488Z\" fill=\"#5a6168\" fill-rule=\"evenodd\"/>\r\n </svg>\r\n <span>Brush</span>\r\n </li>\r\n <li class=\"option\">\r\n <input type=\"range\" \r\n [(ngModel)]=\"currentSize\"\r\n #input=\"ngModel\"\r\n name=\"sliders\"\r\n id=\"size-slider\"\r\n min=\"1\"\r\n (change)=\"selectDrawingSize(currentSize)\"\r\n max=\"30\">\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"asw-pb-10\">\r\n <mat-button-toggle-group class=\"asw-width\">\r\n <mat-button-toggle matTooltip=\"Undo\"\r\n [disabled]=\"!canUndo\"\r\n class=\"asw-width\"\r\n (change)=\"undo()\">\r\n Undo\r\n </mat-button-toggle>\r\n <mat-button-toggle matTooltip=\"Redo\"\r\n [disabled]=\"!canRedo\"\r\n class=\"asw-width\"\r\n (change)=\"redo()\">\r\n Redo\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"asw-color-picker\">\r\n <div *ngFor=\"let colorName of colorsName\" \r\n [class.selected]=\"currentColor == colorName\" \r\n class=\"color\"\r\n [ngClass]=\"colorName\"\r\n [style.background]=\"colors[colorName]\" \r\n title=\"{{colorName}}\"\r\n (click)=\"selectColor(colorName)\">\r\n </div>\r\n </div> \r\n </div>\r\n <div class=\"col-md-6 asw-buttons\">\r\n <button class=\"asw-clear-canvas\" type=\"button\"\r\n (click)=\"clearCanvas()\">Clear Canvas</button>\r\n </div>\r\n </div>\r\n </mat-dialog-content>\r\n <mat-dialog-actions align=\"end\">\r\n <button type=\"button\"\r\n class=\"btn btn-danger mr-2 me-2 mb-1\"\r\n (click)=\"onNoClick()\">\r\n No\r\n </button>\r\n <button type=\"submit\"\r\n class=\"btn btn-primary mb-1\"\r\n cdkFocusInitial>\r\n Yes\r\n </button>\r\n </mat-dialog-actions>\r\n</form>\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { AswImageDrawing } from './image-drawing';\r\n\r\n@NgModule({\r\n declarations: [\r\n AswImageDrawing\r\n ],\r\n exports: [\r\n AswImageDrawing,\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n MatDialogModule,\r\n MatIconModule,\r\n MatDividerModule,\r\n MatButtonToggleModule\r\n ]\r\n})\r\nexport class AswImageDrawingModule {}\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nexport * from './image-drawing.module';\r\nexport * from './image-drawing';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}