UNPKG

68.1 kBSource Map (JSON)View Raw
1{"version":3,"file":"lib-sketch-tool.js.map","sources":["ng://lib-sketch-tool/app/lib-sketch-tool/constants/shape-data.ts","ng://lib-sketch-tool/app/lib-sketch-tool/services/canvas-manager.service.ts","ng://lib-sketch-tool/app/lib-sketch-tool/mobile-component/mobile-sketch-tool.component.ts","ng://lib-sketch-tool/app/lib-sketch-tool/sketch-tool.module.ts"],"sourcesContent":["export const SHAPE_DATA = {\n width: 200,\n height: 200,\n left: 50,\n top: 50,\n radius: 100,\n stroke: 10,\n freeDrawingBrushWidth: 10,\n cornerSize: 20\n};\n","import { Injectable } from '@angular/core';\nimport { fabric } from 'fabric';\n\nimport { AvailableGeometricShape } from './../constants/available-geometric-shapes';\nimport { SHAPE_DATA } from './../constants/shape-data';\n\ninterface ScaleData {\n scaleFactor: number;\n left: number;\n top: number;\n}\n\ninterface Position {\n x: number;\n y: number;\n}\n\n@Injectable()\nexport class CanvasManagerService {\n public canvas;\n\n private cropRectangle: fabric.Rect;\n private mousePosition: Position;\n private cropStartingPosition: Position;\n private lastPanPosition: fabric.Point;\n\n constructor() {\n this.emptyCanvas();\n this.mousePosition = {x: 0, y: 0};\n this.cropStartingPosition = {x: 0, y: 0};\n }\n\n get backgroundImage() {\n return this.canvas;\n }\n\n get canvasObjects() {\n return this.canvas.getObjects();\n }\n\n get canvasBackgroundImage() {\n return this.canvas.backgroundImage;\n }\n\n get activeObject() {\n return this.canvas.getActiveObject();\n }\n\n get activeGroup() {\n return this.canvas.getActiveObjects();\n }\n\n public emptyCanvas(): void {\n if (this.canvas) {\n this.canvas.dispose();\n }\n this.canvas = new fabric.Canvas('canvas');\n this.canvas.clear();\n this.canvas.remove(this.canvas.getObjects());\n }\n\n public loadNewImage(backgroundImageURL?: string): void {\n this.emptyCanvas();\n if (backgroundImageURL) {\n this.setBackgroundFromURL(backgroundImageURL);\n }\n }\n\n public renderCanvas(): void {\n this.markSelectedObjectsDirty();\n this.canvas.renderAll();\n }\n\n public addGeometricShape(strokeColor: string, fillColor: string, shape: AvailableGeometricShape): void {\n switch (shape) {\n case AvailableGeometricShape.Rectangle:\n this.addRectangle(strokeColor, fillColor);\n break;\n case AvailableGeometricShape.Circle:\n this.addCircle(strokeColor, fillColor);\n break;\n case AvailableGeometricShape.Triangle:\n this.addTriangle(strokeColor, fillColor);\n break;\n case AvailableGeometricShape.Line:\n this.addHorizontalLine(strokeColor, fillColor);\n break;\n case AvailableGeometricShape.Cross:\n this.addCross(strokeColor, fillColor);\n break;\n }\n }\n\n private addRectangle(strokeColor: string, fillColor: string): void {\n this.canvas.add(\n new fabric.Rect({\n width: SHAPE_DATA.width,\n height: SHAPE_DATA.height,\n left: SHAPE_DATA.left,\n top: SHAPE_DATA.top,\n fill: fillColor,\n stroke: strokeColor,\n strokeWidth: SHAPE_DATA.stroke,\n cornerSize: SHAPE_DATA.cornerSize\n })\n );\n }\n\n private addCircle(strokeColor: string, fillColor: string): void {\n this.canvas.add(\n new fabric.Circle({\n left: SHAPE_DATA.left,\n top: SHAPE_DATA.top,\n radius: SHAPE_DATA.radius,\n stroke: strokeColor,\n strokeWidth: SHAPE_DATA.stroke,\n fill: fillColor,\n cornerSize: SHAPE_DATA.cornerSize\n })\n );\n }\n\n private addTriangle(strokeColor: string, fillColor: string): void {\n this.canvas.add(\n new fabric.Triangle({\n width: SHAPE_DATA.width,\n height: SHAPE_DATA.height,\n left: SHAPE_DATA.left,\n top: SHAPE_DATA.top,\n fill: fillColor,\n stroke: strokeColor,\n strokeWidth: SHAPE_DATA.stroke,\n cornerSize: SHAPE_DATA.cornerSize\n })\n );\n }\n\n private addHorizontalLine(strokeColor: string, fillColor: string): void {\n this.canvas.add(this.createHorizontalLine(strokeColor));\n }\n\n private createHorizontalLine(strokeColor: string): fabric.Line {\n const line = new fabric.Line([100, 150, 200, 150], {\n left: 50,\n top: 100,\n stroke: strokeColor,\n strokeWidth: 5,\n cornerSize: SHAPE_DATA.cornerSize\n });\n\n line.setControlsVisibility({\n bl: false,\n br: false,\n tl: false,\n tr: false,\n mt: false,\n mb: false\n });\n\n return line;\n }\n\n private createVerticalLine(strokeColor: string): fabric.Line {\n const line = new fabric.Line([150, 100, 150, 200], {\n left: 100,\n top: 50,\n stroke: strokeColor,\n strokeWidth: 5,\n cornerSize: SHAPE_DATA.cornerSize\n });\n\n line.setControlsVisibility({\n bl: false,\n br: false,\n tl: false,\n tr: false,\n ml: false,\n mr: false\n });\n\n return line;\n }\n\n private addCross(strokeColor: string, fillColor: string): void {\n const horizontalLine = this.createHorizontalLine(strokeColor);\n const verticalLine = this.createVerticalLine(strokeColor);\n this.canvas.add(horizontalLine);\n this.canvas.add(verticalLine);\n }\n\n public toggleFreeDrawing(): void {\n this.canvas.isDrawingMode = !this.canvas.isDrawingMode;\n }\n\n public setFreeDrawingBrushColor(color: string): void {\n this.canvas.freeDrawingBrush.color = color;\n this.setFreeDrawingBrushWidthFromZoom(this.canvas.getZoom());\n }\n\n private setFreeDrawingBrushWidthFromZoom(zoom: number) {\n this.canvas.freeDrawingBrush.width = SHAPE_DATA.freeDrawingBrushWidth * (1 / zoom);\n }\n\n public addText(color: string, inputText: string): void {\n const text = new fabric.IText('text', {\n fontFamily: 'arial black',\n fontStyle: 'bold',\n left: SHAPE_DATA.left,\n top: SHAPE_DATA.top,\n cornerSize: SHAPE_DATA.cornerSize\n });\n\n text.setColor(color);\n\n this.canvas.add(text);\n }\n\n public addImage(imageURL: string): Promise<void> {\n return new Promise(\n (resolve, reject): void => {\n const canvas = this.canvas;\n\n const image = new Image();\n image.onload = function(img) {\n const fabricImage = new fabric.Image(image, {\n angle: 0,\n width: image.width,\n height: image.height,\n left: SHAPE_DATA.left,\n top: SHAPE_DATA.top,\n scaleX: 1,\n scaleY: 1,\n cornerSize: SHAPE_DATA.cornerSize\n });\n canvas.add(fabricImage);\n resolve();\n };\n image.src = imageURL;\n }\n );\n }\n\n public setBackgroundFromURL(backgroundImageURL: string): Promise<void> {\n const canvas = this.canvas;\n const resize = this.resizeCanvasAndComputeScaleFactor;\n\n return new Promise(\n (resolve, reject): void => {\n if (backgroundImageURL == null) {\n return reject();\n }\n const image = new Image();\n image.onload = function() {\n const f_img = new fabric.Image(image, {});\n\n const scaleData = resize(f_img, canvas);\n\n canvas.setBackgroundImage(f_img, canvas.renderAll.bind(canvas), {\n scaleX: scaleData.scaleFactor,\n scaleY: scaleData.scaleFactor\n });\n\n canvas.renderAll();\n resolve();\n };\n image.src = backgroundImageURL;\n }\n );\n }\n\n private resizeCanvasAndComputeScaleFactor(f_img: fabric.Image, canvas: fabric.Canvas): ScaleData {\n const container = document.getElementsByClassName(\n 'div-canvas-container'\n )[0];\n\n canvas.setWidth(container.clientWidth);\n canvas.setHeight(container.clientHeight);\n\n const canvasWidth = canvas.getWidth();\n const canvasHeight = canvas.getHeight();\n\n const canvasAspect = canvasWidth / canvasHeight;\n const imgAspect = f_img.width / f_img.height;\n let left, top, scaleFactor;\n\n if (canvasAspect <= imgAspect) {\n scaleFactor = canvasWidth / f_img.width;\n left = 0;\n top = -(f_img.height * scaleFactor - canvasHeight) / 2;\n } else {\n scaleFactor = canvasHeight / f_img.height;\n top = 0;\n left = -(f_img.width * scaleFactor - canvasWidth) / 2;\n }\n return { scaleFactor: scaleFactor, left: left, top: top };\n }\n\n public onOrientationChange() {\n this.mousePosition = {x: this.canvas.getWidth, y: this.canvas.getHeight };\n this.cropImage();\n }\n\n public changeSelectedObjectsFillColor(color: string): void {\n const activeObjects = this.canvas.getActiveObjects();\n\n if (activeObjects) {\n for (const object of activeObjects) {\n object.setColor(color);\n this.canvas.renderAll();\n }\n }\n }\n\n public changeSelectedObjectsStrokeColor(color: string): void {\n const activeObjects = this.canvas.getActiveObjects();\n\n if (activeObjects) {\n for (const object of activeObjects) {\n if (object.type === 'i-text') {\n object.setColor(color);\n } else {\n object.stroke = color;\n object.set('dirty', true);\n }\n }\n this.canvas.renderAll();\n }\n }\n\n public deleteSelectedObjects(): void {\n const activeObjects = this.canvas.getActiveObjects();\n\n if (activeObjects) {\n for (const object of activeObjects) {\n this.canvas.remove(object);\n }\n this.canvas.discardActiveObject();\n this.canvas.renderAll();\n }\n }\n\n public bringSelectedObjectsToFront(): void {\n const activeObjects = this.canvas.getActiveObjects();\n\n if (activeObjects) {\n for (const object of activeObjects) {\n this.canvas.bringToFront(object);\n }\n }\n }\n\n public sendSelectedObjectsToBack(): void {\n const activeObjects = this.canvas.getActiveObjects();\n\n if (activeObjects) {\n for (const object of activeObjects) {\n this.canvas.sendToBack(object);\n }\n }\n }\n\n public jsonFromCanvas(): JSON {\n return this.canvas.toJSON();\n }\n\n public loadfromJson(json: JSON): Promise<void> {\n const container = document.getElementsByClassName(\n 'div-canvas-container'\n )[0];\n\n this.canvas.setWidth(container.clientWidth);\n this.canvas.setHeight(container.clientHeight);\n\n return new Promise(\n (resolve, reject): void => {\n this.adjustCanvas(json);\n this.canvas.loadFromJSON(json, this.canvas.renderAll.bind(this.canvas));\n resolve();\n }\n );\n }\n\n public adjustCanvas(json: JSON): void {\n const backgroundImage = json['backgroundImage'];\n\n const container = document.getElementsByClassName(\n 'div-canvas-container'\n )[0];\n\n const width = backgroundImage['width'];\n const height = backgroundImage['height'];\n\n const canvasWidth = container.clientWidth;\n const canvasHeight = container.clientHeight;\n\n const canvasAspect = canvasWidth / canvasHeight;\n const imgAspect = width / height;\n let scaleFactor;\n\n if (canvasAspect <= imgAspect) {\n scaleFactor = canvasWidth / width;\n } else {\n scaleFactor = canvasHeight / height;\n }\n\n const objectScale = scaleFactor / backgroundImage['scaleX'];\n\n backgroundImage['scaleX'] = scaleFactor;\n backgroundImage['scaleY'] = scaleFactor;\n\n this.canvas.setWidth(width * scaleFactor);\n this.canvas.setHeight(height * scaleFactor);\n\n const objects = json['objects'];\n\n for (let i = 0; i < objects.length; i++) {\n objects[i]['left'] *= objectScale;\n objects[i]['top'] *= objectScale;\n objects[i]['scaleX'] *= objectScale;\n objects[i]['scaleY'] *= objectScale;\n }\n\n this.canvas.selectable = true;\n this.canvas.selection = true;\n\n this.canvas.renderAll();\n }\n\n public exportImageAsDataURL(): string {\n return this.canvas.toDataURL('image/png');\n }\n\n public selectItem(itemNumber: number): void {\n this.canvas.setActiveObject(this.canvas.item(itemNumber));\n }\n\n public getIndexOf(activeObject): number {\n return this.canvas.getObjects().indexOf(activeObject);\n }\n\n private selectLastObject(): void {\n const itemNumber = this.canvas.getObjects().length - 1;\n const object = this.canvas.item(itemNumber);\n this.canvas.setActiveObject(object);\n object.enterEditing();\n }\n\n private markSelectedObjectsDirty(): void {\n const activeObjects = this.canvas.getActiveObjects();\n\n if (activeObjects) {\n for (const object of activeObjects) {\n object.set('dirty', true);\n }\n }\n }\n\n public addSelectionRectangle(): void {\n this.cropRectangle = new fabric.Rect({\n fill: 'transparent',\n originX: 'left',\n originY: 'top',\n stroke: '#ccc',\n strokeDashArray: [2, 2],\n opacity: 1,\n width: 1,\n height: 1\n });\n\n this.cropRectangle.visible = false;\n this.canvas.add(this.cropRectangle);\n }\n\n public ajustCropRectangleFromMouse(event: MouseEvent): boolean {\n const x = Math.min(event.layerX, this.mousePosition.x),\n y = Math.min(event.layerY, this.mousePosition.y),\n w = Math.abs(event.layerX - this.mousePosition.x),\n h = Math.abs(event.layerY - this.mousePosition.y);\n\n if (!w || !h) {\n return false;\n }\n\n this.cropRectangle\n .set('top', y)\n .set('left', x)\n .set('width', w)\n .set('height', h);\n\n this.canvas.renderAll();\n\n return true;\n }\n\n public startSelectingCropRectangleFromMouse(event: MouseEvent): void {\n this.cropStartingPosition = { x: this.canvas.left, y: this.canvas.top };\n\n this.cropRectangle.left = event.layerX;\n this.cropRectangle.top = event.layerY;\n this.cropRectangle.setCoords();\n\n this.mousePosition = {x: event.layerX, y: event.layerY };\n\n this.canvas.renderAll();\n this.cropRectangle.visible = true;\n this.canvas.bringToFront(this.cropRectangle);\n }\n\n public cropImage(): void {\n const left = this.cropRectangle.left;\n const top = this.cropRectangle.top;\n\n const width = this.cropRectangle.width;\n const height = this.cropRectangle.height;\n\n const container = document.getElementsByClassName(\n 'div-canvas-container'\n )[0];\n\n const canvasWidth = container.clientWidth;\n const canvasHeight = container.clientHeight;\n\n const canvasAspect = canvasWidth / canvasHeight;\n const imgAspect = width / height;\n let scaleFactor;\n\n if (canvasAspect <= imgAspect) {\n scaleFactor = canvasWidth / width;\n } else {\n scaleFactor = canvasHeight / height;\n }\n\n this.canvas.setWidth(width * scaleFactor);\n this.canvas.setHeight(height * scaleFactor);\n\n this.canvas.backgroundImage.scaleX *= scaleFactor;\n this.canvas.backgroundImage.scaleY *= scaleFactor;\n\n this.canvas.backgroundImage.left -= left;\n this.canvas.backgroundImage.left *= scaleFactor;\n this.canvas.backgroundImage.top -= top - scaleFactor;\n this.canvas.backgroundImage.top *= scaleFactor;\n\n this.moveAllObjectsInCanvas(-1 * left, -1 * top, scaleFactor);\n\n this.enableSlection();\n this.cropRectangle.visible = false;\n\n this.canvas.remove(this.cropRectangle);\n\n this.canvas.renderAll();\n }\n\n public enableSlection() {\n this.canvas.selectable = true;\n this.canvas.selection = true;\n }\n\n public ajustCropRectangle(event): boolean {\n const touch = event.touches[0];\n\n const rect = event.target.getBoundingClientRect();\n\n const x = Math.min(touch.clientX - rect.left, this.mousePosition.x),\n y = Math.min(touch.clientY - rect.top, this.mousePosition.y),\n w = Math.abs(touch.clientX - rect.left - this.mousePosition.x),\n h = Math.abs(touch.clientY - rect.top - this.mousePosition.y);\n\n if (!w || !h) {\n return false;\n }\n\n this.cropRectangle\n .set('left', x)\n .set('top', y)\n .set('width', w)\n .set('height', h);\n\n this.canvas.renderAll();\n\n return true;\n }\n\n public startSelectingCropRectangle(event): void {\n this.cropStartingPosition = { x: this.canvas.left, y: this.canvas.top };\n\n const touch = event.touches[0];\n const rect = event.target.getBoundingClientRect();\n\n this.cropRectangle.left = touch.clientX - rect.left;\n this.cropRectangle.top = touch.clientY - rect.top;\n this.cropRectangle.setCoords();\n\n this.mousePosition = { x: touch.clientX - rect.left, y: touch.clientY - rect.top };\n\n this.canvas.renderAll();\n this.cropRectangle.visible = true;\n this.canvas.bringToFront(this.cropRectangle);\n }\n\n public disableSelection() {\n this.canvas.selection = false;\n }\n\n private moveAllObjectsInCanvas(x: number, y: number, scaleFactor: number): void {\n const objects = this.canvas.getObjects();\n for (const obj of objects) {\n obj.left += x;\n obj.left *= scaleFactor;\n obj.scaleX *= scaleFactor;\n obj.top += y;\n obj.scaleY *= scaleFactor;\n obj.top *= scaleFactor;\n obj.setCoords();\n }\n }\n\n public groupSelectedObjects(): void {\n const activeObjects = this.canvas.getActiveObjects();\n\n if (activeObjects) {\n const objects = [];\n\n for (const object of activeObjects) {\n objects.push(object);\n }\n this.deleteSelectedObjects();\n\n const group = new fabric.Group(objects);\n this.canvas.add(group);\n group.setCoords();\n\n this.canvas.setActiveObject(group);\n\n this.canvas.renderAll();\n }\n }\n\n public setLastPanPosition(event) {\n this.lastPanPosition = new fabric.Point(event.touches[0].clientX, event.touches[0].clientY);\n }\n\n public panCanvas(event): void {\n const delta = new fabric.Point(\n event.touches[0].clientX - this.lastPanPosition.x,\n event.touches[0].clientY - this.lastPanPosition.y\n );\n\n this.canvas.relativePan(delta);\n this.preventPanOutsideCanvas();\n\n this.canvas.renderAll();\n this.setLastPanPosition(event);\n }\n\n private preventPanOutsideCanvas() {\n const canvasViewPort = this.canvas.viewportTransform;\n\n const bottomEndPoint = this.canvas.height * (canvasViewPort[0] - 1);\n if (canvasViewPort[5] >= 0 || -bottomEndPoint > canvasViewPort[5]) {\n canvasViewPort[5] = (canvasViewPort[5] >= 0) ? 0 : -bottomEndPoint;\n }\n\n const rightEndPoint = this.canvas.width * (canvasViewPort[0] - 1);\n if (canvasViewPort[4] >= 0 || -rightEndPoint > canvasViewPort[4]) {\n canvasViewPort[4] = (canvasViewPort[4] >= 0) ? 0 : -rightEndPoint;\n }\n }\n\n public zoom(event): void {\n if (Math.abs(event.overallVelocity) > 0.005) {\n const point = new fabric.Point(event.center.x, event.center.y);\n\n let zoom = this.canvas.getZoom();\n zoom = zoom + (event.scale - zoom) / 20;\n\n\n if (zoom < 1) {\n zoom = 1;\n this.canvas.zoomToPoint(new fabric.Point(0, 0), zoom);\n this.canvas.absolutePan(new fabric.Point(0, 0));\n } else {\n if (zoom > 10) {\n zoom = 10;\n }\n this.canvas.zoomToPoint(point, zoom);\n }\n\n this.setFreeDrawingBrushWidthFromZoom(zoom);\n this.canvas.renderAll();\n }\n }\n\n public resetZoom() {\n this.canvas.zoomToPoint(new fabric.Point(0, 0), 1);\n this.canvas.absolutePan(new fabric.Point(0, 0));\n }\n}\n","import { Component, Input, Output, OnInit, OnChanges, AfterViewInit, EventEmitter, transition, ElementRef, ViewChild, OnDestroy } from '@angular/core';\nimport { ActionSheetController } from 'ionic-angular';\nimport { Gesture } from 'ionic-angular/gestures/gesture';\nimport { AvailableGeometricShape } from './../constants/available-geometric-shapes';\nimport { CanvasManagerService } from './../services/canvas-manager.service';\nimport { fabric } from 'fabric';\nimport { TranslateService } from '@ngx-translate/core';\n\nconst Black = '#000000';\nconst Transparent = 'transparent';\n\n@Component({\n selector: 'lib-mobile-sketch-tool',\n template: `<ion-content>\n <div class=\"div-canvas-container\" (touchstart)=\"mouseDown($event)\" (touchmove)=\"mouseMove($event)\" (touchend)=\"mouseUp($event)\"\n #pinchElement>\n <canvas id=\"canvas\"></canvas>\n\n <div class=\"color-picker\" *ngIf=\"isSelectingColor\">\n <ion-grid fixed>\n <ion-row>\n <ion-col style=\"background:#660000\" (tap)=\"setColor('#660000')\">\n </ion-col>\n <ion-col style=\"background:#663300\" (tap)=\"setColor('#663300')\">\n </ion-col>\n <ion-col style=\"background:#666600\" (tap)=\"setColor('#666600')\">\n </ion-col>\n <ion-col style=\"background:#006600\" (tap)=\"setColor('#006600')\">\n </ion-col>\n <ion-col style=\"background:#000066\" (tap)=\"setColor('#000066')\">\n </ion-col>\n <ion-col style=\"background:#660066\" (tap)=\"setColor('#660066')\">\n </ion-col>\n\n </ion-row>\n <ion-row>\n <ion-col style=\"background:#CC0000\" (tap)=\"setColor('#CC0000')\">\n </ion-col>\n <ion-col style=\"background:#CC6600\" (tap)=\"setColor('#CC6600')\">\n </ion-col>\n <ion-col style=\"background:#CCCC00\" (tap)=\"setColor('#CCCC00')\">\n </ion-col>\n <ion-col style=\"background:#00CC00\" (tap)=\"setColor('#00CC00')\">\n </ion-col>\n <ion-col style=\"background:#0000CC\" (tap)=\"setColor('#0000CC')\">\n </ion-col>\n <ion-col style=\"background:#CC00CC\" (tap)=\"setColor('#CC00CC')\">\n </ion-col>\n\n </ion-row>\n <ion-row>\n <ion-col style=\"background:#FF0000\" (tap)=\"setColor('#FF0000')\">\n </ion-col>\n <ion-col style=\"background:#FF8000\" (tap)=\"setColor('#FF8000')\">\n </ion-col>\n <ion-col style=\"background:#FFFF00\" (tap)=\"setColor('#FFFF00')\">\n </ion-col>\n <ion-col style=\"background:#00FF00\" (tap)=\"setColor('#00FF00')\">\n </ion-col>\n <ion-col style=\"background:#0000FF\" (tap)=\"setColor('#0000FF')\">\n </ion-col>\n <ion-col style=\"background:#FF00FF\" (tap)=\"setColor('#FF00FF')\">\n </ion-col>\n\n </ion-row>\n <ion-row>\n <ion-col style=\"background:#FF6666\" (tap)=\"setColor('#FF6666')\">\n </ion-col>\n <ion-col style=\"background:#FFB266\" (tap)=\"setColor('#FFB266')\">\n </ion-col>\n <ion-col style=\"background:#FFFF66\" (tap)=\"setColor('#FFFF66')\">\n </ion-col>\n <ion-col style=\"background:#66FF66\" (tap)=\"setColor('#66FF66')\">\n </ion-col>\n <ion-col style=\"background:#6666FF\" (tap)=\"setColor('#6666FF')\">\n </ion-col>\n <ion-col style=\"background:#FF66FF\" (tap)=\"setColor('#FF66FF')\">\n </ion-col>\n\n </ion-row>\n <ion-row>\n <ion-col style=\"background:#FF9999\" (tap)=\"setColor('#FF9999')\">\n </ion-col>\n <ion-col style=\"background:#FFCC99\" (tap)=\"setColor('#FFCC99')\">\n </ion-col>\n <ion-col style=\"background:#FFFF99\" (tap)=\"setColor('#FFFF99')\">\n </ion-col>\n <ion-col style=\"background:#99FF99\" (tap)=\"setColor('#99FF99')\">\n </ion-col>\n <ion-col style=\"background:#9999FF\" (tap)=\"setColor('#9999FF')\">\n </ion-col>\n <ion-col style=\"background:#FF99FF\" (tap)=\"setColor('#FF99FF')\">\n </ion-col>\n\n </ion-row>\n <ion-row>\n <ion-col style=\"background:#FFFFFF\" (tap)=\"setColor('#FFFFFF')\">\n </ion-col>\n <ion-col style=\"background:#C0C0C0\" (tap)=\"setColor('#C0C0C0')\">\n </ion-col>\n <ion-col style=\"background:#808080\" (tap)=\"setColor('#808080')\">\n </ion-col>\n <ion-col style=\"background:#606060\" (tap)=\"setColor('#606060')\">\n </ion-col>\n <ion-col style=\"background:#303030\" (tap)=\"setColor('#606060')\">\n </ion-col>\n <ion-col style=\"background:#000000\" (tap)=\"setColor('#000000')\">\n </ion-col>\n </ion-row>\n </ion-grid>\n </div>\n </div>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <div class=\"div-edit-toolbar\">\n <button class=\"button-edit-toolbar\" ion-button large [clear]=\"true\" (click)=\"presentShapeActionSheet()\">\n <i class=\"fas fa-shapes\" id=\"icon\"></i>\n </button>\n\n <button class=\"button-edit-toolbar\" ion-button large [clear]=\"true\" (click)=\"presentPictogramsActionSheet()\" *ngIf=\"hasPictograms\">\n <i class=\"fas fa-images\" id=\"icon\"></i>\n </button>\n\n <button class=\"button-edit-toolbar\" ion-button large [clear]=\"true\" (click)=\"presentEditActionSheet()\">\n <i class=\"fas fa-edit\" id=\"icon\"></i>\n </button>\n\n <button class=\"button-edit-toolbar\" ion-button large [clear]=\"!isDrawing\" (click)=\"draw()\">\n <i class=\"fas fa-pencil-alt\" id=\"icon\"></i>\n </button>\n\n <button class=\"button-edit-toolbar\" ion-button large [clear]=\"true\" (click)=\"onColorClicked()\">\n <i class=\"fas fa-palette\" id=\"icon\"></i>\n </button>\n\n <button class=\"button-edit-toolbar\" ion-button large [clear]=\"!isPanning\" (click)=\"onMoveClicked()\">\n <i class=\"fas fa-arrows-alt\" id=\"icon\"></i>\n </button>\n\n <button class=\"button-edit-toolbar\" ion-button large [clear]=\"true\" (click)=\"undo()\" *ngIf=\"isUndoAvailable\">\n <i class=\"fas fa-undo\" id=\"icon\"></i>\n </button>\n\n </div>\n </ion-toolbar>\n</ion-footer>\n`,\n styles: [`.div-canvas-container{height:100%;width:100%;-o-object-fit:contain;object-fit:contain;text-align:center;margin:0 auto;padding:0 auto}.scroll-content{padding:0!important;overflow-y:hidden}.div-edit-toolbar{text-align:center}.button-edit-toolbar{padding:4%!important;margin:0!important}.action-sheet-button{font-family:FontAwesome,Arial}.color-picker{position:absolute;width:100%;height:auto;bottom:0;left:0}#icon{color:#b32017}.col{padding:10px}`],\n providers: [CanvasManagerService]\n})\nexport class MobileSketchToolComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n private gesture: Gesture;\n @ViewChild('pinchElement') element;\n\n public fillColor: string;\n public strokeColor: string;\n public isCropping: boolean;\n public isUndoAvailable: boolean;\n public isSelectingColor: boolean;\n public isDrawing: boolean;\n public isPanning: boolean;\n\n @Input() public imageData: string;\n @Input() public loadedJson: string;\n @Input() public iconsPath: string;\n @Input() public icons: [string];\n\n @Output() public canvas = new EventEmitter<fabric.Canvas>();\n\n private isLoaded: boolean;\n private previousImageData: string;\n private currentJson: JSON;\n private previousJson: JSON;\n\n constructor(\n public actionSheetCtrl: ActionSheetController,\n private canvasManagerService: CanvasManagerService,\n private translate: TranslateService\n ) {\n this.strokeColor = Black;\n this.fillColor = Transparent;\n this.isCropping = false;\n this.isPanning = false;\n this.isLoaded = false;\n this.isUndoAvailable = false;\n this.isSelectingColor = false;\n }\n\n ngOnInit() {\n if (this.imageData) {\n this.canvasManagerService.emptyCanvas();\n if (this.loadedJson == null || this.loadedJson.length < 10) {\n this.canvasManagerService.setBackgroundFromURL(this.imageData);\n } else {\n this.previousJson = JSON.parse(this.loadedJson);\n this.currentJson = this.previousJson;\n this.canvasManagerService\n .loadfromJson(JSON.parse(this.loadedJson));\n }\n this.isLoaded = true;\n this.previousImageData = this.imageData;\n }\n this.emitCanvas();\n }\n\n ngOnChanges() {\n if (this.isLoaded) {\n if (this.loadedJson === null || this.loadedJson.length < 10 || this.imageData !== this.previousImageData) {\n this.canvasManagerService.emptyCanvas();\n this.canvasManagerService.setBackgroundFromURL(this.imageData);\n this.previousImageData = this.imageData;\n this.currentJson = null;\n } else if (this.loadedJson !== JSON.stringify(this.currentJson)) {\n this.previousJson = JSON.parse(this.loadedJson);\n this.currentJson = this.previousJson;\n this.canvasManagerService\n .loadfromJson(JSON.parse(this.loadedJson));\n }\n }\n this.emitCanvas();\n }\n\n ngAfterViewInit() {\n this.gesture = new Gesture(this.element.nativeElement);\n this.gesture.listen();\n this.gesture.on('pinch', $event => this.pinch($event));\n }\n\n ngOnDestroy() {\n this.gesture.destroy();\n }\n\n get hasPictograms(): boolean {\n return !(!this.icons);\n }\n\n public addText() {\n this.canvasManagerService.addText(this.strokeColor, 'text ');\n this.emitCanvas();\n }\n\n public addShape(shape: string) {\n this.canvasManagerService.addGeometricShape(\n this.strokeColor,\n this.fillColor,\n AvailableGeometricShape[shape]\n );\n this.emitCanvas();\n }\n\n public addImage(source: string) {\n this.canvasManagerService.addImage(this.iconsPath + source);\n this.emitCanvas();\n }\n\n public changeStrokeColor() {\n this.canvasManagerService.changeSelectedObjectsStrokeColor(\n this.strokeColor\n );\n this.canvasManagerService.setFreeDrawingBrushColor(this.strokeColor);\n this.emitCanvas();\n }\n\n public bringFoward() {\n this.canvasManagerService.bringSelectedObjectsToFront();\n this.emitCanvas();\n }\n\n public sendToBack() {\n this.canvasManagerService.sendSelectedObjectsToBack();\n this.emitCanvas();\n }\n\n public crop() {\n this.isCropping = true;\n this.canvasManagerService.resetZoom();\n this.canvasManagerService.disableSelection();\n this.canvasManagerService.addSelectionRectangle();\n this.isUndoAvailable = true;\n this.previousJson = this.canvasManagerService.jsonFromCanvas();\n this.emitCanvas();\n }\n\n public deleteSelection() {\n this.canvasManagerService.deleteSelectedObjects();\n this.emitCanvas();\n }\n\n public mouseUp(event) {\n if (this.isCropping) {\n this.isCropping = false;\n this.canvasManagerService.cropImage();\n this.isUndoAvailable = true;\n this.emitCanvas();\n }\n }\n\n public mouseMove(event) {\n if (this.isCropping) {\n this.canvasManagerService.ajustCropRectangle(event);\n } else if (this.isPanning) {\n this.canvasManagerService.panCanvas(event);\n }\n }\n\n public mouseDown(event) {\n if (this.isCropping) {\n this.canvasManagerService.startSelectingCropRectangle(event);\n } else if (this.isPanning) {\n this.canvasManagerService.setLastPanPosition(event);\n }\n }\n\n public pinch(event) {\n event.preventDefault();\n this.disableDrawing();\n this.canvasManagerService.zoom(event);\n }\n\n public group() {\n this.canvasManagerService.groupSelectedObjects();\n this.emitCanvas();\n }\n\n public undo() {\n this.canvasManagerService.loadfromJson(this.previousJson);\n this.isUndoAvailable = false;\n this.emitCanvas();\n }\n\n public onColorClicked() {\n this.isSelectingColor = true;\n this.stopPanning();\n }\n\n public onMoveClicked() {\n this.isPanning = !this.isPanning;\n (this.isPanning) ? this.canvasManagerService.disableSelection() : this.canvasManagerService.enableSlection();\n }\n\n public stopPanning() {\n if (this.isPanning) {\n this.isPanning = false;\n this.canvasManagerService.enableSlection();\n }\n }\n\n public setColor(color: string) {\n this.strokeColor = color;\n this.changeStrokeColor();\n this.isSelectingColor = false;\n this.emitCanvas();\n }\n\n public draw() {\n this.isDrawing = !this.isDrawing;\n this.canvasManagerService.toggleFreeDrawing();\n this.canvasManagerService.setFreeDrawingBrushColor(this.strokeColor);\n }\n\n private disableDrawing() {\n if (this.isDrawing) {\n this.isDrawing = false;\n this.canvasManagerService.toggleFreeDrawing();\n }\n }\n\n private translateShapeButtonsText(): Array<String> {\n const translationArray = [];\n translationArray.push(this.translate.instant('rectangle'));\n translationArray.push(this.translate.instant('triangle'));\n translationArray.push(this.translate.instant('circle'));\n translationArray.push(this.translate.instant('line'));\n translationArray.push(this.translate.instant('cross'));\n translationArray.push(this.translate.instant('text'));\n return translationArray;\n }\n\n public presentShapeActionSheet() {\n this.disableDrawing();\n\n const titleText = this.translate.instant('addGeometricShape');\n const buttonsText = this.translateShapeButtonsText();\n let i = 0;\n\n const actionSheet = this.actionSheetCtrl.create({\n title: titleText,\n buttons: [\n {\n text: '\\uf0c8 ' + buttonsText[i++],\n handler: () => {\n this.canvasManagerService.addGeometricShape(\n this.strokeColor,\n this.fillColor,\n AvailableGeometricShape.Rectangle\n );\n }\n },\n {\n text: '\\uf0d8 ' + buttonsText[i++],\n handler: () => {\n this.canvasManagerService.addGeometricShape(\n this.strokeColor,\n this.fillColor,\n AvailableGeometricShape.Triangle\n );\n }\n },\n {\n text: '\\uf111 ' + buttonsText[i++],\n handler: () => {\n this.canvasManagerService.addGeometricShape(\n this.strokeColor,\n this.fillColor,\n AvailableGeometricShape.Circle\n );\n }\n },\n {\n text: '\\uf068 ' + buttonsText[i++],\n handler: () => {\n this.canvasManagerService.addGeometricShape(\n this.strokeColor,\n this.fillColor,\n AvailableGeometricShape.Line\n );\n }\n },\n {\n text: '\\uf067 ' + buttonsText[i++],\n handler: () => {\n this.canvasManagerService.addGeometricShape(\n this.strokeColor,\n this.fillColor,\n AvailableGeometricShape.Cross\n );\n }\n },\n {\n text: '\\uf031 ' + buttonsText[i++],\n handler: () => {\n this.canvasManagerService.addText(this.strokeColor, '');\n }\n }\n ]\n });\n actionSheet.present();\n }\n\n private translateEditButtonsText(): Array<String> {\n const translationArray = [];\n translationArray.push(this.translate.instant('crop'));\n translationArray.push(this.translate.instant('group'));\n translationArray.push(this.translate.instant('bringToFront'));\n translationArray.push(this.translate.instant('sendToBack'));\n translationArray.push(this.translate.instant('delete'));\n return translationArray;\n }\n\n public presentEditActionSheet() {\n this.disableDrawing();\n\n const titleText = this.translate.instant('edition');\n\n const buttonsText = this.translateEditButtonsText();\n let i = 0;\n\n const actionSheet = this.actionSheetCtrl.create({\n title: titleText,\n buttons: [\n {\n text: '\\uf125 ' + buttonsText[i++],\n handler: () => {\n this.crop();\n }\n },\n {\n text: '\\uf247 ' + buttonsText[i++],\n handler: () => {\n this.group();\n }\n },\n {\n text: '\\uf0de ' + buttonsText[i++],\n handler: () => {\n this.bringFoward();\n }\n },\n {\n text: '\\uf0dd ' + buttonsText[i++],\n handler: () => {\n this.sendToBack();\n }\n },\n {\n text: '\\uf1f8 ' + buttonsText[i++],\n handler: () => {\n this.deleteSelection();\n }\n }\n ]\n });\n actionSheet.present();\n }\n\n public presentPictogramsActionSheet() {\n this.disableDrawing();\n\n const buttons = [];\n const actionSheetStyles = [];\n const images = this.icons;\n for (let i = 0; i < images.length; i++) {\n const style = document.createElement('style');\n style.type = 'text/css';\n style.innerHTML =\n '.customCSSClass' +\n i +\n '{background: url(' +\n \"'\" +\n this.iconsPath +\n images[i] +\n \"'\" +\n ') no-repeat !important;padding-left:50px !important;height:80px; background-position: left center !important;}';\n document.getElementsByTagName('head')[0].appendChild(style);\n actionSheetStyles.push(style);\n buttons.push({\n role: 'destructive',\n text: images[i],\n cssClass: 'customCSSClass' + i,\n handler: () => {\n this.addImage(images[i]);\n }\n });\n }\n\n const titleText = this.translate.instant('addPictogram');\n\n const actionSheet = this.actionSheetCtrl.create({\n title: titleText,\n buttons: buttons\n });\n actionSheet.onDidDismiss(() => {\n for (let i = 0; i < actionSheetStyles.length; i++) {\n if (actionSheetStyles[i].parentNode != null) {\n actionSheetStyles[i].parentNode.removeChild(actionSheetStyles[i]);\n }\n }\n });\n\n actionSheet.present();\n }\n\n public emitCanvas() {\n this.canvas.emit(this.canvasManagerService.canvas);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { IonicModule } from 'ionic-angular';\n\nimport { MobileSketchToolComponent } from './mobile-component/mobile-sketch-tool.component';\nimport { CanvasManagerService } from './services/canvas-manager.service';\n\n@NgModule({\n imports: [CommonModule, IonicModule],\n declarations: [\n MobileSketchToolComponent,\n ],\n exports: [MobileSketchToolComponent]\n})\nexport class SketchToolModule {}\n"],"names":[],"mappings":"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"}