UNPKG

@almothafar/angular-signature-pad

Version:

Angular Component wrapper for szimek/signature_pad

1 lines 16.3 kB
{"version":3,"file":"almothafar-angular-signature-pad.mjs","sources":["../../projects/angular-signature-pad/src/lib/angular-signature-pad.component.ts","../../projects/angular-signature-pad/src/lib/angular-signature-pad.module.ts","../../projects/angular-signature-pad/src/public-api.ts","../../projects/angular-signature-pad/src/almothafar-angular-signature-pad.ts"],"sourcesContent":["import {AfterContentInit, Component, ElementRef, EventEmitter, Input, OnDestroy, Output} from '@angular/core';\nimport SignaturePad, {Options, PointGroup} from 'signature_pad';\n\nexport interface NgSignaturePadOptions extends Options {\n canvasBackground?: string;\n canvasHeight?: number;\n canvasWidth?: number;\n}\n\n@Component({\n template: '<canvas class=\"signature-pad-canvas\"></canvas>',\n selector: 'signature-pad',\n styleUrls: ['./angular-signature-pad.component.scss'],\n})\nexport class SignaturePadComponent implements AfterContentInit, OnDestroy {\n @Input() public options: NgSignaturePadOptions;\n\n @Output() public drawStart: EventEmitter<MouseEvent | Touch>;\n @Output() public drawBeforeUpdate: EventEmitter<MouseEvent | Touch>;\n @Output() public drawAfterUpdate: EventEmitter<MouseEvent | Touch>;\n @Output() public drawEnd: EventEmitter<MouseEvent | Touch>;\n\n private signaturePad: SignaturePad;\n private extraWidth: number;\n\n constructor(private _elementRef: ElementRef) {\n this.options = this.options || {} as NgSignaturePadOptions;\n this.drawStart = new EventEmitter<MouseEvent | Touch>();\n this.drawBeforeUpdate = new EventEmitter<MouseEvent | Touch>();\n this.drawAfterUpdate = new EventEmitter<MouseEvent | Touch>();\n this.drawEnd = new EventEmitter<MouseEvent | Touch>();\n }\n\n public ngAfterContentInit(): void {\n const canvas: HTMLCanvasElement = this.initCanvas(this.options);\n this.initSignaturePad(canvas, this.options);\n this.redrawCanvas();\n }\n\n public ngOnDestroy(): void {\n const canvas: HTMLCanvasElement = this.getCanvas();\n canvas.width = 0;\n canvas.height = 0;\n }\n\n // noinspection JSUnusedGlobalSymbols\n public getSignaturePad(): SignaturePad {\n return this.signaturePad;\n }\n\n public getCanvas(): HTMLCanvasElement {\n return this._elementRef.nativeElement.querySelector('canvas');\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Redraw or Resize canvas, note this will clear data.\n */\n public redrawCanvas(): void {\n const canvas: HTMLCanvasElement = this.getCanvas();\n // when zoomed out to less than 100%, for some very strange reason,\n // some browsers report devicePixelRatio as less than 1, and only part of the canvas is cleared then.\n const ratio: number = Math.max(window.devicePixelRatio || 1, 1);\n canvas.width = this._getWidthFix(canvas) * ratio;\n canvas.height = this._getHeightFix(canvas) * ratio;\n canvas.getContext('2d').scale(ratio, ratio);\n this.changeBackgroundColor(this.signaturePad.backgroundColor);\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Change the color of the background dynamically.\n */\n public changeBackgroundColor(color: string): void {\n this.signaturePad.backgroundColor = color;\n const data = this.signaturePad.toData();\n this.signaturePad.clear();\n this.signaturePad.fromData(data);\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Returns signature image as an array of point groups\n */\n public toData(): PointGroup[] {\n if (this.signaturePad) {\n return this.signaturePad.toData();\n } else {\n return [];\n }\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Draws signature image from an array of point groups\n */\n public fromData(points: Array<PointGroup>): void {\n this.signaturePad.fromData(points);\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Returns signature image as data URL (see https://mdn.io/todataurl for the list of possible parameters)\n */\n public toDataURL(imageType?: string, quality?: number): string {\n return this.signaturePad.toDataURL(imageType, quality); // save image as data URL\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Draws signature image from data URL\n */\n public fromDataURL(dataURL: string, options: { ratio?: number; width?: number; height?: number } = {}): Promise<void> {\n // set default height and width on read data from URL\n if (!options.hasOwnProperty('height') && this.options.canvasHeight) {\n options.height = this.options.canvasHeight;\n }\n if (!options.hasOwnProperty('width') && this.options.canvasWidth) {\n options.width = this.options.canvasWidth;\n }\n return this.signaturePad.fromDataURL(dataURL, options);\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Clears the canvas\n */\n public clear(redraw: boolean = true): void {\n if (redraw) {\n this.signaturePad.clear();\n this.redrawCanvas();\n } else {\n this.signaturePad.clear();\n }\n this.endStroke(null);\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Returns true if canvas is empty, otherwise returns false\n */\n public isEmpty(): boolean {\n return this.signaturePad.isEmpty();\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Unbinds all event handlers\n */\n public off(): void {\n this.signaturePad.off();\n }\n\n /**\n * Rebinds all event handlers\n */\n public on(): void {\n this.signaturePad.on();\n }\n\n /**\n * set an option on the signaturePad - e.g. set('minWidth', 50);\n * @param option one of SignaturePad to set with value, properties of NgSignaturePadOptions\n * @param value the value of option\n */\n public set(option: string, value: any): void {\n if (option === 'canvasHeight' || option === 'canvasWidth') {\n const canvas: HTMLCanvasElement = this.getCanvas();\n const canvasOption = option.replace('canvas', '').toLowerCase();\n if (canvas[canvasOption] === value) {\n // Same value, no need to change and redraw\n return;\n }\n canvas[canvasOption] = value - this.extraWidth;\n this.clear();\n } else {\n if (this.signaturePad[option] === value) {\n // Same value, no need to change and redraw\n return;\n }\n this.signaturePad[option] = value;\n }\n }\n\n /**\n * notify subscribers on signature begin\n */\n public beginStroke(event: MouseEvent | Touch): void {\n this.drawStart.emit(event);\n }\n\n public beforeUpdateStroke(event: MouseEvent | Touch): void {\n this.drawBeforeUpdate.emit(event);\n }\n\n public afterUpdateStroke(event: MouseEvent | Touch): void {\n this.drawAfterUpdate.emit(event);\n }\n\n /**\n * notify subscribers on signature end\n */\n public endStroke(event: MouseEvent | Touch): void {\n this.drawEnd.emit(event);\n }\n\n private initCanvas(options: NgSignaturePadOptions): HTMLCanvasElement {\n const canvas: HTMLCanvasElement = this.getCanvas();\n if (this.options.canvasHeight) {\n canvas.height = options.canvasHeight - 2;\n }\n if (this.options.canvasWidth) {\n canvas.width = options.canvasWidth - 2;\n }\n if (this.options.canvasBackground) {\n canvas.style.background = options.canvasBackground;\n }\n return canvas;\n }\n\n private initSignaturePad(canvas: HTMLCanvasElement, options?: Options): void {\n this.signaturePad = new SignaturePad(canvas, options);\n this.signaturePad.addEventListener('beginStroke', (event: CustomEvent) => this.beginStroke(event.detail));\n this.signaturePad.addEventListener('beforeUpdateStroke', (event: CustomEvent) => this.beforeUpdateStroke(event.detail));\n this.signaturePad.addEventListener('afterUpdateStroke', (event: CustomEvent) => this.afterUpdateStroke(event.detail));\n this.signaturePad.addEventListener('endStroke', (event: CustomEvent) => this.endStroke(event.detail));\n }\n\n /**\n * To prevent the growing effect when the redrawCanvas is called for the width\n * @param canvas\n * @private\n */\n private _getWidthFix(canvas: HTMLCanvasElement) {\n const computedStyle = getComputedStyle(canvas);\n\n const extraPadding = parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight);\n const extraBorder = parseFloat(computedStyle.borderLeftWidth) + parseFloat(computedStyle.borderRightWidth);\n this.extraWidth = extraPadding + extraBorder;\n return canvas.offsetWidth - (extraPadding + extraBorder);\n }\n\n /**\n * To prevent the growing effect when the redrawCanvas is called for the height\n * @param canvas\n * @private\n */\n private _getHeightFix(canvas: HTMLCanvasElement) {\n const computedStyle = getComputedStyle(canvas);\n\n const extraPadding = parseFloat(computedStyle.paddingTop) + parseFloat(computedStyle.paddingBottom);\n const extraBorder = parseFloat(computedStyle.borderTopWidth) + parseFloat(computedStyle.borderBottomWidth);\n\n return canvas.offsetHeight - (extraPadding + extraBorder);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { SignaturePadComponent } from './angular-signature-pad.component';\n\n@NgModule({\n declarations: [SignaturePadComponent],\n imports: [],\n exports: [SignaturePadComponent],\n})\nexport class AngularSignaturePadModule {\n}\n","/*\n * Public API Surface of angular-signature-pad\n */\n\nexport * from './lib/angular-signature-pad.component';\nexport * from './lib/angular-signature-pad.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}