UNPKG

angular2-signaturepad

Version:

Angular2 Component wrapper for szimek / signature_pad

150 lines (144 loc) 5.97 kB
import * as i0 from '@angular/core'; import { EventEmitter, Component, Input, Output, NgModule } from '@angular/core'; import * as SignaturePadNative from 'signature_pad'; class SignaturePad { constructor(elementRef) { // no op this.elementRef = elementRef; this.options = this.options || {}; this.onBeginEvent = new EventEmitter(); this.onEndEvent = new EventEmitter(); } ngAfterContentInit() { const canvas = this.elementRef.nativeElement.querySelector('canvas'); if (this.options.canvasHeight) { canvas.height = this.options.canvasHeight; } if (this.options.canvasWidth) { canvas.width = this.options.canvasWidth; } this.signaturePad = new SignaturePadNative.default(canvas, this.options); this.signaturePad.onBegin = this.onBegin.bind(this); this.signaturePad.onEnd = this.onEnd.bind(this); } ngOnDestroy() { const canvas = this.elementRef.nativeElement.querySelector('canvas'); canvas.width = 0; canvas.height = 0; } resizeCanvas() { // When zoomed out to less than 100%, for some very strange reason, // some browsers report devicePixelRatio as less than 1 // and only part of the canvas is cleared then. const ratio = Math.max(window.devicePixelRatio || 1, 1); const canvas = this.signaturePad.canvas; canvas.width = canvas.offsetWidth * ratio; canvas.height = canvas.offsetHeight * ratio; canvas.getContext('2d').scale(ratio, ratio); this.signaturePad.clear(); // otherwise isEmpty() might return incorrect value } // Returns signature image as an array of point groups toData() { if (this.signaturePad) { return this.signaturePad.toData(); } else { return []; } } // Draws signature image from an array of point groups fromData(points) { this.signaturePad.fromData(points); } // Returns signature image as data URL (see https://mdn.io/todataurl for the list of possible paramters) toDataURL(imageType, quality) { return this.signaturePad.toDataURL(imageType, quality); // save image as data URL } // Draws signature image from data URL fromDataURL(dataURL, options = {}) { // set default height and width on read data from URL if (!options.hasOwnProperty('height') && this.options.canvasHeight) { options.height = this.options.canvasHeight; } if (!options.hasOwnProperty('width') && this.options.canvasWidth) { options.width = this.options.canvasWidth; } this.signaturePad.fromDataURL(dataURL, options); } // Clears the canvas clear() { this.signaturePad.clear(); } // Returns true if canvas is empty, otherwise returns false isEmpty() { return this.signaturePad.isEmpty(); } // Unbinds all event handlers off() { this.signaturePad.off(); } // Rebinds all event handlers on() { this.signaturePad.on(); } // set an option on the signaturePad - e.g. set('minWidth', 50); set(option, value) { switch (option) { case 'canvasHeight': this.signaturePad.canvas.height = value; break; case 'canvasWidth': this.signaturePad.canvas.width = value; break; default: this.signaturePad[option] = value; } } // notify subscribers on signature begin onBegin() { this.onBeginEvent.emit(true); } // notify subscribers on signature end onEnd() { this.onEndEvent.emit(true); } queryPad() { return this.signaturePad; } } SignaturePad.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SignaturePad, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); SignaturePad.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: SignaturePad, selector: "signature-pad", inputs: { options: "options" }, outputs: { onBeginEvent: "onBeginEvent", onEndEvent: "onEndEvent" }, ngImport: i0, template: '<canvas></canvas>', isInline: true }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SignaturePad, decorators: [{ type: Component, args: [{ template: '<canvas></canvas>', selector: 'signature-pad', }] }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { options: [{ type: Input }], onBeginEvent: [{ type: Output }], onEndEvent: [{ type: Output }] } }); class SignaturePadModule { } SignaturePadModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SignaturePadModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); SignaturePadModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SignaturePadModule, declarations: [SignaturePad], exports: [SignaturePad] }); SignaturePadModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SignaturePadModule, imports: [[]] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SignaturePadModule, decorators: [{ type: NgModule, args: [{ declarations: [SignaturePad], imports: [], exports: [SignaturePad], }] }] }); /* * Public API Surface of angular2-signaturepad */ /** * Generated bundle index. Do not edit. */ export { SignaturePad, SignaturePadModule };