@syncfusion/ej2-image-editor 20.4.40 → 20.4.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -2
- package/README.md +1 -1
- package/dist/ej2-image-editor.umd.min.js +2 -2
- package/dist/ej2-image-editor.umd.min.js.map +1 -1
- package/dist/es6/ej2-image-editor.es2015.js +6618 -3832
- package/dist/es6/ej2-image-editor.es2015.js.map +1 -1
- package/dist/es6/ej2-image-editor.es5.js +6622 -3838
- package/dist/es6/ej2-image-editor.es5.js.map +1 -1
- package/dist/global/ej2-image-editor.min.js +2 -2
- package/dist/global/ej2-image-editor.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +11 -11
- package/src/image-editor/image-editor-model.d.ts +23 -85
- package/src/image-editor/image-editor.d.ts +279 -235
- package/src/image-editor/image-editor.js +6620 -3835
- package/styles/bootstrap-dark.css +3 -0
- package/styles/bootstrap.css +3 -0
- package/styles/bootstrap4.css +3 -0
- package/styles/bootstrap5-dark.css +3 -0
- package/styles/bootstrap5.css +3 -0
- package/styles/fabric-dark.css +3 -0
- package/styles/fabric.css +3 -0
- package/styles/fluent-dark.css +3 -0
- package/styles/fluent.css +3 -0
- package/styles/highcontrast-light.css +3 -0
- package/styles/highcontrast.css +3 -0
- package/styles/image-editor/_layout.scss +6 -0
- package/styles/image-editor/bootstrap-dark.css +3 -0
- package/styles/image-editor/bootstrap.css +3 -0
- package/styles/image-editor/bootstrap4.css +3 -0
- package/styles/image-editor/bootstrap5-dark.css +3 -0
- package/styles/image-editor/bootstrap5.css +3 -0
- package/styles/image-editor/fabric-dark.css +3 -0
- package/styles/image-editor/fabric.css +3 -0
- package/styles/image-editor/fluent-dark.css +3 -0
- package/styles/image-editor/fluent.css +3 -0
- package/styles/image-editor/highcontrast-light.css +3 -0
- package/styles/image-editor/highcontrast.css +3 -0
- package/styles/image-editor/material-dark.css +3 -0
- package/styles/image-editor/material.css +3 -0
- package/styles/image-editor/tailwind-dark.css +3 -0
- package/styles/image-editor/tailwind.css +3 -0
- package/styles/material-dark.css +3 -0
- package/styles/material.css +3 -0
- package/styles/tailwind-dark.css +3 -0
- package/styles/tailwind.css +3 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-image-editor.min.js","sources":["../../src/image-editor/image-editor.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { NotifyPropertyChanges, Property, addClass, removeClass, extend } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, getComponent, getInstance, isNullOrUndefined, L10n, getUniqueID } from '@syncfusion/ej2-base';\nimport { SignatureBase } from '@syncfusion/ej2-inputs';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { ColorPicker, Uploader, Slider } from '@syncfusion/ej2-inputs';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { Complex, compile, compile as templateCompiler, Browser, detach, select, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Interface for image finetune values.\n */\nvar FinetuneSettings = /** @class */ (function (_super) {\n __extends(FinetuneSettings, _super);\n function FinetuneSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"brightness\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"contrast\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"hue\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"saturation\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"exposure\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"blur\", void 0);\n return FinetuneSettings;\n}(ChildProperty));\nexport { FinetuneSettings };\n/**\n * Image Editor is a graphical user interface that helps to edit an image by performing actions like selection,\n * cropping, rotating, inserting text and shapes (rectangles, ellipses, lines), and drawing free hand on top of an image.\n *\n ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({});\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\nvar ImageEditor = /** @class */ (function (_super) {\n __extends(ImageEditor, _super);\n /**\n *\n * Constructor for creating the widget\n *\n * @param {ImageEditorModel} options - Specifies the image editor model\n * @param {string|HTMLDivElement} element - Specifies the target element\n */\n function ImageEditor(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.degree = 0; // current rotated state\n _this.dragCanvas = false;\n _this.dragElement = '';\n _this.keyHistory = ''; // text history\n _this.flipState = ''; // current flip state whether horizontal or vertical or none\n _this.mouseDownPoint = { x: 0, y: 0 };\n _this.previousPoint = { x: 0, y: 0 }; // updates prev x and y points in mouseMove\n _this.dragPoint = { startX: 0, startY: 0, endX: 0, endY: 0 }; // updates drag start and end points in mousedown and mousemove\n _this.diffPoint = { x: 0, y: 0 }; // updates resize points\n _this.oldPoint = {};\n _this.objColl = []; // shapes, text obj collection\n _this.undoRedoColl = [];\n _this.imgDataColl = []; // collection of Image Data mainly used for reset state\n _this.strokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n _this.textSettings = { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n _this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n _this.tempTextSettings = { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n _this.toolbarHeight = 46;\n _this.pannStart = {};\n _this.pannEnd = {};\n _this.togglePan = false;\n _this.disablePan = false;\n _this.lastX = 0;\n _this.lastY = 0;\n _this.dragStart = { x: 0, y: 0 };\n _this.factor = 1; // current zoomed state\n _this.currFlipState = '';\n _this.touchEndPoint = {};\n _this.prevX = 0;\n _this.currX = 0;\n _this.prevY = 0;\n _this.currY = 0;\n _this.togglePen = false;\n _this.currentToolbar = 'main';\n _this.textStartPoints = { x: 0, y: 0 };\n _this.fontSizeColl = [];\n _this.tempKeyHistory = '';\n _this.penDrawColl = [];\n _this.allowDrag = false;\n _this.textRow = 1;\n _this.activeObj = { activePoint: { startX: 0, startY: 0, endX: 0, endY: 0, width: 0, height: 0 },\n flipObjColl: [] };\n _this.currObjType = { shape: '', isDragging: false, isActiveObj: false, isText: false, isInitialText: false, isLine: false,\n isInitialLine: false, isCustomCrop: false, isZoomed: false, isFiltered: false, isSave: false };\n _this.defToolbarItems = [];\n _this.baseImgSrc = {};\n _this.isTimer = false;\n _this.isScreenOriented = false;\n _this.isFirstMove = false;\n _this.startTouches = [];\n _this.tempTouches = [];\n _this.adjustmentLevel = { brightness: 0, contrast: 0, hue: 0, opacity: 100, saturation: 0, blur: 0,\n exposure: 0, sharpen: false, bw: false };\n _this.tempAdjustmentLevel = { brightness: 0, contrast: 0, hue: 0, opacity: 100, saturation: 0, blur: 0,\n exposure: 0, sharpen: false, bw: false };\n _this.adjustmentValue = '';\n _this.initialAdjustmentValue = '';\n _this.tempAdjustmentValue = '';\n _this.currentFilter = '';\n _this.tempFilter = '';\n _this.canvasFilter = '';\n _this.sharpenedImgData = false;\n _this.tempSharpenFilter = false;\n _this.tempBWFilter = false;\n _this.isBrightnessAdjusted = false;\n _this.isInitialLoading = false;\n _this.imageFileName = '';\n return _this;\n }\n ImageEditor_1 = ImageEditor;\n ImageEditor.prototype.preRender = function () {\n // pre render code snippets\n this.element.id = this.element.id || getUniqueID('ej2-image-editor');\n if (Browser.isDevice) {\n this.element.classList.add('e-device');\n }\n this.themeColl = {\n Bootstrap5: { primaryColor: '#0d6efd', secondaryColor: '#fff' },\n Bootstrap5Dark: { primaryColor: '#0d6efd', secondaryColor: '#fff' },\n Tailwind: { primaryColor: '#4f46e5', secondaryColor: '#fff' },\n TailwindDark: { primaryColor: '#22d3ee', secondaryColor: '#fff' },\n Fluent: { primaryColor: '#0078d4', secondaryColor: '#fff' },\n FluentDark: { primaryColor: '#0078d4', secondaryColor: '#fff' },\n Bootstrap4: { primaryColor: '#007bff', secondaryColor: '#fff' },\n Bootstrap: { primaryColor: '#317ab9', secondaryColor: '#fff' },\n BootstrapDark: { primaryColor: '#317ab9', secondaryColor: '#fff' },\n Material: { primaryColor: '#e3165b', secondaryColor: '#fff' },\n MaterialDark: { primaryColor: '#00b0ff', secondaryColor: '#fff' },\n Fabric: { primaryColor: '#0078d6', secondaryColor: '#fff' },\n FabricDark: { primaryColor: '#0074cc', secondaryColor: '#fff' },\n Highcontrast: { primaryColor: '#000000', secondaryColor: '#fff' }\n };\n this.defaultLocale = {\n Crop: 'Crop',\n ZoomIn: 'Zoom In',\n ZoomOut: 'Zoom Out',\n Undo: 'Undo',\n Redo: 'Redo',\n Transform: 'Transform',\n Annotation: 'Annotation',\n Finetune: 'Finetune',\n Brightness: 'Brightness',\n Contrast: 'Contrast',\n Hue: 'Hue',\n Saturation: 'Saturation',\n Opacity: 'Opacity',\n Blur: 'Blur',\n Sharpen: 'Sharpen',\n Exposure: 'Exposure',\n Filter: 'Filter',\n Default: 'Default',\n Chrome: 'Chrome',\n Cold: 'Cold',\n Warm: 'Warm',\n Grayscale: 'Grayscale',\n BlackAndWhite: 'Black and White',\n Sepia: 'Sepia',\n Invert: 'Invert',\n Text: 'Add Text',\n Pen: 'Pen',\n Reset: 'Reset',\n Save: 'Save',\n Select: 'Select',\n RotateLeft: 'Rotate Left',\n RotateRight: 'Rotate Right',\n HorizontalFlip: 'Horizontal Flip',\n VerticalFlip: 'Vertical Flip',\n OK: 'OK',\n Cancel: 'Cancel',\n FillColor: 'Fill Color',\n StrokeColor: 'Stroke Color',\n StrokeWidth: 'Stroke Width',\n FontFamily: 'Font Family',\n FontStyle: 'Font Style',\n FontSize: 'Font Size',\n FontColor: 'Font Color',\n Pan: 'Pan',\n Move: 'Move',\n Load: 'Load',\n Custom: 'Custom',\n Square: 'Square',\n Circle: 'Circle',\n Ellipse: 'Ellipse',\n Rectangle: 'Rectangle',\n Line: 'Line',\n Bold: 'Bold',\n Italic: 'Italic',\n BoldItalic: 'Bold Italic',\n XSmall: 'X-Small',\n Small: 'Small',\n Medium: 'Medium',\n Large: 'Large',\n XLarge: 'X-Large',\n ABC: 'ABC',\n Browse: 'Browse'\n };\n this.l10n = new L10n('image-editor', this.defaultLocale, this.locale);\n };\n /**\n *\n * To Initialize the component rendering\n *\n * @private\n * @returns {void}\n */\n ImageEditor.prototype.render = function () {\n this.initialize();\n };\n /**\n * To get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n ImageEditor.prototype.getModuleName = function () {\n return 'image-editor';\n };\n /**\n *\n * To get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n * @private\n */\n ImageEditor.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n *\n * Called internally if any of the property value changed.\n *\n * @param {ImageEditorModel} newProperties - Specifies new properties\n * @param {ImageEditorModel} oldProperties - Specifies old properties\n * @returns {void}\n * @private\n */\n ImageEditor.prototype.onPropertyChanged = function (newProperties, oldProperties) {\n for (var _i = 0, _a = Object.keys(newProperties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (oldProperties.cssClass) {\n removeClass([this.element], oldProperties.cssClass.split(' '));\n }\n if (newProperties.cssClass) {\n addClass([this.element], newProperties.cssClass.split(' '));\n }\n break;\n case 'disabled':\n if (newProperties.disabled) {\n this.element.classList.add('e-disabled');\n this.unwireEvent();\n }\n else {\n this.element.classList.remove('e-disabled');\n this.wireEvent();\n }\n break;\n case 'height':\n this.element.style.height = newProperties.height;\n break;\n case 'width':\n this.element.style.width = newProperties.width;\n break;\n case 'theme':\n if (newProperties.theme) {\n this.updateTheme();\n this.upperContext.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n this.upperContext.fillStyle = this.themeColl[this.theme]['secondaryColor'];\n }\n break;\n case 'finetuneSettings':\n if (newProperties.finetuneSettings) {\n this.finetuneSettings = newProperties.finetuneSettings;\n this.updateFinetunes();\n }\n break;\n }\n }\n };\n ImageEditor.prototype.destroy = function () {\n var classList = [];\n this.element.removeAttribute('tabindex');\n if (this.cssClass) {\n classList = classList.concat(this.cssClass.split(' '));\n }\n removeClass([this.element], classList);\n if (!this.element.getAttribute('class')) {\n this.element.removeAttribute('class');\n }\n this.destroySubComponents();\n this.unwireEvent();\n _super.prototype.destroy.call(this);\n this.element.innerHTML = '';\n this.trigger('destroyed');\n };\n ImageEditor.prototype.initialize = function () {\n this.updateFinetunes();\n this.createToolbar();\n this.createContextualToolbar();\n this.createCanvas();\n this.wireEvent();\n this.updateContext(this.lowerContext);\n this.updateContext(this.upperContext);\n this.pannStart = { startX: 0, startY: 0, width: 0, height: 0 };\n this.pannEnd = { startX: 0, startY: 0, width: 0, height: 0 };\n this.lowerContext.filter = this.canvasFilter = this.initialAdjustmentValue = this.adjustmentValue = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n if (this.element) {\n createSpinner({\n target: this.element\n });\n }\n };\n ImageEditor.prototype.updateFinetunes = function () {\n if (this.finetuneSettings) {\n if (this.finetuneSettings.brightness) {\n this.adjustmentLevel.brightness = this.finetuneSettings.brightness.defaultValue;\n this.tempAdjustmentLevel.brightness = this.finetuneSettings.brightness.defaultValue;\n }\n if (this.finetuneSettings.contrast) {\n this.adjustmentLevel.contrast = this.finetuneSettings.contrast.defaultValue;\n this.tempAdjustmentLevel.contrast = this.finetuneSettings.contrast.defaultValue;\n }\n if (this.finetuneSettings.hue) {\n this.adjustmentLevel.hue = this.finetuneSettings.hue.defaultValue;\n this.tempAdjustmentLevel.hue = this.finetuneSettings.hue.defaultValue;\n }\n if (this.finetuneSettings.saturation) {\n this.adjustmentLevel.saturation = this.finetuneSettings.saturation.defaultValue;\n this.tempAdjustmentLevel.saturation = this.finetuneSettings.saturation.defaultValue;\n }\n if (this.finetuneSettings.exposure) {\n this.adjustmentLevel.exposure = this.finetuneSettings.exposure.defaultValue;\n this.tempAdjustmentLevel.exposure = this.finetuneSettings.exposure.defaultValue;\n }\n if (this.finetuneSettings.opacity) {\n this.adjustmentLevel.opacity = this.finetuneSettings.opacity.defaultValue;\n this.tempAdjustmentLevel.opacity = this.finetuneSettings.opacity.defaultValue;\n }\n if (this.finetuneSettings.blur) {\n this.adjustmentLevel.blur = this.finetuneSettings.blur.defaultValue;\n this.tempAdjustmentLevel.blur = this.finetuneSettings.blur.defaultValue;\n }\n this.isInitialLoading = true;\n }\n };\n /**\n *\n * This Method will add events to component (element, event, method, current reference)\n *\n * @returns {void}.\n */\n ImageEditor.prototype.wireEvent = function () {\n EventHandler.add(document, 'keydown', this.keyDownEventHandler, this);\n EventHandler.add(document, 'keypress', this.keyUpEventHandler, this);\n EventHandler.add(this.upperCanvas, 'mousedown', this.mouseDownEventHandler, this);\n EventHandler.add(this.upperCanvas, 'mousemove', this.mouseMoveEventHandler, this);\n EventHandler.add(this.upperCanvas, 'mouseup', this.mouseUpEventHandler, this);\n EventHandler.add(document, 'mouseup', this.mouseUpEventHandler, this);\n EventHandler.add(this.lowerCanvas, 'mousedown', this.canvasMouseDownHandler, this);\n EventHandler.add(this.lowerCanvas, 'mousemove', this.canvasMouseMoveHandler, this);\n EventHandler.add(this.lowerCanvas, 'mouseup', this.canvasMouseUpHandler, this);\n EventHandler.add(document, 'mouseup', this.canvasMouseUpHandler, this);\n EventHandler.add(this.upperCanvas, 'touchstart', this.touchStartHandler, this);\n EventHandler.add(this.lowerCanvas, 'touchstart', this.touchStartHandler, this);\n EventHandler.add(this.upperCanvas, 'dblclick', this.findTextPoint, this);\n EventHandler.add(this.textBox, 'mousedown', this.findTextPoint, this);\n window.addEventListener('resize', this.windowResizeHandler.bind(this));\n if (!Browser.isIos && Browser.info.name !== 'safari' && screen && screen.orientation) {\n screen.orientation.addEventListener('change', this.screenOrientation.bind(this));\n }\n };\n /**\n *\n * This Method will remove events from component\n *\n * @returns {void}.\n */\n ImageEditor.prototype.unwireEvent = function () {\n EventHandler.remove(document, 'keydown', this.keyDownEventHandler);\n EventHandler.remove(document, 'keypress', this.keyUpEventHandler);\n EventHandler.remove(this.upperCanvas, 'mousedown', this.mouseDownEventHandler);\n EventHandler.remove(this.upperCanvas, 'mousemove', this.mouseMoveEventHandler);\n EventHandler.remove(this.upperCanvas, 'mouseup', this.mouseUpEventHandler);\n EventHandler.remove(document, 'mouseup', this.mouseUpEventHandler);\n EventHandler.remove(this.lowerCanvas, 'mousedown', this.canvasMouseDownHandler);\n EventHandler.remove(this.lowerCanvas, 'mousemove', this.canvasMouseMoveHandler);\n EventHandler.remove(this.lowerCanvas, 'mouseup', this.canvasMouseUpHandler);\n EventHandler.remove(document, 'mouseup', this.canvasMouseUpHandler);\n };\n ImageEditor.prototype.initializeFilter = function () {\n this.setBrightness(this.adjustmentLevel.brightness);\n this.setContrast(this.adjustmentLevel.contrast);\n this.setHue(this.adjustmentLevel.hue);\n this.setSaturation(this.adjustmentLevel.saturation);\n this.setExposure(this.adjustmentLevel.exposure);\n this.setOpacity(this.adjustmentLevel.opacity);\n this.setBlur(this.adjustmentLevel.blur);\n };\n ImageEditor.prototype.destroySubComponents = function () {\n var inputElement = this.element.querySelectorAll('input.e-control');\n var btnElement = this.element.querySelectorAll('button.e-control');\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].classList.contains('e-color-picker')) {\n getComponent(inputElement[i], 'color-picker').destroy();\n detach(select('input#' + inputElement[i].id, this.element));\n }\n }\n for (var i = 0, len = btnElement.length; i < len; i++) {\n if (btnElement[i].classList.contains('e-dropdown-btn')) {\n getComponent(btnElement[i], 'dropdown-btn').destroy();\n detach(select('button#' + btnElement[i].id, this.element));\n }\n else if (btnElement[i].classList.contains('e-btn')) {\n getComponent(btnElement[i], 'btn').destroy();\n detach(select('button#' + btnElement[i].id, this.element));\n }\n }\n };\n ImageEditor.prototype.updateTheme = function () {\n if (this.theme !== '') {\n this.theme = this.toPascalCase(this.theme);\n }\n };\n ImageEditor.prototype.toPascalCase = function (str) {\n var strArr = str.toLowerCase().split('-');\n for (var i = 0; i < strArr.length; i++) {\n strArr[i] = strArr[i].charAt(0).toUpperCase() + strArr[i].slice(1);\n }\n return strArr.join('');\n };\n ImageEditor.prototype.createCanvas = function () {\n var height = this.toolbarHeight;\n this.element.style.width = this.width;\n this.element.style.height = this.height;\n var canvasWrapper = this.element.appendChild(this.createElement('div', { id: this.element.id + '_canvasWrapper',\n className: 'e-canvas-wrapper', attrs: { style: 'height:' + (this.element.offsetHeight - height) + 'px; width:' +\n (this.element.offsetWidth)\n + 'px; position: relative; overflow: hidden; margin: 0 auto;' }\n }));\n this.lowerCanvas = canvasWrapper.appendChild(this.createElement('canvas', {\n id: this.element.id + '_lowerCanvas', attrs: { name: 'canvasImage' }\n }));\n this.upperCanvas = canvasWrapper.appendChild(this.createElement('canvas', {\n id: this.element.id + '_upperCanvas', attrs: { name: 'canvasImage' }\n }));\n this.inMemoryCanvas = this.createElement('canvas', {\n id: this.element.id + '_inMemoryCanvas', attrs: { name: 'canvasImage' }\n });\n this.textBox = canvasWrapper.appendChild(this.createElement('textarea', {\n id: this.element.id + '_textBox', attrs: { name: 'textBox' }\n }));\n this.textBox.setAttribute('spellcheck', 'false');\n this.upperCanvas.width = this.lowerCanvas.width = this.inMemoryCanvas.width = this.element.offsetWidth;\n this.upperCanvas.height = this.lowerCanvas.height = this.inMemoryCanvas.height = (this.element.offsetHeight - this.toolbarHeight);\n this.upperCanvas.style.position = this.lowerCanvas.style.position = this.textBox.style.position = 'absolute';\n this.textBox.style.backgroundColor = 'transparent';\n this.textBox.style.display = 'none';\n this.textBox.style.resize = 'none';\n this.lowerContext = this.lowerCanvas.getContext('2d');\n this.baseImg = this.createElement('img', {\n id: this.element.id + '_orgImg', attrs: { name: 'Image', crossorigin: 'anonymous' }\n });\n this.upperCanvas.style.cursor = 'default';\n this.upperCanvas.style.display = 'none';\n this.upperContext = this.upperCanvas.getContext('2d');\n this.inMemoryContext = this.inMemoryCanvas.getContext('2d');\n };\n ImageEditor.prototype.createToolbar = function () {\n var _this = this;\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)) {\n this.element.appendChild(this.createElement('div', {\n id: this.element.id + '_toolbarArea', className: 'e-toolbar-area'\n }));\n if (this.toolbarTemplate) {\n this.toolbarTemplateFn();\n }\n else {\n var toolbarItems = { cssClass: 'e-image-upload', align: 'Left', type: 'Input', template: new Uploader({}) };\n if (isNullOrUndefined(this.defToolbarItems)) {\n this.defToolbarItems = [];\n }\n this.defToolbarItems.push(toolbarItems);\n var toolbarArea = document.getElementById(this.element.id + '_toolbarArea');\n var toolbar_1 = this.createElement('div', {\n id: this.element.id + '_toolbar'\n });\n toolbarArea.appendChild(toolbar_1);\n var uploadItems = [\n {\n cssClass: 'e-image-upload',\n align: 'Left', type: 'Input',\n template: new Uploader({\n selected: function () {\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 &&\n (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar'))) {\n getComponent(document.getElementById(_this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, Browser.isDevice);\n _this.createBottomToolbar();\n }\n else {\n if (_this.defToolbarItems.length > 0 &&\n (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, false);\n }\n }\n })\n }\n ];\n new Toolbar({ items: uploadItems, width: '100%',\n created: function () {\n _this.trigger('toolbarCreated', { toolbarType: 'main' });\n },\n clicked: this.defToolbarClicked.bind(this) }, '#' + this.element.id + '_toolbar');\n this.createLeftToolbarControls();\n }\n if (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar'))) {\n this.toolbarHeight = document.getElementById(this.element.id + '_toolbar').clientHeight;\n }\n }\n else {\n this.toolbarHeight = 0;\n }\n };\n ImageEditor.prototype.createContextualToolbar = function () {\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)) {\n this.element.appendChild(this.createElement('div', { id: this.element.id + '_contextualToolbarArea',\n className: 'e-contextual-toolbar-wrapper e-hide', attrs: { style: 'position: absolute;' }\n }));\n var toolbarArea = document.getElementById(this.element.id + '_contextualToolbarArea');\n var toolbar_2 = this.createElement('div', { id: this.element.id + '_contextualToolbar' });\n toolbarArea.appendChild(toolbar_2);\n }\n };\n ImageEditor.prototype.updateContextualToolbar = function (type, cType) {\n if (this.toolbarTemplate) {\n this.toolbarTemplateFn();\n }\n else {\n var toolbarArea = this.element.querySelector('#' + this.element.id + '_toolbarArea');\n var contextualToolbarArea = this.element.querySelector('#' + this.element.id + '_contextualToolbarArea');\n if (!isNullOrUndefined(toolbarArea) && !isNullOrUndefined(contextualToolbarArea)) {\n contextualToolbarArea.classList.remove('e-hide');\n contextualToolbarArea.style.left = toolbarArea.offsetLeft + 'px';\n }\n if (type === 'filter') {\n if (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')) && this.defToolbarItems.length > 0) {\n getComponent(document.getElementById(this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n else {\n this.initToolbarItem(true);\n }\n this.refreshSlider();\n this.initFilterToolbarItem();\n }\n else {\n if (!isNullOrUndefined(document.querySelector('#' + this.element.id + '_contextualToolbar'))\n && document.querySelector('#' + this.element.id + '_contextualToolbar').classList.contains('e-control')) {\n getComponent(document.getElementById(this.element.id + '_contextualToolbar'), 'toolbar').destroy();\n }\n this.refreshSlider();\n this.renderSlider(cType);\n }\n if (Browser.isDevice) {\n var cHt = contextualToolbarArea.offsetHeight;\n var ht = this.element.querySelector('#' + this.element.id + '_canvasWrapper').offsetHeight;\n contextualToolbarArea.style.top = this.toolbarHeight + ht - cHt + 'px';\n }\n else {\n contextualToolbarArea.style.top = this.toolbarHeight + 1 + 'px';\n }\n }\n };\n ImageEditor.prototype.createBottomToolbar = function () {\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)) {\n this.element.appendChild(this.createElement('div', {\n id: this.element.id + '_bottomToolbarArea', className: 'e-bottom-toolbar'\n }));\n if (!this.toolbarTemplate) {\n document.getElementById(this.element.id + '_canvasWrapper').style.height = (this.element.offsetHeight\n - this.toolbarHeight * 2) - 3 + 'px';\n var toolbarArea = document.getElementById(this.element.id + '_bottomToolbarArea');\n var toolbarElem = this.createElement('div', {\n id: this.element.id + '_bottomToolbar'\n });\n toolbarArea.appendChild(toolbarElem);\n }\n this.initBottomToolbar();\n }\n };\n ImageEditor.prototype.initBottomToolbar = function () {\n var _this = this;\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)) {\n if (this.toolbarTemplate) {\n this.toolbarTemplateFn();\n }\n else {\n var items = this.getMainToolbarItem();\n new Toolbar({ items: items, width: '100%',\n created: function () {\n _this.renderAnnotationBtn();\n _this.renderCropBtn();\n _this.renderTransformBtn();\n _this.trigger('toolbarCreated', { toolbarType: 'main' });\n },\n clicked: this.defToolbarClicked.bind(this)\n }, '#' + this.element.id + '_bottomToolbar');\n if (this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(this.element.id + '_bottomToolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_3 = getComponent(this.element.id + '_bottomToolbar', 'toolbar');\n toolbar_3.refreshOverflow();\n }\n }\n }\n };\n ImageEditor.prototype.toolbarTemplateFn = function () {\n var template;\n var templateID = this.element.id + '_toolbar';\n var toolbarArea = this.element.querySelector('#' + this.element.id + '_toolbarArea');\n if (this.toolbarTemplate) {\n this.toolbarFn = this.templateParser(this.toolbarTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.toolbarFn({ type: 'toolbar' }, this, 'Template', templateID)[0];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.toolbarFn({ type: 'toolbar' }, this, 'Template', templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n }\n else {\n template = this.toolbarFn({ type: 'toolbar' }, this, 'Template', templateID)[0];\n }\n toolbarArea.appendChild(template);\n this.renderReactTemplates();\n }\n };\n ImageEditor.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (error) {\n return templateCompiler(template);\n }\n }\n return undefined;\n };\n ImageEditor.prototype.getLeftToolbarItem = function (isOkBtn) {\n var toolbarItems = [];\n if (!isOkBtn) {\n toolbarItems.push({ cssClass: 'e-image-upload', align: 'Left', type: 'Input', template: new Uploader({}) });\n toolbarItems.push({ visible: false, cssClass: 'e-image-position e-btn e-flat', tooltipText: 'Position', align: 'Left' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('ZoomOut') > -1)) {\n toolbarItems.push({ id: this.element.id + '_zoomOut', prefixIcon: 'e-icons e-zoom-out', cssClass: 'top-icon e-dec-zoom',\n tooltipText: this.l10n.getConstant('ZoomOut'), align: 'Left' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('ZoomIn') > -1)) {\n toolbarItems.push({ id: this.element.id + '_zoomIn', prefixIcon: 'e-icons e-zoom-in', cssClass: 'top-icon e-inc-zoom',\n tooltipText: this.l10n.getConstant('ZoomIn'), align: 'Left' });\n }\n var tempToolbarItems = this.processToolbar('left');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getRightToolbarItem = function (isOkBtn) {\n var toolbarItems = [];\n if (isOkBtn) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Reset') > -1)) {\n toolbarItems.push({ id: this.element.id + '_reset', prefixIcon: 'e-icons e-btn-reset', cssClass: 'top-icon e-img-reset',\n tooltipText: this.l10n.getConstant('Reset'), align: 'Right' });\n }\n if (!isOkBtn) {\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Save') > -1)) {\n toolbarItems.push({ id: this.element.id + '_save', prefixIcon: 'e-icons e-btn-save', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Save'), align: 'Right', template: '<button id=\"' + this.element.id + '_saveBtn\"></button>' });\n }\n }\n var tempToolbarItems = this.processToolbar('right');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getMainToolbarItem = function (isApplyOption) {\n var toolbarItems = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Crop') > -1)) {\n toolbarItems.push({ id: this.element.id + '_crop', tooltipText: this.l10n.getConstant('Crop'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_cropBtn\"></button>'\n });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Annotate') > -1)) {\n toolbarItems.push({ id: this.element.id + '_annotation', tooltipText: this.l10n.getConstant('Annotation'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_annotationBtn\"></button>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Transform') > -1)) {\n toolbarItems.push({ id: this.element.id + '_transform', tooltipText: this.l10n.getConstant('Transform'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_transformBtn\"></button>'\n });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Finetune') > -1)) {\n toolbarItems.push({ id: this.element.id + '_adjustment', prefixIcon: 'e-icons e-adjustment', cssClass: 'top-icon e-adjustment',\n tooltipText: this.l10n.getConstant('Finetune'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Filter') > -1)) {\n toolbarItems.push({ id: this.element.id + '_filter', prefixIcon: 'e-icons e-filters', cssClass: 'top-icon e-filters',\n tooltipText: this.l10n.getConstant('Filter'), align: 'Center' });\n }\n var tempToolbarItems = this.processToolbar('center');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (isApplyOption) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getZoomToolbarItem = function () {\n var toolbarItems = [];\n if (this.factor > 1) {\n toolbarItems = [\n { id: this.element.id + '_pan', prefixIcon: 'e-icons e-pan', cssClass: 'top-icon e-img-pan',\n tooltipText: this.l10n.getConstant('Pan'), align: 'Left' }\n ];\n }\n return toolbarItems;\n };\n ImageEditor.prototype.processToolbar = function (position) {\n var toolbarItems = [];\n if (this.toolbar) {\n for (var i = 0, len = this.toolbar.length; i < len; i++) {\n if (typeof (this.toolbar[i]) === 'object') {\n if (isNullOrUndefined(this.toolbar[i].align)) {\n if (position === 'left') {\n toolbarItems.push(this.toolbar[i]);\n }\n }\n else if (this.toolbar[i].align.toLowerCase() === position) {\n toolbarItems.push(this.toolbar[i]);\n }\n }\n }\n }\n return toolbarItems;\n };\n ImageEditor.prototype.processSubToolbar = function (items) {\n var toolbarItems = [];\n if (items) {\n for (var i = 0, len = items.length; i < len; i++) {\n if (typeof (items[i]) === 'object') {\n items[i].align = 'Center';\n toolbarItems.push(items[i]);\n }\n }\n }\n return toolbarItems;\n };\n ImageEditor.prototype.isToolbar = function () {\n return (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)\n || !isNullOrUndefined(this.toolbarTemplate));\n };\n ImageEditor.prototype.initToolbarItem = function (isApplyOption, isDevice, isOkBtn) {\n var _this = this;\n if (this.isToolbar()) {\n var leftItem = this.getLeftToolbarItem(isOkBtn);\n var rightItem = this.getRightToolbarItem(isOkBtn);\n var mainItem = this.getMainToolbarItem(isApplyOption);\n var zoomItem = this.getZoomToolbarItem();\n if (isDevice) {\n this.defToolbarItems = leftItem.concat(zoomItem, rightItem);\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n if (!isDevice) {\n _this.renderAnnotationBtn();\n _this.renderCropBtn();\n _this.renderTransformBtn();\n }\n _this.renderSaveBtn();\n _this.trigger('toolbarCreated', { toolbarType: 'main' });\n }\n }, '#' + this.element.id + '_toolbar');\n this.createLeftToolbarControls();\n var zoomIn = document.querySelector('#' + this.element.id + '_zoomIn');\n if (!isNullOrUndefined(zoomIn) && this.factor >= 8) {\n zoomIn.classList.add('e-disabled');\n }\n else if (!isNullOrUndefined(zoomIn)) {\n zoomIn.classList.remove('e-disabled');\n }\n var zoomOut = document.querySelector('#' + this.element.id + '_zoomOut');\n if (!isNullOrUndefined(zoomOut) && this.factor === 1) {\n zoomOut.classList.add('e-disabled');\n }\n else if (!isNullOrUndefined(zoomOut)) {\n zoomOut.classList.remove('e-disabled');\n }\n var pan = document.querySelector('#' + this.element.id + '_pan');\n if (!isNullOrUndefined(pan) && this.factor === 1) {\n pan.style.display = 'none';\n }\n else if (!isNullOrUndefined(pan)) {\n pan.style.display = 'block';\n }\n if (this.isToolbar() && (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_4 = getComponent(this.element.id + '_toolbar', 'toolbar');\n toolbar_4.refreshOverflow();\n }\n }\n };\n ImageEditor.prototype.createLeftToolbarControls = function () {\n if (this.defToolbarItems !== undefined && this.defToolbarItems.length > 0 &&\n (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n var uploadDiv = document.getElementById(this.element.id + '_toolbar')\n .querySelector('.e-image-upload');\n if (uploadDiv) {\n var uploadElem = uploadDiv.getElementsByTagName('input')[0];\n var uploadBtnElem = uploadDiv.getElementsByTagName('button')[0];\n uploadBtnElem.className = 'e-tbar-btn e-tbtn-txt e-btn top-icon';\n uploadBtnElem.innerHTML = '';\n uploadBtnElem.appendChild(this.createElement('span', {\n className: 'e-btn-icon e-icons e-upload-icon e-icon-left'\n }));\n uploadElem.onchange = this.fileSelect.bind(this, uploadElem);\n }\n }\n };\n ImageEditor.prototype.renderAnnotationBtn = function () {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var items = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Pen') > -1)) {\n items.push({ text: this.l10n.getConstant('Pen'), id: 'pen', iconCss: 'e-icons e-free-pen' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Line') > -1)) {\n items.push({ text: this.l10n.getConstant('Line'), id: 'line', iconCss: 'e-icons e-line' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Rectangle') > -1)) {\n items.push({ text: this.l10n.getConstant('Rectangle'), id: 'rectangle', iconCss: 'e-icons e-rectangle' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Ellipse') > -1)) {\n items.push({ text: this.l10n.getConstant('Ellipse'), id: 'ellipse', iconCss: 'e-icons e-circle' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Text') > -1)) {\n items.push({ text: this.l10n.getConstant('Text'), id: 'text', iconCss: 'e-icons e-add-text' });\n }\n var drpDownBtn = new DropDownButton({ items: items, iconCss: 'e-icons e-annotation',\n cssClass: 'e-image-popup',\n open: function (args) {\n if (_this.togglePan) {\n _this.cancelPan();\n }\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n },\n select: function (args) {\n var isCropSelection = false;\n var splitWords;\n if (_this.activeObj.shape !== undefined) {\n splitWords = _this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && _this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n _this.currObjType.isCustomCrop = false;\n if (isCropSelection || _this.togglePan) {\n _this.refreshActiveObj();\n _this.upperContext.clearRect(0, 0, _this.upperCanvas.width, _this.upperCanvas.height);\n _this.refreshToolbar('main');\n }\n switch (args.item.id) {\n case 'pen':\n proxy.currentToolbar = 'pen';\n _this.freeHandDraw(true);\n break;\n case 'text':\n proxy.currentToolbar = 'text';\n _this.drawShapeText();\n break;\n default:\n proxy.currentToolbar = 'shapes';\n proxy.drawShape((args.item.id).toLowerCase());\n break;\n }\n _this.updateToolbarItems(_this.calcRatio());\n }\n });\n // Render initialized DropDownButton.\n drpDownBtn.appendTo('#' + this.element.id + '_annotationBtn');\n };\n ImageEditor.prototype.renderCropBtn = function () {\n var _this = this;\n var items = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('CustomSelection') > -1)) {\n items.push({ text: this.l10n.getConstant('Custom'), id: 'custom', iconCss: 'e-icons e-custom' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('CircleSelection') > -1)) {\n items.push({ text: this.l10n.getConstant('Circle'), id: 'circle', iconCss: 'e-icons e-circle' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('SquareSelection') > -1)) {\n items.push({ text: this.l10n.getConstant('Square'), id: 'square', iconCss: 'e-icons e-square' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('RatioSelection') > -1)) {\n items.push({ text: '3:2', id: '3:2', iconCss: 'e-icons e-custom-a' });\n items.push({ text: '4:3', id: '4:3', iconCss: 'e-icons e-custom-b' });\n items.push({ text: '5:4', id: '5:4', iconCss: 'e-icons e-custom-c' });\n items.push({ text: '7:5', id: '7:5', iconCss: 'e-icons e-custom-d' });\n items.push({ text: '16:9', id: '16:9', iconCss: 'e-icons e-custom-e' });\n }\n var drpDownBtn = new DropDownButton({\n open: function (args) {\n if (_this.togglePan) {\n _this.cancelPan();\n }\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n },\n items: items, select: this.cropSelect.bind(this),\n iconCss: 'e-icons e-select', cssClass: 'e-image-popup'\n });\n drpDownBtn.appendTo('#' + this.element.id + '_cropBtn');\n };\n ImageEditor.prototype.renderTransformBtn = function () {\n var _this = this;\n var items = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('RotateLeft') > -1)) {\n items.push({ text: this.l10n.getConstant('RotateLeft'), id: 'rotateleft', iconCss: 'e-icons e-anti-clock-wise' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('RotateRight') > -1)) {\n items.push({ text: this.l10n.getConstant('RotateRight'), id: 'rotateright', iconCss: 'e-icons e-clock-wise' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('FlipHorizontal') > -1)) {\n items.push({ text: this.l10n.getConstant('HorizontalFlip'), id: 'horizontalflip', iconCss: 'e-icons e-horizontal-flip' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('FlipVertical') > -1)) {\n items.push({ text: this.l10n.getConstant('VerticalFlip'), id: 'verticalflip', iconCss: 'e-icons e-vertical-flip' });\n }\n var drpDownBtn = new DropDownButton({\n open: function (args) {\n if (_this.togglePan) {\n _this.cancelPan();\n }\n if (Browser.isDevice) {\n var ht = args.element.parentElement.offsetHeight;\n args.element.parentElement.style.display = 'none';\n args.element.parentElement.style.top = drpDownBtn.element.getBoundingClientRect().top -\n ht + 'px';\n args.element.parentElement.style.display = 'block';\n }\n },\n items: items, select: this.transformSelect.bind(this),\n iconCss: 'e-icons e-transform', cssClass: 'e-image-popup'\n });\n drpDownBtn.appendTo('#' + this.element.id + '_transformBtn');\n };\n ImageEditor.prototype.renderSaveBtn = function () {\n var _this = this;\n var imageEditorObj = getInstance(document.getElementById(this.element.id), ImageEditor_1);\n var saveItems = [\n { text: 'JPEG', id: 'jpeg' },\n { text: 'PNG', id: 'png' },\n { text: 'SVG', id: 'svg' }\n ];\n var ddbElem = document.getElementById(this.element.id + '_saveBtn');\n if (ddbElem) {\n // Initialize the DropDownButton component.\n var saveDrpDownBtn = new DropDownButton({ items: saveItems, cssClass: 'e-caret-hide e-image-popup', iconCss: 'e-icons e-save',\n select: function (args) {\n if (_this.togglePan) {\n _this.cancelPan();\n }\n imageEditorObj.export(args.item.text);\n }\n });\n saveDrpDownBtn.appendTo('#' + this.element.id + '_saveBtn');\n }\n };\n ImageEditor.prototype.cropSelect = function (args) {\n var text = args.item.id;\n this.select(text);\n this.refreshToolbar('main', true, true);\n };\n ImageEditor.prototype.transformSelect = function (args) {\n var text = args.item.id;\n switch (text) {\n case 'rotateleft':\n this.rotate(-90);\n break;\n case 'rotateright':\n this.rotate(90);\n break;\n case 'horizontalflip':\n this.flip('Horizontal');\n break;\n case 'verticalflip':\n this.flip('Vertical');\n break;\n }\n };\n ImageEditor.prototype.getShapesToolbarItem = function (items) {\n var toolbarItems = [];\n if (items.indexOf('fillColor') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', id: this.element.id + '_fillcolor',\n cssClass: 'top-icon e-fill', tooltipText: this.l10n.getConstant('FillColor'), align: 'Center', type: 'Input',\n template: '<button id=\"' + this.element.id + '_fillColorBtn\"></button>' });\n }\n if (items.indexOf('strokeColor') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', id: this.element.id + '_strokecolor',\n cssClass: 'top-icon e-stroke', tooltipText: this.l10n.getConstant('StrokeColor'), align: 'Center', type: 'Input',\n template: '<button id=\"' + this.element.id + '_borderColorBtn\"></button>' });\n }\n if (items.indexOf('strokeWidth') > -1) {\n toolbarItems.push({ id: this.element.id + '_strokeWidth', cssClass: 'top-icon e-size', tooltipText: 'Stroke Width', align: 'Center',\n type: 'Input', template: '<button id=\"' + this.element.id + '_borderWidthBtn\"></button>' });\n }\n var tempToolbarItems = this.processSubToolbar(items);\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (!Browser.isDevice) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.initShapesToolbarItem = function (items) {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var mainItem = this.getShapesToolbarItem(items);\n var zoomItem = this.getZoomToolbarItem();\n if (Browser.isDevice) {\n this.defToolbarItems = mainItem;\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.createShapeColor(items);\n _this.createShapeBtn(items);\n if (!Browser.isDevice) {\n _this.renderSaveBtn();\n }\n _this.trigger('toolbarCreated', { toolbarType: 'shapes' });\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n else {\n _this.createLeftToolbarControls();\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n }\n });\n if (Browser.isDevice) {\n toolbar.appendTo('#' + this.element.id + '_bottomToolbar');\n }\n else {\n toolbar.appendTo('#' + this.element.id + '_toolbar');\n }\n };\n ImageEditor.prototype.createShapeColor = function (items) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (items.indexOf('fillColor') > -1) {\n this.element.querySelector('.e-template.e-fill').appendChild(this.createElement('input', {\n id: this.element.id + '_shape_fill'\n }));\n var fillColor = new ColorPicker({\n modeSwitcher: false, noColor: true, value: '',\n showButtons: false, mode: 'Palette', cssClass: 'e-shape-fill-color',\n change: function (args) {\n _this.pushActItemIntoObj();\n var objColl = extend([], _this.objColl, [], true);\n _this.objColl.pop();\n proxy.activeObj.strokeSettings.fillColor = args.currentValue.hex;\n proxy.strokeSettings.fillColor = proxy.activeObj.strokeSettings.fillColor;\n _this.objColl.push(_this.activeObj);\n proxy.undoRedoColl.push({ operation: 'shapeTransform', value: null,\n currentObj: extend([], proxy.objColl, [], true), previousObj: objColl, factor: proxy.factor,\n sharpen: proxy.adjustmentLevel.sharpen, bw: proxy.adjustmentLevel.bw });\n proxy.redrawShape(proxy.objColl[proxy.objColl.length - 1]);\n if (args.currentValue.rgba === '') {\n fillDDB_1.element.children[0].classList.add('e-nocolor-item');\n }\n else {\n fillDDB_1.element.children[0].classList.remove('e-nocolor-item');\n fillDDB_1.element.children[0].style.backgroundColor = args.currentValue.rgba;\n }\n fillDDB_1.toggle();\n }\n }, '#' + this.element.id + '_shape_fill');\n var fillDDB_1 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fillDDB_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-shape-fill-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_fillColorBtn');\n fillColor.inline = true;\n this.element.querySelector('.e-fill.e-template .e-dropdownbtn-preview').classList.add('e-nocolor-item');\n }\n if (items.indexOf('strokeColor') > -1) {\n this.element.querySelector('.e-template.e-stroke').appendChild(this.createElement('input', {\n id: this.element.id + '_shape_stroke'\n }));\n var strokeColor = new ColorPicker({\n modeSwitcher: false, noColor: false, value: '#fff',\n showButtons: false, mode: 'Palette', cssClass: 'e-shape-stroke-color',\n change: function (args) {\n _this.pushActItemIntoObj();\n var objColl = extend([], _this.objColl, [], true);\n _this.objColl.pop();\n proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n proxy.strokeSettings.strokeColor = proxy.activeObj.strokeSettings.strokeColor;\n if (!proxy.togglePen) {\n _this.objColl.push(_this.activeObj);\n proxy.undoRedoColl.push({ operation: 'shapeTransform', value: null,\n currentObj: extend([], proxy.objColl, [], true), previousObj: objColl, factor: proxy.factor,\n sharpen: proxy.adjustmentLevel.sharpen, bw: proxy.adjustmentLevel.bw });\n proxy.redrawShape(proxy.objColl[proxy.objColl.length - 1]);\n }\n strokeDDB_1.element.children[0].style.backgroundColor = args.currentValue.rgba;\n strokeDDB_1.toggle();\n }\n }, '#' + this.element.id + '_shape_stroke');\n var strokeDDB_1 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = strokeDDB_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-shape-stroke-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_borderColorBtn');\n strokeColor.inline = true;\n this.element.querySelector('.e-stroke.e-template .e-dropdownbtn-preview').style.background = '#fff';\n }\n };\n ImageEditor.prototype.createShapeBtn = function (items) {\n var _this = this;\n var strokeWidthItems = [\n { id: '1', text: this.l10n.getConstant('XSmall') },\n { id: '2', text: this.l10n.getConstant('Small') },\n { id: '3', text: this.l10n.getConstant('Medium') },\n { id: '4', text: this.l10n.getConstant('Large') },\n { id: '5', text: this.l10n.getConstant('XLarge') }\n ];\n var ratio = this.calcRatio();\n if (items.indexOf('strokeWidth') > -1) {\n var strokeWidthBtn = document.getElementById(this.element.id + '_borderWidthBtn');\n var spanElem_1 = document.createElement('span');\n spanElem_1.innerHTML = this.l10n.getConstant('Small');\n spanElem_1.className = 'e-shape-stroke-width';\n strokeWidthBtn.appendChild(spanElem_1);\n // Initialize the DropDownButton component.\n var drpDownBtn_1 = new DropDownButton({ items: strokeWidthItems,\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var activeBtn = spanElem_1.innerHTML;\n if (activeBtn !== '') {\n args.element.querySelector('[aria-label = ' + '\"' + activeBtn + '\"' + ']').classList.add('e-selected-btn');\n }\n },\n select: function (args) {\n _this.pushActItemIntoObj();\n var objColl = extend([], _this.objColl, [], true);\n _this.objColl.pop();\n spanElem_1.textContent = args.item.text;\n _this.activeObj.strokeSettings.strokeWidth = parseInt(args.item.id, 10);\n if (_this.lowerCanvas.width > _this.lowerCanvas.height) {\n _this.activeObj.strokeSettings.strokeWidth *= ((ratio.width + ratio.height) / _this.factor);\n }\n else {\n _this.activeObj.strokeSettings.strokeWidth *= ((ratio.height + ratio.width) / _this.factor);\n }\n _this.strokeSettings.strokeWidth = _this.activeObj.strokeSettings.strokeWidth;\n _this.objColl.push(_this.activeObj);\n _this.undoRedoColl.push({ operation: 'shapeTransform', value: null,\n currentObj: extend([], _this.objColl, [], true), previousObj: objColl, factor: _this.factor,\n sharpen: _this.adjustmentLevel.sharpen, bw: _this.adjustmentLevel.bw });\n _this.redrawShape(_this.objColl[_this.objColl.length - 1]);\n if (Browser.isDevice) {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_5 = getComponent(_this.element.id + '_bottomToolbar', 'toolbar');\n toolbar_5.refreshOverflow();\n }\n }\n else {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_6 = getComponent(_this.element.id + '_toolbar', 'toolbar');\n toolbar_6.refreshOverflow();\n }\n }\n }\n });\n // Render initialized DropDownButton.\n drpDownBtn_1.appendTo('#' + this.element.id + '_borderWidthBtn');\n }\n };\n ImageEditor.prototype.getTextToolbarItem = function (items) {\n var toolbarItems = [];\n if (items.indexOf('fontFamily') > -1) {\n toolbarItems.push({ id: this.element.id + '_fontFamily', cssClass: 'top-icon e-img-font-family',\n tooltipText: this.l10n.getConstant('FontFamily'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_fontFamilyBtn\"></button>' });\n }\n if (items.indexOf('fontStyle') > -1) {\n toolbarItems.push({ id: this.element.id + '_fontStyle', cssClass: 'top-icon e-img-font-style',\n tooltipText: this.l10n.getConstant('FontStyle'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_fontStyleBtn\"></button>' });\n }\n if (items.indexOf('fontSize') > -1) {\n toolbarItems.push({ id: this.element.id + '_fontSize', cssClass: 'top-icon e-img-font-size',\n tooltipText: this.l10n.getConstant('FontSize'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_fontSizeBtn\"></button>' });\n }\n if (items.indexOf('fontColor') > -1) {\n toolbarItems.push({ cssClass: 'top-icon e-text-font-color', id: this.element.id + '_text_strokecolor',\n tooltipText: this.l10n.getConstant('FontColor'), align: 'Center',\n type: 'Input', template: '<button id=\"' + this.element.id + '_fontColorBtn\"></button>' });\n }\n var tempToolbarItems = this.processSubToolbar(items);\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (!Browser.isDevice) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getFontFamilyItems = function () {\n if (Browser.isDevice) {\n return [{ id: 'arial', text: 'ABC' }, { id: 'calibri', text: 'ABC' }, { id: 'georgia', text: 'ABC' },\n { id: 'roboto', text: 'ABC' }, { id: 'tahoma', text: 'ABC' }];\n }\n return [{ id: 'arial', text: 'Arial' }, { id: 'calibri', text: 'Calibri' }, { id: 'georgia', text: 'Georgia' },\n { id: 'roboto', text: 'Roboto' }, { id: 'tahoma', text: 'Tahoma' }];\n };\n ImageEditor.prototype.getFontSizeItems = function () {\n if (Browser.isDevice) {\n return [{ id: 'default', text: this.l10n.getConstant('ABC') }, { id: 'bold', text: this.l10n.getConstant('ABC') },\n { id: 'italic', text: this.l10n.getConstant('ABC') }, { id: 'bolditalic', text: this.l10n.getConstant('ABC') }];\n }\n return [{ id: 'default', text: this.l10n.getConstant('Default') }, { id: 'bold', text: this.l10n.getConstant('Bold') },\n { id: 'italic', text: this.l10n.getConstant('Italic') }, { id: 'bolditalic', text: this.l10n.getConstant('BoldItalic') }];\n };\n ImageEditor.prototype.initTextToolbarItem = function (items) {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var mainItem = this.getTextToolbarItem(items);\n var zoomItem = this.getZoomToolbarItem();\n if (Browser.isDevice) {\n this.defToolbarItems = mainItem;\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.createTextColor(items);\n _this.createTextBtn(items);\n if (!Browser.isDevice) {\n _this.renderSaveBtn();\n }\n _this.trigger('toolbarCreated', { toolbarType: 'text' });\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n else {\n _this.createLeftToolbarControls();\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n }\n });\n if (Browser.isDevice) {\n toolbar.appendTo('#' + this.element.id + '_bottomToolbar');\n }\n else {\n toolbar.appendTo('#' + this.element.id + '_toolbar');\n }\n };\n ImageEditor.prototype.createTextColor = function (items) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (items.indexOf('fontColor') > -1) {\n this.element.querySelector('.e-template.e-text-font-color').appendChild(this.createElement('input', {\n id: this.element.id + '_text_font'\n }));\n var fontColor = new ColorPicker({\n modeSwitcher: false, value: '#fff',\n showButtons: false, mode: 'Palette', cssClass: 'e-text-fontt-color',\n change: function (args) {\n _this.pushActItemIntoObj();\n _this.objColl.pop();\n if (proxy.textBox.style.display === 'none') {\n proxy.strokeSettings.strokeColor = proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n if (!proxy.togglePen) {\n _this.objColl.push(_this.activeObj);\n proxy.redrawShape(proxy.objColl[proxy.objColl.length - 1]);\n }\n }\n else if (proxy.textBox.style.display === 'block') {\n proxy.textBox.style.color = args.currentValue.hex;\n var temp = proxy.activeObj.strokeSettings.strokeColor;\n proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n _this.objColl.push(_this.activeObj);\n _this.objColl.pop();\n proxy.activeObj.strokeSettings.strokeColor = temp;\n }\n else if (!proxy.togglePen) {\n _this.objColl.push(_this.activeObj);\n proxy.redrawShape(proxy.objColl[proxy.objColl.length - 1]);\n }\n strokeDDB_2.element.children[0].style.backgroundColor = args.currentValue.rgba;\n strokeDDB_2.toggle();\n }\n }, '#' + this.element.id + '_text_font');\n var strokeDDB_2 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = strokeDDB_2.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-text-fontt-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_fontColorBtn');\n fontColor.inline = true;\n this.element.querySelector('.e-text-font-color.e-template .e-dropdownbtn-preview').style.background\n = '#fff';\n }\n };\n ImageEditor.prototype.pushActItemIntoObj = function () {\n if (this.textBox.style.display === 'none') {\n this.objColl.push(this.activeObj);\n }\n else {\n var temp = extend({}, this.activeObj, {}, true);\n this.setTextBoxStylesToActObj();\n this.objColl.push(this.activeObj);\n this.activeObj = temp;\n }\n };\n ImageEditor.prototype.createTextBtn = function (items) {\n var _this = this;\n var ratio = this.calcRatio();\n if (items.indexOf('fontFamily') > -1) {\n var fontNameBtn = document.getElementById(this.element.id + '_fontFamilyBtn');\n var spanElem_2 = document.createElement('span');\n if (Browser.isDevice) {\n spanElem_2.innerHTML = 'ABC';\n spanElem_2.setAttribute('style', 'font-family: arial');\n }\n else {\n spanElem_2.innerHTML = 'Arial';\n }\n spanElem_2.className = 'e-text-font-family';\n fontNameBtn.appendChild(spanElem_2);\n var fontFamilyBtn_1 = new DropDownButton({ items: this.getFontFamilyItems(),\n cssClass: 'e-font-family',\n createPopupOnClick: true,\n beforeItemRender: function (args) {\n args.element.setAttribute('style', 'font-family:' + args.element.id);\n },\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fontFamilyBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var fontFamily;\n if (_this.textBox.style.display === 'block') {\n fontFamily = _this.textBox.style.fontFamily;\n }\n else {\n fontFamily = _this.activeObj.textSettings.fontFamily;\n }\n args.element.querySelector('[id *= ' + '\"' + fontFamily.toLowerCase()\n + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n _this.pushActItemIntoObj();\n _this.objColl.pop();\n spanElem_2.textContent = args.item.text;\n if (Browser.isDevice) {\n spanElem_2.setAttribute('style', 'font-family:' + args.item.id);\n }\n if (_this.textBox.style.display === 'block') {\n var temp = _this.activeObj.textSettings.fontFamily;\n _this.activeObj.textSettings.fontFamily = _this.toPascalCase(args.item.id);\n _this.redrawText(ratio);\n _this.objColl.push(_this.activeObj);\n _this.objColl.pop();\n _this.upperContext.clearRect(0, 0, _this.upperCanvas.width, _this.upperCanvas.height);\n var width = _this.activeObj.activePoint.width +\n _this.activeObj.textSettings.fontSize * 0.25;\n _this.textBox.style.width = width / ratio.width + 'px';\n _this.textBox.style.fontFamily = _this.toPascalCase(args.item.id);\n _this.activeObj.textSettings.fontFamily = temp;\n _this.updateFontStyles();\n }\n else {\n _this.textSettings.fontFamily = _this.activeObj.textSettings.fontFamily = _this.toPascalCase(args.item.id);\n _this.redrawText(ratio);\n _this.objColl.push(_this.activeObj);\n _this.redrawShape(_this.objColl[_this.objColl.length - 1]);\n }\n }\n });\n fontFamilyBtn_1.appendTo('#' + this.element.id + '_fontFamilyBtn');\n }\n if (items.indexOf('fontStyle') > -1) {\n var fontStyleBtnElem = document.getElementById(this.element.id + '_fontStyleBtn');\n var span1Elem_1 = document.createElement('span');\n if (Browser.isDevice) {\n span1Elem_1.innerHTML = this.l10n.getConstant('ABC');\n }\n else {\n span1Elem_1.innerHTML = this.l10n.getConstant('Default');\n }\n span1Elem_1.className = 'e-text-font-style';\n fontStyleBtnElem.appendChild(span1Elem_1);\n var fontStyleBtn_1 = new DropDownButton({ items: this.getFontSizeItems(),\n cssClass: 'e-font-style',\n createPopupOnClick: true,\n beforeItemRender: function (args) {\n if (Browser.isDevice) {\n if (args.element.id === 'bold') {\n args.element.setAttribute('style', 'font-weight: bold');\n }\n else if (args.element.id === 'italic') {\n args.element.setAttribute('style', 'font-style: italic');\n }\n else if (args.element.id === 'bolditalic') {\n args.element.setAttribute('style', 'font-style: italic;font-weight: bold');\n }\n }\n },\n open: function (args) {\n var fontStyle = 'default';\n if (_this.textBox.style.display === 'block') {\n if (_this.textBox.style.fontWeight === 'bold') {\n fontStyle = 'bold';\n }\n if (_this.textBox.style.fontStyle === 'italic') {\n fontStyle = fontStyle.replace('default', '');\n fontStyle += 'italic';\n }\n }\n else {\n if (_this.activeObj.textSettings.bold) {\n fontStyle = 'bold';\n }\n if (_this.activeObj.textSettings.italic) {\n fontStyle = fontStyle.replace('default', '');\n fontStyle += 'italic';\n }\n }\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fontStyleBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n args.element.querySelector('[id *= ' + '\"' + fontStyle + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n if (Browser.isDevice) {\n if (args.item.id === 'bold') {\n span1Elem_1.setAttribute('style', 'font-weight: bold');\n }\n else if (args.item.id === 'italic') {\n span1Elem_1.setAttribute('style', 'font-style: italic');\n }\n else if (args.item.id === 'bolditalic') {\n span1Elem_1.setAttribute('style', 'font-style: italic;font-weight: bold');\n }\n _this.applyFontStyle(args.item.id, ratio);\n }\n else {\n span1Elem_1.textContent = args.item.text;\n _this.applyFontStyle(args.item.id, ratio);\n }\n }\n });\n fontStyleBtn_1.appendTo('#' + this.element.id + '_fontStyleBtn');\n }\n if (items.indexOf('fontSize') > -1) {\n var fontSizeBtnElem = document.getElementById(this.element.id + '_fontSizeBtn');\n var fontSizeSpanElem_1 = document.createElement('span');\n var fontSizes = this.getFontSizes();\n fontSizeSpanElem_1.innerHTML = fontSizes[0].text;\n fontSizeSpanElem_1.className = 'e-text-font-size';\n fontSizeBtnElem.appendChild(fontSizeSpanElem_1);\n var fontSizeBtn_1 = new DropDownButton({\n cssClass: 'e-font-size',\n items: fontSizes,\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fontSizeBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var activeBtn = fontSizeSpanElem_1.innerHTML;\n args.element.querySelector('[aria-label *= ' + '\"' + activeBtn + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n _this.pushActItemIntoObj();\n _this.objColl.pop();\n fontSizeSpanElem_1.textContent = args.item.text;\n if (_this.textBox.style.display === 'block') {\n var temp = _this.activeObj.textSettings.fontSize;\n _this.activeObj.textSettings.fontSize = parseInt(_this.fontSizeColl[(parseInt(args.item.text, 10) - 1)].text, 10);\n _this.objColl.push(_this.activeObj);\n _this.objColl.pop();\n var textStyle = '';\n if (_this.textBox.style.fontWeight === 'bold') {\n textStyle = 'bold ';\n }\n if (_this.textBox.style.fontStyle === 'italic') {\n textStyle = 'italic ';\n }\n if (_this.textBox.style.fontWeight === 'bold' && _this.textBox.style.fontStyle === 'italic') {\n textStyle = 'italic bold ';\n }\n _this.upperContext.font = textStyle + _this.activeObj.textSettings.fontSize + 'px' + ' ' + _this.textBox.style.fontFamily;\n var rows = _this.textBox.value.split('\\n');\n var text = _this.getMaxText(true);\n var width = _this.upperContext.measureText(text).width +\n _this.activeObj.textSettings.fontSize * 0.5;\n _this.textBox.style.width = width + 'px';\n _this.textBox.style.height = rows.length * (_this.activeObj.textSettings.fontSize + _this.activeObj.textSettings.fontSize * 0.25) + 'px';\n _this.activeObj.textSettings.fontSize = temp;\n _this.upperContext.font = _this.activeObj.textSettings.fontSize + 'px' + ' ' + _this.activeObj.textSettings.fontFamily;\n _this.textBox.style.fontSize = parseInt(_this.fontSizeColl[(parseInt(args.item.text, 10) - 1)].text, 10) + 'px';\n if (_this.textBox.style.fontFamily === 'georgia') {\n _this.textBox.style.width = parseFloat(_this.textBox.style.width) + parseFloat(_this.textBox.style.fontSize) + 'px';\n }\n }\n else {\n _this.textSettings.fontSize = _this.activeObj.textSettings.fontSize = parseInt(_this.fontSizeColl[(parseInt(args.item.text, 10) - 1)].text, 10);\n _this.upperContext.font = _this.activeObj.textSettings.fontSize + 'px' + ' ' + _this.activeObj.textSettings.fontFamily;\n var rows = _this.activeObj.keyHistory.split('\\n');\n var text = _this.getMaxText();\n var width = _this.upperContext.measureText(text).width +\n _this.activeObj.textSettings.fontSize * 0.5;\n var height = rows.length * (_this.activeObj.textSettings.fontSize +\n _this.activeObj.textSettings.fontSize * 0.25);\n _this.setTextSelection(width, height);\n _this.updateActiveObject(ratio, _this.activeObj.activePoint, _this.activeObj);\n _this.redrawText(ratio);\n _this.objColl.push(_this.activeObj);\n _this.redrawShape(_this.objColl[_this.objColl.length - 1]);\n }\n }\n });\n fontSizeBtn_1.appendTo('#' + this.element.id + '_fontSizeBtn');\n }\n };\n ImageEditor.prototype.getFontSizes = function () {\n var items = [];\n this.fontSizeColl = [];\n var fontSize;\n if (this.degree === 0 || this.degree % 180 === 0) {\n fontSize = this.lowerCanvas.width / 20;\n }\n else {\n fontSize = this.lowerCanvas.height / 20;\n }\n for (var i = 1; i <= 10; i++) {\n this.fontSizeColl.push({ text: (i * (Math.round(fontSize / 2))).toString() });\n items.push({ text: (i.toString()) });\n }\n return items;\n };\n ImageEditor.prototype.getTextAreaWidth = function (item) {\n var tempBold = this.activeObj.textSettings.bold;\n var tempItalic = this.activeObj.textSettings.italic;\n switch (item) {\n case 'default':\n this.activeObj.textSettings.bold = false;\n this.activeObj.textSettings.italic = false;\n break;\n case 'bold':\n this.activeObj.textSettings.bold = true;\n this.activeObj.textSettings.italic = false;\n break;\n case 'italic':\n this.activeObj.textSettings.bold = false;\n this.activeObj.textSettings.italic = true;\n break;\n case 'bolditalic':\n this.activeObj.textSettings.bold = true;\n this.activeObj.textSettings.italic = true;\n break;\n }\n this.updateFontStyles();\n var width = this.upperContext.measureText(this.activeObj.keyHistory).width +\n this.activeObj.textSettings.fontSize * 0.5;\n this.activeObj.textSettings.bold = tempBold;\n this.activeObj.textSettings.italic = tempItalic;\n return width;\n };\n ImageEditor.prototype.updateObjColl = function (item) {\n var tempBold = this.activeObj.textSettings.bold;\n var tempItalic = this.activeObj.textSettings.italic;\n switch (item) {\n case 'default':\n this.activeObj.textSettings.bold = false;\n this.activeObj.textSettings.italic = false;\n break;\n case 'bold':\n this.activeObj.textSettings.bold = true;\n this.activeObj.textSettings.italic = false;\n break;\n case 'italic':\n this.activeObj.textSettings.bold = false;\n this.activeObj.textSettings.italic = true;\n break;\n case 'bolditalic':\n this.activeObj.textSettings.bold = true;\n this.activeObj.textSettings.italic = true;\n break;\n }\n this.objColl.push(this.activeObj);\n this.objColl.pop();\n this.activeObj.textSettings.bold = tempBold;\n this.activeObj.textSettings.italic = tempItalic;\n };\n ImageEditor.prototype.applyFontStyle = function (item, ratio) {\n this.pushActItemIntoObj();\n this.objColl.pop();\n switch (item) {\n case 'default':\n if (this.textBox.style.display === 'block') {\n var width = this.getTextAreaWidth(item) / ratio.width;\n this.textBox.style.width = width + 'px';\n this.textBox.style.fontWeight = 'normal';\n this.textBox.style.fontStyle = 'normal';\n this.updateObjColl(item);\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = false;\n this.textSettings.italic = this.activeObj.textSettings.italic = false;\n this.redrawText(ratio);\n }\n break;\n case 'bold':\n if (this.textBox.style.display === 'block') {\n var width = this.getTextAreaWidth(item) / ratio.width;\n this.textBox.style.width = width + 'px';\n this.textBox.style.fontWeight = 'bold';\n this.textBox.style.fontStyle = 'normal';\n this.updateObjColl(item);\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = true;\n this.textSettings.italic = this.activeObj.textSettings.italic = false;\n this.redrawText(ratio);\n }\n break;\n case 'italic':\n if (this.textBox.style.display === 'block') {\n var width = this.getTextAreaWidth(item) / ratio.width;\n this.textBox.style.width = width + 'px';\n this.textBox.style.fontWeight = 'normal';\n this.textBox.style.fontStyle = 'italic';\n this.updateObjColl(item);\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = false;\n this.textSettings.italic = this.activeObj.textSettings.italic = true;\n this.redrawText(ratio);\n }\n break;\n case 'bolditalic':\n if (this.textBox.style.display === 'block') {\n var width = this.getTextAreaWidth(item) / ratio.width;\n this.textBox.style.width = width + 'px';\n this.textBox.style.fontWeight = 'bold';\n this.textBox.style.fontStyle = 'italic';\n this.updateObjColl(item);\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = true;\n this.textSettings.italic = this.activeObj.textSettings.italic = true;\n this.redrawText(ratio);\n }\n break;\n }\n };\n ImageEditor.prototype.initZoomToolbarItem = function () {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var zoomItem = this.getZoomToolbarItem();\n this.defToolbarItems = leftItem.concat(zoomItem, rightItem);\n new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.renderSaveBtn();\n _this.trigger('toolbarCreated', { toolbarType: 'zoom' });\n }\n }, '#' + this.element.id + '_toolbar');\n this.createLeftToolbarControls();\n if (this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_7 = getComponent(this.element.id + '_toolbar', 'toolbar');\n toolbar_7.refreshOverflow();\n }\n };\n ImageEditor.prototype.contextualToolbarClicked = function (args) {\n var selEle = this.element.querySelector('.e-contextual-toolbar-wrapper .e-toolbar-item.e-selected');\n if (selEle) {\n selEle.classList.remove('e-selected');\n }\n document.getElementById(args.item.id + 'Canvas').parentElement.parentElement.classList.add('e-selected');\n this.currObjType.isFiltered = true;\n var type = args.item.id.replace(this.element.id, '').split('_')[1];\n var imageFiltering = { filter: this.toPascalCase(type) };\n this.trigger('imageFiltering', imageFiltering);\n this.setFilter(type.toLowerCase());\n this.currentFilter = args.item.id;\n };\n ImageEditor.prototype.defToolbarClicked = function (args) {\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n var zoomIn;\n var type = args.item.id.replace(this.element.id + '_', '').toLowerCase();\n var imageEditorObj = getInstance(document.getElementById(this.element.id), ImageEditor_1);\n var isCropSelection = false;\n var panBtn;\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if (!this.disabled) {\n switch (type) {\n case 'zoomin':\n this.currObjType.isFiltered = false;\n if (this.togglePen) {\n this.currObjType.isZoomed = true;\n this.freeHandDraw(false);\n }\n imageEditorObj.zoom(.1);\n break;\n case 'zoomout':\n this.currObjType.isFiltered = false;\n if (this.togglePen) {\n this.currObjType.isZoomed = true;\n this.freeHandDraw(false);\n }\n imageEditorObj.zoom(-.1);\n break;\n case 'pan':\n this.currObjType.isCustomCrop = this.currObjType.isFiltered = false;\n if (isCropSelection) {\n this.currObjType.isCustomCrop = false;\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.refreshToolbar('main');\n }\n if (this.togglePan) {\n this.cancelPan();\n this.disablePan = true;\n }\n else {\n panBtn = this.element.querySelector('.e-img-pan .e-btn');\n panBtn.classList.add('e-selected-btn');\n imageEditorObj.pan(true);\n this.disablePan = false;\n }\n zoomIn = document.querySelector('#' + this.element.id + '_zoomIn');\n if (!isNullOrUndefined(zoomIn) && this.factor >= 8) {\n zoomIn.classList.add('e-disabled');\n }\n else if (!isNullOrUndefined(zoomIn)) {\n zoomIn.classList.remove('e-disabled');\n }\n break;\n case 'cancel':\n if (this.textBox.style.display === 'block') {\n this.textBox.style.display = 'none';\n this.textBox.value = '';\n this.textBox.style.transform = '';\n this.activeObj.strokeSettings = this.tempStrokeSettings;\n this.activeObj.textSettings = this.tempTextSettings;\n }\n else if (!isNullOrUndefined(document.querySelector('#' + this.element.id + '_sliderWrapper')) ||\n this.currObjType.isFiltered) {\n this.lowerContext.filter = this.adjustmentValue = this.initialAdjustmentValue = this.tempAdjustmentValue;\n this.currentFilter = this.tempFilter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n this.currObjType.isFiltered = false;\n if (this.adjustmentLevel.sharpen || this.adjustmentLevel.bw) {\n if (this.adjustmentLevel.sharpen) {\n this.setSharpness(false);\n }\n else if (this.adjustmentLevel.bw) {\n this.setBlackAndWhiteFilter(false);\n }\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = tempFilter;\n }\n this.adjustmentLevel = extend({}, this.tempAdjustmentLevel, {}, true);\n if (this.currentFilter === this.element.id + '_sharpen' || this.currentFilter === this.element.id + '_blackandwhite'\n || this.tempSharpenFilter || this.tempBWFilter) {\n if (this.currentFilter === this.element.id + '_sharpen' || this.tempSharpenFilter) {\n this.setSharpness(true);\n }\n else if (this.currentFilter === this.element.id + '_blackandwhite' || this.tempBWFilter) {\n this.setBlackAndWhiteFilter(true);\n }\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = tempFilter;\n this.tempSharpenFilter = this.tempBWFilter = false;\n }\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n }\n this.cancelItems();\n break;\n case 'ok':\n this.okBtn();\n break;\n case 'reset':\n imageEditorObj.reset();\n break;\n case 'adjustment':\n this.upperCanvas.style.display = 'block';\n this.refreshToolbar('adjustment');\n this.lowerContext.filter = this.initialAdjustmentValue;\n this.tempAdjustmentValue = this.lowerContext.filter;\n this.tempAdjustmentLevel = extend({}, this.adjustmentLevel, {}, true);\n this.tempFilter = this.currentFilter;\n this.tempSharpenFilter = this.adjustmentLevel.sharpen;\n this.tempBWFilter = this.adjustmentLevel.bw;\n break;\n case 'brightness':\n case 'contrast':\n case 'hue':\n case 'saturation':\n case 'opacity':\n case 'blur':\n case 'exposure':\n this.unselectBtn();\n this.currObjType.isFiltered = true;\n this.refreshToolbar('color', null, null, null, type);\n document.getElementById(this.element.id + '_' + type).classList.add('e-selected-btn');\n break;\n case 'filter':\n this.upperCanvas.style.display = 'block';\n this.refreshToolbar('filter');\n this.lowerContext.filter = this.initialAdjustmentValue;\n this.tempAdjustmentValue = this.lowerContext.filter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.tempAdjustmentLevel = extend({}, this.adjustmentLevel, {}, true);\n this.tempFilter = this.currentFilter;\n this.tempSharpenFilter = this.adjustmentLevel.sharpen;\n this.tempBWFilter = this.adjustmentLevel.bw;\n break;\n case 'default':\n case 'chrome':\n case 'cold':\n case 'warm':\n case 'grayscale':\n case 'blackandwhite':\n case 'sepia':\n case 'invert':\n case 'sharpen':\n this.currObjType.isFiltered = true;\n this.setFilter(type);\n break;\n }\n }\n this.trigger('toolbarItemClicked', args);\n };\n ImageEditor.prototype.okBtn = function () {\n var isCropSelection = false;\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n var selElem = this.element.querySelector('.e-contextual-toolbar-wrapper .e-toolbar-item.e-selected');\n if (selElem) {\n this.currentFilter = selElem.children[0].children[0].id.replace('Canvas', '');\n }\n if (isCropSelection) {\n this.crop();\n }\n else if (this.togglePen) {\n this.freeHandDraw(false);\n }\n else if (this.textBox.style.display === 'block') {\n this.redrawActObj();\n }\n else if (!isNullOrUndefined(document.querySelector('#' + this.element.id + '_sliderWrapper')) ||\n this.currObjType.isFiltered) {\n this.initialAdjustmentValue = this.canvasFilter = this.lowerContext.filter;\n this.currObjType.isFiltered = false;\n }\n else {\n this.applyActObj();\n }\n this.callMainToolbar(false);\n };\n ImageEditor.prototype.unselectBtn = function () {\n if (document.querySelector('#' + this.element.id + '_brightness').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_brightness').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_contrast').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_contrast').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_hue').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_hue').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_saturation').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_saturation').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_opacity').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_opacity').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_blur').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_blur').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_exposure').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_exposure').classList.remove('e-selected-btn');\n }\n };\n ImageEditor.prototype.refreshSlider = function () {\n var sliderWrapper = document.querySelector('#' + this.element.id + '_sliderWrapper');\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var slider = document.querySelector('.e-slider');\n var hdrWrapper = document.querySelector('#' + this.element.id + '_headWrapper');\n if (hdrWrapper) {\n hdrWrapper.style.display = 'none';\n }\n if (!isNullOrUndefined(sliderWrapper) && !isNullOrUndefined(slider)) {\n slider.ej2_instances[0].destroy();\n sliderWrapper.remove();\n }\n };\n ImageEditor.prototype.updateAdjustment = function (type, value, isPreview) {\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var splitWords = this.lowerContext.filter.split(' ');\n var values = [];\n var opacityValue;\n var brightnessValue;\n if (splitWords[4] !== undefined) {\n opacityValue = parseFloat(splitWords[4].split('(')[1]);\n }\n if (splitWords[0] !== undefined) {\n brightnessValue = parseFloat(splitWords[0].split('(')[1]);\n }\n var brightness = this.getFilterValue(this.adjustmentLevel.brightness);\n var saturation = this.getFilterValue(this.adjustmentLevel.saturation);\n if (type !== 'brightness' && type !== 'contrast' && type !== 'hue' && type !== 'saturation' && type !== 'exposure'\n && type !== 'opacity' && type !== 'blur') {\n if (isNullOrUndefined(isPreview) && (this.adjustmentLevel.sharpen || this.adjustmentLevel.bw)) {\n if (this.adjustmentLevel.sharpen) {\n this.setSharpness(false);\n }\n else if (this.adjustmentLevel.bw) {\n this.setBlackAndWhiteFilter(false);\n }\n var temp_1 = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp_1;\n }\n }\n if (brightness !== 1) {\n splitWords[4] = 'opacity(' + (opacityValue - 0.3) + ')';\n }\n var saturate;\n var bright;\n var contrast;\n var saturatePercentage;\n var saturatePercent;\n var tempFilter;\n var temp;\n switch (type) {\n case 'brightness':\n if (splitWords[3].split) {\n if (parseFloat(splitWords[3].split('(')[1]) !== 100) {\n value += 0.1;\n }\n }\n splitWords[0] = 'brightness(' + value + ')';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'contrast':\n splitWords[1] = 'contrast(' + value + '%)';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'hue':\n splitWords[2] = 'hue-rotate(' + value + 'deg)';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'saturation':\n splitWords[3] = 'saturate(' + value + '%)';\n if (saturation !== 1) {\n splitWords[0] = 'brightness(' + (brightnessValue + 0.1) + ')';\n }\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'opacity':\n if (parseFloat(splitWords[0].split('(')[1]) !== 1) {\n value -= 0.2;\n }\n splitWords[4] = 'opacity(' + value + ')';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'blur':\n splitWords[5] = 'blur(' + value + 'px)';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'exposure':\n if (brightness !== 1) {\n splitWords[4] = 'opacity(' + (opacityValue - 0.3) + ')';\n }\n if (value > 1) {\n value -= 1;\n value += brightness;\n }\n else if (value < 1) {\n value = 1 - value;\n value = brightness - value;\n }\n splitWords[0] = 'brightness(' + value + ')';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'chrome':\n saturate = this.getSaturationFilterValue(this.adjustmentLevel.saturation);\n saturate *= 100;\n value = saturate + (saturate * 0.4);\n splitWords[3] = 'saturate(' + value + '%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'cold':\n // Adjusting Brightness\n bright = this.getFilterValue(this.adjustmentLevel.brightness);\n bright *= 100;\n value = bright * 0.9;\n splitWords[0] = 'brightness(' + value + '%)';\n // Adjusting Contrast\n contrast = this.getFilterValue(this.adjustmentLevel.contrast);\n contrast *= 100;\n value = contrast + (contrast * 0.5);\n splitWords[1] = 'contrast(' + value + '%)';\n // Adjusting Saturation\n saturatePercentage = this.getSaturationFilterValue(this.adjustmentLevel.saturation);\n saturatePercentage *= 100;\n value = saturatePercentage;\n splitWords[3] = 'saturate(' + value + '%)';\n values = this.adjustmentValue.split(' ');\n splitWords[2] = values[2];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'warm':\n saturatePercent = this.getSaturationFilterValue(this.adjustmentLevel.saturation);\n saturatePercent *= 100;\n value = saturatePercent + (saturatePercent * 0.4);\n splitWords[3] = 'saturate(' + value + '%)';\n splitWords[6] = 'sepia(25%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'grayscale':\n splitWords[7] = 'grayscale(100%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'blackandwhite':\n values = this.adjustmentValue.split(' ');\n if (isPreview) {\n tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n this.setBlackAndWhiteFilter(true);\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n }\n else {\n tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n this.setBlackAndWhiteFilter(true);\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n this.lowerContext.filter = this.initialAdjustmentValue = splitWords.join(' ');\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = tempFilter;\n }\n break;\n case 'sepia':\n splitWords[6] = 'sepia(100%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'invert':\n splitWords[8] = 'invert(100%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n break;\n case 'sharpen':\n values = this.adjustmentValue.split(' ');\n if (isPreview) {\n temp = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n }\n else {\n temp = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n this.setSharpness(true);\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n this.lowerContext.filter = this.initialAdjustmentValue = splitWords.join(' ');\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n temp = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp;\n }\n break;\n }\n if (type !== 'sharpen' && type !== 'blackandwhite') {\n if (isNullOrUndefined(isPreview)) {\n if (type === 'default') {\n splitWords = this.getDefaultFilter(splitWords);\n }\n this.lowerContext.filter = splitWords.join(' ');\n }\n splitWords = this.setTempFilterValue(brightness, isPreview, splitWords, type);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n if (brightness !== 1) {\n splitWords[4] = 'opacity(' + opacityValue + ')';\n }\n else if (saturation !== 1) {\n splitWords[0] = 'brightness(' + brightnessValue + ')';\n }\n if (type === 'exposure' && brightness !== 1) {\n splitWords[0] = 'brightness(' + brightnessValue + ')';\n }\n splitWords = this.setTempFilterValue(brightness, isPreview, splitWords, type);\n if (isNullOrUndefined(isPreview)) {\n this.lowerContext.filter = this.initialAdjustmentValue = splitWords.join(' ');\n }\n var tempFilter_1 = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = tempFilter_1;\n if (brightness === 1) {\n this.isBrightnessAdjusted = false;\n }\n else {\n this.isBrightnessAdjusted = true;\n }\n }\n var filter = splitWords.join(' ');\n return filter;\n };\n ImageEditor.prototype.updateBrightnessFilter = function () {\n var splitWords = this.lowerContext.filter.split(' ');\n if (this.isBrightnessAdjusted && splitWords.length > 0 && !isNullOrUndefined(splitWords[4])) {\n var opacityValue = parseFloat(splitWords[4].split('(')[1]);\n splitWords[4] = 'opacity(' + (opacityValue - 0.3) + ')';\n this.lowerContext.filter = splitWords.join(' ');\n }\n };\n ImageEditor.prototype.autoEnablePan = function () {\n if (this.factor > 0.95 && this.factor < 1.05) {\n this.dragCanvas = this.togglePan = false;\n this.callMainToolbar(false, true);\n this.pan(false);\n this.disablePan = false;\n }\n else if (!this.disablePan) {\n this.pan(true);\n }\n else if (this.disablePan) {\n this.pan(false);\n }\n };\n ImageEditor.prototype.setTempFilterValue = function (brightness, isPreview, splitWords, type) {\n if (isPreview && brightness !== 1) {\n var tempSplitWords = this.lowerContext.filter.split(' ');\n tempSplitWords[4] = splitWords[4];\n this.lowerContext.filter = tempSplitWords.join(' ');\n }\n else if (isPreview && type === 'default') {\n splitWords = this.getDefaultFilter(splitWords);\n }\n return splitWords;\n };\n ImageEditor.prototype.getDefaultFilter = function (splitWords) {\n var values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n return splitWords;\n };\n ImageEditor.prototype.setAdjustment = function (type) {\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var splitWords = this.lowerContext.filter.split(' ');\n var value;\n var valueArr;\n switch (type) {\n case 'brightness':\n valueArr = splitWords[0].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n this.adjustmentLevel.brightness = this.setFilterValue(value);\n break;\n case 'contrast':\n valueArr = splitWords[1].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n value /= 100;\n this.adjustmentLevel.contrast = this.setFilterValue(value);\n break;\n case 'hue':\n valueArr = splitWords[2].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n value /= 3;\n this.adjustmentLevel.hue = value;\n break;\n case 'saturation':\n valueArr = splitWords[3].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n value /= 100;\n this.adjustmentLevel.saturation = this.setSaturationFilterValue(value);\n break;\n case 'opacity':\n valueArr = splitWords[4].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n if (value === 0.45) {\n value = 40;\n }\n else if (value === 0.40) {\n value = 30;\n }\n else if (value === 0.35) {\n value = 20;\n }\n else if (value === 0.30) {\n value = 10;\n }\n else if (value === 0.25) {\n value = 0;\n }\n else {\n value *= 100;\n }\n this.adjustmentLevel.opacity = value;\n break;\n case 'blur':\n valueArr = splitWords[5].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n value *= 20;\n this.adjustmentLevel.blur = value;\n break;\n case 'exposure':\n valueArr = splitWords[0].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n this.adjustmentLevel.exposure = this.setFilterValue(value);\n break;\n }\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp;\n };\n ImageEditor.prototype.renderSlider = function (type) {\n var _this = this;\n var canvasWrapper = document.querySelector('#' + this.element.id + '_contextualToolbarArea');\n var hdrWrapper = document.querySelector('#' + this.element.id + '_headWrapper');\n var labelWrapper = document.querySelector('#' + this.element.id + '_labelWrapper');\n if (!hdrWrapper && !isNullOrUndefined(canvasWrapper)) {\n hdrWrapper = canvasWrapper.appendChild(this.createElement('div', {\n id: this.element.id + '_headWrapper',\n styles: 'position: relative'\n }));\n labelWrapper = hdrWrapper.appendChild(this.createElement('label', {\n id: this.element.id + '_labelWrapper',\n styles: Browser.isDevice ? 'position: absolute; top: 25%; left: calc(50% - 150px); font-size: 15px; text-transform: capitalize; font-weight: 400;'\n : 'position: absolute; top: 25%; left: calc(50% - 226px); font-size: 15px; text-transform: capitalize; font-weight: 400;'\n }));\n }\n else {\n hdrWrapper.style.display = 'block';\n }\n labelWrapper.textContent = this.l10n.getConstant(this.toPascalCase(type));\n var sliderWrapper = hdrWrapper.appendChild(this.createElement('div', {\n id: this.element.id + '_sliderWrapper',\n styles: 'position: absolute'\n }));\n var value = this.getCurrAdjustmentValue(type);\n var min;\n var max;\n var slider;\n if (type === 'brightness' || type === 'contrast' || type === 'saturation' || type === 'exposure') {\n if (this.finetuneSettings) {\n if (type === 'brightness' && this.finetuneSettings.brightness) {\n min = this.finetuneSettings.brightness.min;\n max = this.finetuneSettings.brightness.max;\n }\n else if (type === 'contrast' && this.finetuneSettings.contrast) {\n min = this.finetuneSettings.contrast.min;\n max = this.finetuneSettings.contrast.max;\n }\n else if (type === 'saturation' && this.finetuneSettings.saturation) {\n min = this.finetuneSettings.saturation.min;\n max = this.finetuneSettings.saturation.max;\n }\n else if (type === 'exposure' && this.finetuneSettings.exposure) {\n min = this.finetuneSettings.exposure.min;\n max = this.finetuneSettings.exposure.max;\n }\n else {\n min = -100;\n max = 100;\n }\n }\n else {\n min = -100;\n max = 100;\n }\n slider = new Slider({\n value: value,\n tooltip: { isVisible: true, placement: 'Before', showOn: 'Always' },\n type: 'MinRange',\n min: min,\n max: max,\n step: 10,\n width: Browser.isDevice ? '200px' : '300px',\n cssClass: 'e-slider',\n change: function (args) {\n _this.setCurrAdjustmentValue(type, args.value);\n }\n });\n }\n else if (type === 'hue' || type === 'blur' || type === 'opacity') {\n if (this.finetuneSettings) {\n if (type === 'hue' && this.finetuneSettings.hue) {\n min = this.finetuneSettings.hue.min;\n max = this.finetuneSettings.hue.max;\n }\n else if (type === 'blur' && this.finetuneSettings.blur) {\n min = this.finetuneSettings.blur.min;\n max = this.finetuneSettings.blur.max;\n }\n else if (type === 'opacity' && this.finetuneSettings.opacity) {\n min = this.finetuneSettings.opacity.min;\n max = this.finetuneSettings.opacity.max;\n }\n else {\n min = 0;\n max = 100;\n }\n }\n else {\n min = 0;\n max = 100;\n }\n slider = new Slider({\n value: value,\n tooltip: { isVisible: true, placement: 'Before', showOn: 'Always' },\n type: 'MinRange',\n min: min,\n max: max,\n step: 10,\n width: Browser.isDevice ? '200px' : '300px',\n cssClass: 'e-slider',\n change: function (args) {\n _this.setCurrAdjustmentValue(type, args.value);\n }\n });\n }\n slider.appendTo('#' + this.element.id + '_sliderWrapper');\n sliderWrapper.style.left = (parseFloat(canvasWrapper.style.width) - parseFloat(slider.width)) / 2 + 'px';\n };\n ImageEditor.prototype.getCurrAdjustmentValue = function (type) {\n var value;\n switch (type) {\n case 'brightness':\n value = this.adjustmentLevel.brightness;\n break;\n case 'contrast':\n value = this.adjustmentLevel.contrast;\n break;\n case 'hue':\n value = this.adjustmentLevel.hue;\n break;\n case 'saturation':\n value = this.adjustmentLevel.saturation;\n break;\n case 'opacity':\n value = this.adjustmentLevel.opacity;\n break;\n case 'blur':\n value = this.adjustmentLevel.blur;\n break;\n case 'exposure':\n value = this.adjustmentLevel.exposure;\n break;\n }\n return value;\n };\n ImageEditor.prototype.setCurrAdjustmentValue = function (type, value) {\n var fineTuneValueChanging = { finetune: this.toPascalCase(type), value: value };\n this.trigger('fineTuneValueChanging', fineTuneValueChanging);\n switch (type) {\n case 'brightness':\n this.setBrightness(value);\n break;\n case 'contrast':\n this.setContrast(value);\n break;\n case 'hue':\n this.setHue(value);\n break;\n case 'saturation':\n this.setSaturation(value);\n break;\n case 'opacity':\n this.setOpacity(value);\n break;\n case 'blur':\n this.setBlur(value);\n break;\n case 'exposure':\n this.setExposure(value);\n break;\n }\n };\n ImageEditor.prototype.cancelPan = function () {\n this.applyActObj();\n var panBtn = this.element.querySelector('.e-img-pan .e-btn');\n panBtn.classList.remove('e-selected-btn');\n this.pan(false);\n };\n ImageEditor.prototype.callMainToolbar = function (isApplyBtn, isZooming) {\n this.refreshToolbar('main', isApplyBtn, false, isZooming);\n };\n ImageEditor.prototype.cancelItems = function () {\n var ratio = this.calcRatio();\n var isCropSelection = false;\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if (this.togglePen) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.togglePen = false;\n this.upperCanvas.style.cursor = 'default';\n this.penDrawColl = [];\n this.imageEditorPointsColl = [];\n }\n else if (this.activeObj.shape === 'text') {\n this.activeObj.strokeSettings = this.tempStrokeSettings;\n this.activeObj.textSettings = this.tempTextSettings;\n if (this.activeObj.keyHistory === 'Enter Text' && this.activeObj.activePoint.startX === this.textStartPoints.x\n && this.activeObj.activePoint.startY === this.textStartPoints.y) {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.drawShapeText();\n }\n else {\n this.redrawText(ratio);\n this.redrawShape(this.activeObj);\n if (!isCropSelection && this.activeObj.topLeftCircle !== undefined) {\n this.applyActObj();\n }\n this.clearSelection();\n }\n this.tempTextSettings = { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n }\n else if (this.activeObj.shape === 'rectangle' || this.activeObj.shape === 'ellipse' || this.activeObj.shape === 'line') {\n this.activeObj.strokeSettings = this.tempStrokeSettings;\n this.redrawShape(this.activeObj);\n this.applyActObj();\n }\n else {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.isCustomCrop = false;\n this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n this.callMainToolbar();\n };\n ImageEditor.prototype.gradient = function (a, b) {\n return (b.y - a.y) / (b.x - a.x);\n };\n ImageEditor.prototype.applyPenDraw = function () {\n if (this.togglePen && this.factor === 1 && !this.currObjType.isZoomed) {\n this.apply();\n this.penDrawColl = [];\n this.imageEditorPointsColl = [];\n }\n else {\n var tempCanvas = this.lowerCanvas.appendChild(this.createElement('canvas', {\n id: this.element.id + '_tempCanvas', attrs: { name: 'canvasImage' }\n }));\n var tempContext = tempCanvas.getContext('2d');\n tempCanvas.width = this.lowerCanvas.width;\n tempCanvas.height = this.lowerCanvas.height;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n tempContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n for (var i = 0; i < this.penDrawColl.length; i++) {\n tempContext.lineWidth = 2 * this.penDrawColl[i].strokeWidth;\n tempContext.strokeStyle = this.penDrawColl[i].strokeColor;\n var nexP = void 0;\n var preP = void 0;\n var f = 0.3;\n var t = 1;\n tempContext.beginPath();\n tempContext.moveTo(this.penDrawColl[i].points[0].x, this.penDrawColl[i].points[0].y);\n var m = 0;\n var dx1 = 0;\n var dx2 = 0;\n var dy1 = 0;\n var dy2 = 0;\n preP = this.penDrawColl[i].points[0];\n for (var j = 1; j < this.penDrawColl[i].points.length; j++) {\n var curP = this.penDrawColl[i].points[j];\n nexP = this.penDrawColl[i].points[j + 1];\n if (nexP) {\n m = this.gradient(preP, nexP);\n dx2 = (nexP.x - curP.x) * -f;\n dy2 = dx2 * m * t;\n }\n else {\n dx2 = 0;\n dy2 = 0;\n }\n tempContext.bezierCurveTo(preP.x - dx1, preP.y - dy1, curP.x + dx2, curP.y + dy2, curP.x, curP.y);\n dx1 = dx2;\n dy1 = dy2;\n preP = curP;\n if (this.penDrawColl[i].points.length > 2) {\n this.penDrawColl[i].points.shift();\n }\n tempContext.stroke();\n }\n }\n this.penDrawColl = [];\n this.imageEditorPointsColl = [];\n this.togglePen = false;\n var imgData = tempContext.getImageData(0, 0, tempCanvas.width, tempCanvas.height);\n var tempObj = void 0;\n for (var index = 0; index < this.imgDataColl.length; index++) {\n if (this.imgDataColl[index].operation !== 'freehanddraw') {\n tempObj = this.imgDataColl[index];\n break;\n }\n }\n this.imgDataColl.splice(0, 1, { operation: 'freehanddraw', value: imgData });\n this.imgDataColl.splice(1, 1, tempObj);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.inMemoryCanvas.width = imgData.width;\n this.inMemoryCanvas.height = imgData.height;\n this.inMemoryContext.putImageData(imgData, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n this.currObjType.isZoomed = false;\n }\n };\n ImageEditor.prototype.redrawImgWithObj = function () {\n this.lowerContext.filter = this.canvasFilter;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp;\n };\n ImageEditor.prototype.refreshToolbar = function (type, isApplyBtn, isCropping, isZooming, cType) {\n var args = { toolbarType: type };\n if (type !== 'filter' && type !== 'color') {\n if (document.getElementById(this.element.id + '_toolbar') && this.defToolbarItems.length > 0) {\n getComponent(document.getElementById(this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n if (document.getElementById(this.element.id + '_bottomToolbar') && this.defToolbarItems.length > 0) {\n if (document.getElementById(this.element.id + '_bottomToolbar').className.indexOf('e-control') > -1) {\n getComponent(document.getElementById(this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n }\n }\n }\n this.refreshSlider();\n switch (type) {\n case 'main':\n if (Browser.isDevice) {\n if (isCropping) {\n this.initToolbarItem(false, true, true);\n }\n else {\n this.initToolbarItem(false, true);\n }\n }\n else if (!Browser.isDevice || isZooming) {\n this.initToolbarItem(isApplyBtn, Browser.isDevice);\n }\n if (Browser.isDevice) {\n this.initBottomToolbar();\n }\n break;\n case 'shapes':\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n if (this.activeObj.shape === 'line') {\n args.toolbarItems = ['strokeColor', 'strokeWidth'];\n }\n else {\n args.toolbarItems = ['fillColor', 'strokeColor', 'strokeWidth'];\n }\n this.trigger('toolbarUpdating', args);\n this.initShapesToolbarItem(args.toolbarItems);\n break;\n case 'text':\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n args.toolbarItems = ['fontFamily', 'fontStyle', 'fontSize', 'fontColor'];\n this.trigger('toolbarUpdating', args);\n this.initTextToolbarItem(args.toolbarItems);\n break;\n case 'pen':\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n args.toolbarItems = ['strokeColor', 'strokeWidth'];\n this.trigger('toolbarUpdating', args);\n this.initPenToolbarItem(args.toolbarItems);\n break;\n case 'pan':\n this.initZoomToolbarItem();\n break;\n case 'adjustment':\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n this.initAdjustmentToolbarItem();\n break;\n case 'filter':\n this.updateContextualToolbar(type);\n break;\n case 'color':\n this.updateContextualToolbar(type, cType);\n break;\n }\n };\n ImageEditor.prototype.getAdjustmentToolbarItem = function () {\n var toolbarItems = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Brightness') > -1)) {\n toolbarItems.push({ id: this.element.id + '_brightness', prefixIcon: 'e-icons e-brightness', cssClass: 'top-icon e-brightness',\n tooltipText: this.l10n.getConstant('Brightness'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Contrast') > -1)) {\n toolbarItems.push({ id: this.element.id + '_contrast', prefixIcon: 'e-icons e-contrast', cssClass: 'top-icon e-contrast',\n tooltipText: this.l10n.getConstant('Contrast'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Hue') > -1)) {\n toolbarItems.push({ id: this.element.id + '_hue', prefixIcon: 'e-icons e-fade', cssClass: 'top-icon e-fade',\n tooltipText: this.l10n.getConstant('Hue'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Saturation') > -1)) {\n toolbarItems.push({ id: this.element.id + '_saturation', prefixIcon: 'e-icons e-saturation', cssClass: 'top-icon e-saturation',\n tooltipText: this.l10n.getConstant('Saturation'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Exposure') > -1)) {\n toolbarItems.push({ id: this.element.id + '_exposure', prefixIcon: 'e-icons e-grain', cssClass: 'top-icon e-grain',\n tooltipText: this.l10n.getConstant('Exposure'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Opacity') > -1)) {\n toolbarItems.push({ id: this.element.id + '_opacity', prefixIcon: 'e-icons e-opacity', cssClass: 'top-icon e-opacity',\n tooltipText: this.l10n.getConstant('Opacity'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Blur') > -1)) {\n toolbarItems.push({ id: this.element.id + '_blur', prefixIcon: 'e-icons e-tint', cssClass: 'top-icon e-tint',\n tooltipText: this.l10n.getConstant('Blur'), align: 'Center' });\n }\n var tempToolbarItems = this.processToolbar('center');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (!Browser.isDevice) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getFilterToolbarItem = function () {\n var toolbarItems = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Default') > -1)) {\n toolbarItems.push({ id: this.element.id + '_default', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Default'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_defaultCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Default') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Chrome') > -1)) {\n toolbarItems.push({ id: this.element.id + '_chrome', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Chrome'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_chromeCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Chrome') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Cold') > -1)) {\n toolbarItems.push({ id: this.element.id + '_cold', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Cold'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_coldCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Cold') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Warm') > -1)) {\n toolbarItems.push({ id: this.element.id + '_warm', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Warm'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_warmCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Warm') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Grayscale') > -1)) {\n toolbarItems.push({ id: this.element.id + '_grayscale', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Grayscale'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_grayscaleCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Grayscale') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Sepia') > -1)) {\n toolbarItems.push({ id: this.element.id + '_sepia', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Sepia'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_sepiaCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Sepia') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Invert') > -1)) {\n toolbarItems.push({ id: this.element.id + '_invert', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Invert'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_invertCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Invert') + '</span></div></div>' });\n }\n var tempToolbarItems = this.processToolbar('center');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getPenToolbarItem = function (items) {\n var toolbarItems = [];\n if (items.indexOf('strokeColor') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', id: this.element.id + '_pen_strokecolor',\n cssClass: 'top-icon e-pen-stroke-color',\n tooltipText: this.l10n.getConstant('StrokeColor'), align: 'Center', type: 'Input',\n template: '<button id=\"' + this.element.id + '_penColorBtn\"></button>' });\n }\n if (items.indexOf('strokeWidth') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', cssClass: 'top-icon e-size',\n tooltipText: this.l10n.getConstant('StrokeWidth'),\n align: 'Center', type: 'Input', template: '<button id=\"' + this.element.id + '_penStrokeWidth\"></button>' });\n }\n var tempToolbarItems = this.processSubToolbar(items);\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (!Browser.isDevice) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.initPenToolbarItem = function (items) {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var mainItem = this.getPenToolbarItem(items);\n var zoomItem = this.getZoomToolbarItem();\n if (Browser.isDevice) {\n this.defToolbarItems = mainItem;\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.createPenColor(items);\n _this.createPenBtn(items);\n if (!Browser.isDevice) {\n _this.renderSaveBtn();\n }\n _this.trigger('toolbarCreated', { toolbarType: 'pen' });\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n else {\n _this.createLeftToolbarControls();\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n }\n });\n if (Browser.isDevice) {\n toolbar.appendTo('#' + this.element.id + '_bottomToolbar');\n }\n else {\n toolbar.appendTo('#' + this.element.id + '_toolbar');\n }\n };\n ImageEditor.prototype.createPenColor = function (items) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (items.indexOf('strokeColor') > -1) {\n this.element.querySelector('.e-template.e-pen-stroke-color').appendChild(this.createElement('input', {\n id: this.element.id + '_pen_stroke'\n }));\n var penColor = new ColorPicker({\n modeSwitcher: false, value: '#fff',\n showButtons: false, mode: 'Palette', cssClass: 'e-pen-color',\n change: function (args) {\n proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n if (!proxy.togglePen) {\n proxy.redrawShape(_this.activeObj);\n }\n strokeDDB_3.element.children[0].style.backgroundColor = args.currentValue.rgba;\n strokeDDB_3.toggle();\n }\n }, '#' + this.element.id + '_pen_stroke');\n var strokeDDB_3 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = strokeDDB_3.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-pen-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_penColorBtn');\n penColor.inline = true;\n this.element.querySelector('.e-pen-stroke-color.e-template .e-dropdownbtn-preview').style.background\n = '#fff';\n }\n };\n ImageEditor.prototype.createPenBtn = function (items) {\n var _this = this;\n var ratio = this.calcRatio();\n var strokeWidthItems = [\n { id: '1', text: this.l10n.getConstant('XSmall') },\n { id: '2', text: this.l10n.getConstant('Small') },\n { id: '3', text: this.l10n.getConstant('Medium') },\n { id: '4', text: this.l10n.getConstant('Large') },\n { id: '5', text: this.l10n.getConstant('XLarge') }\n ];\n if (items.indexOf('strokeWidth') > -1) {\n var strokeWidthBtn = document.getElementById(this.element.id + '_penStrokeWidth');\n var spanElem_3 = document.createElement('span');\n if (isNullOrUndefined(this.penStrokeWidth)) {\n spanElem_3.innerHTML = this.l10n.getConstant('Small');\n }\n else {\n spanElem_3.innerHTML = this.getPenStroke(this.penStrokeWidth, this.calcRatio());\n }\n spanElem_3.className = 'e-pen-stroke-width';\n strokeWidthBtn.appendChild(spanElem_3);\n var drpDownBtn_2 = new DropDownButton({ items: strokeWidthItems,\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn_2.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var activeBtn = spanElem_3.innerHTML;\n args.element.querySelector('[aria-label = ' + '\"' + activeBtn + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n spanElem_3.textContent = args.item.text;\n _this.setPenStroke(args.item.id, ratio);\n if (Browser.isDevice) {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_8 = getComponent(_this.element.id + '_bottomToolbar', 'toolbar');\n toolbar_8.refreshOverflow();\n }\n }\n else {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_9 = getComponent(_this.element.id + '_toolbar', 'toolbar');\n toolbar_9.refreshOverflow();\n }\n }\n }\n });\n // Render initialized DropDownButton.\n drpDownBtn_2.appendTo('#' + this.element.id + '_penStrokeWidth');\n }\n };\n ImageEditor.prototype.setPenStroke = function (args, ratio) {\n switch (parseInt(args, 10)) {\n case 1:\n this.penStrokeWidth = (ratio.width + ratio.height) * 0.4;\n break;\n case 2:\n this.penStrokeWidth = (ratio.width + ratio.height) * 0.8;\n break;\n case 3:\n this.penStrokeWidth = (ratio.width + ratio.height) * 1.2;\n break;\n case 4:\n this.penStrokeWidth = (ratio.width + ratio.height) * 1.6;\n break;\n case 5:\n this.penStrokeWidth = (ratio.width + ratio.height) * 2;\n break;\n }\n };\n ImageEditor.prototype.getPenStroke = function (value, ratio) {\n var textContent = '';\n if (Math.round(value / 0.4) === Math.round(ratio.width + ratio.height)) {\n textContent = this.l10n.getConstant('XSmall');\n }\n else if (Math.round(value / 0.8) === Math.round(ratio.width + ratio.height)) {\n textContent = this.l10n.getConstant('Small');\n }\n else if (Math.round(value / 1.2) === Math.round(ratio.width + ratio.height)) {\n textContent = this.l10n.getConstant('Medium');\n }\n else if (Math.round(value / 1.6) === Math.round(ratio.width + ratio.height)) {\n textContent = this.l10n.getConstant('Large');\n }\n else if (Math.round(value / 2) === Math.round(ratio.width + ratio.height)) {\n textContent = this.l10n.getConstant('XLarge');\n }\n return textContent;\n };\n ImageEditor.prototype.initAdjustmentToolbarItem = function () {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var mainItem = this.getAdjustmentToolbarItem();\n var zoomItem = this.getZoomToolbarItem();\n if (Browser.isDevice) {\n this.defToolbarItems = mainItem;\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n if (!Browser.isDevice) {\n _this.renderSaveBtn();\n }\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n else {\n _this.createLeftToolbarControls();\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n }\n });\n if (Browser.isDevice) {\n toolbar.appendTo('#' + this.element.id + '_bottomToolbar');\n }\n else {\n toolbar.appendTo('#' + this.element.id + '_toolbar');\n }\n };\n ImageEditor.prototype.initFilterToolbarItem = function () {\n var _this = this;\n var mainItem = this.getFilterToolbarItem();\n if (!isNullOrUndefined(document.querySelector('#' + this.element.id + '_contextualToolbar')) &&\n document.querySelector('#' + this.element.id + '_contextualToolbar').classList.contains('e-control')) {\n getComponent(document.getElementById(this.element.id + '_contextualToolbar'), 'toolbar').destroy();\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: mainItem,\n clicked: this.contextualToolbarClicked.bind(this),\n created: function () {\n _this.createCanvasFilter();\n if (_this.currentFilter === '') {\n _this.currentFilter = _this.element.id + '_default';\n }\n var hdrWrapper = document.querySelector('#' + _this.element.id + '_headWrapper');\n if (hdrWrapper) {\n hdrWrapper.style.display = 'none';\n }\n document.getElementById(_this.currentFilter + 'Canvas').parentElement.parentElement.classList.add('e-selected');\n toolbar.refreshOverflow();\n }\n });\n toolbar.appendTo('#' + this.element.id + '_contextualToolbar');\n };\n ImageEditor.prototype.createCanvasFilter = function () {\n if (this.adjustmentLevel.sharpen || this.adjustmentLevel.bw) {\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = this.tempImageData.width;\n this.inMemoryCanvas.height = this.tempImageData.height;\n this.inMemoryContext.putImageData(this.tempImageData, 0, 0);\n }\n var noFilter = document.querySelector('#' + this.element.id + '_defaultCanvas');\n noFilter.style.width = '100px';\n noFilter.style.height = '100px';\n noFilter.style.filter = this.updateAdjustment('default', null, true);\n var ctx = noFilter.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var chrome = document.querySelector('#' + this.element.id + '_chromeCanvas');\n chrome.style.width = '100px';\n chrome.style.height = '100px';\n chrome.style.filter = this.updateAdjustment('chrome', null, true);\n ctx = chrome.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var cold = document.querySelector('#' + this.element.id + '_coldCanvas');\n cold.style.width = '100px';\n cold.style.height = '100px';\n cold.style.filter = this.updateAdjustment('cold', null, true);\n ctx = cold.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var warm = document.querySelector('#' + this.element.id + '_warmCanvas');\n warm.style.width = '100px';\n warm.style.height = '100px';\n warm.style.filter = this.updateAdjustment('warm', null, true);\n ctx = warm.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var temp = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp;\n var grayscale = document.querySelector('#' + this.element.id + '_grayscaleCanvas');\n grayscale.style.width = '100px';\n grayscale.style.height = '100px';\n grayscale.style.filter = this.updateAdjustment('grayscale', null, true);\n ctx = grayscale.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = tempFilter;\n var sepia = document.querySelector('#' + this.element.id + '_sepiaCanvas');\n sepia.style.width = '100px';\n sepia.style.height = '100px';\n sepia.style.filter = this.updateAdjustment('sepia', null, true);\n ctx = sepia.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var invert = document.querySelector('#' + this.element.id + '_invertCanvas');\n invert.style.width = '100px';\n invert.style.height = '100px';\n invert.style.filter = this.updateAdjustment('invert', null, true);\n ctx = invert.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n };\n ImageEditor.prototype.updateCanvas = function () {\n var fileOpened = { fileName: this.imageFileName, fileType: this.imageFileType };\n this.lastX = this.baseImg.width / 2;\n this.lastY = this.baseImg.height / 2;\n var wrapperWidth;\n var canvasWrapper = document.querySelector('#' + this.element.id + '_canvasWrapper');\n if (this.isScreenOriented) {\n wrapperWidth = parseFloat(canvasWrapper.style.width);\n }\n else {\n wrapperWidth = this.element.clientWidth;\n }\n var maxDimension = this.calcMaxDimension(this.baseImg.width, this.baseImg.height);\n var toolbarHeight = 0;\n if (!isNullOrUndefined(this.toolbarTemplate) && !isNullOrUndefined(document.querySelector('.e-toolbar'))) {\n toolbarHeight = document.querySelector('.e-toolbar').clientHeight;\n maxDimension.width -= toolbarHeight;\n maxDimension.height -= toolbarHeight;\n }\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerCanvas.width = this.upperCanvas.width = this.baseImg.width;\n this.lowerCanvas.height = this.upperCanvas.height = this.baseImg.height;\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.style.left = this.upperCanvas.style.left = (wrapperWidth - maxDimension.width) / 2 + 1 + 'px';\n if (!isNullOrUndefined(this.toolbarTemplate)) {\n this.lowerCanvas.style.left = parseFloat(this.lowerCanvas.style.left) + (toolbarHeight / 2) + 'px';\n }\n if (canvasWrapper) {\n this.lowerCanvas.style.top = this.upperCanvas.style.top = (parseFloat(canvasWrapper.style.height) - maxDimension.height - 1) / 2 + 'px';\n }\n this.lowerContext.filter = tempFilter;\n if (this.lowerContext.filter === 'none' || this.lowerContext.filter === 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)' ||\n this.isInitialLoading) {\n this.lowerContext.drawImage(this.baseImg, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.updateInMemoryCanvas('updateCanvas');\n if (this.canvasFilter !== 'none') {\n this.lowerContext.filter = this.canvasFilter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n }\n if (this.isInitialLoading) {\n this.initializeFilter();\n this.isInitialLoading = false;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.baseImg, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n }\n }\n else {\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n }\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n this.lowerContext.filter = tempFilter;\n if (this.disabled) {\n this.element.setAttribute('class', 'e-disabled');\n }\n this.trigger('fileOpened', fileOpened);\n };\n ImageEditor.prototype.imageOnLoad = function (src) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n proxy.baseImg.src = proxy.baseImgSrc.id = src;\n this.baseImg.onload = function () {\n _this.lowerContext.drawImage(_this.baseImg, 0, 0, _this.lowerCanvas.width, _this.lowerCanvas.height);\n if (_this.togglePen) {\n // eslint-disable-next-line @typescript-eslint/tslint/config\n _this.lowerCanvas.toBlob(function (blob) {\n showSpinner(proxy.element);\n proxy.baseImg.src = URL.createObjectURL(blob);\n proxy.togglePen = false;\n }, 'image/png');\n _this.inMemoryContext.clearRect(0, 0, _this.inMemoryCanvas.width, _this.inMemoryCanvas.height);\n var imgData = _this.lowerContext.getImageData(0, 0, _this.lowerCanvas.width, _this.lowerCanvas.height);\n _this.inMemoryContext.putImageData(imgData, 0, 0);\n var temp = _this.imgDataColl[0];\n _this.imgDataColl.splice(0, 1, { operation: 'freehanddraw', value: imgData });\n _this.imgDataColl.splice(1, 1, temp);\n }\n else {\n hideSpinner(_this.element);\n _this.element.style.opacity = '1';\n _this.updateCanvas();\n }\n if (Browser.isDevice) {\n if (_this.isToolbar() && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) &&\n (!isNullOrUndefined(getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar')) &&\n (!isNullOrUndefined(getComponent(document.getElementById(_this.element.id + '_bottomToolbar'), 'toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, Browser.isDevice);\n _this.createBottomToolbar();\n }\n else {\n if (_this.isToolbar() && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) &&\n (!isNullOrUndefined(getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, false);\n }\n };\n };\n ImageEditor.prototype.refreshActiveObj = function () {\n this.activeObj = {};\n this.activeObj.activePoint = { startX: 0, startY: 0, endX: 0, endY: 0, width: 0, height: 0 };\n this.activeObj.flipObjColl = [];\n this.activeObj.strokeSettings = this.strokeSettings;\n this.activeObj.textSettings = this.textSettings;\n };\n ImageEditor.prototype.redrawText = function (ratio) {\n if (this.activeObj.textSettings.bold) {\n this.upperContext.font = 'bold ' + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n if (this.activeObj.textSettings.italic) {\n this.upperContext.font = 'bold ' + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n this.upperContext.font = 'italic bold ' + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n if (!this.activeObj.textSettings.bold && !this.activeObj.textSettings.italic) {\n this.upperContext.font = this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n var rows = this.activeObj.keyHistory.split('\\n');\n var text = this.textBox.style.display === 'block' ? this.getMaxText(true) : this.getMaxText();\n var width = this.upperContext.measureText(text).width + this.activeObj.textSettings.fontSize * 0.5;\n var height = rows.length * (this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25);\n this.setTextSelection(width, height);\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n this.redrawShape(this.activeObj);\n };\n ImageEditor.prototype.setTextSelection = function (width, height) {\n var degree = this.degree;\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n for (var i = 0; i < this.activeObj.flipObjColl.length; i++) {\n if (degree === 0) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.endX - width,\n startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (height ? height : 0) };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + (width ? width : 0)),\n endY: this.activeObj.activePoint.endY };\n }\n else {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + (width ? width : 0)),\n endY: this.activeObj.activePoint.startY + (height ? height : 0) };\n }\n }\n else if (degree === 90) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - width,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.endY };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n else {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n }\n else if (degree === 180) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + width),\n endY: this.activeObj.activePoint.endY };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + height;\n this.activeObj.activePoint = { endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY,\n startX: (this.activeObj.activePoint.endX - (width ? width : 0)),\n startY: this.activeObj.activePoint.startY };\n }\n else {\n this.activeObj.activePoint = { endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY,\n startX: (this.activeObj.activePoint.endX - (width ? width : 0)),\n startY: this.activeObj.activePoint.endY - (height ? height : 0) };\n }\n }\n else if (degree === 270) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + height),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - (width ? width : 0),\n endX: this.activeObj.activePoint.endX,\n endY: this.activeObj.activePoint.endY };\n }\n else {\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - (width ? width : 0),\n endX: this.activeObj.activePoint.endX,\n endY: this.activeObj.activePoint.endY };\n }\n }\n }\n if (this.activeObj.flipObjColl.length === 0) {\n if (degree === 0) {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + (width ? width : 0)),\n endY: this.activeObj.activePoint.startY + (height ? height : 0) };\n }\n else if (degree === 90) {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n else if (degree === 180) {\n this.activeObj.activePoint = { endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY,\n startX: (this.activeObj.activePoint.endX - (width ? width : 0)),\n startY: this.activeObj.activePoint.endY - (height ? height : 0) };\n }\n else if (degree === 270) {\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - (width ? width : 0),\n endX: this.activeObj.activePoint.endX,\n endY: this.activeObj.activePoint.endY };\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n if (this.degree === 360 || this.degree === -360) {\n this.degree = 0;\n }\n };\n ImageEditor.prototype.fileSelect = function (inputElement, args) {\n this.imageFileName = inputElement.value.split('\\\\')[inputElement.value.split('\\\\').length - 1];\n this.imageFileName = this.imageFileName.split('.')[0];\n var fileType = inputElement.value.split('.');\n if (fileType[fileType.length - 1].toLowerCase() === 'jpg' || fileType[fileType.length - 1].toLowerCase() === 'jpeg') {\n this.imageFileType = 'Jpeg';\n }\n else if (fileType[fileType.length - 1].toLowerCase() === 'png') {\n this.imageFileType = 'Png';\n }\n else if (fileType[fileType.length - 1].toLowerCase() === 'svg') {\n this.imageFileType = 'Svg';\n }\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var filesData = args.target.files[0];\n if (this.imgDataColl.length > 0) {\n this.imgDataColl = [];\n this.reset();\n }\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var URL = window.URL;\n var url = URL.createObjectURL(filesData);\n this.imageOnLoad(url.toString());\n inputElement.value = '';\n };\n ImageEditor.prototype.findTextPoint = function (e) {\n if (this.activeObj.shape === 'text') {\n this.textBox.style.transformOrigin = '0 0';\n var degree = void 0;\n var scale = '';\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (this.activeObj.flipObjColl.length > 0) {\n // need to add scale value according to length.\n for (var i = 0; i < this.activeObj.flipObjColl.length; i++) {\n if (degree !== 0 && degree % 90 === 0 && degree !== 180) {\n scale += this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal' ? 'scale(1, -1)' :\n 'scale(-1, 1)';\n }\n else {\n scale += this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal' ? 'scale(-1, 1)' :\n 'scale(1, -1)';\n }\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.textBox.style.transform = 'rotate(' + degree + 'deg)' + scale;\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.textBox.style.transform = 'rotate(' + degree + 'deg)' + scale;\n }\n }\n }\n else {\n this.textBox.style.transform = 'rotate(' + degree + 'deg)';\n }\n this.findTextTarget(e);\n }\n };\n ImageEditor.prototype.getStrokeWidth = function (text) {\n var strokeWidth;\n switch (text) {\n case '1':\n strokeWidth = this.l10n.getConstant('XSmall');\n break;\n case '2':\n strokeWidth = this.l10n.getConstant('Small');\n break;\n case '3':\n strokeWidth = this.l10n.getConstant('Medium');\n break;\n case '4':\n strokeWidth = this.l10n.getConstant('Large');\n break;\n case '5':\n strokeWidth = this.l10n.getConstant('XLarge');\n break;\n }\n return strokeWidth;\n };\n ImageEditor.prototype.updateToolbarItems = function (ratio) {\n var selFillElem = this.element.querySelector('.e-fill.e-template .e-dropdownbtn-preview');\n var selStrokeElem = this.element.querySelector('.e-stroke.e-template .e-dropdownbtn-preview');\n var selTextStrokeElem = this.element.querySelector('.e-text-font-color.e-template .e-dropdownbtn-preview');\n var selPenStrokeElem = this.element.querySelector('.e-pen-stroke-color.e-template .e-dropdownbtn-preview');\n var strokeWidthElem = this.element.querySelector('.e-shape-stroke-width');\n var fontFamilyElem = this.element.querySelector('.e-text-font-family');\n var fontSizeElem = this.element.querySelector('.e-text-font-size');\n var fontStyleElem = this.element.querySelector('.e-text-font-style');\n if (selFillElem) {\n if (this.activeObj.strokeSettings.fillColor === '') {\n selFillElem.classList.add('e-nocolor-item');\n }\n else {\n selFillElem.classList.remove('e-nocolor-item');\n selFillElem.style.background = this.activeObj.strokeSettings.fillColor;\n }\n getComponent(this.element.id + '_shape_fill', 'colorpicker').value\n = this.activeObj.strokeSettings.fillColor + 'ff';\n }\n if (selStrokeElem) {\n selStrokeElem.style.background = this.activeObj.strokeSettings.strokeColor;\n getComponent(this.element.id + '_shape_stroke', 'colorpicker').value\n = this.activeObj.strokeSettings.strokeColor + 'ff';\n }\n if (selTextStrokeElem) {\n selTextStrokeElem.style.background = this.activeObj.strokeSettings.strokeColor;\n getComponent(this.element.id + '_text_font', 'colorpicker').value\n = this.activeObj.strokeSettings.strokeColor + 'ff';\n }\n if (selPenStrokeElem) {\n selPenStrokeElem.style.background = this.activeObj.strokeSettings.strokeColor;\n getComponent(this.element.id + '_pen_stroke', 'colorpicker').value\n = this.activeObj.strokeSettings.strokeColor + 'ff';\n }\n if (fontFamilyElem) {\n if (Browser.isDevice) {\n fontFamilyElem.setAttribute('style', 'font-family:' + this.activeObj.textSettings.fontFamily.toLowerCase());\n }\n else {\n fontFamilyElem.textContent = this.activeObj.textSettings.fontFamily;\n }\n }\n if (fontSizeElem) {\n for (var i = 0; i < this.fontSizeColl.length; i++) {\n if (parseInt(this.fontSizeColl[i].text, 10) >= this.activeObj.textSettings.fontSize) {\n fontSizeElem.textContent = (i + 1).toString();\n break;\n }\n }\n }\n if (fontStyleElem) {\n if (Browser.isDevice) {\n if (!this.activeObj.textSettings.bold && !this.activeObj.textSettings.italic) {\n fontStyleElem.setAttribute('style', '');\n }\n else if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n fontStyleElem.setAttribute('style', 'font-style: italic;font-weight: bold');\n }\n else if (this.activeObj.textSettings.bold) {\n fontStyleElem.setAttribute('style', 'font-weight: bold');\n }\n else {\n fontStyleElem.setAttribute('style', 'font-style: italic');\n }\n }\n else {\n if (!this.activeObj.textSettings.bold && !this.activeObj.textSettings.italic) {\n fontStyleElem.textContent = 'Default';\n }\n else if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n fontStyleElem.textContent = 'Bold Italic';\n }\n else if (this.activeObj.textSettings.bold) {\n fontStyleElem.textContent = 'Bold';\n }\n else {\n fontStyleElem.textContent = 'Italic';\n }\n }\n }\n if (strokeWidthElem) {\n var strokeWidth = Math.round((this.activeObj.strokeSettings.strokeWidth /\n (ratio.width + ratio.height)) * this.factor).toString();\n strokeWidthElem.textContent = this.getStrokeWidth(strokeWidth);\n }\n };\n ImageEditor.prototype.setTimer = function (e) {\n if (!this.isTimer && this.timer > 10) {\n this.findTextPoint(e);\n if (Browser.isDevice) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n }\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.targetTouches = function (touches) {\n var p1 = { x: touches[0].pageX, y: touches[0].pageY };\n var p2 = { x: touches[1].pageX, y: touches[1].pageY };\n var points = [p1, p2];\n return points;\n };\n ImageEditor.prototype.calculateScale = function (startTouches, endTouches) {\n var startDistance = this.getDistance(startTouches[0], startTouches[1]);\n var endDistance = this.getDistance(endTouches[0], endTouches[1]);\n return endDistance / startDistance;\n };\n ImageEditor.prototype.getDistance = function (a, b) {\n var x = a.x - b.x;\n var y = a.y - b.y;\n return Math.sqrt(x * x + y * y);\n };\n ImageEditor.prototype.touchStartHandler = function (e) {\n e.preventDefault();\n if (e.touches.length === 2) {\n this.isFirstMove = true;\n }\n else {\n this.timer = setTimeout(this.setTimer.bind(this), 1000, e);\n this.mouseDownEventHandler(e);\n }\n EventHandler.add(this.lowerCanvas, 'touchend', this.mouseUpEventHandler, this);\n EventHandler.add(this.lowerCanvas, 'touchmove', this.mouseMoveEventHandler, this); // Unbind mousedown to prevent double triggers from touch devices\n EventHandler.add(this.upperCanvas, 'touchend', this.mouseUpEventHandler, this);\n EventHandler.add(this.upperCanvas, 'touchmove', this.mouseMoveEventHandler, this); // Unbind mousedown to prevent double triggers from touch devices\n };\n ImageEditor.prototype.mouseDownEventHandler = function (e) {\n if (e.type === 'touchstart' && e.currentTarget === this.lowerCanvas && this.imgDataColl.length === 0) {\n return;\n }\n var ratio = this.calcRatio();\n if (this.dragCanvas) {\n this.canvasMouseDownHandler(e);\n }\n else {\n e.preventDefault();\n var x = void 0;\n var y = void 0;\n if (e.type === 'mousedown') {\n x = e.clientX;\n y = e.clientY;\n }\n else {\n this.touchEndPoint.x = x = e.touches[0].clientX;\n this.touchEndPoint.y = y = e.touches[0].clientY;\n }\n this.redrawActObj(x, y);\n if ((!isNullOrUndefined(this.element.querySelector('#' + this.element.id + '_contextualToolbar')) &&\n !this.element.querySelector('#' + this.element.id + '_contextualToolbar').parentElement.classList.contains('e-hide')) ||\n (!isNullOrUndefined(this.element.querySelector('#' + this.element.id + '_headWrapper'))\n && !this.element.querySelector('#' + this.element.id + '_headWrapper').parentElement.classList.contains('e-hide'))) {\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n this.okBtn();\n this.refreshToolbar('main');\n }\n if (this.upperCanvas.style.cursor === 'crosshair' || (Browser.isDevice && this.togglePen)) {\n if (this.togglePen) {\n this.canvasRatio = this.calcRatio();\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n if (isNullOrUndefined(this.penStrokeWidth)) {\n this.penStrokeWidth = (ratio.width + ratio.height) * 0.8;\n }\n if (this.activeObj.strokeSettings.strokeWidth === (ratio.width + ratio.height) * 0.4 &&\n this.strokeSettings.strokeWidth === (ratio.width + ratio.height) * 0.4) {\n this.activeObj.strokeSettings.strokeWidth = this.strokeSettings.strokeWidth =\n 2 * ((ratio.width + ratio.height) / this.factor);\n }\n this.minStrokeWidth = this.maxStrokeWidth = this.penStrokeWidth;\n this.velocity = 0.7;\n this.upperContext.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n this.upperContext.fillStyle = this.activeObj.strokeSettings.strokeColor;\n this.mouseDownHandler(e, this.upperCanvas, this.pannStart, this.factor); // To call signature base\n }\n else {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n this.currObjType.isActiveObj = false;\n this.dragElement = '';\n this.dragPoint.startX = this.dragPoint.startY = this.dragPoint.endX = this.dragPoint.endY = 0;\n }\n if ((this.upperCanvas.style.cursor !== 'crosshair' && e.type.toLowerCase() === 'touchstart') ||\n (this.currObjType.isActiveObj && this.upperCanvas.style.cursor !== 'default' && !this.togglePen)) {\n this.findTarget(x, y, e.type);\n }\n else if ((this.currObjType.shape === '' || this.currObjType.isCustomCrop) && !this.togglePen && this.upperCanvas.style.cursor !== 'default') {\n this.setActivePoint(x, y);\n }\n if (!isNullOrUndefined(this.activeObj)) {\n var isCropSelection = false;\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && (this.currObjType.isCustomCrop || this.togglePen)) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if ((this.activeObj.shape === 'rectangle') || (this.activeObj.shape === 'ellipse')\n || (this.activeObj.shape === 'line')) {\n this.refreshToolbar('shapes');\n }\n else if (this.activeObj.shape === 'text') {\n this.refreshToolbar('text');\n }\n else if (!isCropSelection) {\n this.callMainToolbar();\n }\n this.updateToolbarItems(ratio);\n }\n }\n };\n ImageEditor.prototype.mouseMoveEventHandler = function (e) {\n e.preventDefault();\n if (e.type === 'touchmove' && e.touches.length === 2) {\n if (this.isFirstMove) {\n this.startTouches = this.targetTouches(e.touches);\n this.tempTouches = [];\n this.tempTouches.push({ x: e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft),\n y: e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop) });\n this.tempTouches.push({ x: e.touches[1].clientX || (e.touches[1].pageX - this.lowerCanvas.offsetLeft),\n y: e.touches[1].clientY || (e.touches[1].pageY - this.lowerCanvas.offsetTop) });\n }\n else {\n var ratio = this.calcRatio();\n var firstFingerX = e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft);\n var firstFingerY = e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop);\n var secondFingerX = e.touches[1].clientX || (e.touches[1].pageX - this.lowerCanvas.offsetLeft);\n var secondFingerY = e.touches[1].clientY || (e.touches[1].pageY - this.lowerCanvas.offsetTop);\n this.lastX = firstFingerX > secondFingerX ? secondFingerX + (firstFingerX - secondFingerX) : firstFingerX +\n (secondFingerX - firstFingerX);\n this.lastY = firstFingerY > secondFingerY ? secondFingerY + (firstFingerY - secondFingerY) : firstFingerY +\n (secondFingerY - firstFingerY);\n this.lastX *= ratio.width;\n this.lastY *= ratio.height;\n var scale = this.calculateScale(this.startTouches, this.targetTouches(e.touches));\n // Need to set lastX and lastY points\n if (this.tempTouches[0].x !== firstFingerX && this.tempTouches[0].y !== firstFingerY &&\n this.tempTouches[1].x !== secondFingerX && this.tempTouches[1].y !== secondFingerY) {\n if (scale > 1) {\n this.zoom(1.1);\n }\n else {\n this.zoom(-1.1);\n }\n this.tempTouches = [];\n this.tempTouches.push({ x: e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft),\n y: e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop) });\n this.tempTouches.push({ x: e.touches[1].clientX || (e.touches[1].pageX - this.lowerCanvas.offsetLeft),\n y: e.touches[1].clientY || (e.touches[1].pageY - this.lowerCanvas.offsetTop) });\n }\n }\n this.isFirstMove = false;\n return;\n }\n if (this.textBox.style.display === 'none') {\n this.isTimer = true;\n }\n var x;\n var y;\n if (e.type === 'mousemove') {\n x = e.clientX;\n y = e.clientY;\n }\n else {\n this.touchEndPoint.x = x = e.touches[0].clientX;\n this.touchEndPoint.y = y = e.touches[0].clientY;\n }\n this.canvasMouseMoveHandler(e);\n if (this.currObjType.isActiveObj && (this.activeObj.activePoint !== undefined || this.objColl.length > 0) &&\n !this.dragCanvas || this.activeObj.activePoint !== undefined) {\n if (this.dragElement === '') {\n this.setCursor(x, y);\n if (this.activeObj.activePoint.width === 0 && this.upperCanvas.style.cursor !== 'default' &&\n this.upperCanvas.style.cursor !== 'move' && this.upperCanvas.style.cursor !== 'crosshair'\n && this.upperCanvas.style.cursor !== 'grab') {\n this.upperCanvas.style.cursor = 'move';\n }\n this.findTarget(x, y, e.type);\n }\n }\n if (this.currObjType.isDragging) {\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var initialDraw = this.updateActivePoint(x, y);\n this.drawObject('duplicate', null, initialDraw);\n }\n };\n ImageEditor.prototype.mouseUpEventHandler = function (e) {\n e.preventDefault();\n var x;\n var y;\n if (e.type === 'mouseup') {\n x = e.clientX;\n y = e.clientY;\n }\n else {\n x = this.touchEndPoint.x;\n y = this.touchEndPoint.y;\n }\n if (e.type === 'touchend') {\n this.startTouches = this.tempTouches = [];\n this.isFirstMove = false;\n if (this.textBox.style.display === 'none') {\n this.isTimer = false;\n this.timer = 0;\n }\n }\n var bbox = this.upperCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n y = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n }\n if (e.currentTarget === this.upperCanvas) {\n this.currObjType.shape = this.currObjType.shape.toLowerCase();\n if (!this.togglePen && !this.dragCanvas) {\n if (!isNullOrUndefined(this.tempObjColl) && this.activeObj.activePoint.width !== 0) {\n this.objColl.push(this.activeObj);\n this.redrawShape(this.objColl[this.objColl.length - 1]);\n this.tempObjColl = undefined;\n }\n this.applyCurrActObj(x, y);\n }\n else if (this.dragCanvas) {\n this.setPanPoints();\n }\n }\n if (this.togglePen && e.currentTarget === this.upperCanvas) {\n this.penDrawColl.push({ strokeWidth: this.penStrokeWidth, strokeColor: this.activeObj.strokeSettings.strokeColor, points: this.imageEditorPointsColl });\n this.imageEditorPointsColl = [];\n }\n else {\n this.currObjType.shape = '';\n }\n this.dragElement = '';\n this.currObjType.isInitialLine = this.currObjType.isDragging = false;\n this.oldPoint.x = undefined;\n this.oldPoint.y = undefined;\n };\n ImageEditor.prototype.keyDownEventHandler = function (e) {\n var _this = this;\n var shapeChangingArgs = {};\n var beforeSave = { fileName: 'ImageEditor', fileType: 'Png', cancel: false };\n switch (e.key) {\n case (e.ctrlKey && 's'):\n this.trigger('beforeSave', beforeSave, function (observableSaveArgs) {\n if (!beforeSave.cancel) {\n _this.export(observableSaveArgs.fileType, observableSaveArgs.fileName);\n }\n });\n e.preventDefault();\n e.stopImmediatePropagation();\n break;\n case 'Delete':\n if (this.textBox.style.display === 'none') {\n shapeChangingArgs = { action: 'delete', previousShapeSettings: this.activeObj, currentShapeSettings: null };\n this.keyHistory = '';\n this.clearSelection();\n this.trigger('shapeChanging', shapeChangingArgs);\n this.refreshToolbar('main');\n }\n break;\n case 'Escape':\n if (this.togglePan) {\n this.refreshToolbar(this.currentToolbar);\n this.pan(false);\n }\n else {\n this.cancelItems();\n }\n break;\n case 'Enter':\n this.crop();\n break;\n default:\n if (Browser.isDevice && this.textBox.style.display === 'block') {\n setTimeout(this.textKeyDown.bind(this), 1, e);\n }\n break;\n }\n };\n ImageEditor.prototype.keyUpEventHandler = function (e) {\n // eslint-disable-next-line\n if (this.textBox.style.display === 'block' && e.target.id === this.element.id + '_textBox') {\n setTimeout(this.textKeyDown.bind(this), 1, e);\n }\n };\n ImageEditor.prototype.canvasMouseDownHandler = function (e) {\n e.preventDefault();\n var ratio = this.calcRatio();\n if (e.type === 'mousedown') {\n this.lastX = e.offsetX || (e.pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.offsetY || (e.pageY - this.lowerCanvas.offsetTop);\n }\n else {\n this.lastX = e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop);\n }\n this.lastX *= ratio.width;\n this.lastY *= ratio.height;\n if (this.dragCanvas || this.factor !== 1) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.dragStart = this.lowerContext.transformedPoint(this.lastX, this.lastY);\n }\n };\n ImageEditor.prototype.canvasMouseMoveHandler = function (e) {\n if (this.dragCanvas && this.factor > 1) {\n this.lowerCanvas.style.cursor = 'grab';\n }\n else {\n this.dragCanvas = this.togglePan = false;\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'default';\n }\n var ratio = this.calcRatio();\n if (e.type === 'mousemove') {\n this.lastX = e.offsetX || (e.pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.offsetY || (e.pageY - this.lowerCanvas.offsetTop);\n }\n else {\n this.lastX = e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop);\n }\n this.lastX *= ratio.width;\n this.lastY *= ratio.height;\n if (this.dragStart && this.dragCanvas) {\n this.drawPanImg();\n }\n };\n ImageEditor.prototype.canvasMouseUpHandler = function (e) {\n e.preventDefault();\n if (this.togglePan && e.currentTarget === this.lowerCanvas) {\n var ratio = this.calcRatio();\n if (e.type === 'mouseup') {\n this.lastX = e.offsetX || (e.pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.offsetY || (e.pageY - this.lowerCanvas.offsetTop);\n }\n else {\n this.lastX = e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop);\n }\n this.lastX *= ratio.width;\n this.lastY *= ratio.height;\n this.setPanPoints();\n }\n this.dragStart = null;\n // zooms on mouse click point\n // if (e.currentTarget !== document) {\n // this.zoom(e.shiftKey ? -1 : 1 );\n // }\n this.currObjType.isDragging = false;\n };\n ImageEditor.prototype.setPanPoints = function () {\n if (this.dragCanvas || this.factor !== 1) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.dragStart = this.lowerContext.transformedPoint(this.lastX, this.lastY);\n }\n };\n ImageEditor.prototype.textKeyDown = function (e) {\n if (String.fromCharCode(e.which) === '\\r') {\n this.textRow += 1;\n }\n this.textBox.setAttribute('rows', this.textRow.toString());\n this.textBox.style.height = 'auto';\n this.textBox.style.height = this.textBox.scrollHeight + 'px';\n this.setTextBoxWidth(e);\n if (Browser.isDevice) {\n this.textBox.style.width = parseFloat(this.textBox.style.width) + this.textBox.style.fontSize + 'px';\n }\n var rows = this.textBox.value.split('\\n');\n this.textRow = rows.length;\n this.textBox.setAttribute('rows', this.textRow.toString());\n };\n ImageEditor.prototype.adjustToScreen = function () {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var tempFilter = this.lowerContext.filter;\n this.okBtn();\n this.applyActObj();\n this.refreshActiveObj();\n if (this.imgDataColl.length > 0) {\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n }\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.lowerCanvas.width = this.upperCanvas.width = this.element.offsetWidth;\n this.lowerCanvas.height = this.upperCanvas.height = this.element.offsetHeight;\n var canvasWrapper = document.querySelector('#' + this.element.id + '_canvasWrapper');\n if (!isNullOrUndefined(canvasWrapper)) {\n canvasWrapper.style.width = this.element.offsetWidth + 'px';\n canvasWrapper.style.height = this.element.offsetHeight + 'px';\n if (Browser.isDevice) {\n canvasWrapper.style.height = (parseFloat(canvasWrapper.style.height) - (2 * this.toolbarHeight)) - 3 + 'px';\n }\n else {\n canvasWrapper.style.height = (parseFloat(canvasWrapper.style.height) - this.toolbarHeight) - 3 + 'px';\n }\n }\n this.redrawImg(tempFilter);\n if (!this.currObjType.isSave) {\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.lowerCanvas.toBlob(function (blob) {\n proxy.lowerContext.filter = proxy.initialAdjustmentValue = proxy.adjustmentValue = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n if (proxy.cssClass) {\n addClass([proxy.element], proxy.cssClass.split(' '));\n }\n proxy.lowerContext.clearRect(0, 0, proxy.lowerCanvas.width, proxy.lowerCanvas.height);\n proxy.lowerContext.drawImage(proxy.inMemoryCanvas, 0, 0);\n proxy.baseImg.src = URL.createObjectURL(blob);\n proxy.lowerContext.filter = tempFilter;\n }, 'image/png');\n }\n else {\n hideSpinner(this.element);\n this.element.style.opacity = '1';\n }\n if (this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_10 = getComponent(proxy.element.id + '_toolbar', 'toolbar');\n toolbar_10.refreshOverflow();\n if (!isNullOrUndefined(this.element.querySelector('.e-contextual-toolbar-wrapper'))) {\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n }\n }\n };\n ImageEditor.prototype.screenOrientation = function () {\n if (Browser.isDevice) {\n this.isScreenOriented = true;\n setTimeout(this.adjustToScreen.bind(this), 100);\n }\n };\n ImageEditor.prototype.windowResizeHandler = function () {\n if (!Browser.isDevice) {\n this.adjustToScreen();\n }\n };\n ImageEditor.prototype.drawPanImg = function () {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt = this.lowerContext.transformedPoint(this.lastX, this.lastY);\n var transitionArgs = { startPoint: { x: this.dragStart.x, y: this.dragStart.y },\n endPoint: { x: pt.x, y: pt.y } };\n this.trigger('panning', transitionArgs);\n var xDiff = pt.x - this.dragStart.x;\n var yDiff = pt.y - this.dragStart.y;\n var xxDiff = xDiff;\n var yyDiff = yDiff;\n this.lowerContext.translate(xDiff, yDiff);\n this.upperContext.translate(xDiff, yDiff);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt1 = this.lowerContext.transformedPoint(0, 0);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt2 = this.lowerContext.transformedPoint(this.lowerCanvas.width, this.lowerCanvas.height);\n if (xDiff >= 0) {\n if (pt1.x < 1) {\n xDiff = 0;\n }\n }\n else {\n if (pt2.x > this.lowerCanvas.width) {\n xDiff = 0;\n }\n }\n if (yDiff >= 0) {\n if (pt1.y < 1) {\n yDiff = 0;\n }\n }\n else {\n if (pt2.y > this.lowerCanvas.height) {\n yDiff = 0;\n }\n }\n this.lowerContext.translate(-xxDiff, -yyDiff);\n this.upperContext.translate(-xxDiff, -yyDiff);\n this.lowerContext.translate(xDiff, yDiff);\n this.upperContext.translate(xDiff, yDiff);\n this.redraw();\n };\n ImageEditor.prototype.redrawImg = function (tempFilter) {\n var wrapperWidth;\n var canvasWrapper = document.querySelector('#' + this.element.id + '_canvasWrapper');\n if (this.isScreenOriented) {\n wrapperWidth = parseFloat(canvasWrapper.style.width);\n }\n else {\n wrapperWidth = this.element.clientWidth;\n }\n var maxDimension = this.calcMaxDimension(this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.lowerCanvas.width = this.upperCanvas.width = this.inMemoryCanvas.width;\n this.lowerCanvas.height = this.upperCanvas.height = this.inMemoryCanvas.height;\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.style.left = this.upperCanvas.style.left = (wrapperWidth - maxDimension.width) / 2 + 1 + 'px';\n this.lowerCanvas.style.top = this.upperCanvas.style.top = (this.element.offsetHeight - this.toolbarHeight - maxDimension.height) / 2 + 1 + 'px';\n this.lowerContext.filter = tempFilter;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp;\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.updateContext = function (ctx) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var xform = new DOMMatrix([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);\n ctx.getTransform = function () {\n return xform;\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var savedTransforms = [];\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var save = ctx.save;\n ctx.save = function () {\n savedTransforms.push(xform.translate(0, 0));\n return save.call(ctx);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var restore = ctx.restore;\n ctx.restore = function () {\n xform = savedTransforms.pop();\n return restore.call(ctx);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var scale = ctx.scale;\n ctx.scale = function (sx, sy) {\n xform = _this.scaleNonUniform(xform, sx, sy);\n proxy.factor = xform.a;\n return scale.call(ctx, sx, sy);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var rotate = ctx.rotate;\n ctx.rotate = function (radians) {\n xform = xform.rotate(radians * 180 / Math.PI);\n return rotate.call(ctx, radians);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var translate = ctx.translate;\n ctx.translate = function (dx, dy) {\n xform = xform.translate(dx, dy);\n return translate.call(ctx, dx, dy);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var transform = ctx.transform;\n ctx.transform = function (a, b, c, d, e, f) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var m2 = new DOMMatrix();\n m2.a = a;\n m2.b = b;\n m2.c = c;\n m2.d = d;\n m2.e = e;\n m2.f = f;\n xform = xform.multiply(m2);\n return transform.call(ctx, a, b, c, d, e, f);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var setTransform = ctx.setTransform;\n ctx.setTransform = function (a, b, c, d, e, f) {\n xform.a = a;\n xform.b = b;\n xform.c = c;\n xform.d = d;\n xform.e = e;\n xform.f = f;\n return setTransform.call(ctx, a, b, c, d, e, f);\n };\n var pt = new DOMPoint();\n ctx.transformedPoint = function (x, y) {\n pt.x = x;\n pt.y = y;\n return pt.matrixTransform(xform.inverse());\n };\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.scaleNonUniform = function (xform, sx, sy) {\n xform.m11 *= sx;\n xform.m12 *= sx;\n xform.m13 *= sx;\n xform.m14 *= sx;\n xform.m21 *= sy;\n xform.m22 *= sy;\n xform.m23 *= sy;\n xform.m24 *= sy;\n return xform;\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.zoomImg = function (clicks) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt = this.lowerContext.transformedPoint(this.lastX, this.lastY);\n var scaleFactor = 1.1;\n var transitionArgs = { zoomPoint: { x: pt.x, y: pt.y }, zoomLevel: clicks };\n this.trigger('zooming', transitionArgs);\n this.lowerContext.translate(pt.x, pt.y);\n this.upperContext.translate(pt.x, pt.y);\n var factor = Math.pow(scaleFactor, clicks);\n this.factor += (factor - 1);\n this.lowerContext.scale(factor, factor);\n this.upperContext.scale(factor, factor);\n this.lowerContext.translate(-pt.x, -pt.y);\n this.upperContext.translate(-pt.x, -pt.y);\n var ratio = this.calcRatio();\n if (!isNullOrUndefined(this.strokeSettings.strokeWidth)) {\n this.strokeSettings.strokeWidth = 2 * (ratio.width + ratio.height) / this.factor;\n }\n if (this.factor > 0.99 && this.factor < 1.01) {\n this.factor = 1;\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.redrawImgWithObj();\n }\n else {\n if (this.factor > 1) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt1 = this.lowerContext.transformedPoint(0, 0);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt2 = this.lowerContext.transformedPoint(this.lowerCanvas.width, this.lowerCanvas.height);\n var xDiff = pt.x;\n var yDiff = pt.y;\n if (pt1.x < 1) {\n xDiff = -xDiff;\n }\n else if (pt2.x > this.lowerCanvas.width) {\n xDiff = pt2.x - this.lowerCanvas.width;\n }\n if (pt1.y < 1) {\n yDiff = -yDiff;\n }\n else if (pt2.y > this.lowerCanvas.height) {\n yDiff = pt2.y - this.lowerCanvas.height;\n }\n if (xDiff !== pt.x || yDiff !== pt.y) {\n if (xDiff === pt.x) {\n xDiff = 0;\n }\n if (yDiff === pt.y) {\n yDiff = 0;\n }\n this.lowerContext.translate(xDiff, yDiff);\n this.upperContext.translate(xDiff, yDiff);\n }\n }\n this.redraw();\n }\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.handleScroll = function (e) {\n var delta = e.wheelDelta ? e.wheelDelta / 40 : e.detail ? -e.detail : 0;\n if (delta) {\n this.zoom(delta);\n }\n return e.preventDefault() && false;\n };\n ImageEditor.prototype.redraw = function () {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var p1 = this.lowerContext.transformedPoint(0, 0);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var p2 = this.lowerContext.transformedPoint(this.lowerCanvas.width, this.lowerCanvas.height);\n this.pannStart.startX = p1.x;\n this.pannStart.startY = p1.y;\n this.pannEnd.startX = this.lowerCanvas.width - p2.x;\n this.pannEnd.startY = this.lowerCanvas.height - p2.y;\n this.lowerContext.clearRect(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y);\n this.upperContext.clearRect(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y);\n this.lowerContext.save();\n this.upperContext.save();\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.restore();\n this.upperContext.restore();\n this.redrawImgWithObj();\n };\n ImageEditor.prototype.applyCurrActObj = function (x, y) {\n var isInside = false;\n var ratio = this.calcRatio();\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (isNullOrUndefined(actObj.activePoint)) {\n return;\n }\n if ((x >= Math.floor(actObj.activePoint.startX) && x <= Math.ceil(actObj.activePoint.endX) &&\n y >= Math.floor(actObj.activePoint.startY) && y <= Math.ceil(actObj.activePoint.endY)) ||\n (actObj.shape === 'text')) {\n isInside = true;\n }\n if (!isInside) {\n if (this.activeObj.horTopLine !== undefined && this.activeObj.horTopLine.startX !== 0 && this.activeObj.horTopLine.endX !== 0\n && !this.currObjType.isCustomCrop && this.currObjType.shape !== '') {\n this.objColl.push(extend({}, this.activeObj, {}, true));\n }\n if (this.activeObj.shape === 'text' || (this.currObjType.shape === 'ellipse' || this.currObjType.shape === 'rectangle' ||\n this.currObjType.shape === 'line')) {\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n }\n this.lowerContext.filter = tempFilter;\n this.apply('shape');\n }\n }\n };\n ImageEditor.prototype.updateTextFromTextArea = function (ratio) {\n this.activeObj.keyHistory = this.textBox.value;\n this.textBox.style.display = 'none';\n this.textBox.value = '';\n this.updateFontStyles();\n var width = this.upperContext.measureText(this.activeObj.keyHistory).width +\n this.activeObj.textSettings.fontSize * 0.5;\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n var rows = this.activeObj.keyHistory.split('\\n');\n if (rows.length > 1) {\n height *= rows.length;\n var widthColl = [];\n for (var i = 0; i < rows.length; i++) {\n widthColl.push(this.upperContext.measureText(rows[i]).width +\n this.activeObj.textSettings.fontSize * 0.5);\n }\n width = Math.max.apply(Math, widthColl);\n }\n this.setTextSelection(width, height);\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n };\n ImageEditor.prototype.setTextBoxStylesToActObj = function () {\n var ratio = this.calcRatio();\n this.activeObj.textSettings.fontFamily = this.textBox.style.fontFamily;\n this.activeObj.strokeSettings.strokeColor = this.textBox.style.color;\n if (this.textBox.style.fontWeight === 'bold') {\n this.activeObj.textSettings.bold = true;\n }\n else {\n this.activeObj.textSettings.bold = false;\n }\n if (this.textBox.style.fontStyle === 'italic') {\n this.activeObj.textSettings.italic = true;\n }\n else {\n this.activeObj.textSettings.italic = false;\n }\n this.activeObj.textSettings.fontSize = (parseFloat(this.textBox.style.fontSize) * ((ratio.width + ratio.height) / 2)) / this.factor;\n };\n ImageEditor.prototype.redrawActObj = function (x, y) {\n var ratio = this.calcRatio();\n var splitWords;\n var bbox = this.upperCanvas.getBoundingClientRect();\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.activeObj.horTopLine !== undefined && (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n if (this.textBox.style.display === 'block') {\n this.setTextBoxStylesToActObj();\n if (x && y) {\n x -= bbox.left;\n y -= bbox.top;\n if ((x !== this.activeObj.activePoint.startX / ratio.width) && (y !== this.activeObj.activePoint.startY /\n ratio.height)) {\n this.updateTextFromTextArea(ratio);\n this.applyActObj();\n }\n }\n else {\n this.updateTextFromTextArea(ratio);\n this.apply(this.activeObj.shape, this.activeObj);\n this.objColl.push(this.activeObj);\n this.refreshActiveObj();\n this.textBox.style.transform = '';\n this.refreshToolbar('main');\n }\n }\n else {\n this.applyActObj();\n }\n }\n };\n ImageEditor.prototype.setTextBoxPos = function (actObj, degree, flip, x, y, ratio) {\n var point = { x: x, y: y };\n if (degree === 0) {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left) -\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) - actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n else if (degree === 90) {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n else if (degree === 180) {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n }\n else if (degree === 270) {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left) -\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) - actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n }\n return point;\n };\n ImageEditor.prototype.setTextBoxPoints = function (actObj, degree, flip, x, y, ratio) {\n var point = { x: x, y: y };\n if (degree === 0) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left +\n actObj.activePoint.width / ratio.width);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n }\n else if (degree === 90) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n }\n else if (degree === 180) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left)\n + actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n }\n else if (degree === 270) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n }\n return point;\n };\n ImageEditor.prototype.findTextTarget = function (e) {\n var x;\n var y;\n if (e.type === 'dblclick') {\n x = e.clientX;\n y = e.clientY;\n }\n else if (e.type === 'touchstart') {\n this.touchEndPoint.x = x = e.touches[0].clientX;\n this.touchEndPoint.y = y = e.touches[0].clientY;\n }\n var bbox = this.upperCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n var degree;\n var flip = '';\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (this.activeObj.shapeFlip === this.currFlipState) {\n flip = '';\n }\n else {\n flip = this.currFlipState;\n }\n var temp;\n if (this.textBox.style.display === 'block') {\n x -= bbox.left;\n y -= bbox.top;\n }\n else {\n temp = extend({}, this.activeObj, {}, true);\n for (var i = 0; i < this.objColl.length; i++) {\n if (JSON.stringify(this.activeObj) === JSON.stringify(this.objColl[i])) {\n this.objColl.splice(i, 1);\n }\n }\n this.lowerContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.redrawImgWithObj();\n this.activeObj = temp;\n this.updateFontStyles();\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n y = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n }\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (x >= (actObj.activePoint.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.activePoint.endX + actObj.topLeftCircle.radius) &&\n y >= (actObj.activePoint.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.activePoint.endY + actObj.topLeftCircle.radius)) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n if (actObj.flipObjColl.length === 4) {\n actObj.flipObjColl = [];\n flip = '';\n }\n if (flip === '' && actObj.flipObjColl.length > 1) {\n flip = actObj.flipObjColl[actObj.flipObjColl.length - 1];\n }\n if (actObj.flipObjColl.length <= 1) {\n var points = this.setTextBoxPos(actObj, degree, flip, x, y, ratio);\n x = points.x;\n y = points.y;\n }\n else {\n var points = this.setTextBoxPoints(actObj, degree, flip, x, y, ratio);\n x = points.x;\n y = points.y;\n }\n this.textBox.style.display = 'block';\n this.textBox.style.left = x + 'px';\n this.textBox.style.top = y + 'px';\n this.textBox.style.fontFamily = actObj.textSettings.fontFamily;\n this.textBox.style.fontSize = actObj.textSettings.fontSize / ((ratio.width + ratio.height) / 2) * this.factor + 'px';\n this.textBox.style.color = actObj.strokeSettings.strokeColor;\n this.textBox.style.fontWeight = actObj.textSettings.bold ? 'bold' : 'normal';\n this.textBox.style.fontStyle = actObj.textSettings.italic ? 'italic' : 'normal';\n this.textBox.style.border = '2px solid ' + this.themeColl[this.theme]['primaryColor'];\n this.textBox.value = actObj.keyHistory;\n this.textBox.style.overflow = 'hidden';\n this.textBox.style.height = 'auto';\n if (degree % 90 === 0 && degree % 180 !== 0 && degree !== 0) {\n if (this.factor === 1) {\n this.textBox.style.width = (actObj.activePoint.height / ratio.height) + 'px';\n this.textBox.style.height = (actObj.activePoint.width / ratio.width) + 'px';\n }\n else {\n this.textBox.style.width = actObj.activePoint.height + 'px';\n this.textBox.style.height = actObj.activePoint.width + 'px';\n }\n }\n else {\n if (this.factor === 1) {\n this.textBox.style.width = (actObj.activePoint.width / ratio.width) + 'px';\n this.textBox.style.height = (actObj.activePoint.height / ratio.height) + 'px';\n }\n else {\n this.textBox.style.width = actObj.activePoint.width + 'px';\n this.textBox.style.height = actObj.activePoint.height + 'px';\n }\n }\n this.setTextBoxWidth();\n this.setTextBoxHeight();\n }\n else {\n this.applyActObj();\n }\n }\n };\n ImageEditor.prototype.setTextBoxHeight = function () {\n var ratio = this.calcRatio();\n var textBoxTop;\n var degree;\n var flip = '';\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (actObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - actObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (actObj.shapeFlip === this.currFlipState) {\n flip = '';\n }\n else {\n flip = this.currFlipState;\n }\n if (degree === 0) {\n if (flip.toLowerCase() === 'vertical') {\n this.textBox.style.maxHeight = (parseFloat(this.lowerCanvas.style.maxHeight) - (parseFloat(this.lowerCanvas.style.maxHeight)\n - parseFloat(this.textBox.style.top))) + 'px';\n }\n else {\n textBoxTop = parseFloat(this.textBox.style.top) - parseFloat(this.lowerCanvas.style.top);\n this.textBox.style.maxHeight = (parseFloat(this.lowerCanvas.style.maxHeight) - textBoxTop) + 'px';\n }\n }\n else if (degree === 90) {\n if (flip.toLowerCase() === 'horizontal') {\n this.textBox.style.maxHeight = (parseFloat(this.lowerCanvas.style.maxWidth) - (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left))) + 'px';\n }\n else {\n this.textBox.style.maxHeight = (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left)) + 'px';\n }\n }\n else if (degree === 180) {\n if (flip.toLowerCase() === 'vertical') {\n textBoxTop = parseFloat(this.textBox.style.top) - parseFloat(this.lowerCanvas.style.top);\n this.textBox.style.maxHeight = (parseFloat(this.lowerCanvas.style.maxHeight) - textBoxTop) + 'px';\n }\n else {\n this.textBox.style.maxHeight = (parseFloat(this.textBox.style.top)\n - parseFloat(this.lowerCanvas.style.top)) + 'px';\n }\n }\n else if (degree === 270) {\n if (flip.toLowerCase() === 'horizontal') {\n this.textBox.style.maxHeight = (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left)) + 'px';\n }\n else {\n this.textBox.style.maxHeight = parseFloat(this.lowerCanvas.style.maxWidth) - (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left)) + 'px';\n }\n }\n this.textBox.style.maxHeight = ((parseFloat(this.textBox.style.maxHeight) - parseFloat(this.textBox.style.fontSize) * 0.5)) + 'px';\n };\n ImageEditor.prototype.setTextBoxWidth = function (e) {\n var ratio = this.calcRatio();\n var text = this.getMaxText(true);\n if (this.textBox.style.display === 'block') {\n this.updateFontStyles(true);\n }\n else {\n this.updateFontStyles();\n }\n var textBoxWidth = (this.upperContext.measureText(text).width + (parseFloat(this.textBox.style.fontSize) / 2));\n var letterWidth = e ? this.upperContext.measureText(String.fromCharCode(e.which)).width : 0;\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n var degree;\n var flip = '';\n if (actObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - actObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (actObj.shapeFlip === this.currFlipState) {\n flip = '';\n }\n else {\n flip = this.currFlipState;\n }\n if ((!isNullOrUndefined(e) && parseFloat(this.textBox.style.width) < (textBoxWidth + letterWidth)) || isNullOrUndefined(e)) {\n if (degree === 0) {\n if (flip.toLowerCase() === 'horizontal') {\n if ((parseFloat(this.textBox.style.left) - parseFloat(this.lowerCanvas.style.left)) - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((parseFloat(this.lowerCanvas.style.maxWidth) - (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left))) > (textBoxWidth + letterWidth)) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n }\n else if (degree === 90) {\n if (flip.toLowerCase() === 'vertical') {\n if ((parseFloat(this.textBox.style.top) - parseFloat(this.lowerCanvas.style.top)) - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((parseFloat(this.lowerCanvas.style.maxHeight) - (parseFloat(this.textBox.style.top)\n - parseFloat(this.lowerCanvas.style.top))) > (textBoxWidth + letterWidth)) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n }\n else if (degree === 180) {\n if (flip.toLowerCase() === 'horizontal') {\n if ((parseFloat(this.lowerCanvas.style.maxWidth) - (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left))) > (textBoxWidth + letterWidth)) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((parseFloat(this.textBox.style.left) - parseFloat(this.lowerCanvas.style.left)) - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n }\n else if (degree === 270) {\n if (flip.toLowerCase() === 'vertical') {\n if ((parseFloat(this.lowerCanvas.style.maxHeight) - (parseFloat(this.textBox.style.top)\n - parseFloat(this.lowerCanvas.style.top))) > (textBoxWidth + letterWidth)) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((parseFloat(this.textBox.style.top) - parseFloat(this.lowerCanvas.style.top)) - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n }\n }\n };\n ImageEditor.prototype.setActivePoint = function (startX, startY) {\n if (isNullOrUndefined(this.activeObj.activePoint)) {\n return;\n }\n if (this.currObjType.isText) {\n var textWidth = startX ? startX : 0;\n var textHeight = startY ? startY : this.activeObj.textSettings.fontSize;\n if (this.activeObj.textSettings.fontSize === undefined) {\n this.activeObj.textSettings.fontSize = (Math.abs(this.baseImg.width - this.baseImg.height)) * 0.1;\n }\n this.setTextSelection(textWidth, textHeight);\n this.mouseDownPoint.x = this.activeObj.activePoint.endX;\n this.mouseDownPoint.y = this.activeObj.activePoint.endY;\n if (this.activeObj.horTopLine !== undefined) {\n this.activeObj.activePoint = extend({}, this.activeObj.activePoint, {}, true);\n }\n this.drawObject('duplicate');\n }\n else if (startX && startY) {\n this.activeObj.activePoint.startX = this.mouseDownPoint.x = startX;\n this.activeObj.activePoint.startY = this.mouseDownPoint.y = startY;\n this.currObjType.isDragging = true;\n }\n else {\n var selectInfo = this.activeObj;\n this.activeObj.activePoint = { startX: selectInfo.horTopLine.startX, startY: selectInfo.horTopLine.startY,\n endX: selectInfo.horTopLine.endX, endY: selectInfo.horTopLine.endY };\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.updateActivePoint = function (x, y) {\n var initialDraw = false;\n var bbox = this.lowerCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n if (this.dragElement !== '') {\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = ((x - bbox.left) * ratio.width) / this.factor + this.pannStart.startX;\n y = ((y - bbox.top) * ratio.height) / this.factor + this.pannStart.startY;\n }\n }\n var maxDimension = this.calcMaxDimension(this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n var shapeResizingArgs = { action: 'resize', previousShapeSettings: this.activeObj };\n var shapeMovingArgs = { action: 'move', previousShapeSettings: this.activeObj };\n switch (this.dragElement.toLowerCase()) {\n case 'nw-resize':\n this.updateNWPoints(x, y, maxDimension);\n break;\n case 'n-resize':\n this.updateNPoints(x, y);\n break;\n case 'ne-resize':\n this.updateNEPoints(x, y, maxDimension);\n break;\n case 'w-resize':\n this.updateWPoints(x, y);\n break;\n case 'e-resize':\n this.updateEPoints(x, y);\n break;\n case 'sw-resize':\n this.updateSWPoints(x, y, maxDimension);\n break;\n case 's-resize':\n this.updateSPoints(x, y);\n break;\n case 'se-resize':\n this.updateSEPoints(x, y, maxDimension);\n break;\n default:\n if (this.dragPoint.startX) {\n var width = (this.dragPoint.endX - this.previousPoint.x);\n var height = (this.dragPoint.endY - this.previousPoint.y);\n if (this.factor !== 1) {\n width = (width * ratio.width) / this.factor;\n height = (height * ratio.height) / this.factor;\n }\n this.activeObj.activePoint.startX += width;\n this.activeObj.activePoint.endX += width;\n this.activeObj.activePoint.startY += height;\n this.activeObj.activePoint.endY += height;\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n if (this.activeObj.shape !== 'text' && !this.allowDrag) {\n if (this.factor > 1 && (this.activeObj.activePoint.startX < this.pannStart.startX ||\n this.activeObj.activePoint.endX > endPoint.x) && (this.activeObj.activePoint.startY < this.pannStart.startY ||\n this.activeObj.activePoint.endY > endPoint.y)) {\n this.activeObj.activePoint.startX -= width;\n this.activeObj.activePoint.endX -= width;\n this.activeObj.activePoint.startY -= height;\n this.activeObj.activePoint.endY -= height;\n }\n else if (this.factor > 1 && (this.activeObj.activePoint.startX < this.pannStart.startX ||\n this.activeObj.activePoint.endX > endPoint.x)) {\n this.activeObj.activePoint.startX -= width;\n this.activeObj.activePoint.endX -= width;\n }\n else if (this.factor > 1 && (this.activeObj.activePoint.startY < this.pannStart.startY ||\n this.activeObj.activePoint.endY > endPoint.y)) {\n this.activeObj.activePoint.startY -= height;\n this.activeObj.activePoint.endY -= height;\n }\n }\n if (this.activeObj.activePoint.startX >= this.pannStart.startX && this.activeObj.activePoint.startY >=\n this.pannStart.startY && this.activeObj.activePoint.endX <= endPoint.x && this.activeObj.activePoint.endY\n <= endPoint.y) {\n this.allowDrag = false;\n }\n }\n else {\n this.activeObj.activePoint.startX = x < this.mouseDownPoint.x ? x : this.mouseDownPoint.x;\n this.activeObj.activePoint.startY = y < this.mouseDownPoint.y ? y : this.mouseDownPoint.y;\n if (this.factor === 1) {\n this.activeObj.activePoint.startX = (this.activeObj.activePoint.startX - bbox.left) * ratio.width;\n this.activeObj.activePoint.startY = (this.activeObj.activePoint.startY - bbox.top) * ratio.height;\n initialDraw = false;\n }\n else {\n this.activeObj.activePoint.startX = (this.activeObj.activePoint.startX - bbox.left) + ((this.pannStart.startX)\n / ratio.width * this.factor);\n this.activeObj.activePoint.startY = (this.activeObj.activePoint.startY - bbox.top) + ((this.pannStart.startY)\n / ratio.height * this.factor);\n initialDraw = true;\n }\n x = x < this.mouseDownPoint.x ? this.mouseDownPoint.x : x;\n y = y < this.mouseDownPoint.y ? this.mouseDownPoint.y : y;\n if (this.factor === 1) {\n this.activeObj.activePoint.endX = (x - bbox.left) * ratio.width;\n this.activeObj.activePoint.endY = (y - bbox.top) * ratio.height;\n initialDraw = false;\n }\n else {\n this.activeObj.activePoint.endX = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n this.activeObj.activePoint.endY = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n initialDraw = true;\n }\n }\n break;\n }\n shapeResizingArgs.currentShapeSettings = this.activeObj;\n shapeMovingArgs.currentShapeSettings = this.activeObj;\n this.trigger('shapeChanging', shapeMovingArgs);\n this.trigger('shapeChanging', shapeResizingArgs);\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n return initialDraw;\n };\n ImageEditor.prototype.updateNWPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = this.activeObj.activePoint.startX - x;\n this.diffPoint.y = this.activeObj.activePoint.startY - y;\n }\n else {\n this.diffPoint.x = this.oldPoint.x - x;\n this.diffPoint.y = this.oldPoint.y - y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x <= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = (diff / 10) * this.factor;\n this.activeObj.activePoint.startX -= (maxDimension.width / 100) * percentage;\n this.activeObj.activePoint.startY -= (maxDimension.height / 100) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n var degree = void 0;\n var maxText = this.getMaxText();\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree === 180) {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.width / maxText.length) * 2;\n }\n else {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.height / maxText.length) * 2;\n }\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.startY = y;\n if (this.activeObj.activePoint.startX > this.activeObj.activePoint.endX) {\n var temp = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = temp;\n this.dragElement = 'ne-resize';\n }\n if (this.activeObj.activePoint.startY > this.activeObj.activePoint.endY) {\n var temp = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = temp;\n this.dragElement = 'sw-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.startX < x && this.activeObj.activePoint.startY < y) {\n width = x - this.activeObj.activePoint.startX;\n height = y - this.activeObj.activePoint.startY;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n }\n }\n else {\n width = this.activeObj.activePoint.startX - x;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.updateNPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startY = y;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n if (this.activeObj.activePoint.startY > this.activeObj.activePoint.endY) {\n var temp = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = temp;\n this.dragElement = 's-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.startY < y) {\n width = this.activeObj.activePoint.endX - x;\n height = y - this.activeObj.activePoint.startY;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = this.activeObj.activePoint.startY - y;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateNEPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = x - this.activeObj.activePoint.endX;\n this.diffPoint.y = this.activeObj.activePoint.startY - y;\n }\n else {\n this.diffPoint.x = x - this.oldPoint.x;\n this.diffPoint.y = this.oldPoint.y - y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x <= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = (diff / 10) * this.factor;\n this.activeObj.activePoint.endX += (maxDimension.width / 100) * percentage;\n this.activeObj.activePoint.startY -= (maxDimension.height / 100) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n var degree = void 0;\n var maxText = this.getMaxText();\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree === 180) {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.width / maxText.length) * 2;\n }\n else {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.height / maxText.length) * 2;\n }\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endX = x;\n this.activeObj.activePoint.startY = y;\n if (this.activeObj.activePoint.endX < this.activeObj.activePoint.startX) {\n var temp = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = temp;\n this.dragElement = 'nw-resize';\n }\n if (this.activeObj.activePoint.startY > this.activeObj.activePoint.endY) {\n var temp = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = temp;\n this.dragElement = 'se-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.startY < y) {\n width = this.activeObj.activePoint.endX - x;\n height = y - this.activeObj.activePoint.startY;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = this.activeObj.activePoint.startY - y;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.updateWPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n if (this.activeObj.activePoint.startX > this.activeObj.activePoint.endX) {\n var temp = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = temp;\n this.dragElement = 'e-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.startX < x && this.activeObj.activePoint.endY > y) {\n width = x - this.activeObj.activePoint.startX;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = this.activeObj.activePoint.startX - x;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateEPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endX = x;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n if (this.activeObj.activePoint.endX < this.activeObj.activePoint.startX) {\n var temp = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = temp;\n this.dragElement = 'w-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.endY > y) {\n width = this.activeObj.activePoint.endX - x;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateSWPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = this.activeObj.activePoint.startX - x;\n this.diffPoint.y = y - this.activeObj.activePoint.endY;\n }\n else {\n this.diffPoint.x = this.oldPoint.x - x;\n this.diffPoint.y = y - this.oldPoint.y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x <= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = (diff / 10) * this.factor;\n this.activeObj.activePoint.startX -= (maxDimension.width / 100) * percentage;\n this.activeObj.activePoint.endY += (maxDimension.height / 100) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n var degree = void 0;\n var maxText = this.getMaxText();\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree === 180) {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.width / maxText.length) * 2;\n }\n else {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.height / maxText.length) * 2;\n }\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.endY = y;\n if (this.activeObj.activePoint.startX > this.activeObj.activePoint.endX) {\n var temp = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = temp;\n this.dragElement = 'se-resize';\n }\n if (this.activeObj.activePoint.endY < this.activeObj.activePoint.startY) {\n var temp = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = temp;\n this.dragElement = 'nw-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.startX < x && this.activeObj.activePoint.endY > y) {\n width = x - this.activeObj.activePoint.startX;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = this.activeObj.activePoint.startX - x;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.updateSPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endY = y;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n if (this.activeObj.activePoint.endY < this.activeObj.activePoint.startY) {\n var temp = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = temp;\n this.dragElement = 'n-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.endY > y) {\n width = this.activeObj.activePoint.endX - x;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.x;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateSEPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = x - this.activeObj.activePoint.endX;\n this.diffPoint.y = y - this.activeObj.activePoint.endY;\n }\n else {\n this.diffPoint.x = x - this.oldPoint.x;\n this.diffPoint.y = y - this.oldPoint.y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x >= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = (diff / 10) * this.factor;\n this.activeObj.activePoint.endX += (maxDimension.width / 50) * percentage;\n this.activeObj.activePoint.endY += (maxDimension.height / 50) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n var degree = void 0;\n var maxText = this.getMaxText();\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree === 180) {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.width / maxText.length) * 2;\n }\n else {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.height / maxText.length) * 2;\n }\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endX = x;\n this.activeObj.activePoint.endY = y;\n if (this.activeObj.activePoint.endX < this.activeObj.activePoint.startX) {\n var temp = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = temp;\n this.dragElement = 'sw-resize';\n }\n if (this.activeObj.activePoint.endY < this.activeObj.activePoint.startY) {\n var temp = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = temp;\n this.dragElement = 'ne-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.endY > y) {\n width = this.activeObj.activePoint.endX - x;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.getScaleRatio = function (scale) {\n var point = { x: scale, y: scale };\n if (!this.currObjType.isCustomCrop && this.activeObj.shape !== 'crop-circle' && this.activeObj.shape !== 'crop-square') {\n var ratio = this.activeObj.shape.split('-');\n ratio = ratio[1].split(':');\n var newScale = scale / (parseInt(ratio[1], 10));\n point.x = newScale * (parseInt(ratio[0], 10));\n point.y = newScale * (parseInt(ratio[1], 10));\n }\n return point;\n };\n ImageEditor.prototype.getMaxText = function (isTextBox) {\n var text = isTextBox ? this.textBox.value : this.activeObj.keyHistory;\n var maxi;\n var rows = text.split('\\n');\n var maxStr = rows[0].length;\n var maxText = rows[0];\n for (var i = 1; i < rows.length; i++) {\n maxi = rows[i].length;\n if (maxi > maxStr) {\n maxText = rows[i];\n maxStr = maxi;\n }\n }\n return maxText;\n };\n ImageEditor.prototype.setDragLimit = function () {\n if (this.factor === 1 && this.activeObj.activePoint !== undefined && this.activeObj.shape !== 'text') {\n if (this.activeObj.activePoint.startX < 0) {\n this.activeObj.activePoint.startX = 0;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.width;\n }\n else if (this.activeObj.activePoint.endX > this.lowerCanvas.width) {\n this.activeObj.activePoint.endX = this.lowerCanvas.width;\n this.activeObj.activePoint.startX = this.lowerCanvas.width - this.activeObj.activePoint.width;\n }\n if (this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.startY = 0;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.height;\n }\n else if (this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.endY = this.lowerCanvas.height;\n this.activeObj.activePoint.startY = this.lowerCanvas.height - this.activeObj.activePoint.height;\n }\n }\n };\n ImageEditor.prototype.lineDraw = function (ratio) {\n if (this.activeObj.activePoint.height < 10 * ratio.height) {\n this.activeObj.activePoint.startY -= 10 * ratio.height;\n this.activeObj.activePoint.endY += 10 * ratio.height;\n this.activeObj.lineDraw = 'horizontal';\n }\n else if (this.activeObj.activePoint.width < 10 * ratio.width) {\n this.activeObj.activePoint.startX -= 10 * ratio.width;\n this.activeObj.activePoint.endX += 10 * ratio.width;\n this.activeObj.lineDraw = 'vertical';\n }\n else if (this.currObjType.isInitialLine) {\n this.activeObj.lineDraw = 'normal';\n this.currObjType.isInitialLine = false;\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n };\n ImageEditor.prototype.shapeCircle = function (canvasDraw, selectionWidth, selectionHeight) {\n var ratio = this.calcRatio();\n canvasDraw.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n canvasDraw.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n canvasDraw.fillStyle = 'rgb(0, 0, 0, 0.5)';\n canvasDraw.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var tempWidth = canvasDraw.lineWidth;\n canvasDraw.lineWidth = (2 * (ratio.width + ratio.height)) / this.factor;\n canvasDraw.beginPath();\n canvasDraw.ellipse(this.activeObj.horTopLine.startX + (selectionWidth / 2), this.activeObj.horTopLine.startY\n + (selectionHeight / 2), selectionWidth / 2, selectionHeight / 2, 0, 0, 2 * Math.PI, false);\n canvasDraw.stroke();\n canvasDraw.closePath();\n canvasDraw.save();\n canvasDraw.beginPath();\n canvasDraw.arc(((this.activeObj.activePoint.endX - this.activeObj.activePoint.startX) / 2) + this.activeObj.activePoint.startX, ((this.activeObj.activePoint.endY - this.activeObj.activePoint.startY) / 2) + this.activeObj.activePoint.startY, (this.activeObj.activePoint.width / 2), 0, Math.PI * 2);\n canvasDraw.closePath();\n canvasDraw.clip();\n canvasDraw.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n canvasDraw.restore();\n canvasDraw.lineWidth = tempWidth;\n this.drawOuterSelection(canvasDraw, null, true);\n this.currObjType.shape = '';\n };\n ImageEditor.prototype.drawOuterSelection = function (canvasDraw, isInitialDraw, isCropCircle) {\n var splitWords;\n var ratio = this.calcRatio();\n canvasDraw.lineWidth = (0.5 * (ratio.width + ratio.height)) / this.factor;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n var tempObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n if (isInitialDraw) {\n tempObj = this.getZoomShape(tempObj, ratio);\n }\n }\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (((splitWords !== undefined && splitWords[0] === 'crop') || this.activeObj.shape === undefined) && !isCropCircle) {\n this.upperContext.fillStyle = 'rgb(0, 0, 0, 0.5)';\n this.upperContext.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(this.activeObj.activePoint.startX, this.activeObj.activePoint.startY, this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n }\n canvasDraw.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n canvasDraw.fillStyle = this.themeColl[this.theme]['secondaryColor'];\n if (this.activeObj.shape !== 'rectangle') {\n canvasDraw.beginPath();\n canvasDraw.rect(tempObj.activePoint.startX, tempObj.activePoint.startY, tempObj.activePoint.width, tempObj.activePoint.height);\n canvasDraw.stroke();\n canvasDraw.closePath();\n }\n canvasDraw.lineWidth *= 2;\n canvasDraw.beginPath();\n canvasDraw.moveTo(tempObj.topLeftCircle.startX, tempObj.topLeftCircle.startY);\n canvasDraw.arc(tempObj.topLeftCircle.startX, tempObj.topLeftCircle.startY, tempObj.topLeftCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(tempObj.topRightCircle.startX, tempObj.topRightCircle.startY);\n canvasDraw.arc(tempObj.topRightCircle.startX, tempObj.topRightCircle.startY, tempObj.topRightCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(tempObj.bottomLeftCircle.startX, tempObj.bottomLeftCircle.startY);\n canvasDraw.arc(tempObj.bottomLeftCircle.startX, tempObj.bottomLeftCircle.startY, tempObj.bottomLeftCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(tempObj.bottomRightCircle.startX, tempObj.bottomRightCircle.startY);\n canvasDraw.arc(tempObj.bottomRightCircle.startX, tempObj.bottomRightCircle.startY, tempObj.bottomRightCircle.radius, 0, 2 * Math.PI);\n canvasDraw.stroke();\n canvasDraw.fill();\n canvasDraw.closePath();\n canvasDraw.lineWidth /= 2;\n if ((splitWords === undefined || splitWords[0] !== 'crop') && this.activeObj.shape !== 'text') {\n this.drawCenterCircles(canvasDraw);\n }\n this.activeObj = extend({}, tempObj, {}, true);\n };\n ImageEditor.prototype.getZoomShape = function (tempObj, ratio) {\n var obj = extend({}, tempObj, {}, true);\n obj.activePoint.startX = (obj.activePoint.startX / this.factor) * ratio.width;\n obj.activePoint.startY = (obj.activePoint.startY / this.factor) * ratio.height;\n obj.activePoint.endX = (obj.activePoint.endX / this.factor) * ratio.width;\n obj.activePoint.endY = (obj.activePoint.endY / this.factor) * ratio.height;\n obj.activePoint.width = obj.activePoint.endX - obj.activePoint.startX;\n obj.activePoint.height = obj.activePoint.endY - obj.activePoint.startY;\n this.updateActiveObject(ratio, obj.activePoint, obj);\n return obj;\n };\n ImageEditor.prototype.drawObject = function (canvas, obj, isInitialDraw, isCropRatio, points) {\n var canvasDraw;\n if (canvas.toLowerCase() === 'original') {\n canvasDraw = this.lowerContext;\n }\n else {\n canvasDraw = this.upperContext;\n }\n this.setDragLimit();\n var ratio = this.calcRatio();\n if (this.currObjType.isLine && canvas !== 'original' && !obj) {\n this.lineDraw(ratio);\n }\n var splitWords = this.currObjType.shape.split('-');\n if (splitWords[0].toLowerCase() === 'crop' && isCropRatio) {\n this.drawCropRatio();\n }\n if (points) {\n this.activeObj.activePoint.startX = points.startX;\n this.activeObj.activePoint.startY = points.startY;\n this.activeObj.activePoint.endX = points.endX;\n this.activeObj.activePoint.endY = points.endY;\n this.activeObj.activePoint.width = points.width;\n this.activeObj.activePoint.height = points.height;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings.strokeWidth)) {\n this.activeObj.strokeSettings.strokeWidth = 2 * (ratio.width + ratio.height) / this.factor;\n }\n if (obj) {\n this.activeObj = extend({}, obj, {}, true);\n if (this.factor !== 1) {\n this.updateActiveObject(ratio);\n }\n }\n else {\n this.updateActiveObject(ratio);\n }\n if (this.currObjType.isText) {\n this.activeObj.keyHistory = this.keyHistory;\n }\n if (canvas.toLowerCase() !== 'original') {\n var splitWords_1;\n var isCrop = false;\n if (this.activeObj.shape) {\n splitWords_1 = this.activeObj.shape.split('-');\n if (splitWords_1[0] === 'crop') {\n isCrop = true;\n }\n }\n if (isCrop) {\n this.upperContext.fillStyle = 'rgb(0, 0, 0, 0.5)';\n this.upperContext.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(this.activeObj.activePoint.startX + ratio.width, this.activeObj.activePoint.startY + ratio.height, this.activeObj.activePoint.width - ratio.width, this.activeObj.activePoint.height - ratio.height);\n }\n this.drawOuterSelection(canvasDraw, isInitialDraw);\n }\n this.currObjType.isActiveObj = true;\n if (obj) {\n this.drawShapeObj(canvas, obj.shape);\n }\n else if (this.keyHistory !== '' && this.currObjType.isText) {\n this.drawShapeObj(canvas, 'text');\n }\n else if (this.activeObj.shape) {\n this.drawShapeObj(canvas, this.activeObj.shape);\n }\n else {\n this.drawShapeObj(canvas, undefined);\n }\n };\n ImageEditor.prototype.updateActiveObject = function (ratio, actPoint, obj, isMouseMove) {\n actPoint = actPoint ? actPoint : extend({}, this.activeObj.activePoint, {}, true);\n obj = obj ? obj : extend({}, this.activeObj, {}, true);\n var horCircleWidth = actPoint.width / 2;\n var verCircleHeight = actPoint.height / 2;\n var radius = 7.5;\n obj.horTopLine = { startX: actPoint.startX, startY: actPoint.startY,\n endX: actPoint.endX, endY: actPoint.endY };\n obj.horBottomLine = { startX: actPoint.startX, startY: actPoint.endY,\n endX: actPoint.endX, endY: actPoint.endY };\n obj.verLeftLine = { startX: actPoint.startX, startY: actPoint.startY,\n endX: actPoint.startX, endY: actPoint.endY };\n obj.verRightLine = { startX: actPoint.endX, startY: actPoint.startY,\n endX: actPoint.endX, endY: actPoint.endY };\n obj.topLeftCircle = { startX: actPoint.startX, startY: actPoint.startY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.topCenterCircle = { startX: actPoint.startX + horCircleWidth, startY: actPoint.startY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.topRightCircle = { startX: actPoint.endX, startY: actPoint.startY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.centerLeftCircle = { startX: actPoint.startX, startY: actPoint.startY + verCircleHeight,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.centerRightCircle = { startX: actPoint.endX, startY: actPoint.startY + verCircleHeight,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.bottomLeftCircle = { startX: actPoint.startX, startY: actPoint.endY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.bottomCenterCircle = { startX: actPoint.startX + horCircleWidth, startY: actPoint.endY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.bottomRightCircle = { startX: actPoint.endX, startY: actPoint.endY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.activePoint = actPoint;\n if (isNullOrUndefined(isMouseMove)) {\n this.activeObj = extend({}, obj, {}, true);\n }\n };\n ImageEditor.prototype.drawShapeObj = function (canvas, shape) {\n var currentShape = shape !== undefined ? shape : this.currObjType.shape;\n this.currObjType.shape = currentShape;\n var canvasDraw;\n if (canvas.toLowerCase() === 'original') {\n canvasDraw = this.lowerContext;\n }\n else {\n canvasDraw = this.upperContext;\n }\n if (this.currObjType.shape.toLowerCase() === 'rectangle' || this.currObjType.shape.toLowerCase() === 'ellipse'\n || this.currObjType.shape.toLowerCase() === 'line') {\n this.activeObj.shape = this.currObjType.shape;\n }\n canvasDraw.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n if (shape === 'text' || shape === 'freehanddraw') {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n }\n else {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.fillColor;\n }\n var horLineWidth = this.activeObj.activePoint.width / 3;\n var verLineHeight = this.activeObj.activePoint.height / 3;\n var selectionWidth = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n var selectionHeight = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n switch (this.currObjType.shape.toLowerCase()) {\n case 'rectangle':\n this.drawSquareLines(canvasDraw);\n if (canvasDraw === this.upperContext) {\n this.drawOuterSelection(canvasDraw);\n }\n break;\n case 'ellipse':\n canvasDraw.beginPath();\n canvasDraw.ellipse(this.activeObj.activePoint.startX + (selectionWidth / 2), this.activeObj.activePoint.startY + (selectionHeight / 2), selectionWidth / 2, selectionHeight / 2, 0, 0, 2 * Math.PI, false);\n if (this.activeObj.strokeSettings.fillColor !== '') {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.fillColor;\n canvasDraw.fill();\n }\n canvasDraw.ellipse(this.activeObj.activePoint.startX + (selectionWidth / 2), this.activeObj.activePoint.startY + (selectionHeight / 2), (selectionWidth / 2) - (this.activeObj.strokeSettings.strokeWidth), (selectionHeight / 2) - (this.activeObj.strokeSettings.strokeWidth), 0, 0, 2 * Math.PI, false);\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n canvasDraw.fill('evenodd');\n canvasDraw.closePath();\n if (canvasDraw === this.upperContext) {\n this.drawOuterSelection(canvasDraw);\n }\n break;\n case 'crop-circle':\n this.shapeCircle(canvasDraw, selectionWidth, selectionHeight);\n break;\n case 'line':\n this.shapeLine(canvasDraw, selectionWidth, selectionHeight);\n if (canvasDraw === this.upperContext) {\n this.drawOuterSelection(canvasDraw);\n }\n break;\n case 'text':\n this.shapeText(canvasDraw);\n break;\n case 'crop-square':\n case 'crop-3:4':\n case 'crop-4:3':\n case 'crop-6:9':\n case 'crop-9:6':\n case 'crop-9:16':\n case 'crop-16:9':\n this.drawSelection(horLineWidth, verLineHeight);\n this.currObjType.shape = '';\n break;\n default:\n this.drawSelection(horLineWidth, verLineHeight);\n break;\n }\n };\n ImageEditor.prototype.shapeLine = function (canvasDraw, selectionWidth, selectionHeight) {\n var startX;\n var startY;\n var endX;\n var endY;\n var degree;\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree % 180 === 0) {\n startX = this.activeObj.activePoint.startX;\n startY = this.activeObj.activePoint.startY + (selectionHeight / 2);\n endX = this.activeObj.activePoint.endX;\n endY = this.activeObj.activePoint.startY + (selectionHeight / 2);\n }\n else {\n startX = this.activeObj.activePoint.startX + (selectionWidth / 2);\n startY = this.activeObj.activePoint.startY;\n endX = this.activeObj.activePoint.startX + (selectionWidth / 2);\n endY = this.activeObj.activePoint.endY;\n }\n var tempLineWidth = canvasDraw.lineWidth;\n canvasDraw.lineWidth = (this.activeObj.strokeSettings.strokeWidth) / Math.abs(this.factor);\n canvasDraw.beginPath();\n switch (this.activeObj.lineDraw.toLowerCase()) {\n case 'horizontal':\n case 'vertical':\n canvasDraw.moveTo(startX, startY);\n canvasDraw.lineTo(endX, endY);\n break;\n case 'normal':\n canvasDraw.moveTo(this.activeObj.horTopLine.startX, this.activeObj.horTopLine.startY);\n canvasDraw.lineTo(this.activeObj.horBottomLine.endX, this.activeObj.horBottomLine.endY);\n break;\n }\n canvasDraw.stroke();\n canvasDraw.lineWidth = tempLineWidth;\n };\n ImageEditor.prototype.shapeText = function (canvasDraw) {\n var rows = this.activeObj.keyHistory.split('\\n');\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n var lineHeight = ((height * rows.length) - (this.activeObj.textSettings.fontSize * rows.length)) / rows.length;\n for (var i = 0; i < rows.length; i++) {\n var text = rows[i];\n var yPoint = ((i + 1) * this.activeObj.textSettings.fontSize * 0.85) + (i * lineHeight);\n if (this.degree === -360) {\n this.degree = 0;\n }\n if (this.degree === 0 || this.degree === 180) {\n if (this.activeObj.textSettings.fontSize > this.activeObj.activePoint.height) {\n this.activeObj.textSettings.fontSize = this.activeObj.activePoint.height -\n (this.activeObj.activePoint.height * 0.1);\n }\n }\n else {\n if (this.activeObj.textSettings.fontSize > this.activeObj.activePoint.width) {\n this.activeObj.textSettings.fontSize = this.activeObj.activePoint.width -\n (this.activeObj.activePoint.width * 0.1);\n }\n }\n canvasDraw.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n var textStyle = '';\n if (this.activeObj.textSettings.bold) {\n textStyle = 'bold ';\n }\n if (this.activeObj.textSettings.italic) {\n textStyle = 'italic ';\n }\n if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n textStyle = 'italic bold ';\n }\n canvasDraw.font = textStyle + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n if (this.activeObj.flipObjColl.length === 4) {\n this.activeObj.flipObjColl = [];\n }\n for (var j = 0; j < this.activeObj.flipObjColl.length; j++) {\n if (this.activeObj.flipObjColl[j].toLowerCase() === 'horizontal') {\n this.lowerContext.translate(this.lowerContext.canvas.width, 0);\n this.lowerContext.scale(-1, 1);\n this.upperContext.translate(this.upperContext.canvas.width, 0);\n this.upperContext.scale(-1, 1);\n this.updateActPoint('horizontal');\n }\n else if (this.activeObj.flipObjColl[j].toLowerCase() === 'vertical') {\n this.lowerContext.translate(0, this.lowerContext.canvas.height);\n this.lowerContext.scale(1, -1);\n this.upperContext.translate(0, this.upperContext.canvas.height);\n this.upperContext.scale(1, -1);\n this.updateActPoint('vertical');\n }\n }\n if (this.activeObj.shapeDegree !== this.degree) {\n this.rotateText(canvasDraw);\n }\n else {\n canvasDraw.fillText(text, this.activeObj.activePoint.startX + this.activeObj.textSettings.fontSize * 0.1, this.activeObj.activePoint.startY + yPoint);\n }\n for (var k = 0; k < this.activeObj.flipObjColl.length; k++) {\n if (this.activeObj.flipObjColl[k].toLowerCase() === 'horizontal') {\n this.lowerContext.translate(this.lowerContext.canvas.width, 0);\n this.lowerContext.scale(-1, 1);\n this.upperContext.translate(this.upperContext.canvas.width, 0);\n this.upperContext.scale(-1, 1);\n this.updateActPoint('horizontal');\n }\n else if (this.activeObj.flipObjColl[k].toLowerCase() === 'vertical') {\n this.lowerContext.translate(0, this.lowerContext.canvas.height);\n this.lowerContext.scale(1, -1);\n this.upperContext.translate(0, this.upperContext.canvas.height);\n this.upperContext.scale(1, -1);\n this.updateActPoint('vertical');\n }\n }\n }\n this.currObjType.isText = false;\n };\n ImageEditor.prototype.updateActPoint = function (degree) {\n var ratio = this.calcRatio();\n if (degree.toLowerCase() === 'horizontal') {\n if (this.activeObj.activePoint.startX <= this.lowerCanvas.width / 2) {\n this.activeObj.activePoint.startX = this.lowerCanvas.width / 2 + ((this.lowerCanvas.width / 2) -\n this.activeObj.activePoint.endX);\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n }\n else if (this.activeObj.activePoint.startX >= this.lowerCanvas.width / 2) {\n this.activeObj.activePoint.startX = this.lowerCanvas.width - this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n }\n }\n else if (degree.toLowerCase() === 'vertical') {\n if (this.activeObj.activePoint.startY <= this.lowerCanvas.height / 2) {\n this.activeObj.activePoint.startY = this.lowerCanvas.height / 2 + ((this.lowerCanvas.height / 2) -\n this.activeObj.activePoint.endY);\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n }\n else if (this.activeObj.activePoint.startY >= this.lowerCanvas.height / 2) {\n this.activeObj.activePoint.startY = this.lowerCanvas.height - this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n }\n }\n };\n ImageEditor.prototype.drawSquareLines = function (canvasDraw) {\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords[0] === 'crop') {\n canvasDraw.strokeStyle = '#fff';\n }\n else {\n canvasDraw.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n }\n canvasDraw.beginPath();\n canvasDraw.rect(this.activeObj.activePoint.startX, this.activeObj.activePoint.startY, this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n if (this.activeObj.strokeSettings.fillColor !== '') {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.fillColor;\n canvasDraw.fill();\n }\n canvasDraw.rect(this.activeObj.activePoint.startX + this.activeObj.strokeSettings.strokeWidth, this.activeObj.activePoint.startY + this.activeObj.strokeSettings.strokeWidth, this.activeObj.activePoint.width - (2 * this.activeObj.strokeSettings.strokeWidth), this.activeObj.activePoint.height - (2 * this.activeObj.strokeSettings.strokeWidth));\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n canvasDraw.fill('evenodd');\n canvasDraw.closePath();\n };\n ImageEditor.prototype.drawSelection = function (horLineWidth, verLineHeight) {\n this.upperContext.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n this.upperContext.beginPath();\n this.activeObj.horTopInnerLine = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY +\n verLineHeight, endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY + verLineHeight };\n this.activeObj.horBottomInnerLine = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY +\n (2 * verLineHeight), endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY + (2 * verLineHeight) };\n this.activeObj.verLeftInnerLine = { startX: this.activeObj.activePoint.startX + horLineWidth,\n startY: this.activeObj.activePoint.startY, endX: this.activeObj.activePoint.startX + horLineWidth,\n endY: this.activeObj.activePoint.endY };\n this.activeObj.verRightInnerLine = { startX: this.activeObj.activePoint.startX + (2 * horLineWidth),\n startY: this.activeObj.activePoint.startY, endX: this.activeObj.activePoint.startX + (2 * horLineWidth),\n endY: this.activeObj.activePoint.endY };\n this.upperContext.moveTo(this.activeObj.horTopInnerLine.startX, this.activeObj.horTopInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.horTopInnerLine.endX, this.activeObj.horTopInnerLine.startY);\n this.upperContext.moveTo(this.activeObj.horBottomInnerLine.startX, this.activeObj.horBottomInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.horBottomInnerLine.endX, this.activeObj.horBottomInnerLine.startY);\n this.upperContext.moveTo(this.activeObj.verLeftInnerLine.startX, this.activeObj.verLeftInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.verLeftInnerLine.endX, this.activeObj.verLeftInnerLine.endY);\n this.upperContext.moveTo(this.activeObj.verRightInnerLine.startX, this.activeObj.verRightInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.verRightInnerLine.endX, this.activeObj.verRightInnerLine.endY);\n this.upperContext.stroke();\n this.upperContext.closePath();\n };\n ImageEditor.prototype.drawCenterCircles = function (canvasDraw) {\n canvasDraw.lineWidth *= 2;\n canvasDraw.beginPath();\n canvasDraw.moveTo(this.activeObj.topCenterCircle.startX, this.activeObj.topCenterCircle.startY);\n canvasDraw.arc(this.activeObj.topCenterCircle.startX, this.activeObj.topCenterCircle.startY, this.activeObj.topCenterCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(this.activeObj.centerLeftCircle.startX, this.activeObj.centerLeftCircle.startY);\n canvasDraw.arc(this.activeObj.centerLeftCircle.startX, this.activeObj.centerLeftCircle.startY, this.activeObj.centerLeftCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(this.activeObj.centerRightCircle.startX, this.activeObj.centerRightCircle.startY);\n canvasDraw.arc(this.activeObj.centerRightCircle.startX, this.activeObj.centerRightCircle.startY, this.activeObj.centerRightCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(this.activeObj.bottomCenterCircle.startX, this.activeObj.bottomCenterCircle.startY);\n canvasDraw.arc(this.activeObj.bottomCenterCircle.startX, this.activeObj.bottomCenterCircle.startY, this.activeObj.bottomCenterCircle.radius, 0, 2 * Math.PI);\n canvasDraw.stroke();\n canvasDraw.fill();\n canvasDraw.closePath();\n canvasDraw.lineWidth /= 2;\n };\n ImageEditor.prototype.findTarget = function (x, y, type) {\n var bbox = this.upperCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n y = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n }\n if (type.toLowerCase() === 'mousedown' || type.toLowerCase() === 'touchstart') {\n var splitWords = void 0;\n var isCrop = false;\n if (this.activeObj.shape) {\n splitWords = this.activeObj.shape.split('-');\n if (splitWords[0] === 'crop') {\n isCrop = true;\n }\n }\n this.findTargetObj(x, y, ratio, isCrop);\n this.updateCursorStyles(x, y, ratio, type);\n }\n else {\n switch (this.dragElement.toLowerCase()) {\n case 'nw-resize':\n this.activeObj.topLeftCircle.startX = x;\n this.activeObj.topLeftCircle.startY = y;\n break;\n case 'n-resize':\n this.activeObj.topCenterCircle.startX = x;\n this.activeObj.topCenterCircle.startY = y;\n break;\n case 'ne-resize':\n this.activeObj.topRightCircle.startX = x;\n this.activeObj.topRightCircle.startY = y;\n break;\n case 'w-resize':\n this.activeObj.centerLeftCircle.startX = x;\n this.activeObj.centerLeftCircle.startY = y;\n break;\n case 'e-resize':\n this.activeObj.centerRightCircle.startX = x;\n this.activeObj.centerRightCircle.startY = y;\n break;\n case 'sw-resize':\n this.activeObj.bottomLeftCircle.startX = x;\n this.activeObj.bottomLeftCircle.startY = y;\n break;\n case 's-resize':\n this.activeObj.bottomCenterCircle.startX = x;\n this.activeObj.bottomCenterCircle.startY = y;\n break;\n case 'se-resize':\n this.activeObj.bottomRightCircle.startX = x;\n this.activeObj.bottomRightCircle.startY = y;\n break;\n default:\n if (this.dragPoint.startX && this.dragPoint.startY) {\n this.previousPoint.x = this.dragPoint.endX;\n this.previousPoint.y = this.dragPoint.endY;\n this.dragPoint.endX = x;\n this.dragPoint.endY = y;\n }\n break;\n }\n }\n };\n ImageEditor.prototype.findTargetObj = function (x, y, ratio, isCrop) {\n if (this.objColl.length !== 0 && !this.currObjType.isCustomCrop && !isCrop) {\n var diffX = 0;\n var i = void 0;\n for (var index = 0; index < this.objColl.length; index++) {\n var actObj = extend({}, this.objColl[index], {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio);\n }\n if (x >= (actObj.activePoint.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.activePoint.endX + actObj.topLeftCircle.radius) &&\n y >= (actObj.activePoint.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.activePoint.endY + actObj.topLeftCircle.radius)) {\n if (diffX === 0 || diffX > x - actObj.activePoint.startX) {\n diffX = x - this.objColl[index].activePoint.startX;\n i = index;\n }\n }\n }\n if (isNullOrUndefined(i)) {\n this.refreshActiveObj();\n return;\n }\n this.tempObjColl = extend([], this.objColl, [], true);\n this.currObjType.isCustomCrop = false;\n var temp = this.activeObj = extend({}, this.objColl[i], {}, true);\n this.objColl.splice(i, 1);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n if (this.degree === 0) {\n this.inMemoryContext.putImageData(this.imgDataColl[0].value, 0, 0);\n }\n else {\n if ((this.adjustmentLevel.sharpen || this.adjustmentLevel.bw) && !this.sharpenedImgData) {\n var data = void 0;\n var tempImageData = this.currImgData;\n if (this.adjustmentLevel.sharpen) {\n data = this.getSharpenData(this.currImgData);\n }\n else {\n data = this.getBlackAndWhiteData(tempImageData);\n }\n this.currImgData = data;\n this.sharpenedImgData = true;\n }\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n }\n if (this.flipState !== '') {\n if ((this.adjustmentLevel.sharpen || this.adjustmentLevel.bw) && !this.sharpenedImgData) {\n var data = void 0;\n var tempImageData = this.currImgData;\n if (this.adjustmentLevel.sharpen) {\n data = this.getSharpenData(this.currImgData);\n }\n else {\n data = this.getBlackAndWhiteData(tempImageData);\n }\n this.currImgData = data;\n this.sharpenedImgData = true;\n }\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n }\n this.setActivePoint();\n this.upperContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = this.canvasFilter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.activeObj = extend({}, temp, {}, true);\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n if (this.factor !== 1 && (this.activeObj.activePoint.startX < this.pannStart.startX || this.activeObj.activePoint.startY <\n this.pannStart.startY) || (this.activeObj.activePoint.endX > endPoint.x || this.activeObj.activePoint.endY > endPoint.y)) {\n this.allowDrag = true;\n }\n this.tempStrokeSettings = extend({}, this.activeObj.strokeSettings, {}, true);\n this.tempTextSettings = extend({}, this.activeObj.textSettings, {}, true);\n if (this.activeObj.shape === 'text' && this.activeObj.shapeFlip !== this.currFlipState) {\n this.activeObj.flippedText = true;\n }\n if (this.activeObj.activePoint) {\n this.drawObject('duplicate', this.activeObj);\n }\n var shapeChangingArgs = { action: 'select', previousShapeSettings: this.activeObj, currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n }\n };\n ImageEditor.prototype.updateCursorStyles = function (x, y, ratio, type) {\n var isResize = false;\n if (this.activeObj.keyHistory !== '' && this.activeObj.shape === undefined && !this.currObjType.isCustomCrop &&\n !this.currObjType.isLine && this.currObjType.isText) {\n this.activeObj.shape = 'text';\n }\n var actObj = extend({}, this.activeObj, {}, true);\n if (isNullOrUndefined(actObj.topLeftCircle)) {\n return;\n }\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (x >= (actObj.topLeftCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.topLeftCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.topLeftCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.topLeftCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'nw-resize') {\n actObj.topLeftCircle.startX = actObj.topLeftCircle.startY = 0;\n this.upperCanvas.style.cursor = 'nw-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.topCenterCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.topCenterCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.topCenterCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.topCenterCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'n-resize') {\n actObj.topCenterCircle.startX = actObj.topCenterCircle.startY = 0;\n this.upperCanvas.style.cursor = 'n-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.topRightCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.topRightCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.topRightCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.topRightCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'ne-resize') {\n actObj.topRightCircle.startX = actObj.topRightCircle.startY = 0;\n this.upperCanvas.style.cursor = 'ne-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.centerLeftCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.centerLeftCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.centerLeftCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.centerLeftCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'w-resize') {\n actObj.centerLeftCircle.startX = actObj.centerLeftCircle.startY = 0;\n this.upperCanvas.style.cursor = 'w-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.centerRightCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.centerRightCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.centerRightCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.centerRightCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'e-resize') {\n actObj.centerRightCircle.startX = actObj.centerRightCircle.startY = 0;\n this.upperCanvas.style.cursor = 'e-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.bottomLeftCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.bottomLeftCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.bottomLeftCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.bottomLeftCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'sw-resize') {\n actObj.bottomLeftCircle.startX = actObj.bottomLeftCircle.startY = 0;\n this.upperCanvas.style.cursor = 'sw-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.bottomCenterCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.bottomCenterCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.bottomCenterCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.bottomCenterCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 's-resize') {\n actObj.bottomCenterCircle.startX = actObj.bottomCenterCircle.startY = 0;\n this.upperCanvas.style.cursor = 's-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.bottomRightCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.bottomRightCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.bottomRightCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.bottomRightCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'se-resize') {\n actObj.bottomRightCircle.startX = actObj.bottomRightCircle.startY = 0;\n this.upperCanvas.style.cursor = 'se-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else {\n this.dragPoint.startX = this.previousPoint.x = this.dragPoint.endX = x;\n this.dragPoint.startY = this.previousPoint.y = this.dragPoint.endY = y;\n }\n this.previousPoint.x = this.previousPoint.y = this.diffPoint.x = this.diffPoint.y = 0;\n if (type === 'touchstart') {\n if (isResize || (x >= actObj.activePoint.startX && x <= actObj.activePoint.endX\n && y >= actObj.activePoint.startY && y <= actObj.activePoint.endY)) {\n this.currObjType.isDragging = true;\n }\n }\n else {\n this.currObjType.isDragging = true;\n }\n };\n ImageEditor.prototype.drawCropRatio = function () {\n var x;\n var y;\n switch (this.currObjType.shape.toLowerCase()) {\n case 'crop-square':\n case 'crop-circle':\n this.setDragDirection();\n if (this.lowerCanvas.width > this.lowerCanvas.height) {\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.activeObj.activePoint.width = this.activeObj.activePoint.height;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n }\n else {\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.width;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n }\n break;\n case 'crop-3:2':\n x = 3;\n y = 2;\n break;\n case 'crop-4:3':\n x = 4;\n y = 3;\n break;\n case 'crop-5:4':\n x = 5;\n y = 4;\n break;\n case 'crop-7:5':\n x = 7;\n y = 5;\n break;\n case 'crop-16:9':\n x = 16;\n y = 9;\n break;\n }\n if (x !== undefined && y !== undefined) {\n this.calcShapeRatio(x, y);\n }\n };\n ImageEditor.prototype.setDragDirection = function () {\n var ratio = this.calcRatio();\n var arcRadius = (7.5 * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor;\n if (this.lowerCanvas.width > this.lowerCanvas.height) {\n if (this.factor === 1) {\n this.activeObj.activePoint.startX = this.dragPoint.startX = ((this.lowerCanvas.width / 2) - (this.lowerCanvas.height / 2))\n + arcRadius;\n this.activeObj.activePoint.startY = this.dragPoint.startY = ((this.lowerCanvas.height / 2) - (this.lowerCanvas.height / 2))\n + arcRadius;\n this.activeObj.activePoint.endX = ((this.lowerCanvas.width / 2) + (this.lowerCanvas.height / 2)) - arcRadius;\n this.activeObj.activePoint.endY = ((this.lowerCanvas.height / 2) + (this.lowerCanvas.height / 2)) - arcRadius;\n }\n else {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n var visibleWidth = endPoint.x - this.pannStart.startX;\n var visibleHeight = endPoint.y - this.pannStart.startY;\n var centerX = (this.dragPoint.startX = visibleWidth / 2) + this.pannStart.startX;\n var centerY = this.dragPoint.startY = visibleHeight / 2;\n this.activeObj.activePoint.startX = (centerX - centerY) + arcRadius;\n this.activeObj.activePoint.startY = (this.pannStart.startY) + arcRadius;\n this.activeObj.activePoint.endX = (this.activeObj.activePoint.startX + visibleHeight) - arcRadius;\n this.activeObj.activePoint.endY = (this.activeObj.activePoint.startY + visibleHeight) - (2 * arcRadius);\n }\n }\n else {\n if (this.factor === 1) {\n this.activeObj.activePoint.startY = this.dragPoint.startX = ((this.lowerCanvas.height / 2) - (this.lowerCanvas.width) / 2)\n + arcRadius;\n this.activeObj.activePoint.endY = ((this.lowerCanvas.height / 2) + (this.lowerCanvas.width) / 2) - arcRadius;\n this.activeObj.activePoint.startX = this.dragPoint.startX = arcRadius;\n this.activeObj.activePoint.endX = this.lowerCanvas.width - arcRadius;\n }\n else {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n var visibleWidth = endPoint.x - this.pannStart.startX;\n var visibleHeight = endPoint.y - this.pannStart.startY;\n var centerX = this.dragPoint.startX = visibleWidth / 2;\n var centerY = (this.dragPoint.startY = visibleHeight / 2) + this.pannStart.startY;\n this.activeObj.activePoint.startX = this.pannStart.startX + arcRadius;\n this.activeObj.activePoint.startY = (centerY - centerX) + arcRadius;\n this.activeObj.activePoint.endX = (this.activeObj.activePoint.startX + visibleWidth) - arcRadius;\n this.activeObj.activePoint.endY = (this.activeObj.activePoint.startY + visibleWidth) - arcRadius;\n }\n }\n };\n ImageEditor.prototype.calcShapeRatio = function (x, y) {\n var ratio = this.calcRatio();\n var arcRadius = (7.5 * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor;\n var originalWidth = this.factor === 1 ? this.lowerCanvas.width : this.lowerCanvas.width / this.factor;\n var originalHeight = this.factor === 1 ? this.lowerCanvas.height : this.lowerCanvas.height / this.factor;\n var presetRatio = x / y;\n var standardSize = originalWidth >= originalHeight ? originalWidth : originalHeight;\n var width = standardSize * presetRatio;\n var height = standardSize;\n var scaleWidth = this.getScale(width, originalWidth);\n var snippetArray = [];\n for (var i = 0; i < 2; i++) {\n if (i === 0) {\n snippetArray.push(width * scaleWidth);\n }\n else {\n snippetArray.push(height * scaleWidth);\n }\n }\n width = snippetArray[0];\n height = snippetArray[1];\n var scaleHeight = this.getScale(height, originalHeight);\n var snippetArray1 = [];\n for (var i = 0; i < 2; i++) {\n if (i === 0) {\n snippetArray1.push(width * scaleHeight);\n }\n else {\n snippetArray1.push(height * scaleHeight);\n }\n }\n width = snippetArray1[0];\n height = snippetArray1[1];\n this.activeObj.activePoint.width = width;\n this.activeObj.activePoint.height = height;\n this.activeObj.activePoint.startX = (this.dragPoint.startX = (originalWidth - width) / 2) + arcRadius;\n this.activeObj.activePoint.startY = (this.dragPoint.startY = (originalHeight - height) / 2) + arcRadius;\n this.activeObj.activePoint.endX = ((originalWidth - width) / 2 + width) - arcRadius;\n this.activeObj.activePoint.endY = ((originalHeight - height) / 2 + height) - arcRadius;\n if (this.factor !== 1) {\n this.activeObj.activePoint.startX += this.pannStart.startX;\n this.activeObj.activePoint.startY += this.pannStart.startY;\n this.activeObj.activePoint.endX += this.pannStart.startX;\n this.activeObj.activePoint.endY += this.pannStart.startY;\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n };\n ImageEditor.prototype.getScale = function (value, originalValue) {\n return value > originalValue ? originalValue / value : 1;\n };\n ImageEditor.prototype.calcRatio = function () {\n var widthRatio;\n var heightRatio;\n if (this.degree === 0 || this.degree % 180 === 0) {\n widthRatio = this.baseImg.width / parseInt(this.lowerCanvas.style.maxWidth, 10);\n heightRatio = this.baseImg.height / parseInt(this.lowerCanvas.style.maxHeight, 10);\n }\n else {\n widthRatio = this.baseImg.height / parseInt(this.lowerCanvas.style.maxWidth, 10);\n heightRatio = this.baseImg.width / parseInt(this.lowerCanvas.style.maxHeight, 10);\n }\n return { width: widthRatio, height: heightRatio };\n };\n ImageEditor.prototype.calcMaxDimension = function (width, height) {\n var canvasMaxWidth = this.element.clientWidth;\n var canvasMaxHeight = this.element.clientHeight - this.toolbarHeight;\n canvasMaxHeight = Browser.isDevice ? canvasMaxHeight - this.toolbarHeight : canvasMaxHeight;\n canvasMaxWidth -= 30;\n canvasMaxHeight -= 30;\n var widthScale = canvasMaxWidth / width;\n var heightScale = canvasMaxHeight / height;\n var cssMaxWidth = Math.min(width, canvasMaxWidth);\n var cssMaxHeight = Math.min(height, canvasMaxHeight);\n if (widthScale < 1 && widthScale < heightScale) {\n cssMaxWidth = width * widthScale;\n cssMaxHeight = height * widthScale;\n }\n else if (heightScale < 1 && heightScale < widthScale) {\n cssMaxWidth = width * heightScale;\n cssMaxHeight = height * heightScale;\n }\n return { width: cssMaxWidth, height: cssMaxHeight };\n };\n ImageEditor.prototype.setMaximumDimension = function (degree) {\n var newWidth;\n var newHeight;\n if (degree % 90 === 0 && degree % 180 !== 0) {\n newWidth = this.baseImg.height;\n newHeight = this.baseImg.width;\n }\n else if (degree % 180 === 0 || degree === 0) {\n newWidth = this.baseImg.width;\n newHeight = this.baseImg.height;\n }\n this.lowerCanvas.width = this.upperCanvas.width = newWidth;\n this.lowerCanvas.height = this.upperCanvas.height = newHeight;\n var maxDimension = this.calcMaxDimension(newWidth, newHeight);\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n };\n ImageEditor.prototype.setCursor = function (x, y) {\n var bbox = this.upperCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n y = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n }\n if (this.activeObj.horTopLine !== undefined) {\n if (this.togglePan) {\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'grab';\n }\n else {\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (x >= (actObj.topLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'nw-resize';\n }\n else if (x >= (actObj.topCenterCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topCenterCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topCenterCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topCenterCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'n-resize';\n }\n else if (x >= (actObj.topRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'ne-resize';\n }\n else if (x >= (actObj.centerLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.centerLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.centerLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.centerLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'w-resize';\n }\n else if (x >= (actObj.centerRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.centerRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.centerRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.centerRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'e-resize';\n }\n else if (x >= (actObj.bottomLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'sw-resize';\n }\n else if (x >= (actObj.bottomCenterCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomCenterCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomCenterCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomCenterCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 's-resize';\n }\n else if (x >= (actObj.bottomRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'se-resize';\n }\n else if ((x >= actObj.activePoint.startX &&\n x <= actObj.activePoint.endX) && (y >= actObj.activePoint.startY &&\n y <= actObj.activePoint.endY)) {\n this.upperCanvas.style.cursor = 'move';\n }\n else {\n if (this.currObjType.isCustomCrop) {\n this.upperCanvas.style.cursor = 'crosshair';\n }\n this.upperCanvas.style.cursor = 'default';\n }\n }\n }\n else if (this.togglePan) {\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'grab';\n }\n else {\n if (this.currObjType.isCustomCrop || this.togglePen) {\n this.upperCanvas.style.cursor = 'crosshair';\n }\n else {\n this.upperCanvas.style.cursor = 'default';\n }\n }\n if (this.upperCanvas.style.cursor === 'default') {\n if (this.objColl.length > 0) {\n this.setCursorFromObj(x, y, this.objColl, ratio);\n }\n }\n };\n ImageEditor.prototype.setCursorFromObj = function (x, y, obj, ratio) {\n if (this.togglePan) {\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'grab';\n }\n else {\n for (var i = 0; i < obj.length; i++) {\n var actObj = extend({}, obj[i], {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(obj[i], ratio, true);\n }\n if (x >= (actObj.topLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'nw-resize';\n break;\n }\n else if (x >= (actObj.topCenterCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topCenterCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topCenterCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topCenterCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'n-resize';\n break;\n }\n else if (x >= (actObj.topRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'ne-resize';\n break;\n }\n else if (x >= (actObj.centerLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.centerLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.centerLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.centerLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'w-resize';\n break;\n }\n else if (x >= (actObj.centerRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.centerRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.centerRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.centerRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'e-resize';\n break;\n }\n else if (x >= (actObj.bottomLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'sw-resize';\n break;\n }\n else if (x >= (actObj.bottomCenterCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomCenterCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomCenterCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomCenterCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 's-resize';\n break;\n }\n else if (x >= (actObj.bottomRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'se-resize';\n break;\n }\n else if ((x >= actObj.activePoint.startX &&\n x <= actObj.activePoint.endX) && (y >= actObj.activePoint.startY &&\n y <= actObj.activePoint.endY)) {\n this.upperCanvas.style.cursor = 'move';\n break;\n }\n else {\n if (this.currObjType.isCustomCrop) {\n this.upperCanvas.style.cursor = 'crosshair';\n }\n this.upperCanvas.style.cursor = 'default';\n }\n }\n }\n };\n ImageEditor.prototype.setCursorForZoomState = function (obj, ratio, isMouseMove) {\n var tempObj = extend({}, obj, {}, true);\n tempObj.activePoint.startX = (tempObj.activePoint.startX / ratio.width) * this.factor;\n tempObj.activePoint.startY = (tempObj.activePoint.startY / ratio.width) * this.factor;\n tempObj.activePoint.endX = (tempObj.activePoint.endX / ratio.width) * this.factor;\n tempObj.activePoint.endY = (tempObj.activePoint.endY / ratio.width) * this.factor;\n tempObj.activePoint.width = tempObj.activePoint.endX - tempObj.activePoint.startX;\n tempObj.activePoint.height = tempObj.activePoint.endY - tempObj.activePoint.startY;\n this.updateActiveObject(ratio, tempObj.activePoint, tempObj, isMouseMove);\n tempObj.topLeftCircle.radius = (tempObj.topLeftCircle.radius / ratio.width) * this.factor;\n return tempObj;\n };\n ImageEditor.prototype.downloadImg = function (blob, fileName) {\n var a = document.createElement('a');\n a.href = blob;\n a.target = '_parent';\n a.download = fileName;\n (document.body || document.documentElement).appendChild(a);\n a.click();\n a.parentNode.removeChild(a);\n };\n ImageEditor.prototype.toSVGImg = function (fileName) {\n var dataUrl = this.lowerCanvas.toDataURL();\n var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('width', this.lowerCanvas.style.maxWidth);\n svg.setAttribute('height', this.lowerCanvas.style.maxHeight);\n var XLinkNS = 'http://www.w3.org/1999/xlink';\n var img = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n img.setAttributeNS(null, 'height', this.lowerCanvas.height.toString());\n img.setAttributeNS(null, 'width', this.lowerCanvas.width.toString());\n img.setAttributeNS(XLinkNS, 'xlink:href', dataUrl);\n svg.appendChild(img);\n var prefix = 'data:image/svg+xml;base64,';\n var header = '<svg' + ' xmlns=\"http://www.w3.org/2000/svg\"' + ' xmlns:xlink=\"http://www.w3.org/1999/xlink\"'\n + (\" width=\\\"\" + this.lowerCanvas.width + \"\\\"\") + (\" height=\\\"\" + this.lowerCanvas.height + \"\\\"\") + '>';\n var footer = '</svg>';\n var body = svg.innerHTML;\n var data = header + body + footer;\n var svgDataUrl = prefix + btoa(data);\n if (fileName === null) {\n return svgDataUrl;\n }\n else {\n this.downloadImg(svgDataUrl, fileName + '.' + 'svg');\n return null;\n }\n };\n ImageEditor.prototype.toBlobFn = function (fileName, type) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.lowerCanvas.toBlob(function (blob) {\n var blobUrl = URL.createObjectURL(blob);\n //proxy.baseImg.src = blobUrl;\n proxy.downloadImg(blobUrl, fileName + '.' + type);\n }, 'image/png');\n };\n ImageEditor.prototype.addLetter = function (letter) {\n if (this.textBox.style.display === 'none' && (this.currObjType.isText || this.activeObj.shape === 'text')) {\n if (letter === 'Backspace') {\n this.keyHistory = this.keyHistory.slice(0, -1);\n }\n else {\n this.keyHistory += letter;\n }\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.updateFontStyles();\n var width = this.upperContext.measureText(this.keyHistory + this.tempKeyHistory).width\n + this.activeObj.textSettings.fontSize * 0.5;\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n this.upperContext.fillText(this.keyHistory + this.tempKeyHistory, this.activeObj.activePoint.startX, this.activeObj.activePoint.startY +\n this.activeObj.textSettings.fontSize);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.currObjType.isText = true;\n this.setActivePoint(width, height);\n }\n };\n ImageEditor.prototype.updateFontStyles = function (isTextBox) {\n this.upperContext.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n this.upperContext.fillStyle = this.activeObj.strokeSettings.strokeColor;\n var textStyle = '';\n if (this.activeObj.textSettings.bold) {\n textStyle = 'bold ';\n }\n if (this.activeObj.textSettings.italic) {\n textStyle = 'italic ';\n }\n if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n textStyle = 'italic bold ';\n }\n var fontSize = isTextBox ? parseFloat(this.textBox.style.fontSize) : this.activeObj.textSettings.fontSize;\n var fontFamily = this.textBox.style.display === 'block' ? this.textBox.style.fontFamily : this.activeObj.textSettings.fontFamily;\n this.upperContext.font = textStyle + fontSize + 'px' + ' ' + fontFamily;\n };\n ImageEditor.prototype.updateInMemoryCanvas = function (operation) {\n if (!this.disabled) {\n var imgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.imgDataColl.push({ operation: operation, value: imgData });\n this.inMemoryCanvas.width = imgData.width;\n this.inMemoryCanvas.height = imgData.height;\n this.inMemoryContext.putImageData(imgData, 0, 0);\n }\n };\n ImageEditor.prototype.calcPrevRatio = function () {\n var oldWidthRatio;\n var oldHeightRatio;\n var maxDimension;\n if (this.degree === 0 || this.degree % 180 === 0) {\n maxDimension = this.calcMaxDimension(this.baseImg.height, this.baseImg.width);\n oldWidthRatio = this.baseImg.height / maxDimension.width;\n oldHeightRatio = this.baseImg.width / maxDimension.height;\n }\n else {\n maxDimension = this.calcMaxDimension(this.baseImg.width, this.baseImg.height);\n oldWidthRatio = this.baseImg.width / maxDimension.width;\n oldHeightRatio = this.baseImg.height / maxDimension.height;\n }\n return { width: oldWidthRatio, height: oldHeightRatio };\n };\n ImageEditor.prototype.textFlipDegree = function (canvasDraw, startX, startY) {\n var rows = this.activeObj.keyHistory.split('\\n');\n var height = this.activeObj.textSettings.fontSize;\n var lineHeight = ((height * rows.length) - (this.activeObj.textSettings.fontSize * rows.length)) / rows.length;\n var yPoint = (this.activeObj.textSettings.fontSize * 0.85) + lineHeight;\n for (var i = 0; i < rows.length; i++) {\n var text = rows[i];\n if (i > 0) {\n if (i === 1) {\n yPoint -= (this.activeObj.textSettings.fontSize * 0.85);\n }\n yPoint += this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.15;\n }\n canvasDraw.fillText(text, startX + this.activeObj.textSettings.fontSize * 0.15, startY +\n yPoint + (i > 0 ? this.activeObj.textSettings.fontSize * 0.25 : -this.activeObj.textSettings.fontSize * 0.35));\n }\n };\n ImageEditor.prototype.rotateText = function (canvasDraw) {\n var startX = this.activeObj.activePoint.startX;\n var startY = this.activeObj.activePoint.startY;\n var degree;\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (degree % 360 === 0 && (this.degree !== -360 || this.currFlipState === '')) {\n startX = this.activeObj.activePoint.startX + this.activeObj.textSettings.fontSize * 0.15;\n startY = this.activeObj.activePoint.startY + (this.activeObj.activePoint.endY - this.activeObj.activePoint.startY);\n var rows = this.activeObj.keyHistory.split('\\n');\n for (var i = 0; i < rows.length; i++) {\n startY = this.activeObj.activePoint.startY + (i * this.activeObj.textSettings.fontSize +\n this.activeObj.textSettings.fontSize * 0.25);\n canvasDraw.fillText(rows[i], startX, startY);\n }\n }\n else if (degree % 90 === 0 && degree % 180 !== 0) {\n canvasDraw.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n canvasDraw.rotate(Math.PI / 180 * degree);\n canvasDraw.translate(-this.lowerCanvas.height / 2, -this.lowerCanvas.width / 2);\n if (degree % 90 === 0 && degree % 270 !== 0) {\n startY = (this.lowerCanvas.width - this.activeObj.activePoint.endX) + this.activeObj.textSettings.fontSize * 0.4;\n startX = this.activeObj.activePoint.startY;\n }\n else if (degree % 270 === 0) {\n startX = this.lowerCanvas.height - this.activeObj.activePoint.endY;\n startY = this.activeObj.activePoint.startX + this.activeObj.textSettings.fontSize * 0.4;\n }\n this.textFlipDegree(canvasDraw, startX, startY);\n canvasDraw.translate(this.lowerCanvas.height / 2, this.lowerCanvas.width / 2);\n canvasDraw.rotate(Math.PI / 180 * -degree);\n canvasDraw.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n }\n else {\n canvasDraw.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n canvasDraw.rotate(Math.PI / 180 * degree);\n startX = this.lowerCanvas.width - this.activeObj.activePoint.endX;\n startY = (this.lowerCanvas.height - this.activeObj.activePoint.endY) + this.activeObj.textSettings.fontSize * 0.4;\n canvasDraw.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n this.textFlipDegree(canvasDraw, startX, startY);\n canvasDraw.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n canvasDraw.rotate(Math.PI / 180 * -degree);\n canvasDraw.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n }\n if (this.degree === 360 || this.degree === -360) {\n this.degree = 0;\n }\n };\n ImageEditor.prototype.redrawSelection = function () {\n var ratio = this.calcRatio();\n this.activeObj.activePoint.startX = 0;\n this.activeObj.activePoint.startY = 0;\n this.activeObj.activePoint.endX = this.lowerCanvas.width;\n this.activeObj.activePoint.endY = this.lowerCanvas.height;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n };\n ImageEditor.prototype.redrawObj = function (degree) {\n if (this.objColl.length > 0) {\n if (degree === 'horizontal' || degree === 'vertical' || degree === 'Horizontal' || degree === 'Vertical') {\n this.updateCurrentActiveObjPoint(degree);\n }\n else if (degree === 90 || degree === -90) {\n this.updateCurrentActiveObjPoint(degree);\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n this.lowerContext.filter = tempFilter;\n }\n else {\n this.updateCurrentActiveObjPoint('zoom');\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n this.lowerContext.filter = tempFilter;\n }\n }\n else if (this.objColl.length === 0 && (degree === 'horizontal' || degree === 'vertical' || degree === 'Horizontal' || degree === 'Vertical')) {\n if (this.activeObj.horTopLine !== undefined && (this.activeObj.shape === undefined)) {\n this.redrawSelection();\n }\n else if (this.activeObj.horTopLine !== undefined && this.activeObj.shape !== undefined) {\n var splitWords = this.activeObj.shape.split('-');\n if (splitWords[0] === 'crop') {\n this.select(splitWords[1]);\n }\n }\n }\n else if ((degree === 'horizontal' || degree === 'vertical' || degree === 'Horizontal' || degree === 'Vertical')) {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords !== undefined && splitWords[0] === 'crop') {\n this.select(splitWords[1]);\n }\n else {\n this.redrawSelection();\n }\n }\n };\n ImageEditor.prototype.updateCurrentActiveObjPoint = function (degree) {\n var oldRatio = this.calcPrevRatio();\n var ratio = this.calcRatio();\n var currActObjIndex;\n for (var index = 0; index < this.objColl.length; index++) {\n if (this.activeObj.shape === this.objColl[index].shape &&\n this.activeObj.activePoint.startX === this.objColl[index].activePoint.startX &&\n this.activeObj.activePoint.startY === this.objColl[index].activePoint.startY &&\n this.activeObj.activePoint.endX === this.objColl[index].activePoint.endX &&\n this.activeObj.activePoint.endY === this.objColl[index].activePoint.endY &&\n this.activeObj.currIndex === this.objColl[index].currIndex) {\n currActObjIndex = index;\n break;\n }\n }\n if (degree === 'horizontal' || degree === 'vertical' || degree === 'Horizontal' || degree === 'Vertical') {\n if (degree === 'horizontal' || degree === 'Horizontal') {\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].activePoint.startX <= this.lowerCanvas.width / 2) {\n this.objColl[i].activePoint.startX = this.lowerCanvas.width / 2 + ((this.lowerCanvas.width / 2) -\n this.objColl[i].activePoint.endX);\n this.objColl[i].activePoint.endX = this.objColl[i].activePoint.startX +\n this.objColl[i].activePoint.width;\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n else if (this.objColl[i].activePoint.startX >= this.lowerCanvas.width / 2) {\n this.objColl[i].activePoint.startX = this.lowerCanvas.width - this.objColl[i].activePoint.endX;\n this.objColl[i].activePoint.endX = this.objColl[i].activePoint.startX +\n this.objColl[i].activePoint.width;\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n }\n }\n else if (degree === 'vertical' || degree === 'Vertical') {\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].activePoint.startY <= this.lowerCanvas.height / 2) {\n this.objColl[i].activePoint.startY = this.lowerCanvas.height / 2 + ((this.lowerCanvas.height / 2) -\n this.objColl[i].activePoint.endY);\n this.objColl[i].activePoint.endY = this.objColl[i].activePoint.startY +\n this.objColl[i].activePoint.height;\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n else if (this.objColl[i].activePoint.startY >= this.lowerCanvas.height / 2) {\n this.objColl[i].activePoint.startY = this.lowerCanvas.height - this.objColl[i].activePoint.endY;\n this.objColl[i].activePoint.endY = this.objColl[i].activePoint.startY +\n this.objColl[i].activePoint.height;\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n }\n }\n if (currActObjIndex !== undefined) {\n this.activeObj = extend({}, this.objColl[currActObjIndex], {}, true);\n }\n }\n else if (degree === 90 || degree === -90) {\n for (var i = 0; i < this.objColl.length; i++) {\n this.objColl[i].activePoint.startX /= oldRatio.width;\n this.objColl[i].activePoint.startY /= oldRatio.height;\n this.objColl[i].activePoint.endX /= oldRatio.width;\n this.objColl[i].activePoint.endY /= oldRatio.height;\n this.objColl[i].activePoint.height = this.objColl[i].activePoint.endX -\n this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.width = this.objColl[i].activePoint.endY -\n this.objColl[i].activePoint.startY;\n this.objColl[i].strokeSettings.strokeWidth /= (oldRatio.width / this.factor);\n this.calcCurrPoints(degree, this.objColl[i]);\n this.objColl[i].activePoint.endX = this.objColl[i].activePoint.startX +\n this.objColl[i].activePoint.width;\n this.objColl[i].activePoint.endY = this.objColl[i].activePoint.startY +\n this.objColl[i].activePoint.height;\n this.objColl[i].activePoint.width = this.objColl[i].activePoint.endX -\n this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.height = this.objColl[i].activePoint.endY -\n this.objColl[i].activePoint.startY;\n }\n for (var i = 0; i < this.objColl.length; i++) {\n this.objColl[i].activePoint.startX *= oldRatio.width;\n this.objColl[i].activePoint.startY *= oldRatio.height;\n this.objColl[i].activePoint.endX *= oldRatio.width;\n this.objColl[i].activePoint.endY *= oldRatio.height;\n this.objColl[i].activePoint.width = this.objColl[i].activePoint.endX -\n this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.height = this.objColl[i].activePoint.endY -\n this.objColl[i].activePoint.startY;\n this.objColl[i].strokeSettings.strokeWidth *= ratio.width;\n }\n for (var i = 0; i < this.objColl.length; i++) {\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n }\n };\n ImageEditor.prototype.calcCurrPoints = function (degree, obj) {\n var oldRatio = this.calcPrevRatio();\n if (degree > 0) {\n var x = obj.activePoint.startX;\n obj.activePoint.startX = (this.lowerCanvas.width / oldRatio.width) - (obj.activePoint.startY + obj.activePoint.width);\n obj.activePoint.startY = x;\n }\n else {\n var y = obj.activePoint.startY;\n obj.activePoint.startY = (this.lowerCanvas.height / oldRatio.height) - (obj.activePoint.startX + obj.activePoint.height);\n obj.activePoint.startX = y;\n }\n };\n ImageEditor.prototype.redrawShape = function (obj) {\n for (var i = 0; i < this.objColl.length; i++) {\n if (JSON.stringify(obj) === JSON.stringify(this.objColl[i])) {\n this.objColl.splice(i, 1);\n break;\n }\n }\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.drawObject('duplicate', obj);\n };\n ImageEditor.prototype.applyActObj = function () {\n var isActObj = false;\n if (this.activeObj.shape !== undefined && this.activeObj.shape === 'text' && this.activeObj.keyHistory === '') {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n else {\n var splitWords = void 0;\n var isCropSelection = false;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if (this.activeObj.activePoint.width !== 0 && this.activeObj.activePoint.height !== 0 && !isCropSelection) {\n for (var i = 0; i < this.objColl.length; i++) {\n if (JSON.stringify(this.activeObj) === JSON.stringify(this.objColl[i])) {\n isActObj = true;\n break;\n }\n }\n if (!isActObj) {\n if (isNullOrUndefined(this.activeObj.currIndex)) {\n this.activeObj.currIndex = 'shape_' + (this.objColl.length + 1);\n }\n var splitWords_2 = this.activeObj.currIndex.split('_');\n var tempObjColl = this.objColl.splice(0, parseInt(splitWords_2[1], 10) - 1);\n tempObjColl.push(extend({}, this.activeObj, {}, true));\n for (var i = 0; i < this.objColl.length; i++) {\n tempObjColl.push(this.objColl[i]);\n }\n this.objColl = tempObjColl;\n tempObjColl = [];\n this.refreshActiveObj();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n this.activeObj.flippedText = false;\n this.currObjType.shape = '';\n this.refreshActiveObj();\n }\n }\n }\n };\n ImageEditor.prototype.apply = function (shape, obj, canvas) {\n if (!this.disabled) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n if ((this.togglePen) && !this.currObjType.isCustomCrop) {\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.upperCanvas.toBlob(function (blob) {\n showSpinner(proxy_1.element);\n proxy_1.element.style.opacity = '0.5';\n proxy_1.lowerContext.clearRect(0, 0, proxy_1.lowerCanvas.width, proxy_1.lowerCanvas.height);\n var temp = proxy_1.lowerContext.filter;\n proxy_1.lowerContext.filter = proxy_1.initialAdjustmentValue = proxy_1.adjustmentValue = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n if (proxy_1.cssClass) {\n addClass([proxy_1.element], proxy_1.cssClass.split(' '));\n }\n proxy_1.lowerContext.drawImage(proxy_1.inMemoryCanvas, 0, 0);\n proxy_1.baseImg.src = URL.createObjectURL(blob);\n proxy_1.upperContext.clearRect(0, 0, proxy_1.upperCanvas.width, proxy_1.upperCanvas.height);\n proxy_1.togglePen = false;\n proxy_1.upperCanvas.style.cursor = 'default';\n proxy_1.lowerContext.filter = temp;\n var tempFilter = proxy_1.lowerContext.filter;\n proxy_1.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0, len = proxy_1.objColl.length; i < len; i++) {\n proxy_1.apply(proxy_1.objColl[i].shape, proxy_1.objColl[i], 'duplicate');\n }\n proxy_1.lowerContext.filter = tempFilter;\n proxy_1.togglePen = true;\n }, 'image/png');\n this.degree = 0;\n }\n else {\n canvas = canvas ? canvas : 'original';\n this.currObjType.shape = shape !== undefined ? shape : this.currObjType.shape;\n if (this.currObjType.shape !== '') {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.drawObject(canvas, obj);\n this.activeObj.shape = this.currObjType.shape.toLowerCase();\n if (!shape && this.currObjType.shape !== '' && !this.currObjType.isCustomCrop) {\n this.objColl.push(extend({}, this.activeObj, {}, true));\n }\n this.keyHistory = '';\n }\n }\n }\n };\n ImageEditor.prototype.setCenterPoints = function (text, width, height) {\n var renderWidth;\n var renderHeight;\n if (text && width && height) {\n renderWidth = width;\n renderHeight = height;\n }\n else {\n renderWidth = this.activeObj.activePoint.width;\n renderHeight = this.activeObj.activePoint.height;\n }\n if (this.factor === 1) {\n this.activeObj.activePoint.startX = (this.lowerCanvas.width / 2) - renderWidth / 2;\n this.activeObj.activePoint.startY = (this.lowerCanvas.height / 2) - renderHeight / 2;\n this.activeObj.activePoint.endX = (this.lowerCanvas.width / 2) + renderWidth / 2;\n this.activeObj.activePoint.endY = (this.lowerCanvas.height / 2) + renderHeight / 2;\n }\n else {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n var visibleWidth = endPoint.x - this.pannStart.startX;\n var visibleHeight = endPoint.y - this.pannStart.startY;\n var centerX = (this.dragPoint.startX = visibleWidth / 2) + this.pannStart.startX;\n var centerY = this.dragPoint.startY = visibleHeight / 2 + this.pannStart.startY;\n this.activeObj.activePoint.startX = centerX - (renderWidth / 2);\n this.activeObj.activePoint.startY = centerY - (renderHeight / 2);\n this.activeObj.activePoint.endX = centerX + (renderWidth / 2);\n this.activeObj.activePoint.endY = centerY + (renderHeight / 2);\n }\n if (text && width && height) {\n this.textStartPoints.x = this.activeObj.activePoint.startX;\n this.textStartPoints.y = this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.drawShape = function (type, strokeWidth, strokeColor, fillColor, start, width, height) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n var ratio = this.calcRatio();\n this.redrawActObj();\n this.togglePen = false;\n this.keyHistory = '';\n this.upperCanvas.style.display = 'block';\n this.refreshActiveObj();\n this.currObjType.shape = type;\n if (this.currObjType.shape.toLowerCase() !== 'freehanddraw' && this.currObjType.shape.toLowerCase() !== '') {\n this.activeObj.shape = this.currObjType.shape.toLowerCase();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n this.activeObj.strokeSettings.strokeWidth = strokeWidth ? strokeWidth : this.activeObj.strokeSettings.strokeWidth;\n this.activeObj.strokeSettings.strokeColor = strokeColor ? strokeColor : this.activeObj.strokeSettings.strokeColor;\n this.activeObj.strokeSettings.fillColor = fillColor ? fillColor : this.activeObj.strokeSettings.fillColor;\n var tempWidth = 100 / this.factor;\n var tempHeight = 100 / this.factor;\n this.activeObj.activePoint.width = tempWidth * ratio.width;\n this.activeObj.activePoint.height = tempHeight * ratio.height;\n if (this.currObjType.shape.toLowerCase() === 'line') {\n this.activeObj.lineDraw = 'horizontal';\n this.activeObj.activePoint.height /= 2;\n }\n else if (this.currObjType.shape.toLowerCase() === 'rectangle') {\n this.activeObj.activePoint.width += this.activeObj.activePoint.width / 2;\n }\n if (this.currObjType.shape.toLowerCase() === 'ellipse' && width) {\n this.activeObj.activePoint.width = 2 * width;\n this.activeObj.activePoint.height = 2 * height;\n }\n if (width && height) {\n this.activeObj.activePoint.width = width;\n this.activeObj.activePoint.height = height;\n }\n if (start !== undefined) {\n this.activeObj.activePoint.startX = start.x;\n this.activeObj.activePoint.startY = start.y;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n }\n else {\n this.setCenterPoints();\n }\n this.currObjType.isDragging = this.currObjType.isCustomCrop = false;\n this.activeObj.shapeDegree = this.degree;\n this.activeObj.flipObjColl = [];\n this.drawObject('duplicate');\n this.refreshToolbar('shapes');\n }\n }\n };\n ImageEditor.prototype.drawShapeText = function (text, fontFamily, fontSize, bold, italic, strokeColor, x, y) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n var ratio = this.calcRatio();\n this.togglePen = false;\n this.redrawActObj();\n this.keyHistory = '';\n this.refreshActiveObj();\n var shapeChangingArgs = { action: 'insert', previousShapeSettings: this.activeObj, currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n this.currObjType.isCustomCrop = false;\n this.currObjType.isText = this.currObjType.isInitialText = true;\n this.upperCanvas.style.display = 'block';\n this.currObjType.shape = this.activeObj.shape = 'text';\n if (isNullOrUndefined(this.activeObj.textSettings)) {\n this.activeObj.textSettings = this.textSettings;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n this.activeObj.strokeSettings.strokeColor = strokeColor ? strokeColor : this.activeObj.strokeSettings.strokeColor;\n this.activeObj.textSettings.text = text ? text : this.activeObj.textSettings.text;\n this.activeObj.textSettings.fontFamily = fontFamily ? fontFamily : this.activeObj.textSettings.fontFamily;\n this.activeObj.textSettings.text = text ? text : this.activeObj.textSettings.text;\n this.activeObj.textSettings.fontFamily = fontFamily ? fontFamily : this.activeObj.textSettings.fontFamily;\n this.activeObj.textSettings.fontSize = fontSize ? fontSize : this.activeObj.textSettings.fontSize;\n this.activeObj.textSettings.bold = bold ? bold : this.activeObj.textSettings.bold;\n this.activeObj.textSettings.italic = italic ? italic : this.activeObj.textSettings.italic;\n if (isNullOrUndefined(this.activeObj.textSettings.fontSize)) {\n if (this.lowerCanvas.width > this.lowerCanvas.height) {\n this.activeObj.textSettings.fontSize = Math.floor((this.lowerCanvas.width / 20));\n }\n else {\n this.activeObj.textSettings.fontSize = Math.floor((this.lowerCanvas.height / 20));\n }\n if (this.activeObj.textSettings.fontSize < 20 * (ratio.width + ratio.height)) {\n this.activeObj.textSettings.fontSize = 20 * (ratio.width + ratio.height);\n }\n if (this.factor > 1) {\n this.activeObj.textSettings.fontSize /= this.factor;\n }\n }\n this.activeObj.shapeDegree = this.degree;\n this.activeObj.shapeFlip = this.currFlipState;\n this.activeObj.flipObjColl = [];\n this.updateFontStyles();\n var width = this.upperContext.measureText(this.activeObj.textSettings.text).width +\n this.activeObj.textSettings.fontSize * 0.5;\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n if (!isNullOrUndefined(x) && !isNullOrUndefined(y)) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.startY = y;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + width;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + height;\n }\n else {\n this.setCenterPoints(true, width, height);\n }\n this.addLetter(this.activeObj.textSettings.text);\n this.objColl.push(this.activeObj);\n this.redrawShape(this.objColl[this.objColl.length - 1]);\n this.refreshToolbar('text');\n }\n };\n ImageEditor.prototype.drawPen = function (context) {\n var ratio = this.calcRatio();\n context = context ? context : this.upperContext;\n this.upperCanvas.style.display = 'block';\n this.canvasRatio = this.calcRatio();\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings.strokeWidth)) {\n this.activeObj.strokeSettings.strokeWidth = (ratio.width + ratio.height) * 0.4;\n }\n context.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n context.lineWidth = 2 * (this.activeObj.strokeSettings.strokeWidth) / this.factor;\n context.beginPath();\n context.moveTo(this.prevX, this.prevY);\n context.lineTo(this.currX, this.currY);\n context.stroke();\n context.closePath();\n };\n ImageEditor.prototype.getObjDetails = function (obj) {\n var shapeDetails = {};\n shapeDetails.id = obj.currIndex;\n shapeDetails.type = obj.shape;\n shapeDetails.startX = obj.activePoint.startX;\n shapeDetails.startY = obj.activePoint.startY;\n if (obj.shape === 'rectangle') {\n shapeDetails.width = obj.activePoint.width;\n shapeDetails.height = obj.activePoint.height;\n shapeDetails.strokeColor = obj.strokeSettings.strokeColor;\n shapeDetails.fillColor = obj.strokeSettings.fillColor;\n shapeDetails.strokeWidth = obj.strokeSettings.strokeWidth;\n }\n else if (obj.shape === 'ellipse') {\n shapeDetails.radius = obj.activePoint.width / 2;\n shapeDetails.strokeColor = obj.strokeSettings.strokeColor;\n shapeDetails.fillColor = obj.strokeSettings.fillColor;\n shapeDetails.strokeWidth = obj.strokeSettings.strokeWidth;\n }\n else if (obj.shape === 'line') {\n shapeDetails.length = obj.activePoint.width;\n shapeDetails.strokeColor = obj.strokeSettings.strokeColor;\n shapeDetails.strokeWidth = obj.strokeSettings.strokeWidth;\n }\n else if (obj.shape === 'text') {\n shapeDetails.text = obj.keyHistory;\n shapeDetails.fontSize = obj.textSettings.fontSize;\n shapeDetails.color = obj.strokeSettings.strokeColor;\n shapeDetails.fontStyle = [];\n if (obj.textSettings.bold) {\n shapeDetails.fontStyle.push('bold');\n }\n if (obj.textSettings.italic) {\n shapeDetails.fontStyle.push('italic');\n }\n }\n return shapeDetails;\n };\n ImageEditor.prototype.isPointsInRange = function (x, y) {\n var inRange = false;\n if (this.factor === 1) {\n if (x >= 0 && y >= 0 && x <= this.lowerCanvas.width && y <= this.lowerCanvas.width) {\n inRange = true;\n }\n }\n else {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n if (x >= this.pannStart.startX && y >= this.pannStart.startY && x <= endPoint.x && y <= endPoint.y) {\n inRange = true;\n }\n }\n return inRange;\n };\n ImageEditor.prototype.updateInMemoryContext = function (imgData, isUpdate) {\n var temp = extend({}, this.activeObj, {}, true);\n this.redrawImgWithObj();\n this.activeObj = temp;\n if (isNullOrUndefined(isUpdate)) {\n imgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n }\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = imgData.width;\n this.inMemoryCanvas.height = imgData.height;\n this.inMemoryContext.putImageData(imgData, 0, 0);\n };\n ImageEditor.prototype.clearActObj = function () {\n if (this.textBox.style.display === 'none') {\n this.refreshActiveObj();\n this.applyActObj();\n this.refreshActiveObj();\n this.currObjType.isCustomCrop = false;\n }\n };\n ImageEditor.prototype.rotateMultiple = function (length, degree) {\n for (var i = 0; i < length; i++) {\n if (degree > 0) {\n this.degree += 90;\n }\n else {\n this.degree -= 90;\n }\n if (this.degree === 360) {\n this.degree = 0;\n }\n var temp = this.lowerContext.filter;\n this.lowerContext.save();\n this.setMaximumDimension(90 * (i + 1));\n this.lowerContext.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n if (degree > 0) {\n this.lowerContext.rotate(Math.PI / 180 * 90);\n }\n else {\n this.lowerContext.rotate(Math.PI / 180 * -90);\n }\n this.lowerCanvas.style.left = this.upperCanvas.style.left = (this.element.clientWidth - parseInt(this.lowerCanvas.style.maxWidth, 10) - 18) / 2 + 1 + 'px';\n this.lowerCanvas.style.top = this.upperCanvas.style.top = (this.element.clientHeight - this.toolbarHeight - parseInt(this.lowerCanvas.style.maxHeight, 10)) / 2 + 1 + 'px';\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, -this.lowerCanvas.height / 2, -this.lowerCanvas.width / 2);\n this.lowerContext.filter = temp;\n if (degree > 0) {\n this.lowerContext.rotate(Math.PI / 180 * -90);\n }\n else {\n this.lowerContext.rotate(Math.PI / 180 * 90);\n }\n this.lowerContext.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n this.lowerContext.restore();\n this.currImgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n this.lowerContext.filter = this.canvasFilter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n if (degree > 0) {\n this.redrawObj(90);\n }\n else {\n this.redrawObj(-90);\n }\n }\n };\n ImageEditor.prototype.setBrightness = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.brightness = value;\n value = this.getFilterValue(value);\n this.updateAdjustment('brightness', value);\n }\n };\n ImageEditor.prototype.setContrast = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.contrast = value;\n value = this.getFilterValue(value);\n value *= 100;\n this.updateAdjustment('contrast', value);\n }\n };\n ImageEditor.prototype.setHue = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.hue = value;\n value *= 3;\n this.updateAdjustment('hue', value);\n }\n };\n ImageEditor.prototype.setSaturation = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.saturation = value;\n value = this.getSaturationFilterValue(value);\n value *= 100;\n this.updateAdjustment('saturation', value);\n }\n };\n ImageEditor.prototype.setOpacity = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.opacity = value;\n if (value >= 50) {\n value /= 100;\n }\n else if (value === 40) {\n value = 0.45;\n }\n else if (value === 30) {\n value = 0.40;\n }\n else if (value === 20) {\n value = 0.35;\n }\n else if (value === 10) {\n value = 0.30;\n }\n else if (value === 0) {\n value = 0.25;\n }\n this.updateAdjustment('opacity', value);\n }\n };\n ImageEditor.prototype.setBlur = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.blur = value;\n value /= 20;\n this.updateAdjustment('blur', value);\n }\n };\n ImageEditor.prototype.setExposure = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.exposure = value;\n value = this.getFilterValue(value);\n this.updateAdjustment('exposure', value);\n }\n };\n ImageEditor.prototype.setFilter = function (type) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.updateAdjustment(type, null);\n }\n };\n ImageEditor.prototype.setBlackAndWhiteFilter = function (boolean) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.bw = boolean;\n if (boolean) {\n if (this.degree === 0 && this.currFlipState === '') {\n this.replaceBWSharpenData('bw');\n }\n else if (this.degree !== 0) {\n var tempDegree = this.degree;\n this.rotate(-tempDegree);\n this.replaceBWSharpenData('bw');\n this.rotate(tempDegree);\n this.refreshToolbar('filter');\n }\n else if (this.currFlipState !== '') {\n var tempFlipState = this.currFlipState;\n this.flip(tempFlipState);\n this.replaceBWSharpenData('bw');\n this.flip(tempFlipState);\n this.refreshToolbar('filter');\n }\n var data = this.inMemoryContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var imageData = this.getBlackAndWhiteData(data);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = imageData.width;\n this.inMemoryCanvas.height = imageData.height;\n this.inMemoryContext.putImageData(imageData, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = this.canvasFilter;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n }\n else {\n if (this.degree === 0 && this.currFlipState === '') {\n this.updateBWSharpness();\n }\n else if (this.degree !== 0) {\n var tempDegree = this.degree;\n this.rotate(-tempDegree);\n this.updateBWSharpness();\n this.rotate(tempDegree);\n this.refreshToolbar('filter');\n if (this.sharpenedImgData) {\n this.sharpenedImgData = false;\n }\n }\n else if (this.currFlipState !== '') {\n var tempFlipState = this.currFlipState;\n this.flip(tempFlipState);\n this.updateBWSharpness();\n this.flip(tempFlipState);\n this.refreshToolbar('filter');\n if (this.sharpenedImgData) {\n this.sharpenedImgData = false;\n }\n }\n }\n }\n };\n ImageEditor.prototype.setSharpness = function (boolean) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.sharpen = boolean;\n if (boolean) {\n if (this.degree === 0 && this.currFlipState === '') {\n this.replaceBWSharpenData('sharpen');\n }\n else if (this.degree !== 0) {\n var tempDegree = this.degree;\n this.rotate(-tempDegree);\n this.replaceBWSharpenData('sharpen');\n this.rotate(tempDegree);\n this.refreshToolbar('filter');\n }\n else if (this.currFlipState !== '') {\n var tempFlipState = this.currFlipState;\n this.flip(tempFlipState);\n this.replaceBWSharpenData('sharpen');\n this.flip(tempFlipState);\n this.refreshToolbar('filter');\n }\n var data = this.inMemoryContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var imageData = this.getSharpenData(data);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = imageData.width;\n this.inMemoryCanvas.height = imageData.height;\n this.inMemoryContext.putImageData(imageData, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = this.canvasFilter;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n }\n else {\n if (this.degree === 0 && this.currFlipState === '') {\n this.updateBWSharpness();\n }\n else if (this.degree !== 0) {\n var tempDegree = this.degree;\n this.rotate(-tempDegree);\n this.updateBWSharpness();\n this.rotate(tempDegree);\n this.refreshToolbar('filter');\n if (this.sharpenedImgData) {\n this.sharpenedImgData = false;\n }\n }\n else if (this.currFlipState !== '') {\n var tempFlipState = this.currFlipState;\n this.flip(tempFlipState);\n this.updateBWSharpness();\n this.flip(tempFlipState);\n this.refreshToolbar('filter');\n if (this.sharpenedImgData) {\n this.sharpenedImgData = false;\n }\n }\n }\n }\n };\n ImageEditor.prototype.replaceBWSharpenData = function (type) {\n this.tempImageData = this.inMemoryContext.getImageData(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n var imageData = this.inMemoryContext.getImageData(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n if (type === 'sharpen') {\n imageData = this.getSharpenData(this.tempImageData);\n }\n else {\n imageData = this.getBlackAndWhiteData(imageData);\n }\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = imageData.width;\n this.inMemoryCanvas.height = imageData.height;\n this.inMemoryContext.putImageData(imageData, 0, 0);\n var tempObj;\n for (var index = 0; index < this.imgDataColl.length; index++) {\n if (this.imgDataColl[index].operation !== 'freehanddraw') {\n tempObj = this.imgDataColl[index];\n break;\n }\n }\n this.imgDataColl.splice(0, 1, { operation: 'updateCanvas', value: imageData });\n this.imgDataColl.splice(1, 1, tempObj);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = this.tempImageData.width;\n this.inMemoryCanvas.height = this.tempImageData.height;\n this.inMemoryContext.putImageData(this.tempImageData, 0, 0);\n };\n ImageEditor.prototype.updateBWSharpness = function () {\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = this.tempImageData.width;\n this.inMemoryCanvas.height = this.tempImageData.height;\n this.inMemoryContext.putImageData(this.tempImageData, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = this.canvasFilter;\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.imgDataColl.shift();\n };\n ImageEditor.prototype.getSharpenData = function (imageData) {\n var data = imageData.data;\n var weights = [0, -1, 0, -1, 5, -1, 0, -1, 0];\n var side = Math.round(Math.sqrt(weights.length));\n var halfSide = Math.floor(side / 2);\n var sw = imageData.width;\n var sh = imageData.height;\n var output = this.inMemoryContext.createImageData(sw, sh);\n var dst = output.data;\n // go through the destination image pixels\n var alphaFac = 0;\n var r;\n var g;\n var b;\n var a;\n var dstOff;\n var scx;\n var scy;\n var srcOff;\n var wt;\n var x;\n var y;\n var cx;\n var cy;\n for (y = 0; y < sh; y++) {\n for (x = 0; x < sw; x++) {\n dstOff = (y * sw + x) * 4;\n r = 0;\n g = 0;\n b = 0;\n a = 0;\n for (cy = 0; cy < side; cy++) {\n for (cx = 0; cx < side; cx++) {\n scy = y + cy - halfSide;\n scx = x + cx - halfSide;\n if (scy < 0 || scy >= sh || scx < 0 || scx >= sw) {\n continue;\n }\n srcOff = (scy * sw + scx) * 4;\n wt = weights[cy * side + cx];\n r += data[srcOff] * wt;\n g += data[srcOff + 1] * wt;\n b += data[srcOff + 2] * wt;\n if (!alphaFac) {\n a += data[srcOff + 3] * wt;\n }\n }\n }\n dst[dstOff] = r;\n dst[dstOff + 1] = g;\n dst[dstOff + 2] = b;\n if (!alphaFac) {\n dst[dstOff + 3] = a;\n }\n else {\n dst[dstOff + 3] = data[dstOff + 3];\n }\n }\n }\n return output;\n };\n ImageEditor.prototype.getFilterValue = function (value) {\n var filterValue;\n if (value === 0) {\n filterValue = 1;\n }\n else {\n filterValue = 1 + ((value * 0.5) / 100);\n }\n return filterValue;\n };\n ImageEditor.prototype.setFilterValue = function (value) {\n var filterValue;\n if (value === 1) {\n filterValue = 0;\n }\n else {\n filterValue = ((value - 1) * 100) / 0.5;\n }\n return Math.round(filterValue);\n };\n ImageEditor.prototype.getSaturationFilterValue = function (value) {\n var filterValue;\n if (value === 0) {\n filterValue = 1;\n }\n else {\n filterValue = 1 + (value / 100);\n }\n return filterValue;\n };\n ImageEditor.prototype.setSaturationFilterValue = function (value) {\n var filterValue;\n if (value === 1) {\n filterValue = 0;\n }\n else {\n filterValue = (value - 1) * 100;\n }\n return Math.round(filterValue);\n };\n ImageEditor.prototype.getBlackAndWhiteData = function (imageData) {\n for (var i = 0; i < imageData.data.length; i += 4) {\n var count = imageData.data[i] + imageData.data[i + 1] + imageData.data[i + 2];\n var colour = 0;\n if (count > 383) {\n colour = 255;\n }\n imageData.data[i] = colour;\n imageData.data[i + 1] = colour;\n imageData.data[i + 2] = colour;\n imageData.data[i + 3] = 255;\n }\n return imageData;\n };\n /**\n * Clear a current selection.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.clearSelection = function () {\n if (!this.disabled && this.imgDataColl.length > 0) {\n this.togglePen = false;\n this.refreshActiveObj();\n this.dragElement = '';\n this.dragPoint.startX = this.dragPoint.startY = this.dragPoint.endX = this.dragPoint.endY = 0;\n this.currObjType.shape = '';\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.currObjType.isActiveObj = true;\n this.currObjType.isCustomCrop = false;\n this.upperCanvas.style.cursor = 'default';\n }\n };\n /**\n * Crops an image based on the selection.\n * The selection can be done through programmatically using the select method or through UI interactions.\n *\n * @returns {boolean}.\n */\n ImageEditor.prototype.crop = function () {\n var isCrop = false;\n var splitWords;\n var transitionArgs = { startPoint: { x: this.activeObj.activePoint.startX, y: this.activeObj.activePoint.startY }, endPoint: { x: this.activeObj.activePoint.endX, y: this.activeObj.activePoint.endY } };\n this.trigger('cropping', transitionArgs);\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (!this.disabled && this.activeObj.horTopLine !== undefined && (this.currObjType.isCustomCrop || splitWords[0] === 'crop')) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_2 = this;\n isCrop = true;\n var canvasFilter = this.canvasFilter;\n var tempActObj = extend({}, this.activeObj, {}, true);\n this.lowerContext.filter = this.canvasFilter = 'none';\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.activeObj = tempActObj;\n this.upperCanvas.style.display = 'none';\n var widthRatio = void 0;\n var heightRatio = void 0;\n var imgData = void 0;\n var zoomedRotate = false;\n if (this.factor === 1) {\n imgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n widthRatio = this.lowerCanvas.width / parseInt(this.lowerCanvas.style.maxWidth, 10);\n heightRatio = this.lowerCanvas.height / parseInt(this.lowerCanvas.style.maxHeight, 10);\n }\n else {\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n imgData = this.imgDataColl[0].value;\n widthRatio = this.lowerCanvas.width / parseInt(this.lowerCanvas.style.maxWidth, 10);\n heightRatio = this.lowerCanvas.height / parseInt(this.lowerCanvas.style.maxHeight, 10);\n if (this.degree !== 0 && this.flipState !== '') {\n this.degree = 0;\n }\n if (this.degree !== 0) {\n zoomedRotate = true;\n this.lowerCanvas.width = this.upperCanvas.width = this.baseImg.width;\n this.lowerCanvas.height = this.upperCanvas.height = this.baseImg.height;\n var tempObj = extend({}, this.activeObj, {}, true);\n this.factor = 1;\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n if (this.degree === 180) {\n this.updateInMemoryContext(imgData);\n }\n var maxDimension = this.calcMaxDimension(tempObj.activePoint.width, tempObj.activePoint.height);\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.width = this.upperCanvas.width = maxDimension.width * widthRatio;\n this.lowerCanvas.height = this.upperCanvas.height = maxDimension.height * heightRatio;\n if (this.degree !== 180) {\n this.updateInMemoryContext(imgData);\n }\n this.degree = 0;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, tempObj.activePoint.startX, tempObj.activePoint.startY, tempObj.activePoint.width, tempObj.activePoint.height, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n }\n if (this.flipState !== '') {\n zoomedRotate = true;\n var tempObj = extend({}, this.activeObj, {}, true);\n this.flipState = '';\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.updateInMemoryContext(imgData);\n var maxDimension = this.calcMaxDimension(tempObj.activePoint.width, tempObj.activePoint.height);\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.width = this.upperCanvas.width = maxDimension.width * widthRatio;\n this.lowerCanvas.height = this.upperCanvas.height = maxDimension.height * heightRatio;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, tempObj.activePoint.startX, tempObj.activePoint.startY, tempObj.activePoint.width, tempObj.activePoint.height, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n }\n }\n if (!zoomedRotate) {\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = imgData.width;\n this.inMemoryCanvas.height = imgData.height;\n this.inMemoryContext.putImageData(imgData, 0, 0);\n this.updateInMemoryContext(imgData);\n var maxDimension = this.calcMaxDimension(this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.width = this.upperCanvas.width = maxDimension.width * widthRatio;\n this.lowerCanvas.height = this.upperCanvas.height = maxDimension.height * heightRatio;\n var cssObj = window.getComputedStyle(this.lowerCanvas);\n this.lowerCanvas.style.left = this.upperCanvas.style.left =\n ((this.element.clientWidth - parseInt(cssObj.width, 10) - 18) / 2) + 1 + 'px';\n this.lowerCanvas.style.top = this.upperCanvas.style.top = ((this.element.clientHeight - this.toolbarHeight\n - parseInt(cssObj.height, 10)) / 2) + 1 + 'px';\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, this.activeObj.activePoint.startX, this.activeObj.activePoint.startY, this.activeObj.activePoint.width, this.activeObj.activePoint.height, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n }\n if (this.activeObj.shape === 'crop-circle') {\n var imgData_1 = this.lowerContext.getImageData(0, 0, this.baseImg.width, this.baseImg.height);\n this.inMemoryCanvas.width = imgData_1.width;\n this.inMemoryCanvas.height = imgData_1.height;\n this.inMemoryContext.putImageData(imgData_1, 0, 0);\n this.lowerContext.save();\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0, this.baseImg.width, this.baseImg.height);\n this.lowerContext.globalCompositeOperation = 'destination-in';\n this.lowerContext.beginPath();\n this.lowerContext.arc(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2, this.lowerCanvas.width / 2, 0, Math.PI * 2);\n this.lowerContext.closePath();\n this.lowerContext.fill();\n this.lowerContext.restore();\n this.currObjType.isActiveObj = true;\n }\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n var blobUrl_1;\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.lowerCanvas.toBlob(function (blob) {\n blobUrl_1 = URL.createObjectURL(blob);\n proxy_2.baseImg.src = blobUrl_1;\n proxy_2.imgDataColl = [];\n }, 'image/png');\n this.objColl = [];\n this.refreshActiveObj();\n this.degree = 0;\n this.flipState = '';\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.globalAlpha = 0;\n this.lowerContext.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.factor = 1;\n this.canvasFilter = canvasFilter;\n }\n return isCrop;\n };\n /**\n * Flips an image by horizontally or vertically.\n *\n * @param {Direction } direction - Specifies the direction to flip the image.\n * @returns {void}.\n */\n ImageEditor.prototype.flip = function (direction) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.factor !== 1) {\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.factor = 1;\n this.refreshToolbar('main');\n }\n var transitionArgs = { direction: direction };\n this.trigger('flipping', transitionArgs);\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n var splitWords = [];\n var activeObjShape = void 0;\n if (!isNullOrUndefined(this.activeObj.activePoint)) {\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || splitWords[0] === 'crop') {\n activeObjShape = this.currObjType.isCustomCrop ? 'custom' : splitWords[1];\n }\n }\n this.redrawActObj();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n if (direction.toLowerCase() === 'horizontal') {\n this.lowerContext.translate(this.lowerContext.canvas.width, 0);\n this.lowerContext.scale(-1, 1);\n this.upperContext.translate(this.upperContext.canvas.width, 0);\n this.upperContext.scale(-1, 1);\n if (this.flipState === '' || this.flipState.toLowerCase() === 'vertical') {\n this.flipState = 'horizontal';\n }\n if (this.currFlipState.toLowerCase() === 'horizontal') {\n this.currFlipState = '';\n }\n else {\n this.currFlipState = 'horizontal';\n }\n }\n else {\n this.lowerContext.translate(0, this.lowerContext.canvas.height);\n this.lowerContext.scale(1, -1);\n this.upperContext.translate(0, this.upperContext.canvas.height);\n this.upperContext.scale(1, -1);\n if (this.flipState.toLowerCase() === '' || this.flipState.toLowerCase() === 'horizontal') {\n this.flipState = 'vertical';\n }\n if (this.currFlipState.toLowerCase() === 'vertical') {\n this.currFlipState = '';\n }\n else {\n this.currFlipState = 'vertical';\n }\n }\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n this.currImgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = this.canvasFilter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n if (this.flipState.toLowerCase() === 'horizontal') {\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n this.objColl[i].flippedText = false;\n if (this.objColl[i].shapeFlip !== '' && this.objColl[i].shapeFlip === this.currFlipState) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n else {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n }\n this.lowerContext.filter = tempFilter;\n this.lowerContext.translate(this.lowerContext.canvas.width, 0);\n this.lowerContext.scale(-1, 1);\n this.upperContext.translate(this.upperContext.canvas.width, 0);\n this.upperContext.scale(-1, 1);\n }\n else if (this.flipState.toLowerCase() === 'vertical') {\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n this.objColl[i].flippedText = false;\n if (this.objColl[i].shapeFlip !== '' && this.objColl[i].shapeFlip === this.currFlipState) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n else {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n }\n this.lowerContext.filter = tempFilter;\n this.lowerContext.translate(0, this.lowerContext.canvas.height);\n this.lowerContext.scale(1, -1);\n this.upperContext.translate(0, this.upperContext.canvas.height);\n this.upperContext.scale(1, -1);\n }\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n if (this.objColl[i].flipObjColl.length === 0) {\n this.objColl[i].flipObjColl.push(direction);\n }\n else if (this.objColl[i].flipObjColl[this.objColl[i].flipObjColl.length - 1] === direction) {\n this.objColl[i].flipObjColl.pop();\n }\n else {\n this.objColl[i].flipObjColl.push(direction);\n }\n }\n this.redrawObj(direction.toLowerCase());\n if (this.flipState === '') {\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n this.lowerContext.filter = tempFilter;\n }\n this.refreshActiveObj();\n if (!isNullOrUndefined(activeObjShape)) {\n if (activeObjShape === 'custom') {\n this.activeObj.activePoint = { startX: 0, startY: 0, endX: this.lowerCanvas.width,\n endY: this.lowerCanvas.height, width: this.lowerCanvas.width, height: this.lowerCanvas.height };\n this.updateActiveObject(this.calcRatio(), this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n }\n else {\n this.select(activeObjShape);\n }\n }\n this.refreshToolbar('main');\n }\n };\n /**\n * Return an image as ImageData.\n *\n * @returns {ImageData}.\n */\n ImageEditor.prototype.getImageData = function () {\n var data = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n return data;\n };\n /**\n * Load/opens an image for editing within an image editor.\n *\n * @param {string | ImageData } data - Specifies url of the Image or image data.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.open = function (data) {\n if (!this.disabled) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_3 = this;\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n var toolbar_11 = document.querySelector('#' + this.element.id + '_currPos');\n if (toolbar_11) {\n toolbar_11.style.display = 'none';\n }\n if (this.defToolbarItems.length === 0 &&\n (isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n this.toolbarHeight = 0;\n }\n if (isNullOrUndefined(this.toolbarTemplate)) {\n this.update();\n }\n this.degree = 0;\n this.flipState = '';\n this.factor = 1;\n this.imgDataColl = [];\n var type = typeof (data);\n if (type === 'string') {\n var fileName = data.split('.');\n if (fileName[fileName.length - 1].toLowerCase() === 'jpg' || fileName[fileName.length - 1].toLowerCase() === 'jpeg') {\n this.imageFileType = 'Jpeg';\n }\n else if (fileName[fileName.length - 1].toLowerCase() === 'png') {\n this.imageFileType = 'Png';\n }\n else if (fileName[fileName.length - 1].toLowerCase() === 'svg') {\n this.imageFileType = 'Svg';\n }\n fileName = fileName[fileName.length - 2].split('/');\n this.imageFileName = fileName[fileName.length - 1];\n this.imageOnLoad(data);\n }\n else {\n this.imageFileName = 'ImageEditor';\n this.imageFileType = 'Jpeg';\n var tempFilter = this.lowerContext.filter;\n this.lowerCanvas = document.querySelector('#' + this.element.id + '_lowerCanvas');\n this.upperCanvas = document.querySelector('#' + this.element.id + '_upperCanvas');\n this.lowerContext = this.lowerCanvas.getContext('2d');\n this.upperContext = this.upperCanvas.getContext('2d');\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = this.baseImg.width = data.width;\n this.inMemoryCanvas.height = this.baseImg.height = data.height;\n this.inMemoryContext.putImageData(data, 0, 0);\n this.imgDataColl.push({ operation: 'open', value: data });\n this.lowerCanvas.width = this.upperCanvas.width = data.width;\n this.lowerCanvas.height = this.upperCanvas.height = data.height;\n this.lowerContext.filter = tempFilter;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = temp;\n this.redrawImg(this.lowerContext.filter);\n hideSpinner(this.element);\n this.element.style.opacity = '1';\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.lowerCanvas.toBlob(function (blob) {\n showSpinner(proxy_3.element);\n proxy_3.baseImg.src = URL.createObjectURL(blob);\n }, 'image/png');\n }\n }\n };\n /**\n * Reset all the changes and revert to original image.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.reset = function () {\n if (!this.disabled) {\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.upperContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.upperContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n if (this.imgDataColl.length > 0) {\n if (this.imgDataColl[0].operation === 'freehanddraw') {\n this.imgDataColl.splice(0, 1);\n this.imgDataColl.splice(1, 1);\n }\n this.inMemoryCanvas.width = this.imgDataColl[0].value.width;\n this.inMemoryCanvas.height = this.imgDataColl[0].value.height;\n this.inMemoryContext.putImageData(this.imgDataColl[0].value, 0, 0);\n this.redrawImg(this.lowerContext.filter);\n this.lowerCanvas.width = this.baseImg.width;\n this.lowerCanvas.height = this.baseImg.height;\n }\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.baseImg.src = this.baseImgSrc.id;\n this.factor = 1;\n this.refreshToolbar('main');\n if (Browser.isDevice && document.getElementById(this.element.id + '_bottomToolbar')) {\n getComponent(document.getElementById(this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n }\n this.objColl = [];\n this.imgDataColl = [];\n this.degree = 0;\n this.flipState = this.keyHistory = this.currFlipState = '';\n this.upperCanvas.style.display = 'none';\n this.togglePan = this.togglePen = false;\n this.upperCanvas.style.cursor = this.lowerCanvas.style.cursor = 'default';\n this.dragCanvas = this.activeObj.flippedText = false;\n this.currImgData = {};\n this.pannStart = { startX: 0, startY: 0, width: 0, height: 0 };\n this.pannEnd = { startX: 0, startY: 0, width: 0, height: 0 };\n this.lowerContext.lineWidth = this.upperContext.lineWidth = undefined;\n this.lastX = this.lastY = 0;\n this.dragStart = { x: 0, y: 0 };\n this.touchEndPoint = {};\n this.prevX = this.currX = this.prevY = this.currY = 0;\n this.tempKeyHistory = '';\n this.currentToolbar = 'main';\n this.textStartPoints = { x: 0, y: 0 };\n this.fontSizeColl = this.penDrawColl = [];\n this.textBox.value = this.textBox.textContent = '';\n this.textBox.style.display = 'none';\n this.strokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n this.textSettings =\n { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n this.tempTextSettings =\n { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n this.refreshActiveObj();\n this.timer = undefined;\n this.penStrokeWidth = undefined;\n this.isScreenOriented = false;\n this.tempObjColl = [];\n this.tempObjColl = undefined;\n this.adjustmentLevel = { brightness: 0, contrast: 0, hue: 0, opacity: 100, saturation: 0, blur: 0, exposure: 0, sharpen: false, bw: false };\n this.tempAdjustmentLevel = { brightness: 0, contrast: 0, hue: 0, opacity: 100, saturation: 0, blur: 0, exposure: 0, sharpen: false, bw: false };\n this.imageFileName = '';\n this.imageFileType = undefined;\n this.canvasFilter = this.currentFilter = this.tempAdjustmentValue = '';\n this.lowerContext.filter = this.initialAdjustmentValue = this.adjustmentValue = 'brightness(' + 1 + ') ' + 'contrast(' + 100\n + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n this.tempImageData = undefined;\n this.sharpenedImgData = this.isBrightnessAdjusted = this.isInitialLoading = false;\n this.currObjType = { shape: '', isDragging: false, isActiveObj: false, isText: false, isInitialText: false, isLine: false,\n isInitialLine: false, isCustomCrop: false, isZoomed: false, isFiltered: false, isSave: false };\n }\n };\n /**\n * Rotate an image to clockwise and anti-clockwise.\n *\n * @param {number} degree - Specifies a degree to rotate an image.\n * positive integer value for clockwise and negative integer value for anti-clockwise rotation.\n *\n * @returns {boolean}.\n */\n ImageEditor.prototype.rotate = function (degree) {\n var isRotate = false;\n if (!this.disabled && this.imgDataColl.length > 0 && (degree % 90 === 0)) {\n isRotate = true;\n var transitionArgs = { degree: degree };\n this.trigger('rotating', transitionArgs);\n var splitWords = [];\n var activeObjShape = void 0;\n if (!isNullOrUndefined(this.activeObj.activePoint)) {\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || splitWords[0] === 'crop') {\n activeObjShape = this.currObjType.isCustomCrop ? 'custom' : splitWords[1];\n }\n }\n this.redrawActObj();\n if (this.factor !== 1) {\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.factor = 1;\n this.refreshToolbar('main');\n }\n var length_1 = Math.abs(degree / 90);\n if (length_1 > 1) {\n this.rotateMultiple(length_1, degree);\n }\n else {\n this.degree += degree;\n if (this.degree === 360) {\n this.degree = 0;\n }\n var temp = this.lowerContext.filter;\n this.lowerContext.save();\n this.setMaximumDimension(this.degree);\n this.lowerContext.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n this.lowerContext.rotate(Math.PI / 180 * degree);\n this.lowerCanvas.style.left = this.upperCanvas.style.left = (this.element.clientWidth - parseInt(this.lowerCanvas.style.maxWidth, 10) - 18) / 2 + 1 + 'px';\n this.lowerCanvas.style.top = this.upperCanvas.style.top = (this.element.clientHeight - this.toolbarHeight - parseInt(this.lowerCanvas.style.maxHeight, 10)) / 2 + 1 + 'px';\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, -this.lowerCanvas.height / 2, -this.lowerCanvas.width / 2);\n this.lowerContext.filter = temp;\n this.lowerContext.rotate(Math.PI / 180 * -degree);\n this.lowerContext.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n this.lowerContext.restore();\n this.currImgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n this.lowerContext.filter = this.canvasFilter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n this.redrawObj(degree);\n }\n if (!isNullOrUndefined(activeObjShape)) {\n if (activeObjShape === 'custom') {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height -\n this.pannEnd.startY };\n this.activeObj.activePoint = { startX: this.pannStart.startX, startY: this.pannStart.startY, endX: endPoint.x,\n endY: endPoint.y, width: endPoint.x - this.pannStart.startX, height: endPoint.y - this.pannStart.startY };\n this.updateActiveObject(this.calcRatio(), this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n }\n else {\n this.select(activeObjShape);\n }\n this.refreshToolbar('main', true, true);\n }\n this.factor = 1;\n this.refreshToolbar('main');\n }\n return isRotate;\n };\n /**\n * Export an image using the specified file name and the extension.\n *\n * @param {string} type - Specifies a format of image to be saved.\n * @param {string} fileName – Specifies a file name to be saved\n *\n * @returns {void}.\n */\n ImageEditor.prototype.export = function (type, fileName) {\n var _this = this;\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.togglePen) {\n this.currObjType.isZoomed = true;\n this.applyPenDraw();\n }\n this.applyActObj();\n this.lowerContext.filter = this.canvasFilter;\n if (this.factor !== 1) {\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.factor = 1;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.redrawImgWithObj();\n }\n type = type ? type : 'Png';\n this.redrawActObj();\n fileName = fileName ? fileName : this.imageFileName;\n var beforeSave = { cancel: false, fileName: fileName, fileType: type };\n var saved_1 = { fileName: fileName ? fileName : this.imageFileName, fileType: type };\n this.trigger('beforeSave', beforeSave, function (observableSaveArgs) {\n if (!observableSaveArgs.cancel) {\n _this.currObjType.isSave = true;\n fileName = observableSaveArgs.fileName ? observableSaveArgs.fileName : fileName;\n if (type.toLowerCase() === 'svg') {\n fileName = fileName || _this.imageFileName;\n _this.toSVGImg(fileName);\n }\n else if (type.toLowerCase() === 'jpeg') {\n fileName = fileName || _this.imageFileName;\n _this.toBlobFn(fileName, type.toLowerCase());\n }\n else {\n fileName = fileName || _this.imageFileName;\n _this.toBlobFn(fileName, type.toLowerCase());\n }\n _this.trigger('saved', saved_1);\n _this.refreshToolbar('main');\n }\n });\n }\n };\n /**\n * Perform selection in an image editor. The selection helps to crop an image.\n *\n * @param {string} type - Specifies the shape - circle / square / custom selection / pre-defined ratios.\n * @param {number} startX – Specifies the start x-coordinate point of the selection.\n * @param {number} startY – Specifies the start y-coordinate point of the selection.\n * @param {number} width - Specifies the width of the selection area.\n * @param {number} height - Specifies the height of the selection area.\n * @returns {void}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created : () => {\n * imageObj.select('16:9', 10, 10);\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.select = function (type, startX, startY, width, height) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n var ratio = this.calcRatio();\n var points = void 0;\n this.redrawActObj();\n this.refreshActiveObj();\n this.keyHistory = '';\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.upperCanvas.style.display = 'block';\n var cropShape = 'crop-' + type;\n if (cropShape.toLowerCase() === 'crop-custom') {\n if (this.currObjType.shape === '') {\n this.currObjType.isCustomCrop = true;\n this.upperContext.fillStyle = 'rgb(0, 0, 0, 0.5)';\n this.upperContext.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperCanvas.style.cursor = 'crosshair';\n if (Browser.isDevice) {\n var arcRadius = (7.5 * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor;\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height -\n this.pannEnd.startY };\n this.activeObj.activePoint = { startX: this.pannStart.startX + arcRadius, startY: this.pannStart.startY + arcRadius,\n endX: endPoint.x - arcRadius, endY: endPoint.y - arcRadius };\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.updateActiveObject(this.calcRatio(), this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n this.upperCanvas.style.cursor = 'default';\n }\n }\n if (startX && startY) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.currObjType.shape = this.activeObj.shape = cropShape.toLowerCase();\n this.activeObj.activePoint.startX = startX + ratio.width;\n this.activeObj.activePoint.startY = startY + ratio.height;\n this.activeObj.activePoint.endX = this.baseImg.width - (2 * ratio.width);\n this.activeObj.activePoint.endY = this.baseImg.height - (2 * ratio.height);\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.drawObject('duplicate');\n }\n }\n else if (cropShape.toLowerCase() === 'crop-canvas') {\n this.upperCanvas.style.display = 'none';\n this.dragCanvas = true;\n }\n else {\n this.currObjType.isCustomCrop = false;\n this.currObjType.shape = cropShape.toLowerCase();\n if (width && height) {\n points = { startX: startX, startY: startY, endX: startX + width, endY: startY + height,\n width: width, height: height };\n }\n else if (width && cropShape === 'crop-circle') {\n points = { startX: startX, startY: startY, endX: startX + width, endY: startY + width,\n width: width, height: width };\n }\n this.activeObj.shape = cropShape.toLowerCase();\n this.drawObject('duplicate', null, null, true, points);\n }\n }\n };\n /**\n * Enable or disable a freehand drawing in an Image Editor.\n *\n * @param {boolean} value - Specifies a value whether enable or disable freehand drawing.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.freeHandDraw = function (value) {\n if (value) {\n this.togglePen = true;\n this.upperCanvas.style.cursor = 'crosshair';\n this.drawPen();\n }\n else {\n this.upperCanvas.style.cursor = 'default';\n this.applyPenDraw();\n }\n this.refreshToolbar('pen');\n };\n /**\n * Enable or disable a freehand drawing in an Image Editor.\n *\n * @param {boolean} value - Specifies a value whether enable or disable freehand drawing.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.freehandDraw = function (value) {\n this.freeHandDraw(value);\n };\n /**\n * Enable or disable a panning on the Image Editor.\n *\n * @param {boolean} value - Specifies a value whether enable or disable panning.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.pan = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (value) {\n this.togglePan = true;\n this.redrawActObj();\n this.dragCanvas = true;\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'grab';\n }\n else {\n this.dragCanvas = this.togglePan = false;\n this.refreshActiveObj();\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'default';\n }\n }\n };\n /**\n * Increase / Decrease the magnification of an image.\n *\n * @param {boolean} value - Specifies a value to be zoomed on the image.\n * @returns {void}.\n */\n ImageEditor.prototype.zoom = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if ((this.factor === 1 && value < 0) || (this.factor > 8 && value > 0)) {\n return;\n }\n var splitWords = [];\n var activeObjShape = void 0;\n if (!isNullOrUndefined(this.activeObj.activePoint)) {\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || splitWords[0] === 'crop') {\n activeObjShape = this.currObjType.isCustomCrop ? 'custom' : splitWords[1];\n }\n }\n this.redrawActObj();\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = this.canvasFilter;\n this.upperCanvas.style.cursor = 'default';\n if (this.degree !== 0) {\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n }\n if (value === 0.1 || value === -0.1) {\n this.lastX = this.lowerCanvas.width / 2;\n this.lastY = this.lowerCanvas.height / 2;\n }\n if (value === 1.1 || value === -1.1) {\n this.zoomImg(value);\n }\n else {\n if (value > 0) {\n this.zoomImg(3.75);\n }\n else {\n this.zoomImg(-3.75);\n }\n }\n this.refreshActiveObj();\n if (!isNullOrUndefined(activeObjShape)) {\n if (activeObjShape === 'custom') {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height -\n this.pannEnd.startY };\n this.activeObj.activePoint = { startX: this.pannStart.startX, startY: this.pannStart.startY, endX: endPoint.x,\n endY: endPoint.y, width: endPoint.x - this.pannStart.startX, height: endPoint.y - this.pannStart.startY };\n this.updateActiveObject(this.calcRatio(), this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n }\n else {\n this.select(activeObjShape);\n }\n this.refreshToolbar('main', true, true);\n }\n var zoomOut = document.querySelector('#' + this.element.id + '_zoomOut');\n if (!isNullOrUndefined(zoomOut) && this.factor === 1) {\n zoomOut.classList.add('e-disabled');\n }\n else if (!isNullOrUndefined(zoomOut)) {\n zoomOut.classList.remove('e-disabled');\n }\n if (!this.togglePan) {\n this.callMainToolbar(false, true);\n }\n this.autoEnablePan();\n if (isNullOrUndefined(this.activeObj.activePoint) || this.activeObj.activePoint.width === 0) {\n this.refreshToolbar('main');\n }\n else {\n this.refreshToolbar('main', true, true);\n }\n var panBtn = this.element.querySelector('.e-img-pan .e-btn');\n if (!isNullOrUndefined(panBtn) && this.togglePan) {\n panBtn.classList.add('e-selected-btn');\n }\n else if (!isNullOrUndefined(panBtn)) {\n panBtn.classList.remove('e-selected-btn');\n }\n }\n };\n /**\n * Draw ellipse on an image.\n *\n * @param {number} x - Specifies x-coordinate of ellipse.\n * @param {number} y - Specifies y-coordinate of ellipse.\n * @param {number} radiusX - the radius x point for the ellipse.\n * @param {number} radiusY - the radius y point for the ellipse.\n * @param {number} strokeWidth - the stroke width of ellipse.\n * @param {string} strokeColor - the stroke color of ellipse.\n * @param {string} fillColor - the fill color of the ellipse.\n * @returns {boolean}.\n *\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.drawEllipse(10, 10, 40, 60);\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.drawEllipse = function (x, y, radiusX, radiusY, strokeWidth, strokeColor, fillColor) {\n var isEllipse = false;\n var inRange = this.isPointsInRange(x, y);\n if (!this.disabled && this.imgDataColl.length > 0 && inRange) {\n isEllipse = true;\n var shapeChangingArgs = { action: 'insert', previousShapeSettings: this.activeObj, currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.currObjType.isCustomCrop = false;\n var start = { x: x, y: y };\n this.drawShape('ellipse', strokeWidth, strokeColor, fillColor, start, radiusX, radiusY);\n }\n return isEllipse;\n };\n /**\n * Draw line on an image.\n *\n * @param {number} startX – Specifies start point x-coordinate of line.\n * @param {number} startY – Specifies start point y-coordinate of line.\n * @param {number} endX - Specifies end point x-coordinates of line.\n * @param {number} endY - Specifies end point y-coordinates of the line.\n * @param {number} strokeWidth - Specifies the stroke width of line.\n * @param {string} strokeColor - Specifies the stroke color of line.\n * @returns {boolean}.\n */\n ImageEditor.prototype.drawLine = function (startX, startY, endX, endY, strokeWidth, strokeColor) {\n var isLine = false;\n var inRange = this.isPointsInRange(startX, startY);\n if (!this.disabled && this.imgDataColl.length > 0 && inRange) {\n isLine = true;\n var shapeChangingArgs = { action: 'insert', previousShapeSettings: this.activeObj, currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.currObjType.isCustomCrop = false;\n var start = { x: startX, y: startY };\n var width = endX - startX;\n var height = endY - startY;\n this.drawShape('line', strokeWidth, strokeColor, null, start, width, height);\n }\n return isLine;\n };\n /**\n * Draw a rectangle on an image.\n *\n * @param {number} x - Specifies x-coordinate of rectangle.\n * @param {number} y - Specifies y-coordinate of rectangle.\n * @param {number} width - Specifies the width of the rectangle.\n * @param {number} height - Specifies the height of the rectangle.\n * @param {number} strokeWidth - Specifies the stroke width of rectangle.\n * @param {string} strokeColor - Specifies the stroke color of rectangle.\n * @param {string} fillColor - the fill color of the rectangle.\n * @returns {boolean}.\n */\n ImageEditor.prototype.drawRectangle = function (x, y, width, height, strokeWidth, strokeColor, fillColor) {\n var isRectangle = false;\n var inRange = this.isPointsInRange(x, y);\n if (!this.disabled && this.imgDataColl.length > 0 && inRange) {\n isRectangle = true;\n var shapeChangingArgs = { action: 'insert', previousShapeSettings: this.activeObj,\n currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.currObjType.isCustomCrop = false;\n var start = { x: x, y: y };\n this.drawShape('rectangle', strokeWidth, strokeColor, fillColor, start, width, height);\n }\n return isRectangle;\n };\n /**\n * Draw a text on an image.\n *\n * @param {number} x - Specifies x-coordinate of text.\n * @param {number} y - Specifies y-coordinate of text.\n * @param {string} text - Specifies the text to add on an image.\n * @param {string} fontFamily - Specifies the font family of the text.\n * @param {number} fontSize - Specifies the font size of the text.\n * @param {boolean} bold - Specifies whether the text is bold or not.\n * @param {boolean} italic - Specifies whether the text is italic or not.\n * @param {string} color - Specifies font color of the text.\n * @returns {boolean}.\n *\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.drawText(10, 10, 'Syncfusion', 'Arial', 12, true, true, '#000');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n *\n * </script>\n * ```\n */\n ImageEditor.prototype.drawText = function (x, y, text, fontFamily, fontSize, bold, italic, color) {\n var isText = false;\n var inRange = this.isPointsInRange(x, y);\n if (!this.disabled && this.imgDataColl.length > 0 && inRange) {\n isText = true;\n this.drawShapeText(text, fontFamily, fontSize, bold, italic, color, x, y);\n }\n return isText;\n };\n /**\n * Selects a shape based on the given shape id. The id can be got from the public method ‘getShapeSettings’.\n *\n * @param {string} id - Specifies the shape id to select a shape on an image.\n * @returns {boolean}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.selectShape('shape_1');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.selectShape = function (id) {\n this.applyActObj();\n var obj;\n var isSelected;\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].currIndex === id) {\n obj = extend({}, this.objColl[i], {}, true);\n break;\n }\n }\n if (isNullOrUndefined(obj)) {\n isSelected = false;\n }\n else {\n isSelected = true;\n this.activeObj = obj;\n this.lowerContext.filter = this.canvasFilter;\n this.redrawShape(this.activeObj);\n if (this.activeObj.shape === 'text') {\n this.refreshToolbar('text');\n }\n else if (this.activeObj.shape === 'pen') {\n this.refreshToolbar('pen');\n }\n else {\n this.refreshToolbar('shapes');\n }\n this.updateToolbarItems(this.calcRatio());\n }\n return isSelected;\n };\n /**\n * Deletes a shape based on the given shape id. The id can be got from the public method getShapeSettings.\n *\n * @param {string} id - Specifies the shape id to delete the shape on an image.\n * @returns {void}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.deleteShape('shape_1');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.deleteShape = function (id) {\n this.applyActObj();\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].currIndex === id) {\n this.objColl.splice(i, 1);\n break;\n }\n }\n this.lowerContext.filter = this.canvasFilter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n this.refreshToolbar('main');\n };\n /**\n * Get particular shapes details based on id of the shape which is drawn on an image editor.\n *\n * @param {string} id - Specifies the shape id on an image.\n * @returns {ShapeSettings}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.getShapeSetting('shape_1');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.getShapeSetting = function (id) {\n this.applyActObj();\n var obj;\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].currIndex === id) {\n obj = extend({}, this.objColl[i], {}, true);\n break;\n }\n }\n var shapeDetails = this.getObjDetails(obj);\n return shapeDetails;\n };\n /**\n * Get all the shapes details which is drawn on an image editor.\n *\n * @returns {ShapeSettings[]}.\n */\n ImageEditor.prototype.getShapeSettings = function () {\n this.applyActObj();\n var shapeDetailsColl = [];\n for (var i = 0; i < this.objColl.length; i++) {\n var shapeDetails = this.getObjDetails(this.objColl[i]);\n shapeDetailsColl.push(shapeDetails);\n }\n return shapeDetailsColl;\n };\n /**\n * To refresh the Canvas Wrapper.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.update = function () {\n var canvasWrapper = document.querySelector('#' + this.element.id + '_canvasWrapper');\n canvasWrapper.style.width = this.element.offsetWidth + 'px';\n this.lowerCanvas.width = this.upperCanvas.width = this.element.offsetWidth;\n if (Browser.isDevice) {\n canvasWrapper.style.height = this.element.offsetHeight - (2 * this.toolbarHeight) - 3 + 'px';\n this.lowerCanvas.height = this.upperCanvas.height = this.element.offsetHeight - (2 * this.toolbarHeight) - 3;\n }\n else {\n canvasWrapper.style.height = this.element.offsetHeight - this.toolbarHeight - 1 + 'px';\n this.lowerCanvas.height = this.upperCanvas.height = this.element.offsetHeight - this.toolbarHeight - 1;\n }\n this.lowerContext.filter = this.canvasFilter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n };\n /**\n * To apply the filters to an image\n *\n * @param {ImageFilterOptions } filterOption - Specifies the filter options to the image.\n * @returns {void}.\n */\n ImageEditor.prototype.applyImageFilter = function (filterOption) {\n if (this.initialAdjustmentValue === '') {\n this.initialAdjustmentValue = 'brightness(1) contrast(100%) hue-rotate(0deg) saturate(100%) opacity(1) blur(0px) sepia(0%) grayscale(0%) invert(0%)';\n }\n this.lowerContext.filter = this.initialAdjustmentValue;\n var filterValue = filterOption.split(' ');\n this.setFilter(filterValue.join('').toLowerCase());\n };\n /**\n * To apply the filters to an image\n *\n * @param {ImageFinetuneOptions } finetuneOption - Specifies the finetune options to the image.\n * @param {number } value - Specifies the value for finetuning the image.\n * @returns {void}.\n *\n */\n ImageEditor.prototype.finetuneImage = function (finetuneOption, value) {\n if (this.initialAdjustmentValue === '') {\n this.initialAdjustmentValue = 'brightness(1) contrast(100%) hue-rotate(0deg) saturate(100%) opacity(1) blur(0px) sepia(0%) grayscale(0%) invert(0%)';\n }\n this.lowerContext.filter = this.initialAdjustmentValue;\n switch (finetuneOption) {\n case 'Brightness':\n this.setBrightness(value);\n break;\n case 'Contrast':\n this.setContrast(value);\n break;\n case 'Hue':\n this.setHue(value);\n break;\n case 'Saturation':\n this.setSaturation(value);\n break;\n case 'Opacity':\n this.setOpacity(value);\n break;\n case 'Blur':\n this.setBlur(value);\n break;\n case 'Exposure':\n this.setExposure(value);\n break;\n }\n };\n /**\n * To check whether the undo collection is empty or not.\n *\n * @returns {boolean}.\n * @private\n */\n ImageEditor.prototype.canUndo = function () {\n return false;\n };\n /**\n * To check whether the redo collection is empty or not.\n *\n * @returns {boolean}.\n * @private\n */\n ImageEditor.prototype.canRedo = function () {\n return false;\n };\n /**\n * Erases all the signature strokes signed by user.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.clear = function () {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.clear.call(this);\n }\n };\n /**\n * To draw the signature based on the given text, with the font family and font size.\n *\n * @param {string} text - specify text to be drawn as signature.\n * @param {string} fontFamily - specify font family of a signature.\n * @param {number} fontSize - specify font size of a signature.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.draw = function (text, fontFamily, fontSize) {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.draw.call(this, text, fontFamily, fontSize);\n }\n };\n /**\n * To get the signature as Blob.\n *\n * @param {string} url - specify the url/base 64 string to get blob of the signature.\n * @returns {Blob}.\n * @private\n */\n ImageEditor.prototype.getBlob = function (url) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n return url;\n };\n /**\n * To check whether the signature is empty or not.\n *\n * @returns {boolean}.\n * @private\n */\n ImageEditor.prototype.isEmpty = function () {\n return false;\n };\n /**\n * To load the signature with the given base 64 string, height and width.\n *\n * @param {string} signature - specify the url/base 64 string to be drawn as signature.\n * @param {number} width - specify the width of the loaded signature image.\n * @param {number} height - specify the height of the loaded signature image.\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.load = function (signature, width, height) {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.load.call(this, signature, width, height);\n }\n };\n /**\n * Undo the last user action.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.undo = function () {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.undo.call(this);\n }\n };\n /**\n * Redo the last user action.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.redo = function () {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.redo.call(this);\n }\n };\n /**\n * To save the signature with the given file type and file name.\n *\n * @param {FileType} type - specify type of the file to be saved a signature.\n * @param {string} fileName - specify name of the file to be saved a signature.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.save = function (type, fileName) {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.save.call(this, type, fileName);\n }\n };\n /**\n * To save the signature as Blob.\n *\n * @returns {Blob}.\n * @private\n */\n ImageEditor.prototype.saveAsBlob = function () {\n return null;\n };\n /**\n * Returns the persistence data for component.\n *\n * @returns {any}.\n * @private\n */\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.getLocalData = function () {\n return null;\n };\n var ImageEditor_1;\n __decorate([\n Property('')\n ], ImageEditor.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"disabled\", void 0);\n __decorate([\n Property('100%')\n ], ImageEditor.prototype, \"height\", void 0);\n __decorate([\n Property('Bootstrap5')\n ], ImageEditor.prototype, \"theme\", void 0);\n __decorate([\n Property()\n ], ImageEditor.prototype, \"toolbar\", void 0);\n __decorate([\n Property()\n ], ImageEditor.prototype, \"toolbarTemplate\", void 0);\n __decorate([\n Property('100%')\n ], ImageEditor.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], ImageEditor.prototype, \"backgroundColor\", void 0);\n __decorate([\n Property('')\n ], ImageEditor.prototype, \"backgroundImage\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"isReadOnly\", void 0);\n __decorate([\n Property(true)\n ], ImageEditor.prototype, \"saveWithBackground\", void 0);\n __decorate([\n Property('#000000')\n ], ImageEditor.prototype, \"strokeColor\", void 0);\n __decorate([\n Property(0.5)\n ], ImageEditor.prototype, \"minStrokeWidth\", void 0);\n __decorate([\n Property(2)\n ], ImageEditor.prototype, \"maxStrokeWidth\", void 0);\n __decorate([\n Property(0.7)\n ], ImageEditor.prototype, \"velocity\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"enablePersistence\", void 0);\n __decorate([\n Complex({}, FinetuneSettings)\n ], ImageEditor.prototype, \"finetuneSettings\", void 0);\n __decorate([\n Property('')\n ], ImageEditor.prototype, \"signatureValue\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"beforeSave\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"zooming\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"panning\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"cropping\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"rotating\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"flipping\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"shapeChanging\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"fileOpened\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"saved\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"toolbarCreated\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"toolbarUpdating\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"toolbarItemClicked\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"imageFiltering\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"fineTuneValueChanging\", void 0);\n ImageEditor = ImageEditor_1 = __decorate([\n NotifyPropertyChanges\n ], ImageEditor);\n return ImageEditor;\n}(SignatureBase));\nexport { ImageEditor };\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","FinetuneSettings","_super","apply","Property","ChildProperty","ImageEditor","options","element","_this","call","degree","dragCanvas","dragElement","keyHistory","flipState","mouseDownPoint","x","y","previousPoint","dragPoint","startX","startY","endX","endY","diffPoint","oldPoint","objColl","undoRedoColl","imgDataColl","strokeSettings","strokeColor","fillColor","strokeWidth","textSettings","text","fontFamily","fontSize","bold","italic","underline","tempStrokeSettings","tempTextSettings","toolbarHeight","pannStart","pannEnd","togglePan","disablePan","lastX","lastY","dragStart","factor","currFlipState","touchEndPoint","prevX","currX","prevY","currY","togglePen","currentToolbar","textStartPoints","fontSizeColl","tempKeyHistory","penDrawColl","allowDrag","textRow","activeObj","activePoint","width","height","flipObjColl","currObjType","shape","isDragging","isActiveObj","isText","isInitialText","isLine","isInitialLine","isCustomCrop","isZoomed","isFiltered","isSave","defToolbarItems","baseImgSrc","isTimer","isScreenOriented","isFirstMove","startTouches","tempTouches","adjustmentLevel","brightness","contrast","hue","opacity","saturation","blur","exposure","sharpen","bw","tempAdjustmentLevel","adjustmentValue","initialAdjustmentValue","tempAdjustmentValue","currentFilter","tempFilter","canvasFilter","sharpenedImgData","tempSharpenFilter","tempBWFilter","isBrightnessAdjusted","isInitialLoading","imageFileName","ImageEditor_1","preRender","id","getUniqueID","Browser","isDevice","classList","add","themeColl","Bootstrap5","primaryColor","secondaryColor","Bootstrap5Dark","Tailwind","TailwindDark","Fluent","FluentDark","Bootstrap4","Bootstrap","BootstrapDark","Material","MaterialDark","Fabric","FabricDark","Highcontrast","defaultLocale","Crop","ZoomIn","ZoomOut","Undo","Redo","Transform","Annotation","Finetune","Brightness","Contrast","Hue","Saturation","Opacity","Blur","Sharpen","Exposure","Filter","Default","Chrome","Cold","Warm","Grayscale","BlackAndWhite","Sepia","Invert","Text","Pen","Reset","Save","Select","RotateLeft","RotateRight","HorizontalFlip","VerticalFlip","OK","Cancel","FillColor","StrokeColor","StrokeWidth","FontFamily","FontStyle","FontSize","FontColor","Pan","Move","Load","Custom","Square","Circle","Ellipse","Rectangle","Line","Bold","Italic","BoldItalic","XSmall","Small","Medium","Large","XLarge","ABC","Browse","l10n","L10n","locale","render","initialize","getModuleName","getPersistData","addOnPersist","onPropertyChanged","newProperties","oldProperties","_i","_a","keys","cssClass","removeClass","split","addClass","disabled","unwireEvent","remove","wireEvent","style","theme","updateTheme","upperContext","strokeStyle","fillStyle","finetuneSettings","updateFinetunes","destroy","removeAttribute","concat","getAttribute","destroySubComponents","innerHTML","trigger","createToolbar","createContextualToolbar","createCanvas","updateContext","lowerContext","filter","createSpinner","defaultValue","EventHandler","document","keyDownEventHandler","keyUpEventHandler","upperCanvas","mouseDownEventHandler","mouseMoveEventHandler","mouseUpEventHandler","lowerCanvas","canvasMouseDownHandler","canvasMouseMoveHandler","canvasMouseUpHandler","touchStartHandler","findTextPoint","textBox","window","addEventListener","windowResizeHandler","bind","isIos","info","name","screen","orientation","screenOrientation","initializeFilter","setBrightness","setContrast","setHue","setSaturation","setExposure","setOpacity","setBlur","inputElement","querySelectorAll","btnElement","len","contains","getComponent","detach","select","toPascalCase","str","strArr","toLowerCase","charAt","toUpperCase","slice","join","canvasWrapper","appendChild","createElement","className","attrs","offsetHeight","inMemoryCanvas","setAttribute","offsetWidth","position","backgroundColor","display","resize","getContext","baseImg","crossorigin","cursor","inMemoryContext","isNullOrUndefined","toolbar","toolbarTemplate","toolbarTemplateFn","toolbarItems","align","type","template","Uploader","push","toolbarArea","getElementById","toolbar_1","uploadItems","selected","initToolbarItem","createBottomToolbar","Toolbar","items","created","toolbarType","clicked","defToolbarClicked","createLeftToolbarControls","clientHeight","toolbar_2","updateContextualToolbar","cType","querySelector","contextualToolbarArea","left","offsetLeft","refreshSlider","initFilterToolbarItem","renderSlider","cHt","ht","top","toolbarElem","initBottomToolbar","getMainToolbarItem","renderAnnotationBtn","renderCropBtn","renderTransformBtn","refreshOverflow","templateID","toolbarFn","templateParser","isReact","isAngular","templateColl","nodeType","renderReactTemplates","templateCompiler","trim","compile","error","getLeftToolbarItem","isOkBtn","visible","tooltipText","indexOf","prefixIcon","getConstant","tempToolbarItems","processToolbar","getRightToolbarItem","isApplyOption","getZoomToolbarItem","processSubToolbar","isToolbar","leftItem","rightItem","mainItem","zoomItem","renderSaveBtn","zoomIn","zoomOut","pan","undefined","uploadDiv","uploadElem","getElementsByTagName","uploadBtnElem","onchange","fileSelect","proxy","iconCss","drpDownBtn","DropDownButton","open","args","cancelPan","parentElement","getBoundingClientRect","splitWords","isCropSelection","refreshActiveObj","clearRect","refreshToolbar","item","freeHandDraw","drawShapeText","drawShape","updateToolbarItems","calcRatio","appendTo","cropSelect","transformSelect","imageEditorObj","getInstance","saveItems","export","rotate","flip","getShapesToolbarItem","initShapesToolbarItem","createShapeColor","createShapeBtn","ColorPicker","modeSwitcher","noColor","value","showButtons","mode","change","pushActItemIntoObj","extend","pop","currentValue","hex","operation","currentObj","previousObj","redrawShape","rgba","fillDDB_1","children","toggle","inline","strokeDDB_1","background","strokeWidthItems","ratio","strokeWidthBtn","spanElem_1","drpDownBtn_1","activeBtn","textContent","parseInt","getTextToolbarItem","getFontFamilyItems","getFontSizeItems","initTextToolbarItem","createTextColor","createTextBtn","fontColor","color","temp","strokeDDB_2","setTextBoxStylesToActObj","fontNameBtn","spanElem_2","fontFamilyBtn_1","createPopupOnClick","beforeItemRender","redrawText","updateFontStyles","fontStyleBtnElem","span1Elem_1","fontStyleBtn_1","fontStyle","fontWeight","replace","applyFontStyle","fontSizeBtnElem","fontSizeSpanElem_1","fontSizes","getFontSizes","fontSizeBtn_1","textStyle","font","rows","getMaxText","measureText","parseFloat","setTextSelection","updateActiveObject","Math","round","toString","getTextAreaWidth","tempBold","tempItalic","updateObjColl","initZoomToolbarItem","contextualToolbarClicked","selEle","imageFiltering","setFilter","zoom","transform","redrawImgWithObj","setSharpness","setBlackAndWhiteFilter","j","cancelItems","okBtn","reset","unselectBtn","drawImage","selElem","crop","redrawActObj","applyActObj","callMainToolbar","sliderWrapper","slider","hdrWrapper","ej2_instances","updateAdjustment","isPreview","opacityValue","brightnessValue","values","getFilterValue","temp_1","saturate","bright","saturatePercentage","saturatePercent","getSaturationFilterValue","getDefaultFilter","setTempFilterValue","tempFilter_1","updateBrightnessFilter","autoEnablePan","tempSplitWords","setAdjustment","valueArr","setFilterValue","setSaturationFilterValue","labelWrapper","styles","min","max","getCurrAdjustmentValue","Slider","tooltip","isVisible","placement","showOn","step","setCurrAdjustmentValue","fineTuneValueChanging","finetune","isApplyBtn","isZooming","imageEditorPointsColl","topLeftCircle","clearSelection","gradient","a","applyPenDraw","tempCanvas","tempContext","lineWidth","nexP","preP","beginPath","moveTo","points","m","dx1","dx2","dy1","dy2","curP","bezierCurveTo","shift","stroke","imgData","getImageData","tempObj","index","splice","putImageData","isCropping","initPenToolbarItem","initAdjustmentToolbarItem","getAdjustmentToolbarItem","getFilterToolbarItem","getPenToolbarItem","createPenColor","createPenBtn","penColor","strokeDDB_3","spanElem_3","penStrokeWidth","getPenStroke","drpDownBtn_2","setPenStroke","createCanvasFilter","tempImageData","noFilter","ctx","chrome","cold","warm","grayscale","sepia","invert","updateCanvas","fileOpened","fileName","fileType","imageFileType","wrapperWidth","clientWidth","maxDimension","calcMaxDimension","maxWidth","maxHeight","updateInMemoryCanvas","imageOnLoad","src","onload","toBlob","blob","showSpinner","URL","createObjectURL","hideSpinner","shapeDegree","filesData","files","url","e","transformOrigin","scale","findTextTarget","getStrokeWidth","selFillElem","selStrokeElem","selTextStrokeElem","selPenStrokeElem","strokeWidthElem","fontFamilyElem","fontSizeElem","fontStyleElem","setTimer","timer","targetTouches","touches","pageX","pageY","calculateScale","endTouches","startDistance","getDistance","sqrt","preventDefault","setTimeout","currentTarget","clientX","clientY","canvasRatio","minStrokeWidth","maxStrokeWidth","velocity","mouseDownHandler","findTarget","setActivePoint","offsetTop","firstFingerX","firstFingerY","secondFingerX","secondFingerY","setCursor","initialDraw","updateActivePoint","drawObject","bbox","setPanPoints","tempObjColl","applyCurrActObj","shapeChangingArgs","beforeSave","cancel","ctrlKey","observableSaveArgs","stopImmediatePropagation","action","previousShapeSettings","currentShapeSettings","textKeyDown","offsetX","offsetY","transformedPoint","drawPanImg","String","fromCharCode","which","scrollHeight","setTextBoxWidth","adjustToScreen","redrawImg","pt","transitionArgs","startPoint","endPoint","xDiff","yDiff","xxDiff","yyDiff","translate","pt1","pt2","redraw","xform","DOMMatrix","getTransform","savedTransforms","save","restore","sx","sy","scaleNonUniform","radians","PI","dx","dy","f","m2","multiply","setTransform","DOMPoint","matrixTransform","inverse","m11","m12","m13","m14","m21","m22","m23","m24","zoomImg","clicks","zoomPoint","zoomLevel","pow","handleScroll","delta","wheelDelta","detail","p1","p2","isInside","actObj","setCursorForZoomState","floor","ceil","horTopLine","updateTextFromTextArea","widthColl","setTextBoxPos","point","setTextBoxPoints","shapeFlip","JSON","stringify","radius","border","overflow","setTextBoxHeight","textBoxTop","textBoxWidth","letterWidth","textWidth","textHeight","abs","selectInfo","shapeResizingArgs","shapeMovingArgs","updateNWPoints","updateNPoints","updateNEPoints","updateWPoints","updateEPoints","updateSWPoints","updateSPoints","updateSEPoints","percentage","prevDiffX","prevDiffY","maxText","newScale","getScaleRatio","isTextBox","maxi","maxStr","setDragLimit","lineDraw","shapeCircle","canvasDraw","selectionWidth","selectionHeight","fillRect","tempWidth","ellipse","closePath","arc","clip","drawOuterSelection","isInitialDraw","isCropCircle","getZoomShape","rect","topRightCircle","bottomLeftCircle","bottomRightCircle","fill","drawCenterCircles","obj","canvas","isCropRatio","drawCropRatio","isCrop","drawShapeObj","actPoint","isMouseMove","horCircleWidth","verCircleHeight","horBottomLine","verLeftLine","verRightLine","topCenterCircle","centerLeftCircle","centerRightCircle","bottomCenterCircle","currentShape","horLineWidth","verLineHeight","drawSquareLines","shapeLine","shapeText","drawSelection","tempLineWidth","lineTo","lineHeight","yPoint","updateActPoint","rotateText","fillText","k","horTopInnerLine","horBottomInnerLine","verLeftInnerLine","verRightInnerLine","findTargetObj","updateCursorStyles","diffX","data","currImgData","getSharpenData","getBlackAndWhiteData","flippedText","isResize","setDragDirection","calcShapeRatio","arcRadius","visibleWidth","visibleHeight","centerX","centerY","originalWidth","originalHeight","presetRatio","standardSize","scaleWidth","getScale","snippetArray","scaleHeight","snippetArray1","originalValue","widthRatio","heightRatio","canvasMaxWidth","canvasMaxHeight","widthScale","heightScale","cssMaxWidth","cssMaxHeight","setMaximumDimension","newWidth","newHeight","setCursorFromObj","downloadImg","href","download","body","documentElement","click","parentNode","removeChild","toSVGImg","dataUrl","toDataURL","svg","createElementNS","img","setAttributeNS","svgDataUrl","btoa","toBlobFn","blobUrl","addLetter","letter","calcPrevRatio","oldWidthRatio","oldHeightRatio","textFlipDegree","redrawSelection","redrawObj","updateCurrentActiveObjPoint","currActObjIndex","oldRatio","currIndex","calcCurrPoints","isActObj","splitWords_2","proxy_1","setCenterPoints","renderWidth","renderHeight","start","tempHeight","drawPen","context","getObjDetails","shapeDetails","isPointsInRange","inRange","updateInMemoryContext","isUpdate","clearActObj","rotateMultiple","boolean","replaceBWSharpenData","tempDegree","tempFlipState","imageData","updateBWSharpness","g","dstOff","scx","scy","srcOff","wt","cx","cy","weights","side","halfSide","sw","sh","output","createImageData","dst","filterValue","colour","proxy_2","tempActObj","zoomedRotate","cssObj","getComputedStyle","imgData_1","globalCompositeOperation","blobUrl_1","globalAlpha","direction","activeObjShape","proxy_3","toolbar_11","update","isRotate","length_1","saved_1","cropShape","freehandDraw","panBtn","drawEllipse","radiusX","radiusY","isEllipse","drawLine","drawRectangle","isRectangle","drawText","selectShape","isSelected","deleteShape","getShapeSetting","getShapeSettings","shapeDetailsColl","applyImageFilter","filterOption","finetuneImage","finetuneOption","canUndo","canRedo","clear","draw","getBlob","isEmpty","load","signature","undo","redo","saveAsBlob","getLocalData","Complex","Event","NotifyPropertyChanges","SignatureBase"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ej2-image-editor.min.js","sources":["../../src/image-editor/image-editor.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, NotifyPropertyChanges, Property, addClass, removeClass, extend } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, getComponent, getInstance, isNullOrUndefined, L10n, getUniqueID } from '@syncfusion/ej2-base';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { ColorPicker, Uploader, Slider } from '@syncfusion/ej2-inputs';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { Complex, compile, compile as templateCompiler, Browser, detach, select, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Interface for image finetune values.\n */\nvar FinetuneSettings = /** @class */ (function (_super) {\n __extends(FinetuneSettings, _super);\n function FinetuneSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"brightness\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"contrast\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"hue\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"saturation\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"exposure\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"blur\", void 0);\n return FinetuneSettings;\n}(ChildProperty));\nexport { FinetuneSettings };\n/**\n * Image Editor is a graphical user interface that helps to edit an image by performing actions like selection,\n * cropping, rotating, inserting text and shapes (rectangles, ellipses, lines), and drawing free hand on top of an image.\n *\n ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({});\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\nvar ImageEditor = /** @class */ (function (_super) {\n __extends(ImageEditor, _super);\n /**\n *\n * Constructor for creating the widget\n *\n * @param {ImageEditorModel} options - Specifies the image editor model\n * @param {string|HTMLDivElement} element - Specifies the target element\n */\n function ImageEditor(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.degree = 0; // current rotated state\n _this.isUndoRedo = false;\n _this.dragCanvas = false;\n _this.dragElement = '';\n _this.keyHistory = ''; // text history\n _this.tempKeyHistory = ''; // restore text history on cancel\n _this.mouseDownPoint = { x: 0, y: 0 };\n _this.previousPoint = { x: 0, y: 0 }; // updates prev x and y points in mouseMove\n _this.dragPoint = { startX: 0, startY: 0, endX: 0, endY: 0 }; // updates drag start and end points in mousedown and mousemove\n _this.diffPoint = { x: 0, y: 0 }; // updates resize points\n _this.oldPoint = {};\n _this.objColl = []; // shapes, text obj collection\n _this.undoRedoColl = [];\n _this.isImageLoaded = false; // collection of Image Data mainly used for reset state\n _this.strokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n _this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null }; // restore stroke settings on cancel\n _this.textSettings = { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, fontRatio: null, bold: false, italic: false, underline: false };\n _this.tempTextSettings = { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, fontRatio: null, bold: false, italic: false, underline: false }; // restore text settings on cancel\n _this.toolbarHeight = 46;\n _this.togglePan = false; // toggle pan\n _this.disablePan = false; // auto enable / disable pan while zooming\n _this.currFlipState = ''; // current flipped state\n _this.touchEndPoint = {};\n _this.undoRedoStep = 0;\n _this.togglePen = false; // toggle free hand drawing\n _this.currentToolbar = 'main';\n _this.textStartPoints = { x: 0, y: 0 }; // restore text styles on cancel\n _this.fontSizeColl = []; // collection of font sizes\n _this.textRow = 1; // text area row count\n _this.activeObj = { activePoint: { startX: 0, startY: 0, endX: 0, endY: 0, width: 0, height: 0 },\n flipObjColl: [] };\n _this.tempActiveObj = { activePoint: { startX: 0, startY: 0, endX: 0, endY: 0, width: 0, height: 0 },\n flipObjColl: [] }; // for undo redo\n _this.currObjType = { shape: '', isDragging: false, isActiveObj: false, isText: false, isInitialText: false, isLine: false, isInitialLine: false,\n isCustomCrop: false, isZoomed: false, isUndoZoom: false, isUndoAction: false, isFiltered: false, isSave: false };\n _this.defToolbarItems = [];\n _this.isTimer = false; // mobile mode text area rendering on long touch\n _this.isFirstMove = false; // for pinch zoom\n _this.startTouches = []; // for pinch zoom\n _this.tempTouches = []; // for pinch zoom\n _this.adjustmentLevel = { brightness: 0, contrast: 0, hue: 0, opacity: 100, saturation: 0, blur: 0,\n exposure: 0, sharpen: false, bw: false }; // for toolbar slider value\n _this.tempAdjustmentLevel = { brightness: 0, contrast: 0, hue: 0, opacity: 100, saturation: 0, blur: 0,\n exposure: 0, sharpen: false, bw: false }; // for temp toolbar slider value\n _this.adjustmentValue = ''; // for internal slider value\n _this.initialAdjustmentValue = '';\n _this.tempAdjustmentValue = ''; // for temp internal slider value\n _this.currentFilter = ''; // current filter selected from toolbar\n _this.tempFilter = ''; // restore filter style on cancel\n _this.canvasFilter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' + // current filter style applied to lowerCanvas\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n _this.tempUndoRedoColl = [];\n _this.tempUndoRedoStep = 0;\n // Revamp new properties\n _this.zoomFactor = 0; // Current zoom factor\n _this.tempZoomFactor = 0; // Restore zoom factor on cancel\n _this.destLeft = 0; // Current image left position\n _this.destTop = 0; // Current image top position\n _this.srcLeft = 0; // Original image left position\n _this.srcTop = 0; // Original image top position\n _this.cropDestPoints = { startX: 0, startY: 0, width: 0, height: 0 }; // To redraw old image when navigate to crop tab\n _this.flipColl = []; // To store flip order\n _this.isReverseRotate = false; // True when rotate method is called from iteration\n _this.isReverseFlip = false; // True when rotate method is called from iteration\n _this.isPreventDragging = false; // Shapes dragging is prevented when crop region is inside shape points\n _this.isRotateZoom = false; // To restore zoomed image on selection crop selection\n // eslint-disable-next-line\n _this.rotateFlipColl = []; // Transformation collection for redrawing image on rotate and flip\n _this.isCircleCrop = false; // Specifies whether circle crop is enabled or not\n _this.rotatedDestPoints = { startX: 0, startY: 0, width: 0, height: 0 };\n _this.croppedDegree = 0; // Specifies the degree when crop is performed\n _this.isFreehandDrawingPoint = false; // Specifies whether mouse cursor is on freehand drawing point or not\n _this.isFreehandDrawEditing = false; // Specifies whether freehand drawing is in editing mode or not\n _this.tempFreeHandDrawEditingStyles = { strokeColor: null, fillColor: null, strokeWidth: null }; // Restore freehand drawing styles on cancel\n _this.totalPannedInternalPoint = { x: 0, y: 0 }; // To store total panned point internally in rotated state\n _this.totalPannedClientPoint = { x: 0, y: 0 }; // To store total panned point in client coordinates in rotated state\n _this.totalPannedPoint = { x: 0, y: 0 }; // To store current panned point in non-rotated state\n _this.isCropTab = false; // Specifies whether crop tab is selected or not\n _this.cropZoomFactor = 0; // Specifies the zoom factor when crop selection is performed\n _this.defaultZoomFactor = 0; // Specifies the zoom factor when crop selection is not performed\n _this.fileName = ''; // Specifies the file name of the image on initial loading\n _this.isBrightnessAdjusted = false; // Specifies whether brightness is adjusted or not, to adjust opacity (combination)\n _this.isInitialLoading = false; // Specifies whether image is loaded for the first time or not (for applying initial filter)\n // For Free Hand Drawing\n _this.freehandDrawObj = { lastWidth: 0, lastVelocity: 0, time: 0, pointX: 0, pointY: 0 };\n _this.points = [];\n // eslint-disable-next-line\n _this.pointColl = {};\n _this.pointCounter = 0;\n _this.freehandCounter = 0;\n _this.isFreehandDrawing = false;\n _this.tempFreehandCounter = 0;\n _this.lastPan = { x: 0, y: 0 }; // To store last pan point\n _this.selectedFreehandColor = '#42a5f5';\n _this.isFreehandDrawCustomized = false;\n _this.isShapeInserted = false;\n _this.isAllowCropPan = false;\n _this.tempPannedPoint = { x: 0, y: 0 };\n _this.cropObj = { cropZoom: 0, defaultZoom: 0, totalPannedPoint: { x: 0, y: 0 }, totalPannedClientPoint: { x: 0, y: 0 },\n totalPannedInternalPoint: { x: 0, y: 0 }, activeObj: {}, rotateFlipColl: [], degree: 0,\n currFlipState: '', destPoints: { startX: 0, startY: 0, width: 0, height: 0 },\n srcPoints: { startX: 0, startY: 0, width: 0, height: 0 } };\n _this.afterCropActions = [];\n _this.isCancelAction = false;\n _this.isFreehandPointMoved = false;\n _this.isTouch = false;\n _this.freehandDownPoint = { x: 0, y: 0 };\n _this.tempFlipPanPoint = { x: 0, y: 0 };\n _this.currentFreehandDrawIndex = 0; // Specifies id for every freehand drawing - uses while deleting\n _this.tempCurrentFreehandDrawIndex = 0; // Specifies id for every freehand drawing - uses while cancelling\n _this.preventZoomBtn = false;\n _this.cancelObjColl = [];\n _this.cancelPointColl = [];\n _this.rotatedFlipCropSelection = false;\n return _this;\n }\n ImageEditor_1 = ImageEditor;\n ImageEditor.prototype.preRender = function () {\n // pre render code snippets\n this.element.id = this.element.id || getUniqueID('ej2-image-editor');\n if (Browser.isDevice) {\n this.element.classList.add('e-device');\n }\n this.themeColl = {\n Bootstrap5: { primaryColor: '#0d6efd', secondaryColor: '#fff' },\n Bootstrap5Dark: { primaryColor: '#0d6efd', secondaryColor: '#fff' },\n Tailwind: { primaryColor: '#4f46e5', secondaryColor: '#fff' },\n TailwindDark: { primaryColor: '#22d3ee', secondaryColor: '#fff' },\n Fluent: { primaryColor: '#0078d4', secondaryColor: '#fff' },\n FluentDark: { primaryColor: '#0078d4', secondaryColor: '#fff' },\n Bootstrap4: { primaryColor: '#007bff', secondaryColor: '#fff' },\n Bootstrap: { primaryColor: '#317ab9', secondaryColor: '#fff' },\n BootstrapDark: { primaryColor: '#317ab9', secondaryColor: '#fff' },\n Material: { primaryColor: '#e3165b', secondaryColor: '#fff' },\n MaterialDark: { primaryColor: '#00b0ff', secondaryColor: '#fff' },\n Fabric: { primaryColor: '#0078d6', secondaryColor: '#fff' },\n FabricDark: { primaryColor: '#0074cc', secondaryColor: '#fff' },\n Highcontrast: { primaryColor: '#000000', secondaryColor: '#fff' }\n };\n this.defaultLocale = {\n Crop: 'Crop',\n ZoomIn: 'Zoom In',\n ZoomOut: 'Zoom Out',\n Undo: 'Undo',\n Redo: 'Redo',\n Transform: 'Transform',\n Annotation: 'Annotation',\n Finetune: 'Finetune',\n Brightness: 'Brightness',\n Contrast: 'Contrast',\n Hue: 'Hue',\n Saturation: 'Saturation',\n Opacity: 'Opacity',\n Blur: 'Blur',\n Sharpen: 'Sharpen',\n Exposure: 'Exposure',\n Filter: 'Filter',\n Default: 'Default',\n Chrome: 'Chrome',\n Cold: 'Cold',\n Warm: 'Warm',\n Grayscale: 'Grayscale',\n BlackAndWhite: 'Black and White',\n Sepia: 'Sepia',\n Invert: 'Invert',\n Text: 'Add Text',\n Pen: 'Pen',\n Reset: 'Reset',\n Save: 'Save',\n Select: 'Select',\n RotateLeft: 'Rotate Left',\n RotateRight: 'Rotate Right',\n HorizontalFlip: 'Horizontal Flip',\n VerticalFlip: 'Vertical Flip',\n OK: 'OK',\n Cancel: 'Cancel',\n FillColor: 'Fill Color',\n StrokeColor: 'Stroke Color',\n StrokeWidth: 'Stroke Width',\n FontFamily: 'Font Family',\n FontStyle: 'Font Style',\n FontSize: 'Font Size',\n FontColor: 'Font Color',\n Pan: 'Pan',\n Move: 'Move',\n Load: 'Load',\n Custom: 'Custom',\n Square: 'Square',\n Circle: 'Circle',\n Ellipse: 'Ellipse',\n Rectangle: 'Rectangle',\n Line: 'Line',\n Bold: 'Bold',\n Italic: 'Italic',\n BoldItalic: 'Bold Italic',\n XSmall: 'X-Small',\n Small: 'Small',\n Medium: 'Medium',\n Large: 'Large',\n XLarge: 'X-Large',\n ABC: 'ABC',\n Browse: 'Browse'\n };\n this.l10n = new L10n('image-editor', this.defaultLocale, this.locale);\n };\n /**\n *\n * To Initialize the component rendering\n *\n * @private\n * @returns {void}\n */\n ImageEditor.prototype.render = function () {\n this.initialize();\n };\n /**\n * To get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n ImageEditor.prototype.getModuleName = function () {\n return 'image-editor';\n };\n /**\n *\n * To get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n * @private\n */\n ImageEditor.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n *\n * Called internally if any of the property value changed.\n *\n * @param {ImageEditorModel} newProperties - Specifies new properties\n * @param {ImageEditorModel} oldProperties - Specifies old properties\n * @returns {void}\n * @private\n */\n ImageEditor.prototype.onPropertyChanged = function (newProperties, oldProperties) {\n for (var _i = 0, _a = Object.keys(newProperties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (oldProperties.cssClass) {\n removeClass([this.element], oldProperties.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (newProperties.cssClass) {\n addClass([this.element], newProperties.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'disabled':\n if (newProperties.disabled) {\n this.element.classList.add('e-disabled');\n this.unwireEvent();\n }\n else {\n this.element.classList.remove('e-disabled');\n this.wireEvent();\n }\n break;\n case 'height':\n this.element.style.height = newProperties.height;\n break;\n case 'width':\n this.element.style.width = newProperties.width;\n break;\n case 'theme':\n if (newProperties.theme) {\n this.updateTheme();\n this.upperContext.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n this.upperContext.fillStyle = this.themeColl[this.theme]['secondaryColor'];\n }\n break;\n case 'finetuneSettings':\n if (newProperties.finetuneSettings) {\n this.finetuneSettings = newProperties.finetuneSettings;\n this.updateFinetunes();\n }\n break;\n case 'locale':\n if (newProperties.locale) {\n this.l10n.setLocale(newProperties.locale);\n this.refreshToolbar('main');\n }\n break;\n case 'allowUndoRedo':\n if (newProperties.allowUndoRedo) {\n this.allowUndoRedo = true;\n }\n else {\n this.allowUndoRedo = false;\n }\n this.refreshToolbar('main');\n break;\n case 'toolbar':\n break;\n case 'toolbarTemplate':\n break;\n }\n }\n };\n ImageEditor.prototype.destroy = function () {\n var classList = [];\n this.element.removeAttribute('tabindex');\n if (this.cssClass) {\n classList = classList.concat(this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n removeClass([this.element], classList);\n if (!this.element.getAttribute('class')) {\n this.element.removeAttribute('class');\n }\n this.destroySubComponents();\n this.unwireEvent();\n _super.prototype.destroy.call(this);\n this.element.innerHTML = '';\n this.trigger('destroyed');\n };\n ImageEditor.prototype.initialize = function () {\n this.updateFinetunes();\n this.createToolbar();\n this.createContextualToolbar();\n this.createCanvas();\n this.wireEvent();\n this.lowerContext.filter = this.canvasFilter = this.initialAdjustmentValue = this.adjustmentValue = this.getDefaultFilter();\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.element) {\n createSpinner({\n target: this.element\n });\n }\n };\n ImageEditor.prototype.getDefaultFilter = function () {\n return 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n };\n ImageEditor.prototype.updateFinetunes = function () {\n if (this.finetuneSettings) {\n if (this.finetuneSettings.brightness) {\n this.adjustmentLevel.brightness = this.finetuneSettings.brightness.defaultValue;\n this.tempAdjustmentLevel.brightness = this.finetuneSettings.brightness.defaultValue;\n }\n if (this.finetuneSettings.contrast) {\n this.adjustmentLevel.contrast = this.finetuneSettings.contrast.defaultValue;\n this.tempAdjustmentLevel.contrast = this.finetuneSettings.contrast.defaultValue;\n }\n if (this.finetuneSettings.hue) {\n this.adjustmentLevel.hue = this.finetuneSettings.hue.defaultValue;\n this.tempAdjustmentLevel.hue = this.finetuneSettings.hue.defaultValue;\n }\n if (this.finetuneSettings.saturation) {\n this.adjustmentLevel.saturation = this.finetuneSettings.saturation.defaultValue;\n this.tempAdjustmentLevel.saturation = this.finetuneSettings.saturation.defaultValue;\n }\n if (this.finetuneSettings.exposure) {\n this.adjustmentLevel.exposure = this.finetuneSettings.exposure.defaultValue;\n this.tempAdjustmentLevel.exposure = this.finetuneSettings.exposure.defaultValue;\n }\n if (this.finetuneSettings.opacity) {\n this.adjustmentLevel.opacity = this.finetuneSettings.opacity.defaultValue;\n this.tempAdjustmentLevel.opacity = this.finetuneSettings.opacity.defaultValue;\n }\n if (this.finetuneSettings.blur) {\n this.adjustmentLevel.blur = this.finetuneSettings.blur.defaultValue;\n this.tempAdjustmentLevel.blur = this.finetuneSettings.blur.defaultValue;\n }\n this.isInitialLoading = true;\n }\n };\n ImageEditor.prototype.initializeFilter = function () {\n this.setBrightness(this.adjustmentLevel.brightness);\n this.setContrast(this.adjustmentLevel.contrast);\n this.setHue(this.adjustmentLevel.hue);\n this.setSaturation(this.adjustmentLevel.saturation);\n this.setExposure(this.adjustmentLevel.exposure);\n this.setOpacity(this.adjustmentLevel.opacity);\n this.setBlur(this.adjustmentLevel.blur);\n };\n /**\n *\n * This Method will add events to component (element, event, method, current reference)\n *\n * @returns {void}.\n */\n ImageEditor.prototype.wireEvent = function () {\n EventHandler.add(document, 'keydown', this.keyDownEventHandler, this);\n EventHandler.add(document, 'keypress', this.keyUpEventHandler, this);\n EventHandler.add(this.upperCanvas, 'mousedown', this.mouseDownEventHandler, this);\n EventHandler.add(this.upperCanvas, 'mousemove', this.mouseMoveEventHandler, this);\n EventHandler.add(this.upperCanvas, 'mouseup', this.mouseUpEventHandler, this);\n EventHandler.add(document, 'mouseup', this.mouseUpEventHandler, this);\n EventHandler.add(this.lowerCanvas, 'mousedown', this.canvasMouseDownHandler, this);\n EventHandler.add(this.lowerCanvas, 'mousemove', this.canvasMouseMoveHandler, this);\n EventHandler.add(this.lowerCanvas, 'mouseup', this.canvasMouseUpHandler, this);\n EventHandler.add(document, 'mouseup', this.canvasMouseUpHandler, this);\n EventHandler.add(this.upperCanvas, 'touchstart', this.touchStartHandler, this);\n EventHandler.add(this.lowerCanvas, 'touchstart', this.touchStartHandler, this);\n EventHandler.add(this.upperCanvas, 'dblclick', this.findTextPoint, this);\n EventHandler.add(this.textArea, 'mousedown', this.findTextPoint, this);\n EventHandler.add(this.lowerCanvas, 'mousewheel DOMMouseScroll', this.handleScroll, this);\n EventHandler.add(this.upperCanvas, 'mousewheel DOMMouseScroll', this.handleScroll, this);\n window.addEventListener('resize', this.windowResizeHandler.bind(this));\n if ((!Browser.isIos && Browser.info.name !== 'safari')) {\n screen.orientation.addEventListener('change', this.screenOrientation.bind(this));\n }\n };\n /**\n *\n * This Method will remove events from component\n *\n * @returns {void}.\n */\n ImageEditor.prototype.unwireEvent = function () {\n EventHandler.remove(document, 'keydown', this.keyDownEventHandler);\n EventHandler.remove(document, 'keypress', this.keyUpEventHandler);\n EventHandler.remove(this.upperCanvas, 'mousedown', this.mouseDownEventHandler);\n EventHandler.remove(this.upperCanvas, 'mousemove', this.mouseMoveEventHandler);\n EventHandler.remove(this.upperCanvas, 'mouseup', this.mouseUpEventHandler);\n EventHandler.remove(document, 'mouseup', this.mouseUpEventHandler);\n EventHandler.remove(this.lowerCanvas, 'mousedown', this.canvasMouseDownHandler);\n EventHandler.remove(this.lowerCanvas, 'mousemove', this.canvasMouseMoveHandler);\n EventHandler.remove(this.lowerCanvas, 'mouseup', this.canvasMouseUpHandler);\n EventHandler.remove(document, 'mouseup', this.canvasMouseUpHandler);\n };\n ImageEditor.prototype.destroySubComponents = function () {\n var inputElement = this.element.querySelectorAll('input.e-control');\n var btnElement = this.element.querySelectorAll('button.e-control');\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].classList.contains('e-color-picker')) {\n getComponent(inputElement[i], 'color-picker').destroy();\n detach(select('input#' + inputElement[i].id, this.element));\n }\n }\n for (var i = 0, len = btnElement.length; i < len; i++) {\n if (btnElement[i].classList.contains('e-dropdown-btn')) {\n getComponent(btnElement[i], 'dropdown-btn').destroy();\n detach(select('button#' + btnElement[i].id, this.element));\n }\n else if (btnElement[i].classList.contains('e-btn')) {\n getComponent(btnElement[i], 'btn').destroy();\n detach(select('button#' + btnElement[i].id, this.element));\n }\n }\n };\n ImageEditor.prototype.updateTheme = function () {\n if (this.theme !== '') {\n this.theme = this.toPascalCase(this.theme);\n }\n };\n ImageEditor.prototype.toPascalCase = function (str) {\n var strArr = [];\n if (!isNullOrUndefined(str)) {\n strArr = str.toLowerCase().split('-');\n }\n for (var i = 0; i < strArr.length; i++) {\n strArr[i] = strArr[i].charAt(0).toUpperCase() + strArr[i].slice(1);\n }\n return strArr.join('');\n };\n ImageEditor.prototype.createCanvas = function () {\n this.element.style.boxSizing = 'border-box';\n var height = this.toolbarHeight;\n this.element.style.width = this.width;\n this.element.style.height = this.height;\n var canvasWrapper = this.element.appendChild(this.createElement('div', { id: this.element.id + '_canvasWrapper',\n className: 'e-canvas-wrapper', attrs: { style: 'height:' + (this.element.offsetHeight - height - 2) + 'px; width:' +\n (this.element.offsetWidth - 2)\n + 'px; position: relative; overflow: hidden; margin: 0 auto;' }\n }));\n this.lowerCanvas = canvasWrapper.appendChild(this.createElement('canvas', {\n id: this.element.id + '_lowerCanvas', attrs: { name: 'canvasImage' }\n }));\n this.upperCanvas = canvasWrapper.appendChild(this.createElement('canvas', {\n id: this.element.id + '_upperCanvas', attrs: { name: 'canvasImage' }\n }));\n this.inMemoryCanvas = this.createElement('canvas', {\n id: this.element.id + '_inMemoryCanvas', attrs: { name: 'canvasImage' }\n });\n this.textArea = canvasWrapper.appendChild(this.createElement('textarea', {\n id: this.element.id + '_textArea', className: 'e-textarea', attrs: { name: 'textArea' }\n }));\n this.textArea.setAttribute('spellcheck', 'false');\n this.lowerCanvas.style.width = this.upperCanvas.style.width = this.inMemoryCanvas.style.width = '100%';\n this.lowerCanvas.style.height = this.upperCanvas.style.height = this.inMemoryCanvas.style.height = '100%';\n this.upperCanvas.style.position = this.lowerCanvas.style.position = this.textArea.style.position = 'absolute';\n this.textArea.style.backgroundColor = 'transparent';\n this.textArea.style.display = 'none';\n this.textArea.style.resize = 'none';\n this.lowerContext = this.lowerCanvas.getContext('2d');\n this.baseImg = this.createElement('img', {\n id: this.element.id + '_orgImg', attrs: { name: 'Image', crossorigin: 'anonymous' }\n });\n this.upperCanvas.style.cursor = 'default';\n this.upperCanvas.style.display = 'none';\n this.upperContext = this.upperCanvas.getContext('2d');\n this.inMemoryContext = this.inMemoryCanvas.getContext('2d');\n };\n ImageEditor.prototype.createToolbar = function () {\n var _this = this;\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)) {\n this.element.appendChild(this.createElement('div', {\n id: this.element.id + '_toolbarArea', className: 'e-toolbar-area'\n }));\n if (this.toolbarTemplate) {\n this.toolbarTemplateFn();\n }\n else {\n var toolbarItems = { cssClass: 'e-image-upload', align: 'Left', type: 'Input',\n tooltipText: this.l10n.getConstant('Browse'), template: new Uploader({ allowedExtensions: '.jpg, .jpeg, .png,.svg' }) };\n if (isNullOrUndefined(this.defToolbarItems)) {\n this.defToolbarItems = [];\n }\n this.defToolbarItems.push(toolbarItems);\n var toolbarArea = document.getElementById(this.element.id + '_toolbarArea');\n var toolbar_1 = this.createElement('div', {\n id: this.element.id + '_toolbar'\n });\n toolbarArea.appendChild(toolbar_1);\n var uploadItems = [\n {\n cssClass: 'e-image-upload',\n align: 'Left', type: 'Input',\n tooltipText: this.l10n.getConstant('Browse'),\n template: new Uploader({\n allowedExtensions: '.jpg, .jpeg, .png,.svg',\n selected: function () {\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 &&\n (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar'))) {\n getComponent(document.getElementById(_this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, Browser.isDevice, null);\n _this.createBottomToolbar();\n }\n else {\n if (_this.defToolbarItems.length > 0 &&\n (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, false, null);\n }\n }\n })\n }\n ];\n new Toolbar({ items: uploadItems, width: '100%',\n created: function () {\n _this.trigger('toolbarCreated', { toolbarType: 'main' });\n },\n clicked: this.defToolbarClicked.bind(this) }, '#' + this.element.id + '_toolbar');\n this.createLeftToolbarControls();\n }\n if (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar'))) {\n this.toolbarHeight = document.getElementById(this.element.id + '_toolbar').clientHeight;\n }\n }\n else {\n this.toolbarHeight = 0;\n }\n };\n ImageEditor.prototype.createContextualToolbar = function () {\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)) {\n this.element.appendChild(this.createElement('div', { id: this.element.id + '_contextualToolbarArea',\n className: 'e-contextual-toolbar-wrapper e-hide', attrs: { style: 'position: absolute;' }\n }));\n var toolbarArea = document.getElementById(this.element.id + '_contextualToolbarArea');\n var toolbar_2 = this.createElement('div', { id: this.element.id + '_contextualToolbar' });\n toolbarArea.appendChild(toolbar_2);\n }\n };\n ImageEditor.prototype.updateContextualToolbar = function (type, cType) {\n if (this.toolbarTemplate) {\n this.toolbarTemplateFn();\n }\n else {\n var toolbarArea = this.element.querySelector('#' + this.element.id + '_toolbarArea');\n var contextualToolbarArea = this.element.querySelector('#' + this.element.id + '_contextualToolbarArea');\n contextualToolbarArea.classList.remove('e-hide');\n contextualToolbarArea.style.left = toolbarArea.offsetLeft + 'px';\n if (type === 'filter') {\n if (document.getElementById(this.element.id + '_toolbar') && this.defToolbarItems.length > 0) {\n getComponent(document.getElementById(this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n else {\n this.initToolbarItem(true, null, null);\n }\n this.refreshSlider();\n this.initFilterToolbarItem();\n }\n else {\n if (document.querySelector('#' + this.element.id + '_contextualToolbar').classList.contains('e-control')) {\n getComponent(document.getElementById(this.element.id + '_contextualToolbar'), 'toolbar').destroy();\n }\n this.refreshSlider();\n this.renderSlider(cType);\n }\n if (Browser.isDevice) {\n var cHt = contextualToolbarArea.offsetHeight;\n var ht = this.element.querySelector('#' + this.element.id + '_canvasWrapper').offsetHeight;\n contextualToolbarArea.style.top = this.toolbarHeight + ht - cHt + 'px';\n }\n else {\n contextualToolbarArea.style.top = this.toolbarHeight + 'px';\n }\n }\n };\n ImageEditor.prototype.createBottomToolbar = function () {\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)) {\n this.element.appendChild(this.createElement('div', {\n id: this.element.id + '_bottomToolbarArea', className: 'e-bottom-toolbar'\n }));\n if (!this.toolbarTemplate) {\n document.getElementById(this.element.id + '_canvasWrapper').style.height = (this.element.offsetHeight\n - this.toolbarHeight * 2) - 3 + 'px';\n var toolbarArea = document.getElementById(this.element.id + '_bottomToolbarArea');\n var toolbarElem = this.createElement('div', {\n id: this.element.id + '_bottomToolbar'\n });\n toolbarArea.appendChild(toolbarElem);\n }\n this.initBottomToolbar();\n }\n };\n ImageEditor.prototype.initBottomToolbar = function () {\n var _this = this;\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)) {\n if (this.toolbarTemplate) {\n this.toolbarTemplateFn();\n }\n else {\n var items = this.getMainToolbarItem();\n new Toolbar({ items: items, width: '100%',\n created: function () {\n _this.renderAnnotationBtn();\n _this.renderCropBtn();\n _this.renderTransformBtn();\n _this.trigger('toolbarCreated', { toolbarType: 'main' });\n },\n clicked: this.defToolbarClicked.bind(this)\n }, '#' + this.element.id + '_bottomToolbar');\n if (this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(this.element.id + '_bottomToolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_3 = getComponent(this.element.id + '_bottomToolbar', 'toolbar');\n toolbar_3.refreshOverflow();\n }\n }\n }\n };\n ImageEditor.prototype.toolbarTemplateFn = function () {\n var template;\n var templateID = this.element.id + '_toolbar';\n var toolbarArea = this.element.querySelector('#' + this.element.id + '_toolbarArea');\n if (this.toolbarTemplate) {\n this.toolbarFn = this.templateParser(this.toolbarTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.toolbarFn({ type: 'toolbar' }, this, 'Template', templateID)[0];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.toolbarFn({ type: 'toolbar' }, this, 'Template', templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n }\n else {\n template = this.toolbarFn({ type: 'toolbar' }, this, 'Template', templateID)[0];\n }\n toolbarArea.appendChild(template);\n this.renderReactTemplates();\n }\n };\n ImageEditor.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (error) {\n return templateCompiler(template);\n }\n }\n return undefined;\n };\n ImageEditor.prototype.getLeftToolbarItem = function (isOkBtn) {\n var toolbarItems = [];\n if (!isOkBtn) {\n toolbarItems.push({ cssClass: 'e-image-upload', align: 'Left', type: 'Input', template: new Uploader({ allowedExtensions: '.jpg, .jpeg, .png,.svg' }) });\n toolbarItems.push({ visible: false, cssClass: 'e-image-position e-btn e-flat', tooltipText: this.l10n.getConstant('Browse'), align: 'Left' });\n }\n if (this.allowUndoRedo) {\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Undo') > -1)) {\n toolbarItems.push({ id: this.element.id + '_undo', prefixIcon: 'e-icons e-undo', cssClass: 'top-icon e-undo',\n tooltipText: this.l10n.getConstant('Undo'), align: 'Left' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Redo') > -1)) {\n toolbarItems.push({ id: this.element.id + '_redo', prefixIcon: 'e-icons e-redo', cssClass: 'top-icon e-redo',\n tooltipText: this.l10n.getConstant('Redo'), align: 'Left' });\n }\n }\n if (!this.preventZoomBtn) {\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('ZoomOut') > -1)) {\n toolbarItems.push({ id: this.element.id + '_zoomOut', prefixIcon: 'e-icons e-zoom-out', cssClass: 'top-icon e-dec-zoom',\n tooltipText: this.l10n.getConstant('ZoomOut'), align: 'Left' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('ZoomIn') > -1)) {\n toolbarItems.push({ id: this.element.id + '_zoomIn', prefixIcon: 'e-icons e-zoom-in', cssClass: 'top-icon e-inc-zoom',\n tooltipText: this.l10n.getConstant('ZoomIn'), align: 'Left' });\n }\n }\n var tempToolbarItems = this.processToolbar('left');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getRightToolbarItem = function (isOkBtn) {\n var toolbarItems = [];\n if (isOkBtn) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Reset') > -1)) {\n toolbarItems.push({ id: this.element.id + '_reset', prefixIcon: 'e-icons e-btn-reset', cssClass: 'top-icon e-img-reset',\n tooltipText: this.l10n.getConstant('Reset'), align: 'Right' });\n }\n if (!isOkBtn) {\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Save') > -1)) {\n toolbarItems.push({ id: this.element.id + '_save', prefixIcon: 'e-icons e-btn-save', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Save'), align: 'Right', template: '<button id=\"' + this.element.id + '_saveBtn\"></button>' });\n }\n }\n var tempToolbarItems = this.processToolbar('right');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getMainToolbarItem = function (isApplyOption) {\n var toolbarItems = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Crop') > -1)) {\n toolbarItems.push({ id: this.element.id + '_crop', tooltipText: this.l10n.getConstant('Crop'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_cropBtn\"></button>'\n });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Annotate') > -1)) {\n toolbarItems.push({ id: this.element.id + '_annotation', tooltipText: this.l10n.getConstant('Annotation'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_annotationBtn\"></button>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Transform') > -1)) {\n toolbarItems.push({ id: this.element.id + '_transform', tooltipText: this.l10n.getConstant('Transform'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_transformBtn\"></button>'\n });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Finetune') > -1)) {\n toolbarItems.push({ id: this.element.id + '_adjustment', prefixIcon: 'e-icons e-adjustment', cssClass: 'top-icon e-adjustment',\n tooltipText: this.l10n.getConstant('Finetune'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Filter') > -1)) {\n toolbarItems.push({ id: this.element.id + '_filter', prefixIcon: 'e-icons e-filters', cssClass: 'top-icon e-filters',\n tooltipText: this.l10n.getConstant('Filter'), align: 'Center' });\n }\n var tempToolbarItems = this.processToolbar('center');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (isApplyOption) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getZoomToolbarItem = function () {\n var toolbarItems = [];\n return toolbarItems;\n };\n ImageEditor.prototype.processToolbar = function (position) {\n var toolbarItems = [];\n if (this.toolbar) {\n for (var i = 0, len = this.toolbar.length; i < len; i++) {\n if (typeof (this.toolbar[i]) === 'object') {\n if (isNullOrUndefined(this.toolbar[i].align)) {\n if (position === 'left') {\n toolbarItems.push(this.toolbar[i]);\n }\n }\n else if (this.toolbar[i].align.toLowerCase() === position) {\n toolbarItems.push(this.toolbar[i]);\n }\n }\n }\n }\n return toolbarItems;\n };\n ImageEditor.prototype.processSubToolbar = function (items) {\n var toolbarItems = [];\n if (items) {\n for (var i = 0, len = items.length; i < len; i++) {\n if (typeof (items[i]) === 'object') {\n items[i].align = 'Center';\n toolbarItems.push(items[i]);\n }\n }\n }\n return toolbarItems;\n };\n ImageEditor.prototype.isToolbar = function () {\n return (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)\n || !isNullOrUndefined(this.toolbarTemplate));\n };\n ImageEditor.prototype.initToolbarItem = function (isApplyOption, isDevice, isOkBtn) {\n var _this = this;\n if (this.isToolbar()) {\n var leftItem = this.getLeftToolbarItem(isOkBtn);\n var rightItem = this.getRightToolbarItem(isOkBtn);\n var mainItem = this.getMainToolbarItem(isApplyOption);\n var zoomItem = this.getZoomToolbarItem();\n if (isDevice) {\n this.defToolbarItems = leftItem.concat(rightItem);\n }\n else {\n this.defToolbarItems = leftItem.concat(mainItem, rightItem, zoomItem);\n }\n new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n if (!isDevice) {\n _this.renderAnnotationBtn();\n _this.renderCropBtn();\n _this.renderTransformBtn();\n }\n _this.renderSaveBtn();\n _this.trigger('toolbarCreated', { toolbarType: 'main' });\n }\n }, '#' + this.element.id + '_toolbar');\n this.createLeftToolbarControls();\n this.enableDisableToolbarBtn();\n if (this.isToolbar() && (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_4 = getComponent(this.element.id + '_toolbar', 'toolbar');\n toolbar_4.refreshOverflow();\n }\n }\n };\n ImageEditor.prototype.enableDisableToolbarBtn = function () {\n var undo = document.querySelector('#' + this.element.id + '_undo');\n if (!isNullOrUndefined(undo) && this.undoRedoStep === 0) {\n undo.classList.add('e-disabled');\n undo.parentElement.classList.add('e-overlay');\n }\n else if (!isNullOrUndefined(undo)) {\n undo.classList.remove('e-disabled');\n undo.parentElement.classList.remove('e-overlay');\n }\n var redo = document.querySelector('#' + this.element.id + '_redo');\n if (!isNullOrUndefined(redo) && (this.undoRedoStep === this.undoRedoColl.length)) {\n redo.classList.add('e-disabled');\n redo.parentElement.classList.add('e-overlay');\n }\n else if (!isNullOrUndefined(redo) && (this.undoRedoStep === 0 && this.undoRedoColl.length > 0)) {\n redo.classList.remove('e-disabled');\n redo.parentElement.classList.remove('e-overlay');\n }\n else if (!isNullOrUndefined(redo)) {\n redo.classList.remove('e-disabled');\n redo.parentElement.classList.remove('e-overlay');\n }\n var zoomIn = document.querySelector('#' + this.element.id + '_zoomIn');\n if (!isNullOrUndefined(zoomIn) && this.zoomFactor >= 5) {\n zoomIn.classList.add('e-disabled');\n zoomIn.parentElement.classList.add('e-overlay');\n }\n else if (!isNullOrUndefined(zoomIn)) {\n zoomIn.classList.remove('e-disabled');\n zoomIn.parentElement.classList.remove('e-overlay');\n }\n var zoomOut = document.querySelector('#' + this.element.id + '_zoomOut');\n if (!isNullOrUndefined(zoomOut) && this.zoomFactor === 0) {\n zoomOut.classList.add('e-disabled');\n zoomOut.parentElement.classList.add('e-overlay');\n }\n else if (!isNullOrUndefined(zoomOut)) {\n zoomOut.classList.remove('e-disabled');\n zoomOut.parentElement.classList.remove('e-overlay');\n }\n var pan = document.querySelector('#' + this.element.id + '_pan');\n if (!isNullOrUndefined(pan) && this.zoomFactor === 0) {\n pan.style.display = 'none';\n }\n else if (!isNullOrUndefined(pan)) {\n pan.style.display = 'block';\n }\n };\n ImageEditor.prototype.createLeftToolbarControls = function () {\n if (this.defToolbarItems !== undefined && this.defToolbarItems.length > 0 &&\n (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n var uploadDiv = document.getElementById(this.element.id + '_toolbar')\n .querySelector('.e-image-upload');\n if (uploadDiv) {\n var uploadElem = uploadDiv.getElementsByTagName('input')[0];\n var uploadBtnElem = uploadDiv.getElementsByTagName('button')[0];\n uploadBtnElem.className = 'e-tbar-btn e-tbtn-txt e-btn top-icon';\n uploadBtnElem.innerHTML = '';\n uploadBtnElem.appendChild(this.createElement('span', {\n className: 'e-btn-icon e-icons e-upload-icon e-icon-left'\n }));\n uploadElem.onchange = this.fileSelect.bind(this, uploadElem);\n }\n }\n };\n ImageEditor.prototype.cropSelectedState = function () {\n if (!isNullOrUndefined(this.activeObj.shape) && this.activeObj.shape.split('-')[0] === 'crop') {\n this.okBtn();\n }\n };\n ImageEditor.prototype.renderAnnotationBtn = function () {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var items = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Pen') > -1)) {\n items.push({ text: this.l10n.getConstant('Pen'), id: 'pen', iconCss: 'e-icons e-free-pen' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Line') > -1)) {\n items.push({ text: this.l10n.getConstant('Line'), id: 'line', iconCss: 'e-icons e-line' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Rectangle') > -1)) {\n items.push({ text: this.l10n.getConstant('Rectangle'), id: 'rectangle', iconCss: 'e-icons e-rectangle' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Ellipse') > -1)) {\n items.push({ text: this.l10n.getConstant('Ellipse'), id: 'ellipse', iconCss: 'e-icons e-circle' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Text') > -1)) {\n items.push({ text: this.l10n.getConstant('Text'), id: 'text', iconCss: 'e-icons e-add-text' });\n }\n var drpDownBtn = new DropDownButton({ items: items, iconCss: 'e-icons e-annotation',\n cssClass: 'e-image-popup',\n open: function (args) {\n if (_this.currObjType.isUndoAction) {\n _this.refreshUndoRedoColl();\n }\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n },\n select: function (args) {\n _this.cropSelectedState();\n var isCropSelection = false;\n var splitWords;\n if (_this.activeObj.shape !== undefined) {\n splitWords = _this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && _this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n _this.currObjType.isCustomCrop = false;\n if (isCropSelection || _this.togglePan) {\n _this.refreshActiveObj();\n _this.upperContext.clearRect(0, 0, _this.upperCanvas.width, _this.upperCanvas.height);\n _this.refreshToolbar('main');\n }\n switch (args.item.id) {\n case 'pen':\n proxy.tempFreehandCounter = proxy.freehandCounter;\n proxy.tempCurrentFreehandDrawIndex = proxy.currentFreehandDrawIndex;\n proxy.currentToolbar = 'pen';\n _this.freeHandDraw(true);\n break;\n case 'text':\n proxy.currentToolbar = 'text';\n _this.drawShapeText();\n break;\n default:\n proxy.currentToolbar = 'shapes';\n proxy.drawShape((args.item.id).toLowerCase());\n break;\n }\n _this.updateToolbarItems();\n }\n });\n // Render initialized DropDownButton.\n drpDownBtn.appendTo('#' + this.element.id + '_annotationBtn');\n };\n ImageEditor.prototype.renderCropBtn = function () {\n var _this = this;\n var items = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('CustomSelection') > -1)) {\n items.push({ text: this.l10n.getConstant('Custom'), id: 'custom', iconCss: 'e-icons e-custom' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('CircleSelection') > -1)) {\n items.push({ text: this.l10n.getConstant('Circle'), id: 'circle', iconCss: 'e-icons e-circle' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('SquareSelection') > -1)) {\n items.push({ text: this.l10n.getConstant('Square'), id: 'square', iconCss: 'e-icons e-square' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('RatioSelection') > -1)) {\n items.push({ text: '3:2', id: '3:2', iconCss: 'e-icons e-custom-a' });\n items.push({ text: '4:3', id: '4:3', iconCss: 'e-icons e-custom-b' });\n items.push({ text: '5:4', id: '5:4', iconCss: 'e-icons e-custom-c' });\n items.push({ text: '7:5', id: '7:5', iconCss: 'e-icons e-custom-d' });\n items.push({ text: '16:9', id: '16:9', iconCss: 'e-icons e-custom-e' });\n }\n var drpDownBtn = new DropDownButton({\n open: function (args) {\n if (_this.currObjType.isUndoAction) {\n _this.refreshUndoRedoColl();\n }\n if (_this.togglePan) {\n _this.cancelPan();\n }\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n if (!isNullOrUndefined(_this.activeObj.shape) && _this.activeObj.shape.split('-').length > 1) {\n document.getElementById(_this.activeObj.shape.split('-')[1]).classList.add('e-selected');\n }\n },\n items: items, select: this.cropSelect.bind(this),\n iconCss: 'e-icons e-select', cssClass: 'e-image-popup'\n });\n drpDownBtn.appendTo('#' + this.element.id + '_cropBtn');\n };\n ImageEditor.prototype.renderTransformBtn = function () {\n var _this = this;\n var items = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('RotateLeft') > -1)) {\n items.push({ text: this.l10n.getConstant('RotateLeft'), id: 'rotateleft', iconCss: 'e-icons e-anti-clock-wise' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('RotateRight') > -1)) {\n items.push({ text: this.l10n.getConstant('RotateRight'), id: 'rotateright', iconCss: 'e-icons e-clock-wise' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('FlipHorizontal') > -1)) {\n items.push({ text: this.l10n.getConstant('HorizontalFlip'), id: 'horizontalflip', iconCss: 'e-icons e-horizontal-flip' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('FlipVertical') > -1)) {\n items.push({ text: this.l10n.getConstant('VerticalFlip'), id: 'verticalflip', iconCss: 'e-icons e-vertical-flip' });\n }\n var drpDownBtn = new DropDownButton({\n open: function (args) {\n if (_this.currObjType.isUndoAction) {\n _this.refreshUndoRedoColl();\n }\n if (Browser.isDevice) {\n var ht = args.element.parentElement.offsetHeight;\n args.element.parentElement.style.display = 'none';\n args.element.parentElement.style.top = drpDownBtn.element.getBoundingClientRect().top -\n ht + 'px';\n args.element.parentElement.style.display = 'block';\n }\n },\n items: items, select: this.transformSelect.bind(this),\n iconCss: 'e-icons e-transform', cssClass: 'e-image-popup'\n });\n drpDownBtn.appendTo('#' + this.element.id + '_transformBtn');\n };\n ImageEditor.prototype.renderSaveBtn = function () {\n var imageEditorObj = getInstance(document.getElementById(this.element.id), ImageEditor_1);\n var saveItems = [\n { text: 'JPEG', id: 'jpeg' },\n { text: 'PNG', id: 'png' },\n { text: 'SVG', id: 'svg' }\n ];\n var ddbElem = document.getElementById(this.element.id + '_saveBtn');\n if (ddbElem) {\n // Initialize the DropDownButton component.\n var saveDrpDownBtn = new DropDownButton({ items: saveItems, cssClass: 'e-caret-hide e-image-popup', iconCss: 'e-icons e-save',\n select: function (args) {\n imageEditorObj.export(args.item.text);\n }\n });\n saveDrpDownBtn.appendTo('#' + this.element.id + '_saveBtn');\n }\n };\n ImageEditor.prototype.cropSelect = function (args) {\n this.isCropTab = true;\n this.zoomFactor = this.cropZoomFactor;\n var activeObj = this.activeObj;\n var text = args.item.id;\n this.currentToolbar = 'crop';\n this.currSelectionPoint = null;\n this.select(text);\n this.refreshToolbar('main', true, true);\n this.refreshDropDownBtn(true);\n this.undoRedoColl.push({ operation: 'selectionTransform', value: null,\n currentObj: extend([], this.objColl, [], true),\n previousObj: extend([], this.objColl, [], true),\n previousSelectionObj: extend({}, activeObj, {}, true),\n currentSelectionObj: extend({}, this.activeObj, {}, true),\n zoomFactor: this.zoomFactor, sharpen: this.adjustmentLevel.sharpen, bw: this.adjustmentLevel.bw });\n this.undoRedoStep++;\n this.enableDisableToolbarBtn();\n };\n ImageEditor.prototype.transformSelect = function (args) {\n this.cropSelectedState();\n this.currentSelectionPoint = null;\n this.performTransformation(args.item.id);\n this.afterCropActions.push(args.item.id);\n };\n ImageEditor.prototype.performTransformation = function (text) {\n var tempZoomFactor = this.defaultZoomFactor;\n var isUndoRedo = this.isUndoRedo;\n if (this.defaultZoomFactor !== 0) {\n this.isUndoRedo = true;\n if (this.defaultZoomFactor > 0) {\n this.zoom(-this.defaultZoomFactor);\n }\n else {\n this.zoom(Math.abs(this.defaultZoomFactor));\n }\n this.isUndoRedo = isUndoRedo;\n }\n this.updateTransform(text);\n if (tempZoomFactor !== 0) {\n this.isUndoRedo = true;\n this.zoom(tempZoomFactor);\n this.isUndoRedo = isUndoRedo;\n }\n };\n ImageEditor.prototype.updateTransform = function (text) {\n switch (text) {\n case 'rotateleft':\n this.rotate(-90);\n break;\n case 'rotateright':\n this.rotate(90);\n break;\n case 'horizontalflip':\n this.flip('Horizontal');\n break;\n case 'verticalflip':\n this.flip('Vertical');\n break;\n }\n };\n ImageEditor.prototype.getShapesToolbarItem = function (items) {\n var toolbarItems = [];\n if (items.indexOf('fillColor') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', id: this.element.id + '_fillcolor',\n cssClass: 'top-icon e-fill', tooltipText: this.l10n.getConstant('FillColor'), align: 'Center', type: 'Input',\n template: '<button id=\"' + this.element.id + '_fillColorBtn\"></button>' });\n }\n if (items.indexOf('strokeColor') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', id: this.element.id + '_strokecolor',\n cssClass: 'top-icon e-stroke', tooltipText: this.l10n.getConstant('StrokeColor'), align: 'Center', type: 'Input',\n template: '<button id=\"' + this.element.id + '_borderColorBtn\"></button>' });\n }\n if (items.indexOf('strokeWidth') > -1) {\n toolbarItems.push({ id: this.element.id + '_strokeWidth', cssClass: 'top-icon e-size', tooltipText: 'Stroke Width', align: 'Center',\n type: 'Input', template: '<button id=\"' + this.element.id + '_borderWidthBtn\"></button>' });\n }\n var tempToolbarItems = this.processSubToolbar(items);\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (!Browser.isDevice) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.initShapesToolbarItem = function (items) {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var mainItem = this.getShapesToolbarItem(items);\n var zoomItem = this.getZoomToolbarItem();\n if (Browser.isDevice) {\n this.defToolbarItems = mainItem;\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.createShapeColor(items);\n _this.createShapeBtn(items);\n if (!Browser.isDevice) {\n _this.renderSaveBtn();\n }\n _this.trigger('toolbarCreated', { toolbarType: 'shapes' });\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n else {\n _this.createLeftToolbarControls();\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n }\n });\n if (Browser.isDevice) {\n toolbar.appendTo('#' + this.element.id + '_bottomToolbar');\n }\n else {\n toolbar.appendTo('#' + this.element.id + '_toolbar');\n }\n this.enableDisableToolbarBtn();\n };\n ImageEditor.prototype.createShapeColor = function (items) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (items.indexOf('fillColor') > -1) {\n this.element.querySelector('.e-template.e-fill').appendChild(this.createElement('input', {\n id: this.element.id + '_shape_fill'\n }));\n var fillColor = new ColorPicker({\n modeSwitcher: false, noColor: true, value: '',\n showButtons: false, mode: 'Palette', cssClass: 'e-shape-fill-color',\n change: function (args) {\n _this.pushActItemIntoObj();\n var objColl = extend([], _this.objColl, [], true);\n _this.objColl.pop();\n proxy.activeObj.strokeSettings.fillColor = args.currentValue.hex;\n proxy.strokeSettings.fillColor = proxy.activeObj.strokeSettings.fillColor;\n _this.objColl.push(_this.activeObj);\n proxy.undoRedoColl.push({ operation: 'shapeTransform', value: null, currentObj: extend([], proxy.objColl, [], true),\n previousObj: objColl, zoomFactor: proxy.zoomFactor, sharpen: proxy.adjustmentLevel.sharpen,\n bw: proxy.adjustmentLevel.bw });\n proxy.undoRedoStep++;\n proxy.redrawShape(proxy.objColl[proxy.objColl.length - 1]);\n if (args.currentValue.rgba === '') {\n fillDDB_1.element.children[0].classList.add('e-nocolor-item');\n }\n else {\n fillDDB_1.element.children[0].classList.remove('e-nocolor-item');\n fillDDB_1.element.children[0].style.backgroundColor = args.currentValue.rgba;\n }\n fillDDB_1.toggle();\n }\n }, '#' + this.element.id + '_shape_fill');\n var fillDDB_1 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fillDDB_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-shape-fill-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_fillColorBtn');\n fillColor.inline = true;\n this.element.querySelector('.e-fill.e-template .e-dropdownbtn-preview').classList.add('e-nocolor-item');\n }\n if (items.indexOf('strokeColor') > -1) {\n this.element.querySelector('.e-template.e-stroke').appendChild(this.createElement('input', {\n id: this.element.id + '_shape_stroke'\n }));\n var strokeColor = new ColorPicker({\n modeSwitcher: false, noColor: false, value: '#fff',\n showButtons: false, mode: 'Palette', cssClass: 'e-shape-stroke-color',\n change: function (args) {\n _this.pushActItemIntoObj();\n var objColl = extend([], _this.objColl, [], true);\n _this.objColl.pop();\n proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n proxy.strokeSettings.strokeColor = proxy.activeObj.strokeSettings.strokeColor;\n if (!proxy.togglePen) {\n _this.objColl.push(_this.activeObj);\n proxy.undoRedoColl.push({ operation: 'shapeTransform', value: null,\n currentObj: extend([], proxy.objColl, [], true),\n previousObj: objColl, zoomFactor: proxy.zoomFactor,\n sharpen: proxy.adjustmentLevel.sharpen, bw: proxy.adjustmentLevel.bw });\n proxy.undoRedoStep++;\n proxy.redrawShape(proxy.objColl[proxy.objColl.length - 1]);\n }\n strokeDDB_1.element.children[0].style.backgroundColor = args.currentValue.rgba;\n strokeDDB_1.toggle();\n }\n }, '#' + this.element.id + '_shape_stroke');\n var strokeDDB_1 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = strokeDDB_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-shape-stroke-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_borderColorBtn');\n strokeColor.inline = true;\n this.element.querySelector('.e-stroke.e-template .e-dropdownbtn-preview').style.background = '#fff';\n }\n };\n ImageEditor.prototype.createShapeBtn = function (items) {\n var _this = this;\n var strokeWidthItems = [\n { id: '1', text: this.l10n.getConstant('XSmall') },\n { id: '2', text: this.l10n.getConstant('Small') },\n { id: '3', text: this.l10n.getConstant('Medium') },\n { id: '4', text: this.l10n.getConstant('Large') },\n { id: '5', text: this.l10n.getConstant('XLarge') }\n ];\n if (items.indexOf('strokeWidth') > -1) {\n var strokeWidthBtn = document.getElementById(this.element.id + '_borderWidthBtn');\n var spanElem_1 = document.createElement('span');\n spanElem_1.innerHTML = this.l10n.getConstant('Small');\n spanElem_1.className = 'e-shape-stroke-width';\n strokeWidthBtn.appendChild(spanElem_1);\n // Initialize the DropDownButton component.\n var drpDownBtn_1 = new DropDownButton({ items: strokeWidthItems,\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var activeBtn = spanElem_1.innerHTML;\n if (activeBtn !== '') {\n args.element.querySelector('[aria-label = ' + '\"' + activeBtn + '\"' + ']').classList.add('e-selected-btn');\n }\n },\n select: function (args) {\n _this.pushActItemIntoObj();\n var objColl = extend([], _this.objColl, [], true);\n _this.objColl.pop();\n spanElem_1.textContent = args.item.text;\n _this.activeObj.strokeSettings.strokeWidth = parseInt(args.item.id, 10);\n _this.activeObj.strokeSettings.strokeWidth *= 2;\n _this.strokeSettings.strokeWidth = _this.activeObj.strokeSettings.strokeWidth;\n _this.objColl.push(_this.activeObj);\n _this.undoRedoColl.push({ operation: 'shapeTransform', value: null,\n currentObj: extend([], _this.objColl, [], true),\n previousObj: objColl, zoomFactor: _this.zoomFactor,\n sharpen: _this.adjustmentLevel.sharpen, bw: _this.adjustmentLevel.bw });\n _this.undoRedoStep++;\n _this.redrawShape(_this.objColl[_this.objColl.length - 1]);\n if (Browser.isDevice) {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_5 = getComponent(_this.element.id + '_bottomToolbar', 'toolbar');\n toolbar_5.refreshOverflow();\n }\n }\n else {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_6 = getComponent(_this.element.id + '_toolbar', 'toolbar');\n toolbar_6.refreshOverflow();\n }\n }\n }\n });\n // Render initialized DropDownButton.\n drpDownBtn_1.appendTo('#' + this.element.id + '_borderWidthBtn');\n }\n };\n ImageEditor.prototype.getTextToolbarItem = function (items) {\n var toolbarItems = [];\n if (items.indexOf('fontFamily') > -1) {\n toolbarItems.push({ id: this.element.id + '_fontFamily', cssClass: 'top-icon e-img-font-family',\n tooltipText: this.l10n.getConstant('FontFamily'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_fontFamilyBtn\"></button>' });\n }\n if (items.indexOf('fontStyle') > -1) {\n toolbarItems.push({ id: this.element.id + '_fontStyle', cssClass: 'top-icon e-img-font-style',\n tooltipText: this.l10n.getConstant('FontStyle'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_fontStyleBtn\"></button>' });\n }\n if (items.indexOf('fontSize') > -1) {\n toolbarItems.push({ id: this.element.id + '_fontSize', cssClass: 'top-icon e-img-font-size',\n tooltipText: this.l10n.getConstant('FontSize'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_fontSizeBtn\"></button>' });\n }\n if (items.indexOf('fontColor') > -1) {\n toolbarItems.push({ cssClass: 'top-icon e-text-font-color', id: this.element.id + '_text_strokecolor',\n tooltipText: this.l10n.getConstant('FontColor'), align: 'Center',\n type: 'Input', template: '<button id=\"' + this.element.id + '_fontColorBtn\"></button>' });\n }\n var tempToolbarItems = this.processSubToolbar(items);\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (!Browser.isDevice) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getFontFamilyItems = function () {\n if (Browser.isDevice) {\n return [{ id: 'arial', text: 'ABC' }, { id: 'calibri', text: 'ABC' }, { id: 'georgia', text: 'ABC' },\n { id: 'roboto', text: 'ABC' }, { id: 'tahoma', text: 'ABC' }];\n }\n return [{ id: 'arial', text: 'Arial' }, { id: 'calibri', text: 'Calibri' }, { id: 'georgia', text: 'Georgia' },\n { id: 'roboto', text: 'Roboto' }, { id: 'tahoma', text: 'Tahoma' }];\n };\n ImageEditor.prototype.getFontSizeItems = function () {\n if (Browser.isDevice) {\n return [{ id: 'default', text: this.l10n.getConstant('ABC') }, { id: 'bold', text: this.l10n.getConstant('ABC') },\n { id: 'italic', text: this.l10n.getConstant('ABC') }, { id: 'bolditalic', text: this.l10n.getConstant('ABC') }];\n }\n return [{ id: 'default', text: this.l10n.getConstant('Default') }, { id: 'bold', text: this.l10n.getConstant('Bold') },\n { id: 'italic', text: this.l10n.getConstant('Italic') }, { id: 'bolditalic', text: this.l10n.getConstant('BoldItalic') }];\n };\n ImageEditor.prototype.initTextToolbarItem = function (items) {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var mainItem = this.getTextToolbarItem(items);\n var zoomItem = this.getZoomToolbarItem();\n if (Browser.isDevice) {\n this.defToolbarItems = mainItem;\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.createTextColor(items);\n _this.createTextBtn(items);\n if (!Browser.isDevice) {\n _this.renderSaveBtn();\n }\n _this.trigger('toolbarCreated', { toolbarType: 'text' });\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n else {\n _this.createLeftToolbarControls();\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n }\n });\n if (Browser.isDevice) {\n toolbar.appendTo('#' + this.element.id + '_bottomToolbar');\n }\n else {\n toolbar.appendTo('#' + this.element.id + '_toolbar');\n }\n this.enableDisableToolbarBtn();\n };\n ImageEditor.prototype.createTextColor = function (items) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (items.indexOf('fontColor') > -1) {\n this.element.querySelector('.e-template.e-text-font-color').appendChild(this.createElement('input', {\n id: this.element.id + '_text_font'\n }));\n var fontColor = new ColorPicker({\n modeSwitcher: false, value: '#fff',\n showButtons: false, mode: 'Palette', cssClass: 'e-text-fontt-color',\n change: function (args) {\n _this.pushActItemIntoObj();\n var objColl = extend([], _this.objColl, [], true);\n _this.objColl.pop();\n if (proxy.textArea.style.display === 'none') {\n proxy.strokeSettings.strokeColor = proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n if (!proxy.togglePen) {\n _this.objColl.push(_this.activeObj);\n proxy.undoRedoColl.push({ operation: 'shapeTransform',\n value: null, currentObj: extend([], proxy.objColl, [], true),\n previousObj: objColl, zoomFactor: proxy.zoomFactor,\n sharpen: proxy.adjustmentLevel.sharpen, bw: proxy.adjustmentLevel.bw });\n proxy.undoRedoStep++;\n proxy.redrawShape(proxy.objColl[proxy.objColl.length - 1]);\n }\n }\n else if (proxy.textArea.style.display === 'block') {\n proxy.textArea.style.color = args.currentValue.hex;\n var temp = proxy.activeObj.strokeSettings.strokeColor;\n proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n _this.objColl.push(_this.activeObj);\n _this.undoRedoColl.push({ operation: 'textTransform', value: null,\n currentObj: extend([], _this.objColl, [], true),\n previousObj: objColl, zoomFactor: proxy.zoomFactor,\n sharpen: proxy.adjustmentLevel.sharpen, bw: proxy.adjustmentLevel.bw });\n _this.undoRedoStep++;\n _this.objColl.pop();\n proxy.activeObj.strokeSettings.strokeColor = temp;\n }\n else if (!proxy.togglePen) {\n _this.objColl.push(_this.activeObj);\n proxy.undoRedoColl.push({ operation: 'shapeTransform', value: null,\n currentObj: extend([], proxy.objColl, [], true),\n previousObj: objColl, zoomFactor: proxy.zoomFactor,\n sharpen: proxy.adjustmentLevel.sharpen, bw: proxy.adjustmentLevel.bw });\n proxy.undoRedoStep++;\n proxy.redrawShape(proxy.objColl[proxy.objColl.length - 1]);\n }\n strokeDDB_2.element.children[0].style.backgroundColor = args.currentValue.rgba;\n strokeDDB_2.toggle();\n }\n }, '#' + this.element.id + '_text_font');\n var strokeDDB_2 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = strokeDDB_2.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-text-fontt-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_fontColorBtn');\n fontColor.inline = true;\n this.element.querySelector('.e-text-font-color.e-template .e-dropdownbtn-preview').style.background\n = '#fff';\n }\n };\n ImageEditor.prototype.pushActItemIntoObj = function () {\n if (this.textArea.style.display === 'none') {\n this.objColl.push(this.activeObj);\n }\n else {\n var temp = extend({}, this.activeObj, {}, true);\n this.setTextBoxStylesToActObj();\n this.objColl.push(this.activeObj);\n this.activeObj = temp;\n }\n };\n ImageEditor.prototype.createTextBtn = function (items) {\n var _this = this;\n if (items.indexOf('fontFamily') > -1) {\n var fontNameBtn = document.getElementById(this.element.id + '_fontFamilyBtn');\n var spanElem_2 = document.createElement('span');\n if (Browser.isDevice) {\n spanElem_2.innerHTML = 'ABC';\n spanElem_2.setAttribute('style', 'font-family: arial');\n }\n else {\n spanElem_2.innerHTML = 'Arial';\n }\n spanElem_2.className = 'e-text-font-family';\n fontNameBtn.appendChild(spanElem_2);\n var fontFamilyBtn_1 = new DropDownButton({ items: this.getFontFamilyItems(),\n cssClass: 'e-font-family',\n createPopupOnClick: true,\n beforeItemRender: function (args) {\n args.element.setAttribute('style', 'font-family:' + args.element.id);\n },\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fontFamilyBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var fontFamily;\n if (_this.textArea.style.display === 'block') {\n fontFamily = _this.textArea.style.fontFamily;\n }\n else {\n fontFamily = _this.activeObj.textSettings.fontFamily;\n }\n args.element.querySelector('[id *= ' + '\"' + fontFamily.toLowerCase()\n + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n _this.pushActItemIntoObj();\n var objColl = extend([], _this.objColl, [], true);\n _this.objColl.pop();\n spanElem_2.textContent = args.item.text;\n if (Browser.isDevice) {\n spanElem_2.setAttribute('style', 'font-family:' + args.item.id);\n }\n if (_this.textArea.style.display === 'block') {\n _this.updateFontRatio(_this.activeObj, true);\n var temp = _this.activeObj.textSettings.fontFamily;\n _this.activeObj.textSettings.fontFamily = _this.toPascalCase(args.item.id);\n _this.redrawText();\n _this.objColl.push(_this.activeObj);\n _this.undoRedoColl.push({ operation: 'textTransform', value: null,\n currentObj: extend([], _this.objColl, [], true),\n previousObj: objColl, zoomFactor: _this.zoomFactor,\n sharpen: _this.adjustmentLevel.sharpen, bw: _this.adjustmentLevel.bw });\n _this.undoRedoStep++;\n _this.objColl.pop();\n _this.upperContext.clearRect(0, 0, _this.upperCanvas.width, _this.upperCanvas.height);\n var width = _this.activeObj.activePoint.width +\n _this.activeObj.textSettings.fontSize * 0.25;\n _this.textArea.style.width = width + 'px';\n _this.textArea.style.fontFamily = _this.toPascalCase(args.item.id);\n _this.activeObj.textSettings.fontFamily = temp;\n _this.updateFontStyles();\n }\n else {\n _this.updateFontRatio(_this.activeObj);\n _this.textSettings.fontFamily = _this.activeObj.textSettings.fontFamily = _this.toPascalCase(args.item.id);\n _this.redrawText();\n _this.objColl.push(_this.activeObj);\n _this.undoRedoColl.push({ operation: 'shapeTransform', value: null,\n currentObj: extend([], _this.objColl, [], true),\n previousObj: objColl, zoomFactor: _this.zoomFactor,\n sharpen: _this.adjustmentLevel.sharpen, bw: _this.adjustmentLevel.bw });\n _this.undoRedoStep++;\n _this.redrawShape(_this.objColl[_this.objColl.length - 1]);\n }\n }\n });\n fontFamilyBtn_1.appendTo('#' + this.element.id + '_fontFamilyBtn');\n }\n if (items.indexOf('fontStyle') > -1) {\n var fontStyleBtnElem = document.getElementById(this.element.id + '_fontStyleBtn');\n var span1Elem_1 = document.createElement('span');\n if (Browser.isDevice) {\n span1Elem_1.innerHTML = this.l10n.getConstant('ABC');\n }\n else {\n span1Elem_1.innerHTML = this.l10n.getConstant('Default');\n }\n span1Elem_1.className = 'e-text-font-style';\n fontStyleBtnElem.appendChild(span1Elem_1);\n var fontStyleBtn_1 = new DropDownButton({ items: this.getFontSizeItems(),\n cssClass: 'e-font-style',\n createPopupOnClick: true,\n beforeItemRender: function (args) {\n if (Browser.isDevice) {\n if (args.element.id === 'bold') {\n args.element.setAttribute('style', 'font-weight: bold');\n }\n else if (args.element.id === 'italic') {\n args.element.setAttribute('style', 'font-style: italic');\n }\n else if (args.element.id === 'bolditalic') {\n args.element.setAttribute('style', 'font-style: italic;font-weight: bold');\n }\n }\n },\n open: function (args) {\n var fontStyle = 'default';\n if (_this.textArea.style.display === 'block') {\n if (_this.textArea.style.fontWeight === 'bold') {\n fontStyle = 'bold';\n }\n if (_this.textArea.style.fontStyle === 'italic') {\n fontStyle = fontStyle.replace('default', '');\n fontStyle += 'italic';\n }\n }\n else {\n if (_this.activeObj.textSettings.bold) {\n fontStyle = 'bold';\n }\n if (_this.activeObj.textSettings.italic) {\n fontStyle = fontStyle.replace('default', '');\n fontStyle += 'italic';\n }\n }\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fontStyleBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n args.element.querySelector('[id *= ' + '\"' + fontStyle + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n if (Browser.isDevice) {\n if (args.item.id === 'bold') {\n span1Elem_1.setAttribute('style', 'font-weight: bold');\n }\n else if (args.item.id === 'italic') {\n span1Elem_1.setAttribute('style', 'font-style: italic');\n }\n else if (args.item.id === 'bolditalic') {\n span1Elem_1.setAttribute('style', 'font-style: italic;font-weight: bold');\n }\n _this.applyFontStyle(args.item.id);\n }\n else {\n span1Elem_1.textContent = args.item.text;\n _this.applyFontStyle(args.item.id);\n }\n }\n });\n fontStyleBtn_1.appendTo('#' + this.element.id + '_fontStyleBtn');\n }\n if (items.indexOf('fontSize') > -1) {\n var fontSizeBtnElem = document.getElementById(this.element.id + '_fontSizeBtn');\n var fontSizeSpanElem_1 = document.createElement('span');\n var fontSizes = this.getFontSizes();\n fontSizeSpanElem_1.innerHTML = fontSizes[0].text;\n fontSizeSpanElem_1.className = 'e-text-font-size';\n fontSizeBtnElem.appendChild(fontSizeSpanElem_1);\n var fontSizeBtn_1 = new DropDownButton({\n cssClass: 'e-font-size',\n items: fontSizes,\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fontSizeBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var activeBtn = fontSizeSpanElem_1.innerHTML;\n args.element.querySelector('[aria-label *= ' + '\"' + activeBtn + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n _this.pushActItemIntoObj();\n var objColl = extend([], _this.objColl, [], true);\n _this.objColl.pop();\n fontSizeSpanElem_1.textContent = args.item.text;\n if (_this.textArea.style.display === 'block') {\n _this.updateFontRatio(_this.activeObj, true);\n var temp = _this.activeObj.textSettings.fontSize;\n _this.activeObj.textSettings.fontSize = parseInt(_this.fontSizeColl[(parseInt(args.item.text, 10) - 1)].text, 10);\n _this.objColl.push(_this.activeObj);\n _this.undoRedoColl.push({ operation: 'textTransform', value: null,\n currentObj: extend([], _this.objColl, [], true),\n previousObj: objColl, zoomFactor: _this.zoomFactor,\n sharpen: _this.adjustmentLevel.sharpen, bw: _this.adjustmentLevel.bw });\n _this.undoRedoStep++;\n _this.objColl.pop();\n var textStyle = '';\n if (_this.textArea.style.fontWeight === 'bold') {\n textStyle = 'bold ';\n }\n if (_this.textArea.style.fontStyle === 'italic') {\n textStyle = 'italic ';\n }\n if (_this.textArea.style.fontWeight === 'bold' && _this.textArea.style.fontStyle === 'italic') {\n textStyle = 'italic bold ';\n }\n _this.upperContext.font = textStyle + _this.activeObj.textSettings.fontSize + 'px' + ' ' + _this.textArea.style.fontFamily;\n var rows = _this.textArea.value.split('\\n');\n var text = _this.getMaxText(true);\n var width = _this.upperContext.measureText(text).width +\n _this.activeObj.textSettings.fontSize * 0.5;\n _this.textArea.style.width = width + 'px';\n _this.textArea.style.height = rows.length * (_this.activeObj.textSettings.fontSize + _this.activeObj.textSettings.fontSize * 0.25) + 'px';\n _this.activeObj.textSettings.fontSize = temp;\n _this.upperContext.font = _this.activeObj.textSettings.fontSize + 'px' + ' ' + _this.activeObj.textSettings.fontFamily;\n _this.textArea.style.fontSize = parseInt(_this.fontSizeColl[(parseInt(args.item.text, 10) - 1)].text, 10) + 'px';\n if (_this.textArea.style.fontFamily === 'georgia') {\n _this.textArea.style.width = parseFloat(_this.textArea.style.width) + parseFloat(_this.textArea.style.fontSize) + 'px';\n }\n }\n else {\n _this.updateFontRatio(_this.activeObj);\n _this.textSettings.fontSize = _this.activeObj.textSettings.fontSize = parseInt(_this.fontSizeColl[(parseInt(args.item.text, 10) - 1)].text, 10);\n _this.upperContext.font = _this.activeObj.textSettings.fontSize + 'px' + ' ' + _this.activeObj.textSettings.fontFamily;\n var rows = _this.activeObj.keyHistory.split('\\n');\n var text = _this.getMaxText();\n var width = _this.upperContext.measureText(text).width +\n _this.activeObj.textSettings.fontSize * 0.5;\n var height = rows.length * (_this.activeObj.textSettings.fontSize +\n _this.activeObj.textSettings.fontSize * 0.25);\n _this.setTextSelection(width, height);\n _this.updateActiveObject(_this.activeObj.activePoint, _this.activeObj);\n _this.redrawText();\n _this.objColl.push(_this.activeObj);\n _this.undoRedoColl.push({ operation: 'shapeTransform', value: null,\n currentObj: extend([], _this.objColl, [], true),\n previousObj: objColl, zoomFactor: _this.zoomFactor,\n sharpen: _this.adjustmentLevel.sharpen, bw: _this.adjustmentLevel.bw });\n _this.undoRedoStep++;\n _this.redrawShape(_this.objColl[_this.objColl.length - 1]);\n }\n }\n });\n fontSizeBtn_1.appendTo('#' + this.element.id + '_fontSizeBtn');\n }\n };\n ImageEditor.prototype.getFontSizes = function () {\n var items = [];\n this.fontSizeColl = [];\n var fontSize;\n if (this.degree === 0 || this.degree % 180 === 0) {\n fontSize = this.destWidth / 25;\n }\n else {\n fontSize = this.destHeight / 25;\n }\n for (var i = 1; i <= 10; i++) {\n this.fontSizeColl.push({ text: (i * (Math.round(fontSize / 2))).toString() });\n items.push({ text: (i.toString()) });\n }\n return items;\n };\n ImageEditor.prototype.getTextAreaWidth = function (item) {\n var tempBold = this.activeObj.textSettings.bold;\n var tempItalic = this.activeObj.textSettings.italic;\n switch (item) {\n case 'default':\n this.activeObj.textSettings.bold = false;\n this.activeObj.textSettings.italic = false;\n break;\n case 'bold':\n this.activeObj.textSettings.bold = true;\n this.activeObj.textSettings.italic = false;\n break;\n case 'italic':\n this.activeObj.textSettings.bold = false;\n this.activeObj.textSettings.italic = true;\n break;\n case 'bolditalic':\n this.activeObj.textSettings.bold = true;\n this.activeObj.textSettings.italic = true;\n break;\n }\n this.updateFontStyles();\n var width;\n if (this.textArea.style.display === 'none') {\n width = this.upperContext.measureText(this.activeObj.keyHistory).width +\n this.activeObj.textSettings.fontSize * 0.5;\n }\n else {\n width = this.upperContext.measureText(this.textArea.value).width +\n this.activeObj.textSettings.fontSize * 0.5;\n }\n this.activeObj.textSettings.bold = tempBold;\n this.activeObj.textSettings.italic = tempItalic;\n return width;\n };\n ImageEditor.prototype.updateUndoRedoObj = function (objColl) {\n this.objColl.push(this.activeObj);\n this.undoRedoColl.push({ operation: 'shapeTransform', value: null,\n currentObj: extend([], this.objColl, [], true), previousObj: objColl, zoomFactor: this.zoomFactor,\n sharpen: this.adjustmentLevel.sharpen, bw: this.adjustmentLevel.bw });\n this.undoRedoStep++;\n this.redrawShape(this.objColl[this.objColl.length - 1]);\n };\n ImageEditor.prototype.updateObjColl = function (item, objColl) {\n var tempBold = this.activeObj.textSettings.bold;\n var tempItalic = this.activeObj.textSettings.italic;\n switch (item) {\n case 'default':\n this.activeObj.textSettings.bold = false;\n this.activeObj.textSettings.italic = false;\n break;\n case 'bold':\n this.activeObj.textSettings.bold = true;\n this.activeObj.textSettings.italic = false;\n break;\n case 'italic':\n this.activeObj.textSettings.bold = false;\n this.activeObj.textSettings.italic = true;\n break;\n case 'bolditalic':\n this.activeObj.textSettings.bold = true;\n this.activeObj.textSettings.italic = true;\n break;\n }\n this.objColl.push(this.activeObj);\n this.undoRedoColl.push({ operation: 'textTransform', value: null,\n currentObj: extend([], this.objColl, [], true), previousObj: objColl, zoomFactor: this.zoomFactor,\n sharpen: this.adjustmentLevel.sharpen, bw: this.adjustmentLevel.bw });\n this.undoRedoStep++;\n this.objColl.pop();\n this.activeObj.textSettings.bold = tempBold;\n this.activeObj.textSettings.italic = tempItalic;\n };\n ImageEditor.prototype.applyFontStyle = function (item) {\n this.pushActItemIntoObj();\n var objColl = extend([], this.objColl, [], true);\n this.objColl.pop();\n if (this.textArea.style.display === 'none') {\n this.updateFontRatio(this.activeObj);\n }\n else {\n this.updateFontRatio(this.activeObj, true);\n }\n switch (item) {\n case 'default':\n if (this.textArea.style.display === 'block') {\n var width = this.getTextAreaWidth(item);\n this.textArea.style.width = width + 'px';\n this.textArea.style.fontWeight = 'normal';\n this.textArea.style.fontStyle = 'normal';\n this.updateObjColl(item, objColl);\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = false;\n this.textSettings.italic = this.activeObj.textSettings.italic = false;\n this.redrawText();\n this.updateUndoRedoObj(objColl);\n }\n break;\n case 'bold':\n if (this.textArea.style.display === 'block') {\n var width = this.getTextAreaWidth(item);\n this.textArea.style.width = width + 'px';\n this.textArea.style.fontWeight = 'bold';\n this.textArea.style.fontStyle = 'normal';\n this.updateObjColl(item, objColl);\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = true;\n this.textSettings.italic = this.activeObj.textSettings.italic = false;\n this.redrawText();\n this.updateUndoRedoObj(objColl);\n }\n break;\n case 'italic':\n if (this.textArea.style.display === 'block') {\n var width = this.getTextAreaWidth(item);\n this.textArea.style.width = width + 'px';\n this.textArea.style.fontWeight = 'normal';\n this.textArea.style.fontStyle = 'italic';\n this.updateObjColl(item, objColl);\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = false;\n this.textSettings.italic = this.activeObj.textSettings.italic = true;\n this.redrawText();\n this.updateUndoRedoObj(objColl);\n }\n break;\n case 'bolditalic':\n if (this.textArea.style.display === 'block') {\n var width = this.getTextAreaWidth(item);\n this.textArea.style.width = width + 'px';\n this.textArea.style.fontWeight = 'bold';\n this.textArea.style.fontStyle = 'italic';\n this.updateObjColl(item, objColl);\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = true;\n this.textSettings.italic = this.activeObj.textSettings.italic = true;\n this.redrawText();\n this.updateUndoRedoObj(objColl);\n }\n break;\n }\n };\n ImageEditor.prototype.initZoomToolbarItem = function () {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var zoomItem = this.getZoomToolbarItem();\n this.defToolbarItems = leftItem.concat(zoomItem, rightItem);\n new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.renderSaveBtn();\n _this.trigger('toolbarCreated', { toolbarType: 'zoom' });\n }\n }, '#' + this.element.id + '_toolbar');\n this.createLeftToolbarControls();\n this.enableDisableToolbarBtn();\n if (this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_7 = getComponent(this.element.id + '_toolbar', 'toolbar');\n toolbar_7.refreshOverflow();\n }\n };\n ImageEditor.prototype.refreshUndoRedoColl = function () {\n this.undoRedoColl = this.undoRedoColl.slice(0, this.undoRedoStep);\n this.isUndoRedo = this.currObjType.isUndoAction = false;\n this.enableDisableToolbarBtn();\n };\n ImageEditor.prototype.applyPreviewFilter = function () {\n if (!isNullOrUndefined(document.querySelector('#' + this.element.id + '_sliderWrapper')) ||\n this.currObjType.isFiltered) {\n this.initialAdjustmentValue = this.canvasFilter = this.lowerContext.filter;\n this.currObjType.isFiltered = false;\n }\n };\n ImageEditor.prototype.contextualToolbarClicked = function (args) {\n var selEle = this.element.querySelector('.e-contextual-toolbar-wrapper .e-toolbar-item.e-selected');\n if (selEle) {\n selEle.classList.remove('e-selected');\n }\n document.getElementById(args.item.id + 'Canvas').parentElement.parentElement.classList.add('e-selected');\n this.currObjType.isFiltered = true;\n var type = args.item.id.replace(this.element.id, '').split('_')[1];\n var imageFiltering = { filter: this.toPascalCase(type) };\n this.trigger('imageFiltering', imageFiltering);\n this.setFilter(type.toLowerCase());\n this.currentFilter = args.item.id;\n this.enableDisableToolbarBtn();\n };\n ImageEditor.prototype.defToolbarClicked = function (args) {\n var isContextualToolbar = false;\n if (this.element.querySelector('.e-contextual-toolbar-wrapper')) {\n if (!this.element.querySelector('.e-contextual-toolbar-wrapper').classList.contains('e-hide')) {\n isContextualToolbar = true;\n }\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n }\n var zoomIn;\n var type = args.item.id.replace(this.element.id + '_', '').toLowerCase();\n var imageEditorObj = getInstance(document.getElementById(this.element.id), ImageEditor_1);\n var isCropSelection = false;\n var panBtn;\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n var isDisabledZoomOut = false;\n var isDisabledFilter = false;\n var isDisabledAdjustment = false;\n var zoomOut = document.querySelector('#' + this.element.id + '_zoomOut');\n if (!isNullOrUndefined(zoomOut) && zoomOut.classList.contains('e-disabled')) {\n isDisabledZoomOut = true;\n }\n var adjustment = document.querySelector('#' + this.element.id + '_adjustment');\n if (!isNullOrUndefined(adjustment) && adjustment.classList.contains('e-disabled')) {\n isDisabledAdjustment = true;\n }\n var filter = document.querySelector('#' + this.element.id + '_filter');\n if (!isNullOrUndefined(filter) && filter.classList.contains('e-disabled')) {\n isDisabledFilter = true;\n }\n this.enableDisableToolbarBtn();\n if (!this.disabled) {\n switch (type) {\n case 'zoomin':\n if (this.isFreehandDrawEditing) {\n this.applyFreehandDraw();\n }\n this.applyPreviewFilter();\n this.currObjType.isFiltered = false;\n if (this.currObjType.isUndoAction) {\n this.refreshUndoRedoColl();\n }\n if (this.togglePen) {\n this.currObjType.isZoomed = true;\n this.freeHandDraw(false);\n }\n this.currentSelectionPoint = null;\n imageEditorObj.zoom(.1);\n break;\n case 'zoomout':\n if (!isDisabledZoomOut) {\n if (this.isFreehandDrawEditing) {\n this.applyFreehandDraw();\n }\n this.applyPreviewFilter();\n this.currObjType.isFiltered = false;\n if (this.currObjType.isUndoAction) {\n this.refreshUndoRedoColl();\n }\n if (this.togglePen) {\n this.currObjType.isZoomed = true;\n this.freeHandDraw(false);\n }\n this.currentSelectionPoint = null;\n imageEditorObj.zoom(-.1);\n }\n break;\n case 'pan':\n this.currObjType.isCustomCrop = this.currObjType.isFiltered = false;\n if (this.currObjType.isUndoAction) {\n this.refreshUndoRedoColl();\n }\n if (isCropSelection) {\n this.currObjType.isCustomCrop = false;\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.refreshToolbar('main');\n }\n if (this.togglePan) {\n this.cancelPan();\n this.disablePan = true;\n if (this.currentToolbar === 'pen') {\n this.freeHandDraw(true);\n }\n }\n else {\n panBtn = this.element.querySelector('.e-img-pan .e-btn');\n if (!isNullOrUndefined(panBtn)) {\n panBtn.classList.add('e-selected-btn');\n }\n imageEditorObj.pan(true);\n this.disablePan = false;\n }\n zoomIn = document.querySelector('#' + this.element.id + '_zoomIn');\n if (!isNullOrUndefined(zoomIn) && this.zoomFactor >= 5) {\n zoomIn.classList.add('e-disabled');\n zoomIn.parentElement.classList.add('e-overlay');\n }\n else if (!isNullOrUndefined(zoomIn)) {\n zoomIn.classList.remove('e-disabled');\n zoomIn.parentElement.classList.remove('e-overlay');\n }\n this.refreshToolbar('main');\n break;\n case 'cancel':\n this.performCancel(isContextualToolbar);\n break;\n case 'ok':\n this.okBtn();\n this.refreshDropDownBtn(false);\n this.currentToolbar = 'main';\n break;\n case 'crop':\n if (!isNullOrUndefined(this.currSelectionPoint)) {\n this.select('Custom');\n this.refreshToolbar('main', true, true);\n getComponent(this.element.querySelector('#' + this.element.id + '_cropBtn'), 'dropdown-btn').toggle();\n if (!isNullOrUndefined(this.activeObj.shape)) {\n document.getElementById(this.activeObj.shape.split('-')[1]).classList.add('e-selected');\n }\n }\n break;\n case 'reset':\n imageEditorObj.reset();\n this.currentToolbar = 'main';\n break;\n case 'undo':\n this.callUndo();\n break;\n case 'redo':\n this.callRedo();\n break;\n case 'adjustment':\n if (!isDisabledAdjustment) {\n this.refreshToolbar('adjustment');\n this.setTempFilterProperties();\n this.openSlider('brightness');\n }\n break;\n case 'brightness':\n case 'contrast':\n case 'hue':\n case 'saturation':\n case 'opacity':\n case 'blur':\n case 'exposure':\n this.openSlider(type);\n break;\n case 'filter':\n if (!isDisabledFilter) {\n this.refreshToolbar('filter');\n this.setTempFilterProperties();\n }\n break;\n case 'default':\n case 'chrome':\n case 'cold':\n case 'warm':\n case 'grayscale':\n case 'blackandwhite':\n case 'sepia':\n case 'invert':\n case 'sharpen':\n this.currObjType.isFiltered = true;\n this.setFilter(type);\n break;\n }\n }\n this.trigger('toolbarItemClicked', args);\n };\n ImageEditor.prototype.performCancel = function (isContextualToolbar) {\n isContextualToolbar = isContextualToolbar ? isContextualToolbar : false;\n if (this.isFreehandDrawEditing) {\n this.cancelFreehandDraw();\n }\n else if (this.textArea.style.display === 'block') {\n this.textArea.style.display = 'none';\n this.textArea.value = '';\n this.textArea.style.transform = '';\n this.activeObj.strokeSettings = this.tempStrokeSettings;\n this.activeObj.textSettings = this.tempTextSettings;\n }\n else if (!isNullOrUndefined(document.querySelector('#' + this.element.id + '_sliderWrapper')) ||\n this.currObjType.isFiltered) {\n this.lowerContext.filter = this.adjustmentValue = this.initialAdjustmentValue = this.tempAdjustmentValue;\n if (this.lowerContext.filter.split(' ').length > 1 &&\n this.lowerContext.filter.split(' ')[0].split('(')[1].split(')')[0] === '1') {\n this.isBrightnessAdjusted = false;\n }\n this.currentFilter = this.tempFilter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n this.currObjType.isFiltered = false;\n this.adjustmentLevel = extend({}, this.tempAdjustmentLevel, {}, true);\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n this.undoRedoColl = extend([], this.tempUndoRedoColl, [], true);\n this.undoRedoStep = this.tempUndoRedoStep;\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.isCustomCrop = false;\n this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n this.callMainToolbar();\n }\n else {\n if (isContextualToolbar) {\n this.callMainToolbar();\n }\n else {\n this.cancelItems();\n this.togglePan = this.dragCanvas = false;\n }\n }\n this.enableDisableToolbarBtn();\n this.refreshDropDownBtn(false);\n this.currentToolbar = 'main';\n };\n ImageEditor.prototype.applyShape = function () {\n if (!isNullOrUndefined(this.activeObj.shape) && (this.activeObj.shape === 'rectangle' ||\n this.activeObj.shape === 'ellipse' || this.activeObj.shape === 'line' ||\n this.activeObj.shape === 'text')) {\n this.redrawActObj();\n this.refreshActiveObj();\n this.currentToolbar = 'main';\n this.refreshToolbar('main');\n }\n };\n ImageEditor.prototype.applyFreehandDraw = function () {\n if (this.pointColl[this.freehandDrawSelectedIndex].strokeColor === '#42a5f5') {\n this.pointColl[this.freehandDrawSelectedIndex].strokeColor = this.tempFreeHandDrawEditingStyles.strokeColor;\n }\n this.selectedFreehandColor = '#42a5f5';\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.renderImage();\n this.refreshToolbar('main');\n this.pointColl[this.freehandDrawSelectedIndex].isSelected = false;\n this.isFreehandDrawEditing = this.isFreehandDrawingPoint = false;\n this.freehandDrawHoveredIndex = this.freehandDrawSelectedIndex = null;\n };\n ImageEditor.prototype.cancelFreehandDraw = function () {\n this.selectedFreehandColor = '#42a5f5';\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n for (var n = 0; n < this.freehandCounter; n++) {\n this.pointColl[n].strokeColor = this.tempFreeHandDrawEditingStyles.strokeColor;\n this.pointColl[n].strokeWidth = this.tempFreeHandDrawEditingStyles.strokeWidth;\n }\n this.pointCounter = 0;\n this.pointColl[this.freehandDrawSelectedIndex].isSelected = false;\n this.freehandDrawHoveredIndex = this.freehandDrawSelectedIndex = null;\n this.isFreehandDrawEditing = this.isFreehandDrawingPoint = false;\n this.tempFreeHandDrawEditingStyles = { strokeColor: null, strokeWidth: null, fillColor: null };\n this.refreshToolbar('main');\n };\n ImageEditor.prototype.openSlider = function (type) {\n this.unselectBtn();\n this.currObjType.isFiltered = true;\n this.refreshToolbar('color', null, null, null, type);\n document.getElementById(this.element.id + '_' + type).classList.add('e-selected-btn');\n };\n ImageEditor.prototype.setTempFilterProperties = function () {\n this.upperCanvas.style.display = 'block';\n this.cropSelectedState();\n this.lowerContext.filter = this.initialAdjustmentValue;\n this.tempAdjustmentValue = this.lowerContext.filter;\n this.tempAdjustmentLevel = extend({}, this.adjustmentLevel, {}, true);\n this.tempFilter = this.currentFilter;\n this.tempUndoRedoColl = extend([], this.undoRedoColl, [], true);\n this.tempUndoRedoStep = this.undoRedoStep;\n };\n ImageEditor.prototype.okBtn = function () {\n var isCropSelection = false;\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n var selElem = this.element.querySelector('.e-contextual-toolbar-wrapper .e-toolbar-item.e-selected');\n if (selElem) {\n this.currentFilter = selElem.children[0].children[0].id.replace('Canvas', '');\n }\n if (isCropSelection) {\n this.crop();\n }\n else if (this.togglePen) {\n this.freeHandDraw(false);\n }\n else if (this.textArea.style.display === 'block') {\n this.redrawActObj();\n }\n else if (!isNullOrUndefined(document.querySelector('#' + this.element.id + '_sliderWrapper')) ||\n this.currObjType.isFiltered) {\n this.initialAdjustmentValue = this.canvasFilter = this.lowerContext.filter;\n this.currObjType.isFiltered = false;\n }\n else if (this.isFreehandDrawEditing) {\n this.applyFreehandDraw();\n }\n else {\n this.applyActObj();\n }\n this.callMainToolbar(false);\n this.isCropTab = false;\n this.zoomFactor = this.defaultZoomFactor;\n };\n ImageEditor.prototype.updateBrightnessFilter = function () {\n var splitWords = this.lowerContext.filter.split(' ');\n if (this.isBrightnessAdjusted && splitWords.length > 0 && !isNullOrUndefined(splitWords[4])) {\n var opacityValue = parseFloat(splitWords[4].split('(')[1]);\n splitWords[4] = 'opacity(' + (opacityValue - 0.3) + ')';\n this.lowerContext.filter = splitWords.join(' ');\n }\n };\n ImageEditor.prototype.isFreehandDrawIndex = function (index) {\n var isIndex = false;\n for (var i = 0; i < this.freehandCounter; i++) {\n if (parseInt(this.pointColl[i].id.split('_')[1], 10) - 1 === index) {\n isIndex = true;\n break;\n }\n }\n return isIndex;\n };\n ImageEditor.prototype.deleteFreehandDraw = function (index, isId) {\n if (this.isFreehandDrawIndex(index)) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n // eslint-disable-next-line\n var tempPointColl = extend({}, this.pointColl, {}, true);\n this.pointColl = {};\n var count = 0;\n if (isNullOrUndefined(isId)) {\n for (var i = 0; i < this.freehandCounter; i++) {\n if (i !== index) {\n this.pointColl[count] = tempPointColl[i];\n count++;\n }\n }\n }\n else {\n for (var i = 0; i < this.freehandCounter; i++) {\n if (parseInt(tempPointColl[i].id.split('_')[1], 10) - 1 !== index) {\n this.pointColl[count] = tempPointColl[i];\n count++;\n }\n }\n }\n this.freehandCounter -= 1;\n this.freehandDrawHoveredIndex = this.freehandDrawSelectedIndex = null;\n this.isFreehandDrawEditing = this.isFreehandDrawingPoint = false;\n this.renderImage();\n this.refreshToolbar('main');\n }\n };\n ImageEditor.prototype.unselectBtn = function () {\n if (document.querySelector('#' + this.element.id + '_brightness').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_brightness').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_contrast').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_contrast').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_hue').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_hue').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_saturation').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_saturation').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_opacity').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_opacity').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_blur').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_blur').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_exposure').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_exposure').classList.remove('e-selected-btn');\n }\n };\n ImageEditor.prototype.callUndo = function () {\n this.currObjType.isFiltered = false;\n if (!this.togglePan) {\n this.callMainToolbar(false, false);\n }\n if (this.zoomFactor === 0) {\n this.dragCanvas = this.togglePan = false;\n this.callMainToolbar(false, false);\n }\n if (this.element.querySelector('.e-contextual-toolbar-wrapper')) {\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n }\n if (this.togglePen) {\n this.togglePen = false;\n this.upperCanvas.style.cursor = 'default';\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n this.undo();\n };\n ImageEditor.prototype.callRedo = function () {\n this.currObjType.isFiltered = false;\n if (!this.togglePan) {\n this.callMainToolbar(false, false);\n }\n if (this.zoomFactor === 0) {\n this.dragCanvas = this.togglePan = false;\n this.callMainToolbar(false, false);\n }\n this.redo();\n };\n ImageEditor.prototype.refreshSlider = function () {\n var sliderWrapper = document.querySelector('#' + this.element.id + '_sliderWrapper');\n // eslint-disable-next-line\n var slider = document.querySelector('.e-slider');\n var hdrWrapper = document.querySelector('#' + this.element.id + '_headWrapper');\n if (hdrWrapper) {\n hdrWrapper.style.display = 'none';\n }\n if (!isNullOrUndefined(sliderWrapper) && !isNullOrUndefined(slider)) {\n slider.ej2_instances[0].destroy();\n sliderWrapper.remove();\n }\n };\n ImageEditor.prototype.iterateObjColl = function () {\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n };\n ImageEditor.prototype.updateAdjustment = function (type, value, isPreview) {\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var splitWords = this.lowerContext.filter.split(' ');\n var values = [];\n var opacityValue;\n var brightnessValue;\n if (splitWords[4] !== undefined) {\n opacityValue = parseFloat(splitWords[4].split('(')[1]);\n }\n if (splitWords[0] !== undefined) {\n brightnessValue = parseFloat(splitWords[0].split('(')[1]);\n }\n var brightness = this.getFilterValue(this.adjustmentLevel.brightness);\n var saturation = this.getFilterValue(this.adjustmentLevel.saturation);\n if (type !== 'brightness' && type !== 'contrast' && type !== 'hue' && type !== 'saturation' && type !== 'exposure'\n && type !== 'opacity' && type !== 'blur') {\n if (isNullOrUndefined(isPreview) && (this.adjustmentLevel.sharpen || this.adjustmentLevel.bw)) {\n this.isUndoRedo = true;\n var temp_1 = this.lowerContext.filter;\n this.lowerContext.filter = 'none';\n this.iterateObjColl();\n this.freehandRedraw(this.lowerContext);\n this.lowerContext.filter = temp_1;\n this.isUndoRedo = false;\n }\n }\n if (brightness !== 1) {\n splitWords[4] = 'opacity(' + (opacityValue - 0.3) + ')';\n }\n var saturate;\n var bright;\n var saturatePercent;\n var contrast;\n var tempFilter;\n var temp;\n var saturatePercentage;\n switch (type) {\n case 'brightness':\n if (parseFloat(splitWords[3].split('(')[1]) !== 100) {\n value += 0.1;\n }\n splitWords[0] = 'brightness(' + value + ')';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'contrast':\n splitWords[1] = 'contrast(' + value + '%)';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'hue':\n splitWords[2] = 'hue-rotate(' + value + 'deg)';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'saturation':\n splitWords[3] = 'saturate(' + value + '%)';\n if (saturation !== 1) {\n splitWords[0] = 'brightness(' + (brightnessValue + 0.1) + ')';\n }\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'opacity':\n if (parseFloat(splitWords[0].split('(')[1]) !== 1) {\n value -= 0.2;\n }\n splitWords[4] = 'opacity(' + value + ')';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'blur':\n splitWords[5] = 'blur(' + value + 'px)';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'exposure':\n if (brightness !== 1) {\n splitWords[4] = 'opacity(' + (opacityValue - 0.3) + ')';\n }\n if (value > 1) {\n value -= 1;\n value += brightness;\n }\n else if (value < 1) {\n value = 1 - value;\n value = brightness - value;\n }\n splitWords[0] = 'brightness(' + value + ')';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'chrome':\n saturate = this.getSaturationFilterValue(this.adjustmentLevel.saturation);\n saturate *= 100;\n value = saturate + (saturate * 0.4);\n splitWords[3] = 'saturate(' + value + '%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'cold':\n // Adjusting Brightness\n bright = this.getFilterValue(this.adjustmentLevel.brightness);\n bright *= 100;\n value = bright * 0.9;\n splitWords[0] = 'brightness(' + value + '%)';\n // Adjusting Contrast\n contrast = this.getFilterValue(this.adjustmentLevel.contrast);\n contrast *= 100;\n value = contrast + (contrast * 0.5);\n splitWords[1] = 'contrast(' + value + '%)';\n // Adjusting Saturation\n saturatePercentage = this.getSaturationFilterValue(this.adjustmentLevel.saturation);\n saturatePercentage *= 100;\n value = saturatePercentage;\n splitWords[3] = 'saturate(' + value + '%)';\n values = this.adjustmentValue.split(' ');\n splitWords[2] = values[2];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'warm':\n saturatePercent = this.getSaturationFilterValue(this.adjustmentLevel.saturation);\n saturatePercent *= 100;\n value = saturatePercent + (saturatePercent * 0.4);\n splitWords[3] = 'saturate(' + value + '%)';\n splitWords[6] = 'sepia(25%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'grayscale':\n splitWords[7] = 'grayscale(100%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'sepia':\n splitWords[6] = 'sepia(100%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'invert':\n splitWords[8] = 'invert(100%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n break;\n }\n if (type !== 'sharpen' && type !== 'blackandwhite') {\n if (isNullOrUndefined(isPreview)) {\n if (type === 'default') {\n splitWords = this.getDefaultCurrentFilter(splitWords);\n }\n this.lowerContext.filter = splitWords.join(' ');\n }\n splitWords = this.setTempFilterValue(brightness, isPreview, splitWords, type);\n this.isRotateZoom = true;\n this.updateCurrentTransformedState('initial');\n this.lowerContext.drawImage(this.baseImg, this.srcLeft, this.srcTop, this.srcWidth, this.srcHeight, this.destLeft, this.destTop, this.destWidth, this.destHeight);\n this.updateCurrentTransformedState('reverse');\n this.isRotateZoom = false;\n if (brightness !== 1) {\n splitWords[4] = 'opacity(' + opacityValue + ')';\n }\n else if (saturation !== 1) {\n splitWords[0] = 'brightness(' + brightnessValue + ')';\n }\n if (type === 'exposure' && brightness !== 1) {\n splitWords[0] = 'brightness(' + brightnessValue + ')';\n }\n if (type === 'saturation' && saturation !== 1) {\n splitWords[0] = 'brightness(' + brightnessValue + ')';\n }\n splitWords = this.setTempFilterValue(brightness, isPreview, splitWords, type);\n if (isNullOrUndefined(isPreview)) {\n this.lowerContext.filter = this.initialAdjustmentValue = splitWords.join(' ');\n }\n var tempFilter_1 = this.lowerContext.filter;\n this.lowerContext.filter = this.getDefaultFilter();\n this.iterateObjColl();\n this.freehandRedraw(this.lowerContext);\n this.lowerContext.filter = tempFilter_1;\n if ((!isNullOrUndefined(this.currSelectionPoint) && this.currSelectionPoint.shape === 'crop-circle') || this.isCircleCrop) {\n this.cropCircle(this.lowerContext);\n }\n if (brightness === 1) {\n this.isBrightnessAdjusted = false;\n }\n else {\n this.isBrightnessAdjusted = true;\n }\n }\n var filter = splitWords.join(' ');\n return filter;\n };\n ImageEditor.prototype.autoEnablePan = function () {\n if (this.zoomFactor === 0) {\n this.dragCanvas = this.togglePan = false;\n this.callMainToolbar(false, true);\n this.pan(false);\n this.disablePan = false;\n }\n else if (!this.disablePan) {\n this.pan(true);\n }\n else if (this.disablePan) {\n this.pan(false);\n }\n };\n ImageEditor.prototype.setTempFilterValue = function (brightness, isPreview, splitWords, type) {\n if (isPreview && brightness !== 1) {\n var tempSplitWords = this.lowerContext.filter.split(' ');\n tempSplitWords[4] = splitWords[4];\n this.lowerContext.filter = tempSplitWords.join(' ');\n }\n else if (isPreview && type === 'default') {\n splitWords = this.getDefaultCurrentFilter(splitWords);\n }\n return splitWords;\n };\n ImageEditor.prototype.getDefaultCurrentFilter = function (splitWords) {\n var values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n return splitWords;\n };\n ImageEditor.prototype.renderSlider = function (type) {\n var canvasWrapper = document.querySelector('#' + this.element.id + '_contextualToolbarArea');\n var hdrWrapper = document.querySelector('#' + this.element.id + '_headWrapper');\n var labelWrapper = document.querySelector('#' + this.element.id + '_labelWrapper');\n if (!hdrWrapper) {\n hdrWrapper = canvasWrapper.appendChild(this.createElement('div', {\n id: this.element.id + '_headWrapper',\n styles: 'position: relative'\n }));\n labelWrapper = hdrWrapper.appendChild(this.createElement('label', {\n id: this.element.id + '_labelWrapper',\n styles: Browser.isDevice ? 'position: absolute; top: 25%; left: calc(50% - 150px); font-size: 15px; text-transform: capitalize; font-weight: 400;'\n : 'position: absolute; top: 25%; left: calc(50% - 226px); font-size: 15px; text-transform: capitalize; font-weight: 400;'\n }));\n }\n else {\n hdrWrapper.style.display = 'block';\n }\n labelWrapper.textContent = this.l10n.getConstant(this.toPascalCase(type));\n var sliderWrapper = hdrWrapper.appendChild(this.createElement('div', {\n id: this.element.id + '_sliderWrapper',\n styles: 'position: absolute'\n }));\n var value = this.getCurrAdjustmentValue(type);\n var min;\n var max;\n var slider;\n if (type === 'brightness' || type === 'contrast' || type === 'saturation' || type === 'exposure') {\n if (this.finetuneSettings) {\n if (type === 'brightness' && this.finetuneSettings.brightness) {\n min = this.finetuneSettings.brightness.min;\n max = this.finetuneSettings.brightness.max;\n }\n else if (type === 'contrast' && this.finetuneSettings.contrast) {\n min = this.finetuneSettings.contrast.min;\n max = this.finetuneSettings.contrast.max;\n }\n else if (type === 'saturation' && this.finetuneSettings.saturation) {\n min = this.finetuneSettings.saturation.min;\n max = this.finetuneSettings.saturation.max;\n }\n else if (type === 'exposure' && this.finetuneSettings.exposure) {\n min = this.finetuneSettings.exposure.min;\n max = this.finetuneSettings.exposure.max;\n }\n else {\n min = -100;\n max = 100;\n }\n }\n else {\n min = -100;\n max = 100;\n }\n slider = this.createSlider(min, max, value, type);\n }\n else if (type === 'hue' || type === 'blur' || type === 'opacity') {\n if (this.finetuneSettings) {\n if (type === 'hue' && this.finetuneSettings.hue) {\n min = this.finetuneSettings.hue.min;\n max = this.finetuneSettings.hue.max;\n }\n else if (type === 'blur' && this.finetuneSettings.blur) {\n min = this.finetuneSettings.blur.min;\n max = this.finetuneSettings.blur.max;\n }\n else if (type === 'opacity' && this.finetuneSettings.opacity) {\n min = this.finetuneSettings.opacity.min;\n max = this.finetuneSettings.opacity.max;\n }\n else {\n min = 0;\n max = 100;\n }\n }\n else {\n min = 0;\n max = 100;\n }\n slider = this.createSlider(min, max, value, type);\n }\n slider.appendTo('#' + this.element.id + '_sliderWrapper');\n sliderWrapper.style.left = (parseFloat(canvasWrapper.style.width) - parseFloat(slider.width)) / 2 + 'px';\n };\n ImageEditor.prototype.createSlider = function (min, max, value, type) {\n var _this = this;\n return new Slider({\n value: value,\n tooltip: { isVisible: true, placement: 'Before', showOn: 'Always' },\n type: 'MinRange',\n min: min,\n max: max,\n step: 10,\n width: Browser.isDevice ? '200px' : '300px',\n cssClass: 'e-slider',\n change: function (args) {\n _this.setCurrAdjustmentValue(type, args.value);\n _this.enableDisableToolbarBtn();\n }\n });\n };\n ImageEditor.prototype.getCurrAdjustmentValue = function (type) {\n var value;\n switch (type) {\n case 'brightness':\n value = this.adjustmentLevel.brightness;\n break;\n case 'contrast':\n value = this.adjustmentLevel.contrast;\n break;\n case 'hue':\n value = this.adjustmentLevel.hue;\n break;\n case 'saturation':\n value = this.adjustmentLevel.saturation;\n break;\n case 'opacity':\n value = this.adjustmentLevel.opacity;\n break;\n case 'blur':\n value = this.adjustmentLevel.blur;\n break;\n case 'exposure':\n value = this.adjustmentLevel.exposure;\n break;\n }\n return value;\n };\n ImageEditor.prototype.setCurrAdjustmentValue = function (type, value) {\n var finetuneValueChanging = { finetune: this.toPascalCase(type), value: value };\n this.trigger('finetuneValueChanging', finetuneValueChanging);\n switch (type) {\n case 'brightness':\n this.setBrightness(value);\n break;\n case 'contrast':\n this.setContrast(value);\n break;\n case 'hue':\n this.setHue(value);\n break;\n case 'saturation':\n this.setSaturation(value);\n break;\n case 'opacity':\n this.setOpacity(value);\n break;\n case 'blur':\n this.setBlur(value);\n break;\n case 'exposure':\n this.setExposure(value);\n break;\n }\n };\n ImageEditor.prototype.cancelPan = function () {\n this.applyActObj();\n var panBtn = this.element.querySelector('.e-img-pan .e-btn');\n if (!isNullOrUndefined(panBtn)) {\n panBtn.classList.remove('e-selected-btn');\n }\n this.pan(false);\n };\n ImageEditor.prototype.callMainToolbar = function (isApplyBtn, isZooming) {\n this.refreshToolbar('main', isApplyBtn, false, isZooming);\n };\n ImageEditor.prototype.setCurrSelectionPoints = function (isSetDimension) {\n this.srcLeft = 0;\n this.srcTop = 0;\n this.srcWidth = this.baseImg.width;\n this.srcHeight = this.baseImg.height;\n this.destLeft = this.cropDestPoints.startX;\n this.destTop = this.cropDestPoints.startY;\n this.destWidth = this.cropDestPoints.width;\n this.destHeight = this.cropDestPoints.height;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n if (isSetDimension) {\n this.setDestinationPoints();\n }\n this.currentTransformedState('initial');\n if (this.croppedDegree === 0 && this.degree === 0 && !isNullOrUndefined(this.currSelectionPoint)\n && this.currSelectionPoint.shape !== 'crop-circle' && this.currSelectionPoint.shape !== 'crop-square') {\n this.destLeft = this.cropDestPoints.startX;\n this.destTop = this.cropDestPoints.startY;\n this.destWidth = this.cropDestPoints.width;\n this.destHeight = this.cropDestPoints.height;\n }\n if (this.degree === 0) {\n this.destLeft += this.totalPannedInternalPoint.x;\n this.destTop += this.totalPannedInternalPoint.y;\n }\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.baseImg, this.srcLeft, this.srcTop, this.srcWidth, this.srcHeight, this.destLeft, this.destTop, this.destWidth, this.destHeight);\n this.currentTransformedState('reverse', null, null, true);\n if (isNullOrUndefined(this.cropObj.activeObj.shape)) {\n var temp = this.lowerContext.filter;\n this.lowerContext.filter = 'none';\n this.iterateObjColl();\n this.freehandRedraw(this.lowerContext);\n this.lowerContext.filter = temp;\n }\n else {\n this.setCropObj();\n }\n this.currSelectionPoint = null;\n };\n ImageEditor.prototype.updateObjAndFreeHandDrawColl = function () {\n for (var i = 0; i < this.objColl.length; i++) {\n this.objColl[i].imageRatio = { startX: ((this.objColl[i].activePoint.startX - this.destLeft) /\n this.destWidth), startY: ((this.objColl[i].activePoint.startY - this.destTop) / this.destHeight),\n endX: ((this.objColl[i].activePoint.endX - this.destLeft) / this.destWidth),\n endY: ((this.objColl[i].activePoint.endY - this.destTop) / this.destHeight),\n width: this.destWidth / this.objColl[i].activePoint.width, height: this.destHeight /\n this.objColl[i].activePoint.height };\n this.refreshActiveObj();\n }\n for (var n = 0; n < this.freehandCounter; n++) {\n this.points = extend([], this.pointColl[n].points, []);\n this.pointCounter = 0;\n var len = this.points.length;\n for (var l = 0; l < len; l++) {\n this.points[l].ratioX = (this.points[l].x - this.destLeft) / this.destWidth;\n this.points[l].ratioY = (this.points[l].y - this.destTop) / this.destHeight;\n }\n }\n };\n ImageEditor.prototype.cancelItems = function () {\n var isCropSelection = false;\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if (isCropSelection && this.isCropTab) {\n this.isCropTab = false;\n this.zoomFactor = this.defaultZoomFactor;\n }\n if (this.togglePen) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.togglePen = false;\n this.upperCanvas.style.cursor = 'default';\n // eslint-disable-next-line\n var tempPointsColl = extend([], this.pointColl, [], true);\n this.pointColl = {};\n for (var i = 0; i < this.tempFreehandCounter; i++) {\n this.pointColl[i] = tempPointsColl[i];\n }\n this.freehandCounter = this.tempFreehandCounter;\n this.currentFreehandDrawIndex = this.tempCurrentFreehandDrawIndex;\n }\n else if (this.activeObj.shape === 'text') {\n if (isNullOrUndefined(this.activeObj.currIndex)) {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n else {\n this.activeObj.strokeSettings = this.tempStrokeSettings;\n this.activeObj.textSettings = this.tempTextSettings;\n if (this.activeObj.keyHistory === 'Enter Text' && this.activeObj.activePoint.startX === this.textStartPoints.x\n && this.activeObj.activePoint.startY === this.textStartPoints.y) {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.textSettings = this.tempTextSettings;\n this.strokeSettings = this.tempStrokeSettings;\n this.drawShapeText();\n this.applyActObj();\n }\n else {\n this.redrawText();\n this.redrawShape(this.activeObj);\n if (!isCropSelection && this.activeObj.topLeftCircle !== undefined) {\n this.applyActObj();\n }\n this.clearSelection();\n }\n }\n this.tempTextSettings = { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, fontRatio: null, bold: false,\n italic: false, underline: false };\n }\n else if (this.activeObj.shape === 'rectangle' || this.activeObj.shape === 'ellipse' || this.activeObj.shape === 'line') {\n if (isNullOrUndefined(this.activeObj.currIndex)) {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n else {\n this.activeObj.strokeSettings = this.tempStrokeSettings;\n this.redrawShape(this.activeObj);\n this.applyActObj();\n }\n }\n else if ((this.zoomFactor !== this.tempZoomFactor) || isCropSelection && isNullOrUndefined(this.currSelectionPoint)) {\n var length_1 = this.cropZoomFactor - this.tempZoomFactor;\n this.zoomFactor = this.cropZoomFactor;\n if (isNullOrUndefined(this.cropObj.activeObj.shape)) {\n if ((this.degree === 0 && this.totalPannedPoint.x === 0 && this.totalPannedPoint.y === 0) ||\n (this.degree !== 0 && this.totalPannedInternalPoint.x === 0 && this.totalPannedInternalPoint.y === 0 &&\n this.totalPannedClientPoint.x === 0 && this.totalPannedClientPoint.y === 0)) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.refreshActiveObj();\n if (length_1 > 0) {\n this.zoom(-length_1);\n }\n else {\n this.zoom(Math.abs(length_1));\n }\n this.cropZoomFactor = this.tempZoomFactor;\n this.currObjType.isCustomCrop = false;\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.isCustomCrop = false;\n this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n this.callMainToolbar();\n return;\n }\n }\n if (isNullOrUndefined(this.cropObj.activeObj.shape)) {\n if (this.degree === 0) {\n var activeObj = extend({}, this.activeObj, {});\n this.destLeft += (-this.totalPannedPoint.x);\n this.destTop += (-this.totalPannedPoint.y);\n this.drawPannImage({ x: -this.totalPannedPoint.x, y: -this.totalPannedPoint.y }, this.getCurrentPanRegion());\n this.updateFlipPan(activeObj);\n this.totalPannedPoint = { x: 0, y: 0 };\n }\n else {\n this.totalPannedClientPoint = { x: -this.totalPannedClientPoint.x, y: -this.totalPannedClientPoint.y };\n this.totalPannedInternalPoint = { x: -this.totalPannedInternalPoint.x, y: -this.totalPannedInternalPoint.y };\n this.rotatePan(true);\n this.totalPannedClientPoint = { x: 0, y: 0 };\n this.totalPannedInternalPoint = { x: 0, y: 0 };\n this.currentPannedPoint = { x: 0, y: 0 };\n }\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n if (length_1 > 0) {\n this.zoom(-length_1);\n }\n else {\n this.zoom(Math.abs(length_1));\n }\n }\n else {\n this.isCancelAction = true;\n this.objColl = [];\n this.pointColl = [];\n var freehandCounter = this.freehandCounter;\n this.freehandCounter = 0;\n var cropObj = extend({}, this.cropObj, {});\n var afterCropActions = extend([], this.afterCropActions, {}, true);\n this.setCropObj();\n this.cropImg();\n this.cropObj = cropObj;\n this.afterCropActions = afterCropActions;\n this.objColl = extend([], this.cancelObjColl, [], true);\n this.pointColl = extend([], this.cancelPointColl, [], true);\n this.freehandCounter = freehandCounter;\n this.iterateObjColl();\n this.freehandRedraw(this.lowerContext);\n this.clearOuterCanvas(this.lowerContext);\n if (this.isCircleCrop) {\n this.cropCircle(this.lowerContext);\n }\n this.isCancelAction = false;\n }\n this.zoomFactor = this.defaultZoomFactor;\n this.enableDisableToolbarBtn();\n }\n else {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.isCustomCrop = false;\n this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n this.callMainToolbar();\n };\n ImageEditor.prototype.freehandDownHandler = function (e, canvas) {\n this.freehandDrawObj.time = new Date().getTime();\n this.isFreehandDrawing = true;\n if (e.type === 'mousedown') {\n this.freehandDownPoint = { x: e.clientX, y: e.clientY };\n }\n else {\n this.freehandDownPoint = { x: e.touches[0].clientX, y: e.touches[0].clientY };\n }\n this.isFreehandPointMoved = false;\n EventHandler.add(canvas, 'mousemove touchmove', this.freehandMoveHandler, this);\n };\n ImageEditor.prototype.freehandUpHandler = function (e, canvas, context) {\n var rect = canvas.getBoundingClientRect();\n EventHandler.remove(canvas, 'mousemove touchmove', this.freehandMoveHandler);\n if (this.points.length === 0) {\n if (e.type === 'mouseup') {\n this.processPoint(e.clientX - rect.left, e.clientY - rect.top, true, context);\n }\n else {\n if (!this.isFreehandPointMoved) {\n this.processPoint(this.freehandDownPoint.x - rect.left, this.freehandDownPoint.y - rect.top, true, context);\n }\n }\n }\n context.closePath();\n this.pointColl[this.freehandCounter] = {};\n this.pointColl[this.freehandCounter].points = extend([], this.points);\n this.pointColl[this.freehandCounter].strokeColor = this.activeObj.strokeSettings.strokeColor;\n this.pointColl[this.freehandCounter].strokeWidth = this.penStrokeWidth;\n this.pointColl[this.freehandCounter].flipState = this.currFlipState;\n this.pointColl[this.freehandCounter].id = 'pen_' + (this.currentFreehandDrawIndex + 1);\n this.points = [];\n this.pointCounter = 0;\n this.freehandCounter++;\n this.currentFreehandDrawIndex++;\n this.isFreehandDrawing = false;\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var currentObj = extend([], this.pointColl, [], true);\n this.pointColl = {};\n for (var i = 0; i < this.freehandCounter - 1; i++) {\n this.pointColl[i] = currentObj[i];\n }\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var previousObj = extend([], this.pointColl, [], true);\n this.updateUndoRedoColl('freehanddraw', null, previousObj, currentObj, this.zoomFactor);\n this.pointColl = currentObj;\n };\n ImageEditor.prototype.freehandMoveHandler = function (e) {\n this.isFreehandPointMoved = true;\n var rect = this.upperCanvas.getBoundingClientRect();\n var x;\n var y;\n if (e.type === 'mousemove') {\n x = e.clientX - rect.left;\n y = e.clientY - rect.top;\n }\n else {\n x = e.touches[0].clientX - rect.left;\n y = e.touches[0].clientY - rect.top;\n }\n if (this.isFreehandDrawing) {\n this.processPoint(x, y, false, this.upperContext);\n }\n };\n ImageEditor.prototype.processPoint = function (x, y, mouseDown, context) {\n var lastPoint = this.point(x, y, new Date().getTime());\n lastPoint = this.points.length > 0 && this.points[this.points.length - 1];\n var isLastPointTooClose = lastPoint ? this.distanceTo(lastPoint) <= 5 : false;\n var controlPoint1;\n var controlPoint2;\n var startPoint;\n var endPoint;\n if (!lastPoint || !(lastPoint && isLastPointTooClose) || mouseDown) {\n this.freehandDrawObj.time = new Date().getTime();\n this.points.push({ x: x, y: y, ratioX: (x - this.destLeft) / this.destWidth, ratioY: (y - this.destTop) / this.destHeight,\n time: this.freehandDrawObj.time });\n if (this.points.length > 3) {\n controlPoint1 = (this.calcCurveControlPoints(this.points[this.pointCounter + 0], this.points[this.pointCounter + 1], this.points[this.pointCounter + 2])).controlPoint2;\n controlPoint2 = (this.calcCurveControlPoints(this.points[this.pointCounter + 1], this.points[this.pointCounter + 2], this.points[this.pointCounter + 3])).controlPoint1;\n startPoint = this.points[this.pointCounter + 1];\n endPoint = this.points[this.pointCounter + 2];\n var minStrokeWidth = 0.5;\n var maxStrokeWidth = 5;\n if (!isNullOrUndefined(this.penStrokeWidth)) {\n minStrokeWidth = maxStrokeWidth = this.penStrokeWidth;\n }\n this.startDraw(context, controlPoint1, controlPoint2, startPoint, endPoint, minStrokeWidth, maxStrokeWidth);\n this.pointCounter++;\n }\n if (mouseDown) {\n controlPoint1 = controlPoint2 = startPoint = endPoint = { x: x, y: y, time: new Date().getTime() };\n var minStrokeWidth = 0.5;\n var maxStrokeWidth = 5;\n if (!isNullOrUndefined(this.penStrokeWidth)) {\n minStrokeWidth = maxStrokeWidth = this.penStrokeWidth;\n }\n this.startDraw(context, controlPoint1, controlPoint2, startPoint, endPoint, minStrokeWidth, maxStrokeWidth);\n }\n }\n };\n ImageEditor.prototype.calcCurveControlPoints = function (p1, p2, p3) {\n if (!p2) {\n p2 = p1;\n }\n if (!p3) {\n p3 = p2;\n }\n var dx1 = p1.x - p2.x;\n var dy1 = p1.y - p2.y;\n var dx2 = p2.x - p3.x;\n var dy2 = p2.y - p3.y;\n var m1 = { x: (p1.x + p2.x) / 2.0, y: (p1.y + p2.y) / 2.0 };\n var m2 = { x: (p2.x + p3.x) / 2.0, y: (p2.y + p3.y) / 2.0 };\n var l1 = Math.sqrt(dx1 * dx1 + dy1 * dy1);\n var l2 = Math.sqrt(dx2 * dx2 + dy2 * dy2);\n var dxm = (m1.x - m2.x);\n var dym = (m1.y - m2.y);\n var k = l2 / (l1 + l2);\n var cm = { x: m2.x + dxm * k, y: m2.y + dym * k };\n var tx = p2.x - cm.x;\n var ty = p2.y - cm.y;\n return {\n controlPoint1: this.point(m1.x + tx, m1.y + ty, 0),\n controlPoint2: this.point(m2.x + tx, m2.y + ty, 0)\n };\n };\n ImageEditor.prototype.point = function (x, y, time) {\n this.freehandDrawObj.pointX = x;\n this.freehandDrawObj.pointY = y;\n return { x: this.freehandDrawObj.pointX, y: this.freehandDrawObj.pointY, time: time };\n };\n ImageEditor.prototype.startDraw = function (context, controlPoint1, controlPoint2, startPoint, endPoint, minStrokeWidth, maxStrokeWidth) {\n var tempVelocity;\n tempVelocity = this.pointVelocity(startPoint);\n tempVelocity = 0.7 * tempVelocity + (1 - 0.7) * this.freehandDrawObj.lastVelocity;\n var newWidth = Math.max(maxStrokeWidth / (0.7 + 1), minStrokeWidth);\n this.drawCurve(this.freehandDrawObj.time, newWidth, context, controlPoint1, controlPoint2, startPoint, endPoint, maxStrokeWidth);\n this.freehandDrawObj.lastVelocity = tempVelocity;\n this.freehandDrawObj.time = newWidth;\n };\n ImageEditor.prototype.pointVelocity = function (startPoint) {\n return (this.freehandDrawObj.time !== startPoint.time) ? this.distanceTo(startPoint) /\n (this.freehandDrawObj.time - startPoint.time) : 0;\n };\n ImageEditor.prototype.distanceTo = function (start) {\n return Math.sqrt(Math.pow(this.freehandDrawObj.pointX - start.x, 2) + Math.pow(this.freehandDrawObj.pointY - start.y, 2));\n };\n ImageEditor.prototype.drawCurve = function (startWidth, endWidth, context, controlPoint1, controlPoint2, startPoint, endPoint, maxStrokeWidth) {\n var width;\n var i;\n var t1;\n var t2;\n var t3;\n var u1;\n var u2;\n var u3;\n var x;\n var y;\n var widthValue = endWidth - startWidth;\n var bezierLength = this.bezierLength(controlPoint1, controlPoint2, startPoint, endPoint);\n var drawSteps = Math.ceil(bezierLength) * 2;\n context.beginPath();\n for (i = 0; i < drawSteps; i++) {\n t1 = i / drawSteps;\n t2 = t1 * t1;\n t3 = t2 * t1;\n u1 = 1 - t1;\n u2 = u1 * u1;\n u3 = u2 * u1;\n x = u3 * startPoint.x;\n x += 3 * u2 * t1 * controlPoint1.x;\n x += 3 * u1 * t2 * controlPoint2.x;\n x += t3 * endPoint.x;\n y = u3 * startPoint.y;\n y += 3 * u2 * t1 * controlPoint1.y;\n y += 3 * u1 * t2 * controlPoint2.y;\n y += t3 * endPoint.y;\n width = Math.min(startWidth + t3 * widthValue, maxStrokeWidth);\n this.drawArc(x, y, width, context);\n }\n context.closePath();\n context.fill();\n };\n ImageEditor.prototype.bezierLength = function (controlPoint1, controlPoint2, startPoint, endPoint) {\n var steps = 10;\n var length = 0;\n var i;\n var t;\n var pointx1;\n var pointy1;\n var pointx2;\n var pointy2;\n var pointx3;\n var pointy3;\n for (i = 0; i <= steps; i++) {\n t = i / steps;\n pointx1 = this.bezierPoint(t, startPoint.x, controlPoint1.x, controlPoint2.x, endPoint.x);\n pointy1 = this.bezierPoint(t, startPoint.y, controlPoint1.y, controlPoint2.y, endPoint.y);\n if (i > 0) {\n pointx3 = pointx1 - pointx2;\n pointy3 = pointy1 - pointy2;\n length += Math.sqrt(pointx3 * pointx3 + pointy3 * pointy3);\n }\n pointx2 = pointx1;\n pointy2 = pointy1;\n }\n return length;\n };\n ImageEditor.prototype.bezierPoint = function (t, startpoint, cp1, cp2, endpoint) {\n return startpoint * (1.0 - t) * (1.0 - t) * (1.0 - t) + 3.0 * cp1 * (1.0 - t) * (1.0 - t) * t + 3.0 *\n cp2 * (1.0 - t) * t * t + endpoint * t * t * t;\n };\n ImageEditor.prototype.drawArc = function (x, y, size, context) {\n if ((x > this.destLeft && y > this.destTop && x < (this.destLeft + this.destWidth) && y < (this.destTop + this.destHeight) ||\n (context !== this.lowerContext && context !== this.upperContext))) {\n context.moveTo(x, y);\n context.arc(x, y, size, 0, 2 * Math.PI, false);\n }\n };\n ImageEditor.prototype.freehandRedraw = function (context, points) {\n var temp = context.filter;\n context.filter = 'none';\n if (!isNullOrUndefined(points)) {\n this.pointColl[this.freehandCounter] = {};\n this.pointColl[this.freehandCounter].points = points;\n this.pointColl[this.freehandCounter].strokeColor = this.activeObj.strokeSettings.strokeColor;\n this.pointColl[this.freehandCounter].strokeWidth = this.penStrokeWidth;\n this.pointColl[this.freehandCounter].flipState = this.currFlipState;\n this.freehandCounter++;\n }\n for (var n = 0; n < this.freehandCounter; n++) {\n this.points = extend([], this.pointColl[n].points);\n this.pointCounter = 0;\n var len = this.points.length;\n var controlPoint1 = void 0;\n var controlPoint2 = void 0;\n var startPoint = void 0;\n var endPoint = void 0;\n var minStrokeWidth = void 0;\n var maxStrokeWidth = void 0;\n if (len > 0) {\n context.fillStyle = this.pointColl[n].strokeColor;\n minStrokeWidth = maxStrokeWidth = this.penStrokeWidth = this.pointColl[n].strokeWidth;\n }\n if (len === 1) {\n controlPoint1 = controlPoint2 = startPoint = endPoint = this.points[0];\n this.startDraw(context, controlPoint1, controlPoint2, startPoint, endPoint, minStrokeWidth, maxStrokeWidth);\n }\n for (var l = 0; l < len - 3; l++) {\n if (this.points[l + 1] && this.points[l + 2] && this.points[l + 2]) {\n controlPoint1 = (this.calcCurveControlPoints(this.points[l + 0], this.points[l + 1], this.points[l + 2])).controlPoint2;\n controlPoint2 = (this.calcCurveControlPoints(this.points[l + 1], this.points[l + 2], this.points[l + 3])).controlPoint1;\n startPoint = this.points[l + 1];\n endPoint = this.points[l + 2];\n this.startDraw(context, controlPoint1, controlPoint2, startPoint, endPoint, minStrokeWidth, maxStrokeWidth);\n }\n }\n context.closePath();\n }\n context.filter = temp;\n };\n ImageEditor.prototype.redrawImgWithObj = function () {\n this.lowerContext.filter = this.canvasFilter;\n this.getCurrentFlipState();\n if (this.isCircleCrop) {\n this.cropCircle(this.lowerContext);\n }\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = this.getDefaultFilter();\n this.iterateObjColl();\n this.freehandRedraw(this.lowerContext);\n this.lowerContext.filter = tempFilter;\n };\n ImageEditor.prototype.refreshToolbar = function (type, isApplyBtn, isCropping, isZooming, cType) {\n if (!this.isImageLoaded) {\n return;\n }\n var args = { toolbarType: type };\n if (type !== 'filter' && type !== 'color') {\n if (document.getElementById(this.element.id + '_toolbar') && this.defToolbarItems.length > 0) {\n getComponent(document.getElementById(this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n if (document.getElementById(this.element.id + '_bottomToolbar') && this.defToolbarItems.length > 0) {\n if (document.getElementById(this.element.id + '_bottomToolbar').className.indexOf('e-control') > -1) {\n getComponent(document.getElementById(this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n }\n }\n }\n this.refreshSlider();\n switch (type) {\n case 'main':\n if (Browser.isDevice) {\n if (isCropping) {\n this.initToolbarItem(false, true, true);\n }\n else {\n this.initToolbarItem(false, true, null);\n }\n }\n else if (!Browser.isDevice || isZooming) {\n if (isZooming) {\n this.initToolbarItem(isApplyBtn, Browser.isDevice, null);\n }\n else {\n this.initToolbarItem(isApplyBtn, Browser.isDevice, null);\n }\n }\n if (Browser.isDevice) {\n this.initBottomToolbar();\n }\n break;\n case 'shapes':\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n if (this.activeObj.shape === 'line') {\n args.toolbarItems = ['strokeColor', 'strokeWidth'];\n }\n else {\n args.toolbarItems = ['fillColor', 'strokeColor', 'strokeWidth'];\n }\n this.trigger('toolbarUpdating', args);\n this.initShapesToolbarItem(args.toolbarItems);\n break;\n case 'text':\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n args.toolbarItems = ['fontFamily', 'fontStyle', 'fontSize', 'fontColor'];\n this.trigger('toolbarUpdating', args);\n this.initTextToolbarItem(args.toolbarItems);\n break;\n case 'pen':\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n args.toolbarItems = ['strokeColor', 'strokeWidth'];\n this.trigger('toolbarUpdating', args);\n this.initPenToolbarItem(args.toolbarItems);\n break;\n case 'pan':\n this.initZoomToolbarItem();\n break;\n case 'adjustment':\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n this.initAdjustmentToolbarItem();\n break;\n case 'filter':\n this.updateContextualToolbar(type);\n break;\n case 'color':\n this.updateContextualToolbar(type, cType);\n break;\n }\n this.refreshDropDownBtn(isCropping);\n };\n ImageEditor.prototype.getAdjustmentToolbarItem = function () {\n var toolbarItems = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Brightness') > -1)) {\n toolbarItems.push({ id: this.element.id + '_brightness', prefixIcon: 'e-icons e-brightness', cssClass: 'top-icon e-brightness',\n tooltipText: this.l10n.getConstant('Brightness'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Contrast') > -1)) {\n toolbarItems.push({ id: this.element.id + '_contrast', prefixIcon: 'e-icons e-contrast', cssClass: 'top-icon e-contrast',\n tooltipText: this.l10n.getConstant('Contrast'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Hue') > -1)) {\n toolbarItems.push({ id: this.element.id + '_hue', prefixIcon: 'e-icons e-fade', cssClass: 'top-icon e-fade',\n tooltipText: this.l10n.getConstant('Hue'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Saturation') > -1)) {\n toolbarItems.push({ id: this.element.id + '_saturation', prefixIcon: 'e-icons e-saturation', cssClass: 'top-icon e-saturation',\n tooltipText: this.l10n.getConstant('Saturation'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Exposure') > -1)) {\n toolbarItems.push({ id: this.element.id + '_exposure', prefixIcon: 'e-icons e-grain', cssClass: 'top-icon e-grain',\n tooltipText: this.l10n.getConstant('Exposure'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Opacity') > -1)) {\n toolbarItems.push({ id: this.element.id + '_opacity', prefixIcon: 'e-icons e-opacity', cssClass: 'top-icon e-opacity',\n tooltipText: this.l10n.getConstant('Opacity'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Blur') > -1)) {\n toolbarItems.push({ id: this.element.id + '_blur', prefixIcon: 'e-icons e-tint', cssClass: 'top-icon e-tint',\n tooltipText: this.l10n.getConstant('Blur'), align: 'Center' });\n }\n var tempToolbarItems = this.processToolbar('center');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (!Browser.isDevice) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getFilterToolbarItem = function () {\n var toolbarItems = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Default') > -1)) {\n toolbarItems.push({ id: this.element.id + '_default', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Default'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_defaultCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Default') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Chrome') > -1)) {\n toolbarItems.push({ id: this.element.id + '_chrome', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Chrome'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_chromeCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Chrome') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Cold') > -1)) {\n toolbarItems.push({ id: this.element.id + '_cold', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Cold'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_coldCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Cold') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Warm') > -1)) {\n toolbarItems.push({ id: this.element.id + '_warm', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Warm'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_warmCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Warm') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Grayscale') > -1)) {\n toolbarItems.push({ id: this.element.id + '_grayscale', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Grayscale'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_grayscaleCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Grayscale') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Sepia') > -1)) {\n toolbarItems.push({ id: this.element.id + '_sepia', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Sepia'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_sepiaCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Sepia') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Invert') > -1)) {\n toolbarItems.push({ id: this.element.id + '_invert', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Invert'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_invertCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Invert') + '</span></div></div>' });\n }\n var tempToolbarItems = this.processToolbar('center');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getPenToolbarItem = function (items) {\n var toolbarItems = [];\n if (items.indexOf('strokeColor') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', id: this.element.id + '_pen_strokecolor',\n cssClass: 'top-icon e-pen-stroke-color',\n tooltipText: this.l10n.getConstant('StrokeColor'), align: 'Center', type: 'Input',\n template: '<button id=\"' + this.element.id + '_penColorBtn\"></button>' });\n }\n if (items.indexOf('strokeWidth') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', cssClass: 'top-icon e-size',\n tooltipText: this.l10n.getConstant('StrokeWidth'),\n align: 'Center', type: 'Input', template: '<button id=\"' + this.element.id + '_penStrokeWidth\"></button>' });\n }\n var tempToolbarItems = this.processSubToolbar(items);\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (!Browser.isDevice) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.initPenToolbarItem = function (items) {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var mainItem = this.getPenToolbarItem(items);\n var zoomItem = this.getZoomToolbarItem();\n if (Browser.isDevice) {\n this.defToolbarItems = mainItem;\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.createPenColor(items);\n _this.createPenBtn(items);\n if (!Browser.isDevice) {\n _this.renderSaveBtn();\n }\n _this.trigger('toolbarCreated', { toolbarType: 'pen' });\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n else {\n _this.createLeftToolbarControls();\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n }\n });\n if (Browser.isDevice) {\n toolbar.appendTo('#' + this.element.id + '_bottomToolbar');\n }\n else {\n toolbar.appendTo('#' + this.element.id + '_toolbar');\n }\n this.enableDisableToolbarBtn();\n };\n ImageEditor.prototype.createPenColor = function (items) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (items.indexOf('strokeColor') > -1) {\n this.element.querySelector('.e-template.e-pen-stroke-color').appendChild(this.createElement('input', {\n id: this.element.id + '_pen_stroke'\n }));\n var penColor = new ColorPicker({\n modeSwitcher: false, value: '#fff',\n showButtons: false, mode: 'Palette', cssClass: 'e-pen-color',\n change: function (args) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var temp = extend([], _this.pointColl, [], true);\n _this.updateFreehandDrawColorChange();\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var previousObj = extend([], _this.pointColl, [], true);\n _this.pointColl = temp;\n proxy.isFreehandDrawCustomized = true;\n proxy.activeObj.strokeSettings.strokeColor = proxy.selectedFreehandColor = args.currentValue.hex;\n if (_this.isFreehandDrawEditing) {\n _this.upperContext.clearRect(0, 0, _this.upperCanvas.width, _this.upperCanvas.height);\n _this.pointColl[_this.freehandDrawSelectedIndex].strokeColor = args.currentValue.hex;\n _this.hoverFreehandraw(args.currentValue.hex);\n _this.updateUndoRedoColl('freehanddrawCustomized', null, previousObj, _this.pointColl, _this.zoomFactor);\n }\n else if (!proxy.togglePen) {\n proxy.redrawShape(_this.activeObj);\n }\n strokeDDB_3.element.children[0].style.backgroundColor = args.currentValue.rgba;\n strokeDDB_3.toggle();\n }\n }, '#' + this.element.id + '_pen_stroke');\n var strokeDDB_3 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = strokeDDB_3.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-pen-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_penColorBtn');\n penColor.inline = true;\n if (!isNullOrUndefined(this.freehandDrawSelectedIndex) && this.freehandDrawSelectedIndex > -1) {\n this.element.querySelector('.e-pen-stroke-color.e-template .e-dropdownbtn-preview').style.background\n = this.selectedFreehandColor === '#42a5f5' ? this.tempFreeHandDrawEditingStyles.strokeColor :\n this.pointColl[this.freehandDrawSelectedIndex].strokeColor;\n }\n else {\n this.element.querySelector('.e-pen-stroke-color.e-template .e-dropdownbtn-preview').style.background\n = '#fff';\n }\n }\n };\n ImageEditor.prototype.createPenBtn = function (items) {\n var _this = this;\n var strokeWidthItems = [\n { id: '1', text: this.l10n.getConstant('XSmall') },\n { id: '2', text: this.l10n.getConstant('Small') },\n { id: '3', text: this.l10n.getConstant('Medium') },\n { id: '4', text: this.l10n.getConstant('Large') },\n { id: '5', text: this.l10n.getConstant('XLarge') }\n ];\n if (items.indexOf('strokeWidth') > -1) {\n var strokeWidthBtn = document.getElementById(this.element.id + '_penStrokeWidth');\n var spanElem_3 = document.createElement('span');\n if (!isNullOrUndefined(this.freehandDrawSelectedIndex) && this.freehandDrawSelectedIndex > -1) {\n spanElem_3.innerHTML = this.getPenStroke(this.pointColl[this.freehandDrawSelectedIndex].strokeWidth);\n }\n else {\n spanElem_3.innerHTML = this.l10n.getConstant('Small');\n }\n spanElem_3.className = 'e-pen-stroke-width';\n strokeWidthBtn.appendChild(spanElem_3);\n var drpDownBtn_2 = new DropDownButton({ items: strokeWidthItems,\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn_2.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var activeBtn = spanElem_3.innerHTML;\n args.element.querySelector('[aria-label = ' + '\"' + activeBtn + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var temp = extend([], _this.pointColl, [], true);\n _this.updateFreehandDrawColorChange();\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var previousObj = extend([], _this.pointColl, [], true);\n _this.pointColl = temp;\n _this.isFreehandDrawCustomized = true;\n spanElem_3.textContent = args.item.text;\n _this.setPenStroke(args.item.id);\n if (_this.isFreehandDrawEditing) {\n _this.upperContext.clearRect(0, 0, _this.upperCanvas.width, _this.upperCanvas.height);\n _this.hoverFreehandraw(null, _this.penStrokeWidth);\n _this.pointColl[_this.freehandDrawSelectedIndex].strokeWidth = _this.penStrokeWidth;\n _this.updateUndoRedoColl('freehanddrawCustomized', null, previousObj, _this.pointColl, _this.zoomFactor);\n }\n if (Browser.isDevice) {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_8 = getComponent(_this.element.id + '_bottomToolbar', 'toolbar');\n toolbar_8.refreshOverflow();\n }\n }\n else {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_9 = getComponent(_this.element.id + '_toolbar', 'toolbar');\n toolbar_9.refreshOverflow();\n }\n }\n }\n });\n // Render initialized DropDownButton.\n drpDownBtn_2.appendTo('#' + this.element.id + '_penStrokeWidth');\n }\n };\n ImageEditor.prototype.updateFreehandDrawColorChange = function () {\n if (!isNullOrUndefined(this.freehandDrawSelectedIndex) && !isNullOrUndefined(this.pointColl[this.freehandDrawSelectedIndex])\n && this.pointColl[this.freehandDrawSelectedIndex].strokeColor === '#42a5f5') {\n this.pointColl[this.freehandDrawSelectedIndex].strokeColor = this.tempFreeHandDrawEditingStyles.strokeColor;\n }\n };\n ImageEditor.prototype.setPenStroke = function (args) {\n switch (parseInt(args, 10)) {\n case 1:\n this.penStrokeWidth = 1;\n break;\n case 2:\n this.penStrokeWidth = 2;\n break;\n case 3:\n this.penStrokeWidth = 3;\n break;\n case 4:\n this.penStrokeWidth = 4;\n break;\n case 5:\n this.penStrokeWidth = 5;\n break;\n }\n };\n ImageEditor.prototype.getPenStroke = function (value) {\n var textContent = '';\n if (value === 1) {\n textContent = this.l10n.getConstant('XSmall');\n }\n else if (value === 2) {\n textContent = this.l10n.getConstant('Small');\n }\n else if (value === 3) {\n textContent = this.l10n.getConstant('Medium');\n }\n else if (value === 4) {\n textContent = this.l10n.getConstant('Large');\n }\n else if (value === 5) {\n textContent = this.l10n.getConstant('XLarge');\n }\n return textContent;\n };\n ImageEditor.prototype.initAdjustmentToolbarItem = function () {\n var _this = this;\n var leftItem = this.getLeftToolbarItem(null);\n var rightItem = this.getRightToolbarItem();\n var mainItem = this.getAdjustmentToolbarItem();\n var zoomItem = this.getZoomToolbarItem();\n if (Browser.isDevice) {\n this.defToolbarItems = mainItem;\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n if (!Browser.isDevice) {\n _this.renderSaveBtn();\n }\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n else {\n _this.createLeftToolbarControls();\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n }\n });\n if (Browser.isDevice) {\n toolbar.appendTo('#' + this.element.id + '_bottomToolbar');\n }\n else {\n toolbar.appendTo('#' + this.element.id + '_toolbar');\n }\n this.enableDisableToolbarBtn();\n };\n ImageEditor.prototype.initFilterToolbarItem = function () {\n var _this = this;\n var mainItem = this.getFilterToolbarItem();\n if (document.querySelector('#' + this.element.id + '_contextualToolbar').classList.contains('e-control')) {\n getComponent(document.getElementById(this.element.id + '_contextualToolbar'), 'toolbar').destroy();\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: mainItem,\n clicked: this.contextualToolbarClicked.bind(this),\n created: function () {\n _this.createCanvasFilter();\n if (_this.currentFilter === '') {\n _this.currentFilter = _this.element.id + '_default';\n }\n var hdrWrapper = document.querySelector('#' + _this.element.id + '_headWrapper');\n if (hdrWrapper) {\n hdrWrapper.style.display = 'none';\n }\n document.getElementById(_this.currentFilter + 'Canvas').parentElement.parentElement.classList.add('e-selected');\n _this.enableDisableToolbarBtn();\n toolbar.refreshOverflow();\n }\n });\n toolbar.appendTo('#' + this.element.id + '_contextualToolbar');\n };\n ImageEditor.prototype.getCurrentCanvasData = function () {\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'none';\n var objColl = extend([], this.objColl, null, true);\n this.objColl = [];\n this.renderImage();\n var data = this.lowerContext.getImageData(this.destLeft, this.destTop, this.destWidth, this.destHeight);\n this.objColl = objColl;\n this.iterateObjColl();\n this.lowerContext.filter = tempFilter;\n return data;\n };\n ImageEditor.prototype.createCanvasFilter = function () {\n var imageData = this.getCurrentCanvasData();\n this.inMemoryCanvas.width = imageData.width;\n this.inMemoryCanvas.height = imageData.height;\n this.inMemoryContext.putImageData(imageData, 0, 0);\n var noFilter = document.querySelector('#' + this.element.id + '_defaultCanvas');\n var ctx = noFilter.getContext('2d');\n noFilter.style.width = '100px';\n noFilter.style.height = '100px';\n ctx.filter = this.updateAdjustment('default', null, true);\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var chrome = document.querySelector('#' + this.element.id + '_chromeCanvas');\n ctx = chrome.getContext('2d');\n chrome.style.width = '100px';\n chrome.style.height = '100px';\n ctx.filter = this.updateAdjustment('chrome', null, true);\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var cold = document.querySelector('#' + this.element.id + '_coldCanvas');\n ctx = cold.getContext('2d');\n cold.style.width = '100px';\n cold.style.height = '100px';\n ctx.filter = this.updateAdjustment('cold', null, true);\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var warm = document.querySelector('#' + this.element.id + '_warmCanvas');\n ctx = warm.getContext('2d');\n warm.style.width = '100px';\n warm.style.height = '100px';\n ctx.filter = this.updateAdjustment('warm', null, true);\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var grayscale = document.querySelector('#' + this.element.id + '_grayscaleCanvas');\n ctx = grayscale.getContext('2d');\n grayscale.style.width = '100px';\n grayscale.style.height = '100px';\n ctx.filter = this.updateAdjustment('grayscale', null, true);\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var sepia = document.querySelector('#' + this.element.id + '_sepiaCanvas');\n ctx = sepia.getContext('2d');\n sepia.style.width = '100px';\n sepia.style.height = '100px';\n ctx.filter = this.updateAdjustment('sepia', null, true);\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var invert = document.querySelector('#' + this.element.id + '_invertCanvas');\n ctx = invert.getContext('2d');\n invert.style.width = '100px';\n invert.style.height = '100px';\n ctx.filter = this.updateAdjustment('invert', null, true);\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n };\n ImageEditor.prototype.callUpdateCurrentTransformedState = function () {\n var tempObjColl = extend([], this.objColl, [], true);\n var tempActiveObj = extend({}, this.activeObj, {}, true);\n this.objColl = [];\n this.refreshActiveObj();\n this.isRotateZoom = true;\n this.updateCurrentTransformedState('initial');\n if (this.degree === 0 && this.rotateFlipColl.length > 0) {\n this.destLeft += this.totalPannedPoint.x;\n this.destTop += this.totalPannedPoint.y;\n }\n this.destLeft += this.totalPannedInternalPoint.x;\n this.destTop += this.totalPannedInternalPoint.y;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.baseImg, this.srcLeft, this.srcTop, this.srcWidth, this.srcHeight, this.destLeft, this.destTop, this.destWidth, this.destHeight);\n this.updateCurrentTransformedState('reverse');\n if (this.degree === 0 && this.rotateFlipColl.length > 0) {\n this.destLeft += this.totalPannedPoint.x;\n this.destTop += this.totalPannedPoint.y;\n }\n this.isRotateZoom = false;\n this.objColl = tempObjColl;\n var tempTogglePen = this.togglePen;\n this.togglePen = false;\n this.lowerContext.filter = 'none';\n this.iterateObjColl();\n this.destLeft += this.totalPannedInternalPoint.x;\n this.destTop += this.totalPannedInternalPoint.y;\n this.freehandRedraw(this.lowerContext);\n this.destLeft -= this.totalPannedInternalPoint.x;\n this.destTop -= this.totalPannedInternalPoint.y;\n this.togglePen = tempTogglePen;\n this.lowerContext.filter = temp;\n this.activeObj = tempActiveObj;\n };\n ImageEditor.prototype.updateCurrentTransformedState = function (type, isPreventDestination, isRotatePan) {\n if (this.rotateFlipColl.length > 0) {\n if (type === 'initial') {\n this.reverseTransformedState();\n if (isNullOrUndefined(isPreventDestination)) {\n this.setDestinationPoints();\n }\n }\n this.currentTransformedState(type, null, null, isRotatePan);\n }\n if (this.isCircleCrop || (!isNullOrUndefined(this.currSelectionPoint) && this.currSelectionPoint.shape === 'crop-circle')) {\n if (isRotatePan) {\n this.destLeft += this.totalPannedClientPoint.x;\n this.destTop += this.totalPannedClientPoint.y;\n }\n this.cropCircle(this.lowerContext);\n if (isRotatePan) {\n this.destLeft -= this.totalPannedClientPoint.x;\n this.destTop -= this.totalPannedClientPoint.y;\n }\n }\n };\n ImageEditor.prototype.reverseTransformedState = function () {\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n };\n ImageEditor.prototype.currentTransformedState = function (type, isPreventDimension, context, isPreventCircleCrop) {\n context = context ? context : this.lowerContext;\n if (type === 'initial') {\n this.iterateRotateFlipColl(context, type);\n }\n else if (type === 'reverse') {\n this.iterateRotateFlipColl(context, type);\n this.setClientTransformedDimension(isPreventDimension);\n if (this.isCircleCrop || (!isNullOrUndefined(this.currSelectionPoint) && this.currSelectionPoint.shape === 'crop-circle' && isNullOrUndefined(isPreventCircleCrop))) {\n if (isPreventCircleCrop) {\n this.destLeft += this.totalPannedClientPoint.x;\n this.destTop += this.totalPannedClientPoint.y;\n }\n this.cropCircle(this.lowerContext);\n if (isPreventCircleCrop) {\n this.destLeft -= this.totalPannedClientPoint.x;\n this.destTop -= this.totalPannedClientPoint.y;\n }\n }\n }\n };\n ImageEditor.prototype.iterateRotateFlipColl = function (context, type) {\n if (type === 'initial') {\n for (var i = 0; i < this.rotateFlipColl.length; i++) {\n this.setTransform(context, this.rotateFlipColl[i]);\n }\n }\n else if (type === 'reverse') {\n for (var i = this.rotateFlipColl.length - 1; i >= 0; i--) {\n this.setTransform(context, this.rotateFlipColl[i], true);\n }\n }\n };\n ImageEditor.prototype.setTransform = function (context, value, isReverse) {\n if (isReverse && value === 90) {\n value = -90;\n }\n else if (isReverse && value === -90) {\n value = 90;\n }\n if (value === 'horizontal' && this.degree % 90 === 0 && this.degree % 180 !== 0) {\n value = 'vertical';\n }\n else if (value === 'vertical' && this.degree % 90 === 0 && this.degree % 180 !== 0) {\n value = 'horizontal';\n }\n this.isReverseRotate = this.isReverseFlip = true;\n if (isNullOrUndefined(isReverse)) {\n context.clearRect(0, 0, context.canvas.width, context.canvas.height);\n }\n switch (value) {\n case 90:\n case -90:\n context.translate(context.canvas.width / 2, context.canvas.height / 2);\n context.rotate(Math.PI / 180 * value);\n context.translate(-context.canvas.width / 2, -context.canvas.height / 2);\n break;\n case 'horizontal':\n context.translate(context.canvas.width, 0);\n context.scale(-1, 1);\n break;\n case 'vertical':\n context.translate(0, context.canvas.height);\n context.scale(1, -1);\n break;\n }\n this.isReverseRotate = this.isReverseFlip = false;\n };\n ImageEditor.prototype.isObjInsideCropRegion = function (obj) {\n var isInside = false;\n if (obj.activePoint.startX >= this.destLeft && obj.activePoint.endX <= (this.destLeft + this.destWidth)) {\n isInside = true;\n }\n else if (obj.activePoint.startX <= this.destLeft && obj.activePoint.endX >= this.destLeft) {\n isInside = true;\n }\n else if (obj.activePoint.startX <= (this.destLeft + this.destWidth) && obj.activePoint.endX >= (this.destLeft + this.destWidth)) {\n isInside = true;\n }\n else if (obj.activePoint.startY >= this.destTop && obj.activePoint.endY <= (this.destTop + this.destHeight)) {\n isInside = true;\n }\n else if (obj.activePoint.startY <= this.destTop && obj.activePoint.endY >= this.destTop) {\n isInside = true;\n }\n else if (obj.activePoint.startY <= (this.destTop + this.destHeight) && obj.activePoint.endY >= (this.destTop + this.destHeight)) {\n isInside = true;\n }\n return isInside;\n };\n ImageEditor.prototype.panFreehandDrawColl = function (xDiff, yDiff, panRegion) {\n for (var n = 0; n < this.freehandCounter; n++) {\n this.points = extend([], this.pointColl[n].points, []);\n this.pointCounter = 0;\n var len = this.points.length;\n for (var l = 0; l < len; l++) {\n if (panRegion === '' || panRegion === 'vertical') {\n this.points[l].x += xDiff;\n }\n else {\n this.points[l].x -= xDiff;\n }\n if (panRegion === '' || panRegion === 'horizontal') {\n this.points[l].y += yDiff;\n }\n else {\n this.points[l].y -= yDiff;\n }\n }\n }\n this.freehandRedraw(this.lowerContext);\n };\n ImageEditor.prototype.panObjColl = function (xDiff, yDiff, panRegion) {\n for (var i = 0; i < this.objColl.length; i++) {\n if (panRegion === '' || panRegion === 'vertical') {\n this.objColl[i].activePoint.startX += xDiff;\n this.objColl[i].activePoint.endX += xDiff;\n }\n else {\n this.objColl[i].activePoint.startX -= xDiff;\n this.objColl[i].activePoint.endX -= xDiff;\n }\n if (panRegion === '' || panRegion === 'horizontal') {\n this.objColl[i].activePoint.startY += yDiff;\n this.objColl[i].activePoint.endY += yDiff;\n }\n else {\n this.objColl[i].activePoint.startY -= yDiff;\n this.objColl[i].activePoint.endY -= yDiff;\n }\n this.objColl[i].activePoint.width = this.objColl[i].activePoint.endX -\n this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.height = this.objColl[i].activePoint.endY -\n this.objColl[i].activePoint.startY;\n this.updateActiveObject(this.objColl[i].activePoint, this.objColl[i]);\n var temp = this.lowerContext.filter;\n this.lowerContext.filter = 'none';\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.lowerContext.filter = temp;\n this.refreshActiveObj();\n }\n };\n ImageEditor.prototype.cropObjColl = function () {\n if (this.objColl.length > 0) {\n for (var i = 0; i < this.objColl.length; i++) {\n this.objColl[i].imageRatio = { startX: ((this.objColl[i].activePoint.startX -\n this.activeObj.activePoint.startX) / this.activeObj.activePoint.width),\n startY: ((this.objColl[i].activePoint.startY -\n this.activeObj.activePoint.startY) / this.activeObj.activePoint.height),\n endX: ((this.objColl[i].activePoint.endX -\n this.activeObj.activePoint.startX) / this.activeObj.activePoint.width),\n endY: ((this.objColl[i].activePoint.endY -\n this.activeObj.activePoint.startY) / this.activeObj.activePoint.height),\n width: this.activeObj.activePoint.width / this.objColl[i].activePoint.width,\n height: this.activeObj.activePoint.height / this.objColl[i].activePoint.height };\n if (this.objColl[i].shape === 'text') {\n this.objColl[i].textSettings.fontRatio = this.objColl[i].activePoint.width / this.objColl[i].textSettings.fontSize;\n }\n }\n }\n };\n ImageEditor.prototype.cropFreehandDrawColl = function () {\n for (var n = 0; n < this.freehandCounter; n++) {\n this.points = extend([], this.pointColl[n].points, []);\n this.pointCounter = 0;\n var len = this.points.length;\n for (var l = 0; l < len; l++) {\n this.points[l].ratioX = (this.points[l].x -\n this.activeObj.activePoint.startX) / this.activeObj.activePoint.width;\n this.points[l].ratioY = (this.points[l].y -\n this.activeObj.activePoint.startY) / this.activeObj.activePoint.height;\n }\n }\n };\n ImageEditor.prototype.hoverFreehandraw = function (fillStyle, strokeWidth) {\n var context = this.upperContext;\n var idx = -1;\n if (this.freehandDrawHoveredIndex > -1) {\n idx = this.freehandDrawHoveredIndex;\n }\n else {\n idx = this.freehandDrawSelectedIndex;\n }\n this.points = extend([], this.pointColl[idx].points);\n this.pointCounter = 0;\n var len = this.points.length;\n var controlPoint1;\n var controlPoint2;\n var startPoint;\n var endPoint;\n var minStrokeWidth = 0;\n var maxStrokeWidth = 0;\n context.fillStyle = fillStyle ? fillStyle : '#42a5f5';\n context.strokeStyle = '#fff';\n minStrokeWidth = maxStrokeWidth = this.penStrokeWidth = strokeWidth ?\n strokeWidth : this.pointColl[idx].strokeWidth;\n for (var l = 0; l < len - 3; l++) {\n if (this.points[l + 1] && this.points[l + 2] && this.points[l + 2]) {\n controlPoint1 = (this.calcCurveControlPoints(this.points[l + 0], this.points[l + 1], this.points[l + 2])).controlPoint2;\n controlPoint2 = (this.calcCurveControlPoints(this.points[l + 1], this.points[l + 2], this.points[l + 3])).controlPoint1;\n startPoint = this.points[l + 1];\n endPoint = this.points[l + 2];\n this.startDraw(context, controlPoint1, controlPoint2, startPoint, endPoint, minStrokeWidth, maxStrokeWidth);\n }\n if (len === 1) {\n controlPoint1 = controlPoint2 = startPoint = endPoint = this.points[0];\n this.startDraw(context, controlPoint1, controlPoint2, startPoint, endPoint, minStrokeWidth, maxStrokeWidth);\n }\n }\n context.closePath();\n };\n ImageEditor.prototype.flipFreehandrawColl = function (value) {\n if (value.toLowerCase() === 'horizontal') {\n for (var n = 0; n < this.freehandCounter; n++) {\n if (this.pointColl[n].shapeFlip !== this.currFlipState) {\n this.points = extend([], this.pointColl[n].points, []);\n this.pointCounter = 0;\n var len = this.points.length;\n for (var l = 0; l < len; l++) {\n if (this.points[l].x <= this.destLeft + (this.destWidth / 2)) {\n this.points[l].x = (this.destLeft + this.destWidth) - (this.points[l].x - this.destLeft);\n }\n else if (this.points[l].x >= this.destLeft + (this.destWidth / 2)) {\n this.points[l].x = this.destLeft + (this.destLeft + this.destWidth - this.points[l].x);\n }\n this.points[l].ratioX = (this.points[l].x - this.destLeft) / this.destWidth;\n this.points[l].ratioY = (this.points[l].y - this.destTop) / this.destHeight;\n }\n this.pointColl[n].shapeFlip = this.currFlipState;\n }\n }\n }\n else {\n for (var n = 0; n < this.freehandCounter; n++) {\n if (this.pointColl[n].shapeFlip !== this.currFlipState) {\n this.points = extend([], this.pointColl[n].points, []);\n this.pointCounter = 0;\n var len = this.points.length;\n for (var l = 0; l < len; l++) {\n if (this.points[l].y <= this.destTop + (this.destHeight / 2)) {\n this.points[l].y = (this.destTop + this.destHeight) - (this.points[l].y - this.destTop);\n }\n else if (this.points[l].y >= this.destTop + (this.destHeight / 2)) {\n this.points[l].y = this.destTop + (this.destTop + this.destHeight - this.points[l].y);\n }\n this.points[l].ratioX = (this.points[l].x - this.destLeft) / this.destWidth;\n this.points[l].ratioY = (this.points[l].y - this.destTop) / this.destHeight;\n }\n this.pointColl[n].shapeFlip = this.currFlipState;\n }\n }\n }\n };\n ImageEditor.prototype.rotateFreehandDrawColl = function () {\n for (var n = 0; n < this.freehandCounter; n++) {\n this.points = extend([], this.pointColl[n].points, []);\n this.pointCounter = 0;\n var len = this.points.length;\n for (var l = 0; l < len; l++) {\n this.points[l].y = this.destTop + (this.destHeight * this.points[l].ratioX);\n this.points[l].x = (this.destLeft + this.destWidth) - (this.destWidth * this.points[l].ratioY);\n }\n }\n // Update current image ratio for all objects\n for (var n = 0; n < this.freehandCounter; n++) {\n this.points = extend([], this.pointColl[n].points, []);\n this.pointCounter = 0;\n var len = this.points.length;\n for (var l = 0; l < len; l++) {\n this.points[l].ratioX = (this.points[l].x - this.destLeft) / this.destWidth;\n this.points[l].ratioY = (this.points[l].y - this.destTop) / this.destHeight;\n }\n }\n };\n ImageEditor.prototype.zoomFreehandDrawColl = function () {\n for (var n = 0; n < this.freehandCounter; n++) {\n this.points = extend([], this.pointColl[n].points, []);\n this.pointCounter = 0;\n var len = this.points.length;\n for (var l = 0; l < len; l++) {\n this.points[l].x = this.zoomX(this.points[l].ratioX);\n this.points[l].y = this.zoomY(this.points[l].ratioY);\n }\n }\n this.freehandRedraw(this.lowerContext);\n };\n ImageEditor.prototype.zoomX = function (x) {\n return (x * this.destWidth) + this.destLeft;\n };\n ImageEditor.prototype.zoomY = function (y) {\n return (y * this.destHeight) + this.destTop;\n };\n ImageEditor.prototype.zoomObjColl = function (preventApply) {\n for (var i = 0; i < this.objColl.length; i++) {\n this.objColl[i].activePoint.startX = (this.objColl[i].imageRatio.startX * this.destWidth) + this.destLeft;\n this.objColl[i].activePoint.startY = (this.objColl[i].imageRatio.startY * this.destHeight) + this.destTop;\n this.objColl[i].activePoint.endX = (this.objColl[i].imageRatio.endX * this.destWidth) + this.destLeft;\n this.objColl[i].activePoint.endY = (this.objColl[i].imageRatio.endY * this.destHeight) + this.destTop;\n this.objColl[i].activePoint.width = this.objColl[i].activePoint.endX -\n this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.height = this.objColl[i].activePoint.endY -\n this.objColl[i].activePoint.startY;\n if (this.objColl[i].shape === 'text') {\n this.updateFontSize(this.objColl[i]);\n }\n this.updateActiveObject(this.objColl[i].activePoint, this.objColl[i]);\n if (isNullOrUndefined(preventApply)) {\n var temp = this.lowerContext.filter;\n this.lowerContext.filter = 'none';\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n this.lowerContext.filter = temp;\n }\n }\n };\n ImageEditor.prototype.calcRatio = function () {\n var widthRatio;\n var heightRatio;\n if (this.degree === 0 || this.degree % 180 === 0) {\n widthRatio = this.baseImg.width / this.destWidth;\n heightRatio = this.baseImg.height / this.destHeight;\n }\n else {\n widthRatio = this.baseImg.height / this.destWidth;\n heightRatio = this.baseImg.width / this.destHeight;\n }\n return { width: widthRatio, height: heightRatio };\n };\n ImageEditor.prototype.drawCustomSelection = function (cropShape) {\n this.currObjType.isCustomCrop = true;\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.currObjType.shape = this.activeObj.shape = cropShape.toLowerCase();\n if (this.zoomFactor === 0) {\n if (this.destLeft >= 0 && this.destTop >= 0) {\n this.activeObj.activePoint.startX = this.destLeft;\n this.activeObj.activePoint.startY = this.destTop;\n this.activeObj.activePoint.endX = this.destLeft + this.destWidth;\n this.activeObj.activePoint.endY = this.destTop + this.destHeight;\n }\n else if (this.destLeft >= 0) {\n this.activeObj.activePoint.startX = this.destLeft;\n this.activeObj.activePoint.startY = 7.5;\n this.activeObj.activePoint.endX = this.destLeft + this.destWidth;\n this.activeObj.activePoint.endY = this.lowerCanvas.height - 15;\n }\n else if (this.destTop >= 0) {\n this.activeObj.activePoint.startX = 7.5;\n this.activeObj.activePoint.startY = this.destTop;\n this.activeObj.activePoint.endX = this.lowerCanvas.width - 15;\n this.activeObj.activePoint.endY = this.destTop + this.destHeight;\n }\n else {\n // arcRadius 7.5\n this.activeObj.activePoint.startX = 7.5;\n this.activeObj.activePoint.startY = 7.5;\n this.activeObj.activePoint.endX = this.lowerCanvas.width - 15;\n this.activeObj.activePoint.endY = this.lowerCanvas.height - 15;\n }\n }\n else {\n if (this.destLeft > 0) {\n this.activeObj.activePoint.startX = this.destLeft;\n }\n else {\n this.activeObj.activePoint.startX = 7.5;\n }\n if (this.destTop > 0) {\n this.activeObj.activePoint.startY = this.destTop;\n }\n else {\n this.activeObj.activePoint.startY = 7.5;\n }\n if (this.destLeft + this.destWidth + 15 < this.lowerCanvas.width) {\n this.activeObj.activePoint.endX = this.destLeft + this.destWidth - 15;\n }\n else {\n this.activeObj.activePoint.endX = this.lowerCanvas.width - 15;\n }\n if (this.destTop + this.destHeight + 15 < this.lowerCanvas.height) {\n this.activeObj.activePoint.endY = this.destTop + this.destHeight - 15;\n }\n else {\n this.activeObj.activePoint.endY = this.lowerCanvas.height - 15;\n }\n }\n if (this.activeObj.activePoint.startX < this.destLeft) {\n this.activeObj.activePoint.startX = this.destLeft;\n }\n if (this.activeObj.activePoint.startY < this.destTop) {\n this.activeObj.activePoint.startY = this.destTop;\n }\n if (this.activeObj.activePoint.endX > this.destLeft + this.destWidth) {\n this.activeObj.activePoint.endX = this.destLeft + this.destWidth;\n }\n if (this.activeObj.activePoint.endY > this.destTop + this.destHeight) {\n this.activeObj.activePoint.endY = this.destTop + this.destHeight;\n }\n if (this.activeObj.activePoint.startX === this.destLeft && this.destLeft + this.destWidth > this.lowerCanvas.clientWidth) {\n this.activeObj.activePoint.endX = this.lowerCanvas.clientWidth - 15;\n }\n if (this.activeObj.activePoint.startY === this.destTop && this.destTop + this.destHeight > this.lowerCanvas.clientHeight) {\n this.activeObj.activePoint.endY = this.lowerCanvas.clientHeight - 15;\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.updateActiveObject(this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj, null, null, true);\n };\n ImageEditor.prototype.clearOuterCanvas = function (context) {\n var destLeft = this.destLeft;\n var destTop = this.destTop;\n if (this.currFlipState !== '') {\n this.destLeft = this.lowerCanvas.clientWidth - (this.destWidth + this.destLeft);\n this.destTop = this.lowerCanvas.clientHeight - (this.destHeight + this.destTop);\n }\n if (this.destWidth < this.lowerCanvas.width) {\n var left = this.destLeft > 0 ? this.destLeft : 0;\n context.clearRect(0, 0, left, this.lowerCanvas.height);\n context.clearRect(this.destLeft + this.destWidth, 0, left, this.lowerCanvas.height);\n }\n if (this.destHeight < this.lowerCanvas.height) {\n var top_1 = this.destTop > 0 ? this.destTop : 0;\n context.clearRect(0, 0, this.lowerCanvas.width, top_1);\n context.clearRect(0, this.destTop + this.destHeight, this.lowerCanvas.width, top_1);\n }\n if (this.currFlipState !== '') {\n this.destLeft = destLeft;\n this.destTop = destTop;\n }\n };\n ImageEditor.prototype.cropCircle = function (context, isSave, isFlip) {\n if (isFlip && this.currFlipState !== '') {\n this.setTransform(context, this.currFlipState);\n }\n context.globalCompositeOperation = 'destination-in';\n context.beginPath();\n if (isNullOrUndefined(isSave)) {\n context.arc(this.destLeft + (this.destWidth / 2), this.destTop + (this.destHeight / 2), this.destWidth / 2, 0, Math.PI * 2);\n }\n else {\n context.arc(this.destWidth / 2, this.destHeight / 2, this.destWidth / 2, 0, Math.PI * 2);\n }\n context.closePath();\n context.fill();\n context.restore();\n context.globalCompositeOperation = 'source-over';\n this.currObjType.isActiveObj = this.isCircleCrop = true;\n if (isFlip && this.currFlipState !== '') {\n this.setTransform(context, this.currFlipState);\n }\n };\n ImageEditor.prototype.updateCropObj = function () {\n this.afterCropActions = [];\n this.cropObj.cropZoom = this.cropZoomFactor;\n this.cropObj.defaultZoom = this.defaultZoomFactor;\n this.cropObj.totalPannedPoint = extend({}, this.totalPannedPoint, {}, true);\n this.cropObj.totalPannedClientPoint = extend({}, this.totalPannedClientPoint, {}, true);\n this.cropObj.totalPannedInternalPoint = extend({}, this.totalPannedInternalPoint, {}, true);\n this.cropObj.activeObj = extend({}, this.activeObj, {}, true);\n this.cropObj.rotateFlipColl = extend([], this.rotateFlipColl, [], true);\n this.cropObj.degree = this.degree;\n this.cropObj.currFlipState = this.currFlipState;\n this.cropObj.destPoints = { startX: this.destLeft, startY: this.destTop, endX: 0, endY: 0,\n width: this.destWidth, height: this.destHeight };\n this.cropObj.srcPoints = { startX: this.srcLeft, startY: this.srcTop, endX: 0, endY: 0,\n width: this.srcWidth, height: this.srcHeight };\n };\n ImageEditor.prototype.setCropObj = function () {\n this.cropZoomFactor = this.zoomFactor = this.cropObj.cropZoom;\n this.defaultZoomFactor = this.cropObj.defaultZoom;\n this.totalPannedPoint = extend({}, this.cropObj.totalPannedPoint, {}, true);\n this.totalPannedClientPoint = extend({}, this.cropObj.totalPannedClientPoint, {}, true);\n this.totalPannedInternalPoint = extend({}, this.cropObj.totalPannedInternalPoint, {}, true);\n this.rotateFlipColl = extend([], this.cropObj.rotateFlipColl, [], true);\n this.degree = this.cropObj.degree;\n this.currFlipState = this.cropObj.currFlipState;\n this.destLeft = this.cropObj.destPoints.startX;\n this.destTop = this.cropObj.destPoints.startY;\n this.destWidth = this.cropObj.destPoints.width;\n this.destHeight = this.cropObj.destPoints.height;\n this.srcLeft = this.cropObj.srcPoints.startX;\n this.srcTop = this.cropObj.srcPoints.startY;\n this.srcWidth = this.cropObj.srcPoints.width;\n this.srcHeight = this.cropObj.srcPoints.height;\n this.drawCropSelectionImage();\n if (this.degree !== 0) {\n this.isCircleCrop = false;\n if (!isNullOrUndefined(this.currSelectionPoint)) {\n this.currSelectionPoint.shape = '';\n }\n this.currentPannedPoint = { x: 0, y: 0 };\n this.rotatePan();\n }\n this.activeObj = extend({}, this.cropObj.activeObj, {}, true);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.drawObject('duplicate');\n var activeObj = extend({}, this.cropObj.activeObj, {}, true);\n var isAfterCropAction = false;\n if (this.afterCropActions.length > 0) {\n isAfterCropAction = true;\n var objColl = extend([], this.objColl, {}, true);\n var pointColl = extend([], this.pointColl, {}, true);\n var freehandCounter = this.freehandCounter;\n this.objColl = [];\n this.pointColl = [];\n this.freehandCounter = 0;\n var isCircleCrop = this.isCircleCrop;\n var currSelectionPoint = extend({}, this.currSelectionPoint, {}, true);\n this.currSelectionPoint = null;\n this.isCircleCrop = false;\n var isFlip = false;\n for (var i = 0; i < this.afterCropActions.length; i++) {\n if (this.degree % 90 === 0 && this.degree % 180 !== 0 &&\n (this.afterCropActions[i] === 'horizontalflip' || this.afterCropActions[i] === 'verticalflip')) {\n this.rotatedFlipCropSelection = true;\n }\n this.updateTransform(this.afterCropActions[i]);\n if (this.afterCropActions[i] === 'horizontalflip' || this.afterCropActions[i] === 'verticalflip') {\n if (this.degree === 0) {\n this.destLeft += this.totalPannedPoint.x;\n this.destTop += this.totalPannedPoint.y;\n }\n isFlip = true;\n }\n }\n this.isCircleCrop = isCircleCrop;\n this.currSelectionPoint = currSelectionPoint;\n var destPoints = { startX: this.destLeft, startY: this.destTop, width: this.destWidth, height: this.destHeight };\n activeObj = extend({}, this.activeObj, {}, true);\n this.refreshActiveObj();\n this.objColl = objColl;\n this.pointColl = pointColl;\n this.freehandCounter = freehandCounter;\n if (this.rotateFlipColl.length > 1 && typeof (this.rotateFlipColl[this.rotateFlipColl.length - 1]) === 'string') {\n this.iterateObjColl();\n this.freehandRedraw(this.lowerContext);\n }\n else if (this.rotateFlipColl.length > 1 && typeof (this.rotateFlipColl[this.rotateFlipColl.length - 1]) === 'number' ||\n this.rotateFlipColl.length >= 0) {\n this.destLeft = activeObj.activePoint.startX;\n this.destTop = activeObj.activePoint.startY;\n this.destWidth = activeObj.activePoint.width;\n this.destHeight = activeObj.activePoint.height;\n this.zoomObjColl();\n this.zoomFreehandDrawColl();\n }\n this.destLeft = destPoints.startX;\n this.destTop = destPoints.startY;\n this.destWidth = destPoints.width;\n this.destHeight = destPoints.height;\n this.totalPannedPoint = { x: 0, y: 0 };\n this.totalPannedClientPoint = { x: 0, y: 0 };\n this.totalPannedInternalPoint = { x: 0, y: 0 };\n this.activeObj = activeObj;\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.drawObject('duplicate');\n if (this.cropObj.degree !== this.degree) {\n this.cropZoomFactor = this.zoomFactor = 0;\n }\n this.updateObjAndFreeHandDrawColl();\n if (isFlip) {\n if (this.degree === 0) {\n var currSelectionPoint_1 = extend({}, this.currSelectionPoint, {}, true);\n this.currSelectionPoint = null;\n this.isCircleCrop = false;\n this.drawPannImage({ x: 0, y: 0 }, this.getCurrentPanRegion());\n this.updateFlipPan(activeObj);\n this.isCircleCrop = isCircleCrop;\n this.currSelectionPoint = currSelectionPoint_1;\n }\n this.activeObj = activeObj;\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.drawObject('duplicate');\n }\n if (this.rotatedFlipCropSelection) {\n // this.totalPannedInternalPoint = extend({}, this.cropObj.totalPannedInternalPoint, {}, true) as Point;\n this.rotatedFlipCropSelection = false;\n }\n }\n if (!this.isCancelAction && !isAfterCropAction) {\n this.setDestPointsForFlipState();\n this.updateObjAndFreeHandDrawColl();\n this.zoomFreehandDrawColl();\n this.destLeft = this.cropObj.destPoints.startX;\n this.destTop = this.cropObj.destPoints.startY;\n }\n this.activeObj = activeObj;\n };\n ImageEditor.prototype.drawCropSelectionImage = function () {\n var temp = this.lowerContext.filter;\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.reverseTransformedState();\n this.iterateRotateFlipColl(this.lowerContext, 'initial');\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.baseImg, this.srcLeft, this.srcTop, this.srcWidth, this.srcHeight, this.destLeft, this.destTop, this.destWidth, this.destHeight);\n this.iterateRotateFlipColl(this.lowerContext, 'reverse');\n var activeObj = extend({}, this.cropObj.activeObj, {}, true);\n this.lowerContext.filter = 'none';\n if (this.isCancelAction) {\n this.zoomObjColl();\n this.zoomFreehandDrawColl();\n }\n else {\n this.destLeft = this.cropObj.destPoints.startX;\n this.destTop = this.cropObj.destPoints.startY;\n this.destWidth = this.cropObj.destPoints.width;\n this.destHeight = this.cropObj.destPoints.height;\n this.srcLeft = this.cropObj.srcPoints.startX;\n this.srcTop = this.cropObj.srcPoints.startY;\n this.srcWidth = this.cropObj.srcPoints.width;\n this.srcHeight = this.cropObj.srcPoints.height;\n var destPoints = { startX: this.destLeft, startY: this.destTop, width: this.destWidth, height: this.destHeight };\n this.destLeft = this.cropObj.activeObj.activePoint.startX;\n this.destTop = this.cropObj.activeObj.activePoint.startY;\n this.destWidth = this.cropObj.activeObj.activePoint.width;\n this.destHeight = this.cropObj.activeObj.activePoint.height;\n this.zoomObjColl();\n this.zoomFreehandDrawColl();\n this.destLeft = destPoints.startX;\n this.destTop = destPoints.startY;\n this.destWidth = destPoints.width;\n this.destHeight = destPoints.height;\n }\n this.activeObj = activeObj;\n this.lowerContext.filter = temp;\n };\n ImageEditor.prototype.cropImg = function (isRotateCrop) {\n if (isNullOrUndefined(isRotateCrop)) {\n this.croppedDegree = this.degree;\n }\n if (isNullOrUndefined(isRotateCrop) && this.degree !== 0) {\n this.updateCropObj();\n this.rotateCrop();\n }\n else if (isNullOrUndefined(isRotateCrop) && this.currFlipState !== '') {\n this.updateCropObj();\n this.flipCrop();\n }\n else {\n this.tempZoomFactor = this.zoomFactor;\n var ratio = this.calcRatio();\n if (isNullOrUndefined(isRotateCrop) || !isRotateCrop) {\n this.updateCropObj();\n this.resetPanPoints();\n this.updateImageRatioForActObj();\n this.currSelectionPoint = extend({}, this.activeObj, {}, true);\n this.cropDestPoints = { startX: this.destLeft, startY: this.destTop, width: this.destWidth, height: this.destHeight };\n }\n var maxDimension = this.calcMaxDimension(this.activeObj.activePoint.width *\n ratio.width, this.activeObj.activePoint.height * ratio.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.srcLeft = (this.activeObj.activePoint.startX * ratio.width) - (this.destLeft * ratio.width);\n this.srcTop = (this.activeObj.activePoint.startY * ratio.height) - (this.destTop * ratio.height);\n this.srcWidth = (this.activeObj.activePoint.width * ratio.width);\n this.srcHeight = (this.activeObj.activePoint.height * ratio.height);\n this.destLeft = (this.lowerCanvas.clientWidth - maxDimension.width) / 2;\n this.destTop = (this.lowerCanvas.clientHeight - maxDimension.height) / 2;\n this.destWidth = maxDimension.width;\n this.destHeight = maxDimension.height;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.baseImg, this.srcLeft, this.srcTop, this.srcWidth, this.srcHeight, this.destLeft, this.destTop, this.destWidth, this.destHeight);\n this.lowerContext.filter = 'none';\n var activeObj = extend({}, this.activeObj, {}, true);\n this.cropObjColl();\n this.zoomObjColl();\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.isObjInsideCropRegion(this.objColl[i])) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n }\n this.activeObj = activeObj;\n this.cropFreehandDrawColl();\n this.zoomFreehandDrawColl();\n this.clearOuterCanvas(this.lowerContext);\n this.clearOuterCanvas(this.upperContext);\n if (this.currSelectionPoint.shape === 'crop-circle') {\n this.cropCircle(this.lowerContext);\n }\n else {\n this.isCircleCrop = false;\n }\n this.lowerContext.filter = temp;\n this.refreshActiveObj();\n this.currObjType.isCustomCrop = false;\n this.pan(false);\n this.defaultZoomFactor = 0;\n }\n };\n ImageEditor.prototype.updateImageRatioForActObj = function () {\n this.activeObj.imageRatio = { startX: ((this.activeObj.activePoint.startX - this.destLeft) / this.destWidth),\n startY: ((this.activeObj.activePoint.startY - this.destTop) / this.destHeight),\n endX: ((this.activeObj.activePoint.endX - this.destLeft) / this.destWidth),\n endY: ((this.activeObj.activePoint.endY - this.destTop) / this.destHeight),\n width: this.destWidth / this.activeObj.activePoint.width, height: this.destHeight / this.activeObj.activePoint.height };\n };\n ImageEditor.prototype.drawImgToCanvas = function (maxDimension) {\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.destWidth = maxDimension.width;\n this.destHeight = maxDimension.height;\n if (this.isInitialLoading) {\n this.initializeFilter();\n this.isInitialLoading = false;\n }\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.baseImg, this.srcLeft, this.srcTop, this.srcWidth, this.srcHeight, this.destLeft, this.destTop, this.destWidth, this.destHeight);\n if ((!isNullOrUndefined(this.currSelectionPoint) && this.currSelectionPoint.shape === 'crop-circle') || this.isCircleCrop) {\n this.cropCircle(this.lowerContext);\n }\n this.lowerContext.filter = temp;\n };\n ImageEditor.prototype.limitPan = function () {\n if (this.activeObj.activePoint) {\n if (this.destLeft > this.activeObj.activePoint.startX) {\n this.destLeft = this.activeObj.activePoint.startX;\n }\n if (this.destTop > this.activeObj.activePoint.startY) {\n this.destTop = this.activeObj.activePoint.startY;\n }\n if (this.destLeft + this.destWidth < this.activeObj.activePoint.endX) {\n this.destLeft = this.activeObj.activePoint.endX - this.destWidth;\n }\n if (this.destTop + this.destHeight < this.activeObj.activePoint.endY) {\n this.destTop = this.activeObj.activePoint.endY - this.destHeight;\n }\n }\n };\n ImageEditor.prototype.updatePanPoints = function (panRegion) {\n var tempDestLeft = this.destLeft;\n var tempDestTop = this.destTop;\n var xDiff = this.panMove.x - this.tempPanMove.x;\n var yDiff = this.panMove.y - this.tempPanMove.y;\n if (panRegion === '') {\n this.destLeft += xDiff;\n this.destTop += yDiff;\n this.limitPan();\n }\n else if (panRegion === 'horizontal') {\n var tempActObj = extend({}, this.activeObj, {}, true);\n this.updateFlipActiveObj(panRegion);\n xDiff = this.tempPanMove.x - this.panMove.x;\n this.destLeft += xDiff;\n this.destTop += yDiff;\n this.limitPan();\n this.activeObj = tempActObj;\n }\n else if (panRegion === 'vertical') {\n var tempActObj = extend({}, this.activeObj, {}, true);\n this.updateFlipActiveObj(panRegion);\n yDiff = this.tempPanMove.y - this.panMove.y;\n this.destLeft += xDiff;\n this.destTop += yDiff;\n this.limitPan();\n this.activeObj = tempActObj;\n }\n else if (panRegion === 'horizontalVertical') {\n var tempActObj = extend({}, this.activeObj, {}, true);\n this.updateFlipActiveObj(panRegion);\n xDiff = this.tempPanMove.x - this.panMove.x;\n this.destLeft += xDiff;\n this.destTop -= yDiff;\n this.limitPan();\n this.activeObj = tempActObj;\n }\n else if (panRegion === 'verticalHorizontal') {\n var tempActObj = extend({}, this.activeObj, {}, true);\n this.updateFlipActiveObj(panRegion);\n yDiff = this.tempPanMove.y - this.panMove.y;\n this.destLeft -= xDiff;\n this.destTop += yDiff;\n this.limitPan();\n this.activeObj = tempActObj;\n }\n // returns panned difference for manipulating object collection\n return { x: this.destLeft - tempDestLeft, y: this.destTop - tempDestTop };\n };\n ImageEditor.prototype.setCurrentPanRegion = function (region, type) {\n var panRegion = region;\n if (region === '') {\n if (type === 'horizontal') {\n panRegion = 'horizontal';\n }\n else if (type === 'vertical') {\n panRegion = 'vertical';\n }\n }\n else if (region === 'horizontal') {\n if (type === 'horizontal') {\n panRegion = 'horizontalVertical';\n }\n else if (type === 'vertical') {\n panRegion = 'verticalHorizontal';\n }\n else if (type === 90) {\n panRegion = 'vertical';\n }\n else if (type === -90) {\n panRegion = 'horizontal';\n }\n }\n else if (region === 'vertical') {\n if (type === 'horizontal') {\n panRegion = 'horizontalVertical';\n }\n else if (type === 'vertical') {\n panRegion = 'verticalHorizontal';\n }\n else if (type === 90) {\n panRegion = 'horizontal';\n }\n else if (type === -90) {\n panRegion = 'vertical';\n }\n }\n else {\n if (type === 'horizontal') {\n panRegion = 'vertical';\n }\n else if (type === 'vertical') {\n panRegion = 'horizontal';\n }\n }\n return panRegion;\n };\n ImageEditor.prototype.getCurrentPanRegion = function () {\n var panRegion = '';\n for (var i = 0; i < this.rotateFlipColl.length; i++) {\n panRegion = this.setCurrentPanRegion(panRegion, this.rotateFlipColl[i]);\n }\n return panRegion;\n };\n ImageEditor.prototype.drawPannImage = function (point, panRegion) {\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.baseImg, this.srcLeft, this.srcTop, this.srcWidth, this.srcHeight, this.destLeft, this.destTop, this.destWidth, this.destHeight);\n if ((!isNullOrUndefined(this.currSelectionPoint) && this.currSelectionPoint.shape === 'crop-circle') || this.isCircleCrop) {\n this.cropCircle(this.lowerContext, null, true);\n }\n this.lowerContext.filter = 'none';\n this.panObjColl(point.x, point.y, panRegion);\n this.panFreehandDrawColl(point.x, point.y, panRegion);\n if (this.isCircleCrop) {\n this.cropCircle(this.lowerContext, null, true);\n }\n };\n ImageEditor.prototype.drawPannedImage = function (xDiff, yDiff) {\n var isObjCreated = false;\n if (isNullOrUndefined(this.activeObj.shape)) {\n isObjCreated = true;\n this.activeObj.activePoint = { startX: this.destLeft, startY: this.destTop,\n endX: this.destLeft + this.destWidth, endY: this.destTop + this.destHeight };\n if (this.activeObj.activePoint.startX < 0) {\n this.activeObj.activePoint.startX = 0;\n }\n if (this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.startY = 0;\n }\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width) {\n this.activeObj.activePoint.endX = this.lowerCanvas.width;\n }\n if (this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.endY = this.lowerCanvas.height;\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.activeObj.shape = 'crop-custom';\n this.activeObj.strokeSettings = this.strokeSettings;\n this.updateActiveObject(this.activeObj.activePoint, this.activeObj);\n this.isCropTab = true;\n }\n var panRegion = this.getCurrentPanRegion();\n if (this.degree === 0) {\n var point = void 0;\n if (isNullOrUndefined(xDiff) && isNullOrUndefined(yDiff)) {\n point = this.updatePanPoints(panRegion);\n }\n else {\n point = { x: xDiff, y: yDiff };\n }\n this.totalPannedPoint.x += point.x;\n this.totalPannedPoint.y += point.y;\n var tempSelectionObj = extend({}, this.activeObj, {}, true);\n var temp = this.lowerContext.filter;\n this.drawPannImage(point, panRegion);\n this.lowerContext.filter = temp;\n this.tempPanMove = extend({}, this.panMove, {}, true);\n this.activeObj = extend({}, tempSelectionObj, {}, true);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n if (!isNullOrUndefined(this.activeObj.shape)) {\n this.drawObject('duplicate', this.activeObj);\n }\n this.updateFlipPan(tempSelectionObj);\n }\n else {\n var tempFlipState = this.currFlipState;\n this.isCropTab = true;\n if (isNullOrUndefined(xDiff) && isNullOrUndefined(yDiff)) {\n this.currentPannedPoint = this.updatePanPoints(panRegion);\n }\n else {\n this.currentPannedPoint = { x: xDiff, y: yDiff };\n }\n this.currFlipState = tempFlipState;\n this.rotatePan();\n this.isCropTab = false;\n this.tempPanMove = extend({}, this.panMove, {}, true);\n }\n if (isObjCreated) {\n this.refreshActiveObj();\n this.isCropTab = false;\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n };\n ImageEditor.prototype.updateFlipPan = function (tempSelectionObj) {\n if (this.currFlipState !== '') {\n var temp = this.lowerContext.filter;\n this.refreshActiveObj();\n this.rotatedFlip();\n this.lowerContext.filter = 'none';\n this.freehandRedraw(this.lowerContext);\n this.lowerContext.filter = temp;\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n if (!isNullOrUndefined(tempSelectionObj)) {\n this.drawObject('duplicate', tempSelectionObj);\n }\n }\n };\n ImageEditor.prototype.updateFlipActiveObj = function (panRegion) {\n if (panRegion === 'horizontal') {\n if (this.activeObj.activePoint.startX > this.lowerCanvas.width / 2) {\n this.activeObj.activePoint.endX = (this.lowerCanvas.width / 2) -\n (this.activeObj.activePoint.startX - (this.lowerCanvas.width / 2));\n }\n else {\n this.activeObj.activePoint.endX = (this.lowerCanvas.width / 2) + ((this.lowerCanvas.width / 2) -\n this.activeObj.activePoint.startX);\n }\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - this.activeObj.activePoint.width;\n }\n else if (panRegion === 'vertical') {\n if (this.activeObj.activePoint.startX > this.lowerCanvas.width / 2) {\n this.activeObj.activePoint.endY = (this.lowerCanvas.height / 2) -\n (this.activeObj.activePoint.startY - (this.lowerCanvas.height / 2));\n }\n else {\n this.activeObj.activePoint.endY = (this.lowerCanvas.height / 2) +\n ((this.lowerCanvas.height / 2) - this.activeObj.activePoint.startY);\n }\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY - this.activeObj.activePoint.height;\n }\n else if (panRegion === 'verticalHorizontal' || panRegion === 'horizontalVertical') {\n if (this.activeObj.activePoint.startX > this.lowerCanvas.width / 2) {\n this.activeObj.activePoint.endX = (this.lowerCanvas.width / 2) -\n (this.activeObj.activePoint.startX - (this.lowerCanvas.width / 2));\n this.activeObj.activePoint.endY = (this.lowerCanvas.height / 2) -\n (this.activeObj.activePoint.startY - (this.lowerCanvas.height / 2));\n }\n else {\n this.activeObj.activePoint.endX = (this.lowerCanvas.width / 2) + ((this.lowerCanvas.width / 2) -\n this.activeObj.activePoint.startX);\n this.activeObj.activePoint.endY = (this.lowerCanvas.height / 2) +\n ((this.lowerCanvas.height / 2) - this.activeObj.activePoint.startY);\n }\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - this.activeObj.activePoint.width;\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY - this.activeObj.activePoint.height;\n }\n this.updateActiveObject(this.activeObj.activePoint, this.activeObj);\n };\n ImageEditor.prototype.resetPanPoints = function () {\n this.totalPannedPoint = { x: 0, y: 0 };\n this.totalPannedClientPoint = { x: 0, y: 0 };\n this.totalPannedInternalPoint = { x: 0, y: 0 };\n };\n ImageEditor.prototype.flipCrop = function () {\n this.isReverseFlip = true;\n this.totalPannedPoint.x += this.tempFlipPanPoint.x;\n this.totalPannedPoint.y += this.tempFlipPanPoint.y;\n var tempCurrFlipState = this.currFlipState;\n var tempFlipColl = this.flipColl;\n this.flipColl = [];\n this.updateImageRatioForActObj();\n this.currSelectionPoint = extend({}, this.activeObj, {}, true);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n if (!isNullOrUndefined(this.tempPannedPoint) && this.totalPannedPoint.x === 0 && this.totalPannedPoint.y === 0) {\n this.totalPannedPoint = extend({}, this.tempPannedPoint, {}, true);\n this.tempPannedPoint = { x: 0, y: 0 };\n }\n var isPrevent = true;\n if (!isNullOrUndefined(this.activeObj.shape) && this.activeObj.shape.split('-')[0] === 'crop' &&\n this.zoomFactor === 0 && this.cropObj.cropZoom !== 0) {\n isPrevent = false;\n }\n if (this.zoomFactor === 0 && isPrevent) {\n if (this.totalPannedPoint.x > 0) {\n this.destLeft -= Math.abs(this.totalPannedPoint.x);\n }\n else {\n this.destLeft += Math.abs(this.totalPannedPoint.x);\n }\n if (this.totalPannedPoint.y > 0) {\n this.destTop -= Math.abs(this.totalPannedPoint.y);\n }\n else {\n this.destTop += Math.abs(this.totalPannedPoint.y);\n }\n }\n this.lowerContext.drawImage(this.baseImg, this.srcLeft, this.srcTop, this.srcWidth, this.srcHeight, this.destLeft, this.destTop, this.destWidth, this.destHeight);\n var destLeft = this.destLeft;\n var destTop = this.destTop;\n if (this.currFlipState === 'horizontal' && this.zoomFactor > 0 && this.totalPannedPoint.x !== 0) {\n this.destLeft = destLeft - this.totalPannedPoint.x;\n }\n else if (this.currFlipState === 'vertical' && this.zoomFactor > 0 && this.totalPannedPoint.y !== 0) {\n this.destTop = destTop - this.totalPannedPoint.y;\n }\n this.updateImageRatioForActObj();\n this.objColl.push(this.activeObj);\n for (var i = 0; i < this.objColl.length; i++) {\n this.objColl[i].shapeFlip = '';\n }\n for (var i = 0; i < this.freehandCounter; i++) {\n this.pointColl[i].shapeFlip = '';\n }\n this.redrawObj(this.getCurrentPanRegion());\n this.flipFreehandrawColl(this.currFlipState);\n if (this.zoomFactor === 0 && isPrevent) {\n if (this.getCurrentPanRegion() === 'horizontal') {\n this.panObjColl(this.totalPannedPoint.x, -this.totalPannedPoint.y, this.getCurrentPanRegion());\n this.panFreehandDrawColl(this.totalPannedPoint.x, -this.totalPannedPoint.y, this.getCurrentPanRegion());\n }\n else if (this.getCurrentPanRegion() === 'vertical') {\n this.panObjColl(-this.totalPannedPoint.x, this.totalPannedPoint.y, this.getCurrentPanRegion());\n this.panFreehandDrawColl(-this.totalPannedPoint.x, this.totalPannedPoint.y, this.getCurrentPanRegion());\n }\n else {\n this.panObjColl(-this.totalPannedPoint.x, -this.totalPannedPoint.y, this.getCurrentPanRegion());\n this.panFreehandDrawColl(-this.totalPannedPoint.x, -this.totalPannedPoint.y, this.getCurrentPanRegion());\n }\n }\n this.activeObj = extend({}, this.objColl[this.objColl.length - 1], {}, true);\n this.objColl.pop();\n this.drawObject('duplicate');\n this.destLeft = destLeft;\n this.destTop = destTop;\n this.cropImg(true);\n this.updateCurrentTransformedState('initial');\n this.setDestinationPoints();\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.baseImg, this.srcLeft, this.srcTop, this.srcWidth, this.srcHeight, this.destLeft, this.destTop, this.destWidth, this.destHeight);\n this.lowerContext.filter = temp;\n this.isRotateZoom = false;\n this.updateCurrentTransformedState('reverse');\n if (tempCurrFlipState === '' && this.currFlipState !== '') {\n tempCurrFlipState = this.currFlipState;\n }\n this.currFlipState = tempCurrFlipState;\n this.flipColl = tempFlipColl;\n this.lowerContext.filter = 'none';\n for (var i = 0; i < this.objColl.length; i++) {\n this.objColl[i].shapeFlip = '';\n }\n for (var i = 0; i < this.freehandCounter; i++) {\n this.pointColl[i].shapeFlip = '';\n }\n this.redrawObj(this.getCurrentPanRegion());\n this.flipFreehandrawColl(this.currFlipState);\n this.iterateObjColl();\n this.freehandRedraw(this.lowerContext);\n this.lowerContext.filter = temp;\n if ((!isNullOrUndefined(this.currSelectionPoint) && this.currSelectionPoint.shape === 'crop-circle') || this.isCircleCrop) {\n this.cropCircle(this.lowerContext);\n }\n this.refreshActiveObj();\n this.clearOuterCanvas(this.lowerContext);\n this.clearOuterCanvas(this.upperContext);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.isReverseFlip = false;\n this.resetPanPoints();\n };\n ImageEditor.prototype.rotateCrop = function () {\n var shape = '';\n if (!isNullOrUndefined(this.activeObj.shape)) {\n shape = this.activeObj.shape;\n }\n var tempDegree = this.degree;\n if (this.degree % 90 === 0 && this.degree % 180 !== 0) {\n this.rotatedDestPoints.startX = this.destLeft;\n this.rotatedDestPoints.startY = this.destTop;\n this.rotatedDestPoints.width = this.destWidth;\n this.rotatedDestPoints.height = this.destHeight;\n this.rotatedDestPoints.startX -= this.totalPannedClientPoint.x;\n this.rotatedDestPoints.startY -= this.totalPannedClientPoint.y;\n }\n this.updateImageRatioForActObj();\n this.currSelectionPoint = extend({}, this.activeObj, {}, true);\n this.objColl.push(this.activeObj);\n this.activeObj = extend({}, this.objColl[this.objColl.length - 1], {}, true);\n this.reverseTransformedState();\n this.setClientTransformedDimension();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.baseImg, this.srcLeft, this.srcTop, this.srcWidth, this.srcHeight, this.destLeft, this.destTop, this.destWidth, this.destHeight);\n this.lowerContext.filter = temp;\n var length = 0;\n if (tempDegree === 90 || tempDegree === -270) {\n length = 3;\n }\n else if (tempDegree === 180 || tempDegree === -180) {\n length = 2;\n }\n else if (tempDegree === 270 || tempDegree === -90) {\n length = 1;\n }\n for (var i = 0; i < length; i++) {\n this.rotateObjColl();\n this.rotateFreehandDrawColl();\n }\n var activeObj = extend({}, this.objColl[this.objColl.length - 1], {}, true);\n if (this.currFlipState !== '') {\n var flipState = '';\n for (var i = 0; i < this.objColl.length; i++) {\n this.objColl[i].shapeFlip = '';\n }\n if (this.currFlipState === 'horizontal') {\n flipState = this.degree % 90 === 0 && this.degree % 180 !== 0 ? 'vertical' : 'horizontal';\n this.redrawObj(flipState);\n }\n else if (this.currFlipState === 'vertical') {\n flipState = this.degree % 90 === 0 && this.degree % 180 !== 0 ? 'horizontal' : 'vertical';\n this.redrawObj(flipState);\n }\n for (var i = 0; i < this.freehandCounter; i++) {\n this.pointColl[i].shapeFlip = '';\n }\n if (this.currFlipState === 'horizontal') {\n flipState = this.degree % 90 === 0 && this.degree % 180 !== 0 ? 'vertical' : 'horizontal';\n this.flipFreehandrawColl(flipState);\n }\n else if (this.currFlipState === 'vertical') {\n flipState = this.degree % 90 === 0 && this.degree % 180 !== 0 ? 'horizontal' : 'vertical';\n this.flipFreehandrawColl(flipState);\n }\n }\n this.zoomFreehandDrawColl();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.drawObject('duplicate', activeObj);\n this.objColl.pop();\n this.degree = 0;\n this.cropImg(true);\n this.isReverseRotate = true;\n this.reverseTransformedState();\n this.degree = tempDegree;\n this.setDestinationPoints();\n this.currentTransformedState('initial');\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.baseImg, this.srcLeft, this.srcTop, this.srcWidth, this.srcHeight, this.destLeft, this.destTop, this.destWidth, this.destHeight);\n this.lowerContext.filter = temp;\n this.currentTransformedState('reverse');\n length = 0;\n if (tempDegree === 90 || tempDegree === -270) {\n length = 1;\n }\n else if (tempDegree === 180 || tempDegree === -180) {\n length = 2;\n }\n else if (tempDegree === 270 || tempDegree === -90) {\n length = 3;\n }\n for (var i = 0; i < length; i++) {\n this.rotateObjColl();\n this.rotateFreehandDrawColl();\n }\n if (this.currFlipState !== '') {\n for (var i = 0; i < this.objColl.length; i++) {\n this.objColl[i].shapeFlip = '';\n }\n if (this.currFlipState === 'horizontal') {\n this.redrawObj('horizontal');\n }\n else if (this.currFlipState === 'vertical') {\n this.redrawObj('vertical');\n }\n for (var i = 0; i < this.freehandCounter; i++) {\n this.pointColl[i].shapeFlip = '';\n }\n if (this.currFlipState === 'horizontal') {\n this.flipFreehandrawColl('horizontal');\n }\n else if (this.currFlipState === 'vertical') {\n this.flipFreehandrawColl('vertical');\n }\n }\n this.isReverseRotate = false;\n if (shape === 'crop-circle') {\n this.cropCircle(this.lowerContext);\n }\n this.lowerContext.filter = 'none';\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.isObjInsideCropRegion(this.objColl[i])) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n }\n this.zoomFreehandDrawColl();\n this.lowerContext.filter = temp;\n this.clearOuterCanvas(this.lowerContext);\n this.clearOuterCanvas(this.upperContext);\n if (shape === 'crop-circle') {\n this.cropCircle(this.lowerContext);\n }\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.resetPanPoints();\n };\n ImageEditor.prototype.updateRotatePanPoints = function () {\n if (this.degree % 90 === 0 && this.degree % 180 !== 0) {\n if (this.degree === 90 || this.degree === -270) {\n this.destLeft += this.currentPannedPoint.y;\n this.destTop -= this.currentPannedPoint.x;\n }\n else if (this.degree === 270 || this.degree === -90) {\n this.destLeft -= this.currentPannedPoint.y;\n this.destTop += this.currentPannedPoint.x;\n }\n }\n else {\n if (this.degree === 180 || this.degree === -180) {\n this.destLeft -= this.currentPannedPoint.x;\n this.destTop -= this.currentPannedPoint.y;\n }\n else {\n this.destLeft += this.currentPannedPoint.x;\n this.destTop += this.currentPannedPoint.y;\n }\n }\n };\n ImageEditor.prototype.rotatePan = function (isCropSelection) {\n this.isReverseRotate = true;\n var tempDegree = this.degree;\n var rotatePanActiveObj;\n if (!isNullOrUndefined(this.activeObj.activePoint) && !isNullOrUndefined(this.activeObj.shape)) {\n rotatePanActiveObj = extend({}, this.activeObj, {}, true);\n }\n var tempObjColl = extend([], this.objColl, [], true);\n this.objColl = [];\n this.refreshActiveObj();\n this.isRotateZoom = true;\n this.updateCurrentTransformedState('initial');\n var initialDestLeft = this.destLeft;\n var initialDestTop = this.destTop;\n if (this.isCropTab) {\n this.destLeft += this.totalPannedInternalPoint.x;\n this.destTop += this.totalPannedInternalPoint.y;\n }\n this.updateRotatePanPoints();\n if (this.isCropTab) {\n this.totalPannedInternalPoint.x = this.destLeft - initialDestLeft;\n this.totalPannedInternalPoint.y = this.destTop - initialDestTop;\n }\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.baseImg, this.srcLeft, this.srcTop, this.srcWidth, this.srcHeight, this.destLeft, this.destTop, this.destWidth, this.destHeight);\n this.isRotateZoom = false;\n this.updateCurrentTransformedState('reverse', true, true);\n var destLeft = this.destLeft;\n var destTop = this.destTop;\n this.destLeft += this.totalPannedClientPoint.x;\n this.destTop += this.totalPannedClientPoint.y;\n this.destLeft += this.currentPannedPoint.x;\n this.destTop += this.currentPannedPoint.y;\n this.totalPannedClientPoint.x = this.destLeft - destLeft;\n this.totalPannedClientPoint.y = this.destTop - destTop;\n this.objColl = tempObjColl;\n this.degree = tempDegree;\n this.objColl = extend([], tempObjColl, [], true);\n this.lowerContext.filter = 'none';\n var panRegion = this.getCurrentPanRegion();\n if (isCropSelection) {\n this.currentPannedPoint = extend({}, this.totalPannedClientPoint, {}, true);\n }\n this.panObjColl(this.currentPannedPoint.x, this.currentPannedPoint.y, panRegion);\n this.panFreehandDrawColl(this.currentPannedPoint.x, this.currentPannedPoint.y, panRegion);\n this.lowerContext.filter = temp;\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.activeObj = extend({}, rotatePanActiveObj, {}, true);\n if (!isNullOrUndefined(this.activeObj.activePoint)) {\n this.drawObject('duplicate', this.activeObj, null, null, true);\n }\n this.isReverseRotate = false;\n };\n ImageEditor.prototype.rotateZoom = function (value) {\n var powerOften = Math.pow(10, 1);\n if ((Math.round(this.zoomFactor * powerOften) / powerOften) === 0.1 && value === -0.1) {\n this.zoomFactor = 0;\n }\n else {\n this.zoomFactor += value;\n }\n if (this.isCropTab) {\n this.cropZoomFactor = this.zoomFactor;\n }\n else {\n this.defaultZoomFactor = this.zoomFactor;\n }\n var tempObjColl = extend([], this.objColl, [], true);\n var tempActiveObj = extend({}, this.activeObj, {}, true);\n this.objColl = [];\n this.refreshActiveObj();\n this.updateCurrentTransformedState('initial');\n this.isRotateZoom = true;\n this.setDestinationPoints();\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.baseImg, this.srcLeft, this.srcTop, this.srcWidth, this.srcHeight, this.destLeft, this.destTop, this.destWidth, this.destHeight);\n this.lowerContext.filter = temp;\n this.isRotateZoom = false;\n this.updateCurrentTransformedState('reverse');\n this.objColl = tempObjColl;\n this.activeObj = tempActiveObj;\n };\n ImageEditor.prototype.drawZoomImgToCanvas = function (value, selectionObj) {\n var powerOften = Math.pow(10, 1);\n if ((Math.round(this.zoomFactor * powerOften) / powerOften) === 0.1 && value === -0.1) {\n this.zoomFactor = 0;\n }\n else {\n this.zoomFactor += value;\n }\n if (this.isCropTab) {\n this.cropZoomFactor += value;\n }\n else {\n this.defaultZoomFactor = this.zoomFactor;\n }\n var maxDimension = { width: 0, height: 0 };\n if (this.isCropTab) {\n maxDimension = this.cropZoom(value, selectionObj);\n }\n else {\n maxDimension = this.calcMaxDimension(this.srcWidth, this.srcHeight);\n maxDimension.width += (maxDimension.width * this.zoomFactor);\n maxDimension.height += (maxDimension.height * this.zoomFactor);\n this.destLeft = (this.lowerCanvas.clientWidth - maxDimension.width) / 2;\n this.destTop = (this.lowerCanvas.clientHeight - maxDimension.height) / 2;\n }\n this.drawImgToCanvas(maxDimension);\n };\n ImageEditor.prototype.cropZoom = function (value, selectionObj) {\n var destLeft = this.destLeft;\n var destTop = this.destTop;\n var maxDimension = { width: 0, height: 0 };\n if (this.srcLeft === 0 || this.srcTop === 0) {\n if (isNullOrUndefined(selectionObj)) {\n maxDimension = this.setZoomDimension(value, null);\n }\n else {\n maxDimension = this.setZoomDimension(value, selectionObj);\n }\n }\n else {\n if (this.degree % 90 === 0 && this.degree % 180 !== 0) {\n maxDimension = this.calcMaxDimension(this.srcHeight, this.srcWidth);\n }\n else {\n maxDimension = this.calcMaxDimension(this.srcWidth, this.srcHeight);\n }\n maxDimension.width += (maxDimension.width * this.zoomFactor);\n maxDimension.height += (maxDimension.height * this.zoomFactor);\n }\n this.destLeft = destLeft - ((maxDimension.width - this.destWidth) / 2);\n this.destTop = destTop - ((maxDimension.height - this.destHeight) / 2);\n if (!isNullOrUndefined(selectionObj)) {\n if (this.destLeft > selectionObj.activePoint.startX) {\n this.destLeft = selectionObj.activePoint.startX;\n }\n if (this.destTop > selectionObj.activePoint.startY) {\n this.destTop = selectionObj.activePoint.startY;\n }\n if (this.destLeft + maxDimension.width < selectionObj.activePoint.endX) {\n this.destLeft = selectionObj.activePoint.endX - maxDimension.width;\n }\n if (this.destTop + maxDimension.height < selectionObj.activePoint.endY) {\n this.destTop = selectionObj.activePoint.endY - maxDimension.height;\n }\n }\n return maxDimension;\n };\n ImageEditor.prototype.updateCanvas = function () {\n var fileOpened = { fileName: this.fileName, fileType: this.fileType };\n this.srcWidth = this.baseImg.width;\n this.srcHeight = this.baseImg.height;\n var maxDimension = this.calcMaxDimension(this.srcWidth, this.srcHeight);\n this.destLeft = (this.lowerCanvas.clientWidth - maxDimension.width) / 2;\n this.destTop = (this.lowerCanvas.clientHeight - maxDimension.height) / 2;\n this.drawImgToCanvas(maxDimension);\n this.cropDestPoints = { startX: this.destLeft, startY: this.destTop, width: this.destWidth, height: this.destHeight };\n var temp = this.lowerContext.filter;\n this.lowerContext.filter = 'none';\n this.iterateObjColl();\n this.zoomFreehandDrawColl();\n this.lowerContext.filter = temp;\n if (this.destWidth > 0 && this.destHeight > 0) {\n this.isImageLoaded = true;\n }\n if (this.isUndoRedo) {\n if (this.currFlipState !== '') {\n this.flip(this.toPascalCase(this.currFlipState));\n }\n }\n if (this.disabled) {\n this.element.setAttribute('class', 'e-disabled');\n }\n this.trigger('fileOpened', fileOpened);\n };\n ImageEditor.prototype.imageOnLoad = function (src) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n proxy.baseImg.src = src;\n this.baseImg.onload = function () {\n _this.lowerContext.drawImage(_this.baseImg, 0, 0, _this.lowerCanvas.width, _this.lowerCanvas.height);\n hideSpinner(_this.element);\n _this.element.style.opacity = '1';\n _this.updateCanvas();\n if (_this.currObjType.isUndoZoom) {\n _this.currObjType.isUndoZoom = false;\n _this.lowerCanvas.style.display = 'block';\n }\n _this.isUndoRedo = false;\n if (Browser.isDevice) {\n if (_this.isToolbar() && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) &&\n (!isNullOrUndefined(getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar')) &&\n (!isNullOrUndefined(getComponent(document.getElementById(_this.element.id + '_bottomToolbar'), 'toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, Browser.isDevice, null);\n _this.createBottomToolbar();\n }\n else {\n if (_this.isToolbar() && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) &&\n (!isNullOrUndefined(getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, false, null);\n }\n };\n };\n ImageEditor.prototype.refreshActiveObj = function () {\n this.activeObj = {};\n this.activeObj.activePoint = { startX: 0, startY: 0, endX: 0, endY: 0, width: 0, height: 0 };\n this.activeObj.flipObjColl = [];\n this.activeObj.strokeSettings = this.strokeSettings;\n this.activeObj.textSettings = this.textSettings;\n };\n ImageEditor.prototype.redrawText = function () {\n if (this.activeObj.textSettings.bold) {\n this.upperContext.font = 'bold ' + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n if (this.activeObj.textSettings.italic) {\n this.upperContext.font = 'bold ' + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n this.upperContext.font = 'italic bold ' + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n if (!this.activeObj.textSettings.bold && !this.activeObj.textSettings.italic) {\n this.upperContext.font = this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n var rows = this.activeObj.keyHistory.split('\\n');\n var text = this.textArea.style.display === 'block' ? this.getMaxText(true) : this.getMaxText();\n var width = this.upperContext.measureText(text).width + this.activeObj.textSettings.fontSize * 0.5;\n var height = rows.length * (this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25);\n this.setTextSelection(width, height);\n this.updateActiveObject(this.activeObj.activePoint, this.activeObj);\n this.redrawShape(this.activeObj);\n };\n ImageEditor.prototype.setTextSelection = function (width, height) {\n var degree = this.degree;\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n for (var i = 0; i < this.activeObj.flipObjColl.length; i++) {\n if (degree === 0) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.endX - width,\n startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (height ? height : 0) };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + (width ? width : 0)),\n endY: this.activeObj.activePoint.endY };\n }\n else {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + (width ? width : 0)),\n endY: this.activeObj.activePoint.startY + (height ? height : 0) };\n }\n }\n else if (degree === 90) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - width,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.endY };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n else {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n }\n else if (degree === 180) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + width),\n endY: this.activeObj.activePoint.endY };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + height;\n this.activeObj.activePoint = { endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY,\n startX: (this.activeObj.activePoint.endX - (width ? width : 0)),\n startY: this.activeObj.activePoint.startY };\n }\n else {\n this.activeObj.activePoint = { endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY,\n startX: (this.activeObj.activePoint.endX - (width ? width : 0)),\n startY: this.activeObj.activePoint.endY - (height ? height : 0) };\n }\n }\n else if (degree === 270) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + height),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - (width ? width : 0),\n endX: this.activeObj.activePoint.endX,\n endY: this.activeObj.activePoint.endY };\n }\n else {\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - (width ? width : 0),\n endX: this.activeObj.activePoint.endX,\n endY: this.activeObj.activePoint.endY };\n }\n }\n }\n if (this.activeObj.flipObjColl.length === 0) {\n if (degree === 0) {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + (width ? width : 0)),\n endY: this.activeObj.activePoint.startY + (height ? height : 0) };\n }\n else if (degree === 90) {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n else if (degree === 180) {\n this.activeObj.activePoint = { endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY,\n startX: (this.activeObj.activePoint.endX - (width ? width : 0)),\n startY: this.activeObj.activePoint.endY - (height ? height : 0) };\n }\n else if (degree === 270) {\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - (width ? width : 0),\n endX: this.activeObj.activePoint.endX,\n endY: this.activeObj.activePoint.endY };\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n if (this.degree === 360 || this.degree === -360) {\n this.degree = 0;\n }\n };\n ImageEditor.prototype.updateUndoRedoColl = function (operation, value, previousObj, currentObj, zoomFactor, sharpen, bw) {\n if (!this.isInitialLoading) {\n this.undoRedoStep++;\n this.undoRedoColl.push({ operation: operation, value: value, previousObj: previousObj, currentObj: currentObj,\n zoomFactor: zoomFactor, sharpen: sharpen, bw: bw });\n if (this.undoRedoColl.length > 16) {\n this.undoRedoColl.splice(0, 1);\n this.undoRedoStep--;\n }\n this.enableDisableToolbarBtn();\n }\n };\n ImageEditor.prototype.fileSelect = function (inputElement, args) {\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var filesData = args.target.files[0];\n if (this.isImageLoaded) {\n this.isImageLoaded = false;\n this.reset();\n }\n if (isNullOrUndefined(this.toolbarTemplate)) {\n this.reset();\n this.update();\n }\n this.fileName = inputElement.value.split('\\\\')[inputElement.value.split('\\\\').length - 1];\n this.fileName = this.fileName.split('.')[0];\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var URL = window.URL;\n var url = URL.createObjectURL(filesData);\n this.imageOnLoad(url.toString());\n inputElement.value = '';\n };\n ImageEditor.prototype.findTextPoint = function (e) {\n if (this.activeObj.shape === 'text') {\n this.textArea.style.transformOrigin = '0 0';\n var degree = void 0;\n var scale = '';\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (this.activeObj.flipObjColl.length > 0) {\n // need to add scale value according to length.\n for (var i = 0; i < this.activeObj.flipObjColl.length; i++) {\n if (degree !== 0 && degree % 90 === 0 && degree !== 180) {\n scale += this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal' ? 'scale(1, -1)' :\n 'scale(-1, 1)';\n }\n else {\n scale += this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal' ? 'scale(-1, 1)' :\n 'scale(1, -1)';\n }\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.textArea.style.transform = 'rotate(' + degree + 'deg)' + scale;\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.textArea.style.transform = 'rotate(' + degree + 'deg)' + scale;\n }\n }\n }\n else {\n this.textArea.style.transform = 'rotate(' + degree + 'deg)';\n }\n this.findTextTarget(e);\n }\n };\n ImageEditor.prototype.getStrokeWidth = function (text) {\n var strokeWidth;\n var currentWidth = parseInt(text, 10) / 2;\n switch (currentWidth) {\n case 1:\n strokeWidth = this.l10n.getConstant('XSmall');\n break;\n case 2:\n strokeWidth = this.l10n.getConstant('Small');\n break;\n case 3:\n strokeWidth = this.l10n.getConstant('Medium');\n break;\n case 4:\n strokeWidth = this.l10n.getConstant('Large');\n break;\n case 5:\n strokeWidth = this.l10n.getConstant('XLarge');\n break;\n }\n return strokeWidth;\n };\n ImageEditor.prototype.updateToolbarItems = function () {\n var selFillElem = this.element.querySelector('.e-fill.e-template .e-dropdownbtn-preview');\n var selStrokeElem = this.element.querySelector('.e-stroke.e-template .e-dropdownbtn-preview');\n var selTextStrokeElem = this.element.querySelector('.e-text-font-color.e-template .e-dropdownbtn-preview');\n var selPenStrokeElem = this.element.querySelector('.e-pen-stroke-color.e-template .e-dropdownbtn-preview');\n var strokeWidthElem = this.element.querySelector('.e-shape-stroke-width');\n var fontFamilyElem = this.element.querySelector('.e-text-font-family');\n var fontSizeElem = this.element.querySelector('.e-text-font-size');\n var fontStyleElem = this.element.querySelector('.e-text-font-style');\n if (selFillElem) {\n if (this.activeObj.strokeSettings.fillColor === '') {\n selFillElem.classList.add('e-nocolor-item');\n }\n else {\n selFillElem.classList.remove('e-nocolor-item');\n selFillElem.style.background = this.activeObj.strokeSettings.fillColor;\n }\n getComponent(this.element.id + '_shape_fill', 'colorpicker').value\n = this.activeObj.strokeSettings.fillColor + 'ff';\n }\n if (selStrokeElem) {\n selStrokeElem.style.background = this.activeObj.strokeSettings.strokeColor;\n getComponent(this.element.id + '_shape_stroke', 'colorpicker').value\n = this.activeObj.strokeSettings.strokeColor + 'ff';\n }\n if (selTextStrokeElem) {\n selTextStrokeElem.style.background = this.activeObj.strokeSettings.strokeColor;\n getComponent(this.element.id + '_text_font', 'colorpicker').value\n = this.activeObj.strokeSettings.strokeColor + 'ff';\n }\n if (selPenStrokeElem) {\n selPenStrokeElem.style.background = this.activeObj.strokeSettings.strokeColor;\n getComponent(this.element.id + '_pen_stroke', 'colorpicker').value\n = this.activeObj.strokeSettings.strokeColor + 'ff';\n }\n if (fontFamilyElem) {\n if (Browser.isDevice) {\n fontFamilyElem.setAttribute('style', 'font-family:' + this.activeObj.textSettings.fontFamily.toLowerCase());\n }\n else {\n fontFamilyElem.textContent = this.activeObj.textSettings.fontFamily;\n }\n }\n if (fontSizeElem) {\n for (var i = 0; i < this.fontSizeColl.length; i++) {\n if (parseInt(this.fontSizeColl[i].text, 10) >= Math.round(this.activeObj.textSettings.fontSize)) {\n fontSizeElem.textContent = (i + 1).toString();\n break;\n }\n }\n }\n if (fontStyleElem) {\n if (Browser.isDevice) {\n if (!this.activeObj.textSettings.bold && !this.activeObj.textSettings.italic) {\n fontStyleElem.setAttribute('style', '');\n }\n else if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n fontStyleElem.setAttribute('style', 'font-style: italic;font-weight: bold');\n }\n else if (this.activeObj.textSettings.bold) {\n fontStyleElem.setAttribute('style', 'font-weight: bold');\n }\n else {\n fontStyleElem.setAttribute('style', 'font-style: italic');\n }\n }\n else {\n if (!this.activeObj.textSettings.bold && !this.activeObj.textSettings.italic) {\n fontStyleElem.textContent = 'Default';\n }\n else if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n fontStyleElem.textContent = 'Bold Italic';\n }\n else if (this.activeObj.textSettings.bold) {\n fontStyleElem.textContent = 'Bold';\n }\n else {\n fontStyleElem.textContent = 'Italic';\n }\n }\n }\n if (strokeWidthElem) {\n var strokeWidth = Math.round((this.activeObj.strokeSettings.strokeWidth)).toString();\n strokeWidthElem.textContent = this.getStrokeWidth(strokeWidth);\n }\n };\n ImageEditor.prototype.setTimer = function (e) {\n if (!this.isTimer && this.timer > 10) {\n this.findTextPoint(e);\n if (Browser.isDevice) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n }\n };\n // eslint-disable-next-line\n ImageEditor.prototype.targetTouches = function (touches) {\n var p1 = { x: touches[0].pageX, y: touches[0].pageY };\n var p2 = { x: touches[1].pageX, y: touches[1].pageY };\n var points = [p1, p2];\n return points;\n };\n ImageEditor.prototype.calculateScale = function (startTouches, endTouches) {\n var startDistance = this.getDistance(startTouches[0], startTouches[1]);\n var endDistance = this.getDistance(endTouches[0], endTouches[1]);\n return endDistance / startDistance;\n };\n ImageEditor.prototype.getDistance = function (a, b) {\n var x = 0;\n var y = 0;\n if (!isNullOrUndefined(a) && !isNullOrUndefined(b)) {\n x = a.x - b.x;\n y = a.y - b.y;\n }\n return Math.sqrt(x * x + y * y);\n };\n ImageEditor.prototype.setXYPoints = function (e) {\n e.preventDefault();\n var x;\n var y;\n if (e.type === 'mousedown') {\n x = e.clientX;\n y = e.clientY;\n }\n else {\n this.touchEndPoint.x = x = e.touches[0].clientX;\n this.touchEndPoint.y = y = e.touches[0].clientY;\n }\n var bbox = this.lowerCanvas.getBoundingClientRect();\n x -= bbox.left;\n y -= bbox.top;\n return { x: x, y: y };\n };\n ImageEditor.prototype.touchStartHandler = function (e) {\n e.preventDefault();\n if (e.touches.length === 2) {\n this.isFirstMove = true;\n }\n else {\n this.timer = setTimeout(this.setTimer.bind(this), 1000, e);\n this.mouseDownEventHandler(e);\n }\n EventHandler.add(this.lowerCanvas, 'touchend', this.mouseUpEventHandler, this);\n EventHandler.add(this.lowerCanvas, 'touchmove', this.mouseMoveEventHandler, this);\n EventHandler.add(this.upperCanvas, 'touchend', this.mouseUpEventHandler, this);\n EventHandler.add(this.upperCanvas, 'touchmove', this.mouseMoveEventHandler, this);\n };\n ImageEditor.prototype.isShapeTouch = function (e, isCropSelection) {\n var isShape = false;\n if (e.type === 'touchstart') {\n this.redrawActObj();\n var points = this.setXYPoints(e);\n var x = points.x;\n var y = points.y;\n isShape = this.findTargetObj(x, y, isCropSelection);\n }\n return isShape;\n };\n ImageEditor.prototype.isFreehandDrawTouch = function (e, isCropSelection) {\n var isFreehandDraw = false;\n if (e.type === 'touchstart' && !isCropSelection) {\n this.redrawActObj();\n var points = this.setXYPoints(e);\n var x = points.x;\n var y = points.y;\n this.setCursor(x, y);\n if (this.isFreehandDrawingPoint) {\n isFreehandDraw = true;\n }\n }\n return isFreehandDraw;\n };\n ImageEditor.prototype.selectFreehandDraw = function (index) {\n this.isFreehandDrawEditing = true;\n if (!isNullOrUndefined(index) || index === 0) {\n if (this.isFreehandDrawIndex(index)) {\n this.freehandDrawSelectedIndex = this.freehandDrawHoveredIndex = index;\n this.hoverFreehandraw();\n this.upperCanvas.style.cursor = 'pointer';\n }\n else {\n return;\n }\n }\n this.freehandDrawSelectedIndex = this.freehandDrawHoveredIndex;\n this.pointColl[this.freehandDrawSelectedIndex].isSelected = true;\n if (this.pointColl[this.freehandDrawHoveredIndex].strokeColor !== '#42a5f5') {\n this.tempFreeHandDrawEditingStyles.strokeColor = this.pointColl[this.freehandDrawHoveredIndex].strokeColor;\n }\n this.tempFreeHandDrawEditingStyles.strokeWidth = this.pointColl[this.freehandDrawHoveredIndex].strokeWidth;\n if (this.isFreehandDrawEditing) {\n this.refreshToolbar('pen');\n }\n else {\n this.okBtn();\n }\n };\n ImageEditor.prototype.closeContextualToolbar = function () {\n var isContextualToolbar = false;\n if ((!isNullOrUndefined(this.element.querySelector('#' + this.element.id + '_contextualToolbar')) &&\n !this.element.querySelector('#' + this.element.id + '_contextualToolbar').parentElement.classList.contains('e-hide')) ||\n (!isNullOrUndefined(this.element.querySelector('#' + this.element.id + '_headWrapper'))\n && !this.element.querySelector('#' + this.element.id + '_headWrapper').parentElement.classList.contains('e-hide'))) {\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n this.okBtn();\n this.refreshToolbar('main');\n isContextualToolbar = true;\n }\n return isContextualToolbar;\n };\n ImageEditor.prototype.mouseDownEventHandler = function (e) {\n if (e.type === 'touchstart') {\n this.isTouch = true;\n }\n if (e.type === 'touchstart' && e.currentTarget === this.lowerCanvas && !this.isImageLoaded) {\n return;\n }\n var isCropSelection = false;\n var splitWords;\n var isPan = true;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if (isCropSelection) {\n this.dragCanvas = this.togglePan = true;\n }\n if (isCropSelection && this.dragCanvas) {\n var points = this.setXYPoints(e);\n var x = points.x;\n var y = points.y;\n this.setCursor(x, y);\n if (this.upperCanvas.style.cursor !== 'move' && this.upperCanvas.style.cursor !== 'crosshair' &&\n this.upperCanvas.style.cursor !== 'default' && this.upperCanvas.style.cursor !== 'grab') {\n isPan = false;\n }\n }\n var isShape = this.isShapeTouch(e, isCropSelection);\n var isFreehandDraw = this.isFreehandDrawTouch(e, isCropSelection);\n if (!isShape && !this.togglePen && !isCropSelection) {\n this.refreshToolbar('main');\n this.closeContextualToolbar();\n }\n if (this.dragCanvas && isPan && (this.upperCanvas.style.cursor === 'grab' || this.isTouch)\n && !isShape && !isFreehandDraw && !this.togglePen) {\n if (this.isFreehandDrawEditing) {\n this.applyFreehandDraw();\n }\n this.applyShape();\n this.canvasMouseDownHandler(e);\n }\n else {\n var points = this.setXYPoints(e);\n var x = points.x;\n var y = points.y;\n this.redrawActObj(x, y);\n if (this.isFreehandDrawingPoint || (this.isFreehandDrawCustomized && !this.togglePen)) {\n if (!isNullOrUndefined(this.freehandDrawSelectedIndex) &&\n this.freehandDrawSelectedIndex !== this.freehandDrawHoveredIndex) {\n var tempHoveredIndex = this.freehandDrawHoveredIndex;\n this.okBtn();\n this.isFreehandDrawCustomized = false;\n this.freehandDrawHoveredIndex = tempHoveredIndex;\n if (this.freehandDrawHoveredIndex > -1) {\n var strokeColor = this.pointColl[this.freehandDrawHoveredIndex].strokeColor === '#fff' ? '#42a5f5' : this.pointColl[this.freehandDrawHoveredIndex].strokeColor;\n this.hoverFreehandraw(strokeColor, this.pointColl[this.freehandDrawHoveredIndex].strokeWidth);\n }\n }\n if (!isNullOrUndefined(this.freehandDrawHoveredIndex) && this.freehandDrawHoveredIndex > -1) {\n this.selectFreehandDraw();\n }\n else if (this.freehandDrawSelectedIndex) {\n this.okBtn();\n var strokeColor = this.pointColl[this.freehandDrawSelectedIndex].strokeColor;\n this.hoverFreehandraw(strokeColor, this.pointColl[this.freehandDrawSelectedIndex].strokeWidth);\n }\n }\n else {\n if (this.isFreehandDrawEditing) {\n this.cancelFreehandDraw();\n }\n this.closeContextualToolbar();\n this.isFreehandDrawEditing = false;\n if (this.upperCanvas.style.cursor === 'crosshair' || (Browser.isDevice && this.togglePen)) {\n if (this.togglePen) {\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n if (isNullOrUndefined(this.penStrokeWidth)) {\n this.penStrokeWidth = 2;\n }\n this.upperContext.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n this.upperContext.fillStyle = this.activeObj.strokeSettings.strokeColor;\n this.freehandDownHandler(e, this.upperCanvas); // To handle Freehand drawing\n }\n else {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n this.currObjType.isActiveObj = false;\n this.dragElement = '';\n this.dragPoint.startX = this.dragPoint.startY = this.dragPoint.endX = this.dragPoint.endY = 0;\n }\n if ((this.upperCanvas.style.cursor !== 'crosshair' && e.type.toLowerCase() === 'touchstart') ||\n (this.currObjType.isActiveObj && this.upperCanvas.style.cursor !== 'default' && !this.togglePen)) {\n if (this.currObjType.isUndoAction) {\n this.refreshUndoRedoColl();\n }\n this.findTarget(x, y, e.type);\n }\n else if ((this.currObjType.shape === '' || this.currObjType.isCustomCrop) && !this.togglePen && this.upperCanvas.style.cursor !== 'default') {\n this.setActivePoint(x, y);\n }\n if (!isNullOrUndefined(this.activeObj)) {\n var isCropSelection_1 = false;\n var splitWords_1;\n if (this.activeObj.shape !== undefined) {\n splitWords_1 = this.activeObj.shape.split('-');\n }\n if (splitWords_1 === undefined && (this.currObjType.isCustomCrop || this.togglePen)) {\n isCropSelection_1 = true;\n }\n else if (splitWords_1 !== undefined && splitWords_1[0] === 'crop') {\n isCropSelection_1 = true;\n }\n if ((this.activeObj.shape === 'rectangle') || (this.activeObj.shape === 'ellipse')\n || (this.activeObj.shape === 'line')) {\n this.refreshToolbar('shapes');\n }\n else if (this.activeObj.shape === 'text') {\n this.refreshToolbar('text');\n }\n else if (!isCropSelection_1) {\n this.callMainToolbar();\n }\n this.updateToolbarItems();\n }\n }\n }\n this.isShapeInserted = false;\n this.tempActiveObj = extend({}, this.activeObj, {}, true);\n };\n ImageEditor.prototype.mouseMoveEventHandler = function (e) {\n e.preventDefault();\n if (e.type === 'touchmove' && e.touches.length === 2) {\n if (this.isFirstMove) {\n this.startTouches = this.targetTouches(e.touches);\n this.tempTouches = [];\n this.tempTouches.push({ x: e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft),\n y: e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop) });\n this.tempTouches.push({ x: e.touches[1].clientX || (e.touches[1].pageX - this.lowerCanvas.offsetLeft),\n y: e.touches[1].clientY || (e.touches[1].pageY - this.lowerCanvas.offsetTop) });\n }\n else {\n var firstFingerX = e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft);\n var firstFingerY = e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop);\n var secondFingerX = e.touches[1].clientX || (e.touches[1].pageX - this.lowerCanvas.offsetLeft);\n var secondFingerY = e.touches[1].clientY || (e.touches[1].pageY - this.lowerCanvas.offsetTop);\n var scale = this.calculateScale(this.startTouches, this.targetTouches(e.touches));\n // Need to set lastX and lastY points\n if (this.tempTouches[0].x !== firstFingerX && this.tempTouches[0].y !== firstFingerY &&\n this.tempTouches[1].x !== secondFingerX && this.tempTouches[1].y !== secondFingerY) {\n if (scale > 1) {\n this.zoom(1.1);\n }\n else {\n this.zoom(-1.1);\n }\n this.tempTouches = [];\n this.tempTouches.push({ x: e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft),\n y: e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop) });\n this.tempTouches.push({ x: e.touches[1].clientX || (e.touches[1].pageX - this.lowerCanvas.offsetLeft),\n y: e.touches[1].clientY || (e.touches[1].pageY - this.lowerCanvas.offsetTop) });\n }\n }\n this.isFirstMove = false;\n return;\n }\n if (this.textArea.style.display === 'none') {\n this.isTimer = true;\n }\n var x;\n var y;\n if (e.type === 'mousemove') {\n x = e.clientX;\n y = e.clientY;\n }\n else {\n this.touchEndPoint.x = x = e.touches[0].clientX;\n this.touchEndPoint.y = y = e.touches[0].clientY;\n }\n var bbox = this.lowerCanvas.getBoundingClientRect();\n x -= bbox.left;\n y -= bbox.top;\n this.canvasMouseMoveHandler(e);\n var isCropSelection = false;\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if (isCropSelection && this.zoomFactor > 0) {\n this.disableZoomOutBtn();\n }\n if (this.currObjType.isActiveObj && (this.activeObj.activePoint !== undefined || this.objColl.length > 0) &&\n !this.dragCanvas || this.activeObj.activePoint !== undefined) {\n if (this.dragElement === '') {\n this.setCursor(x, y);\n if ((!isNullOrUndefined(this.activeObj.activePoint) && this.activeObj.activePoint.width === 0) && this.upperCanvas.style.cursor !== 'default' &&\n this.upperCanvas.style.cursor !== 'move' && this.upperCanvas.style.cursor !== 'crosshair'\n && this.upperCanvas.style.cursor !== 'grab' && this.upperCanvas.style.cursor !== 'pointer') {\n this.upperCanvas.style.cursor = 'move';\n }\n this.findTarget(x, y, e.type);\n }\n }\n if (this.currObjType.isDragging) {\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.updateActivePoint(x, y, isCropSelection);\n if (this.isPreventDragging) {\n if ((this.activeObj.activePoint.startX > this.destLeft) &&\n (this.activeObj.activePoint.endX < this.destLeft + this.destWidth) && (this.activeObj.activePoint.startY > this.destTop)\n && (this.activeObj.activePoint.endY < this.destTop + this.destHeight)) {\n this.isPreventDragging = false;\n }\n this.drawObject('duplicate', null, null, null, true);\n }\n else {\n this.drawObject('duplicate');\n }\n if (isCropSelection) {\n this.dragCanvas = this.togglePan = true;\n }\n }\n };\n ImageEditor.prototype.mouseUpEventHandler = function (e) {\n if (e.type === 'touchstart') {\n this.isTouch = false;\n }\n e.preventDefault();\n if (this.togglePan) {\n this.canvasMouseUpHandler(e);\n }\n var x;\n var y;\n if (e.type === 'mouseup') {\n x = e.clientX;\n y = e.clientY;\n }\n else {\n x = this.touchEndPoint.x;\n y = this.touchEndPoint.y;\n }\n var bbox = this.lowerCanvas.getBoundingClientRect();\n x -= bbox.left;\n y -= bbox.top;\n if (e.type === 'touchend') {\n this.startTouches = this.tempTouches = [];\n this.isFirstMove = false;\n if (this.textArea.style.display === 'none') {\n this.isTimer = false;\n this.timer = 0;\n }\n }\n var isCropSelection = false;\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if (e.currentTarget === this.upperCanvas) {\n this.currObjType.shape = this.currObjType.shape.toLowerCase();\n if (!this.togglePen && !this.dragCanvas) {\n if (!isNullOrUndefined(this.tempObjColl) && this.activeObj.activePoint.width !== 0) {\n this.objColl.push(this.activeObj);\n if (JSON.stringify(this.activeObj.activePoint) !== JSON.stringify(this.tempActiveObj.activePoint)) {\n this.undoRedoColl.push({ operation: 'shapeTransform', value: null,\n currentObj: extend([], this.objColl, [], true),\n previousObj: this.tempObjColl, zoomFactor: this.zoomFactor,\n sharpen: this.adjustmentLevel.sharpen, bw: this.adjustmentLevel.bw });\n this.undoRedoStep++;\n }\n this.redrawShape(this.objColl[this.objColl.length - 1]);\n this.tempObjColl = undefined;\n }\n if (!this.isFreehandDrawEditing) {\n this.applyCurrActObj(x, y);\n }\n }\n else if (isCropSelection && !this.togglePen) {\n if (JSON.stringify(this.activeObj.activePoint) !== JSON.stringify(this.tempActiveObj.activePoint)) {\n this.undoRedoColl.push({ operation: 'selectionTransform', value: null,\n currentObj: extend([], this.objColl, [], true),\n previousObj: this.objColl, zoomFactor: this.zoomFactor,\n currentSelectionObj: extend([], this.activeObj, {}, true),\n previousSelectionObj: extend([], this.tempActiveObj, {}, true),\n sharpen: this.adjustmentLevel.sharpen, bw: this.adjustmentLevel.bw });\n this.undoRedoStep++;\n }\n }\n }\n if (this.togglePen && e.currentTarget === this.upperCanvas) {\n this.freehandUpHandler(e, this.upperCanvas, this.upperContext);\n }\n else {\n this.currObjType.shape = '';\n }\n this.dragElement = '';\n this.currObjType.isInitialLine = this.currObjType.isDragging = false;\n this.oldPoint.x = undefined;\n this.oldPoint.y = undefined;\n };\n ImageEditor.prototype.keyDownEventHandler = function (e) {\n var _this = this;\n var shapeChangingArgs = {};\n var previousShapeSettings = {};\n var beforeSave = { fileName: this.fileName, fileType: this.fileType, cancel: false };\n var splitWords;\n switch (e.key) {\n case (e.ctrlKey && 's'):\n this.trigger('beforeSave', beforeSave, function (observableSaveArgs) {\n if (!beforeSave.cancel) {\n _this.export(observableSaveArgs.fileType, observableSaveArgs.fileName);\n }\n });\n e.preventDefault();\n e.stopImmediatePropagation();\n break;\n case (e.ctrlKey && 'z'):\n if (this.allowUndoRedo) {\n this.callUndo();\n }\n break;\n case (e.ctrlKey && 'y'):\n if (this.allowUndoRedo) {\n this.callRedo();\n }\n break;\n case 'Delete':\n if (this.isFreehandDrawEditing) {\n this.updateFreehandDrawColorChange();\n // eslint-disable-next-line\n var previousObj = extend([], this.pointColl, [], true);\n this.deleteFreehandDraw(this.freehandDrawHoveredIndex);\n this.updateUndoRedoColl('delete', 'freehanddraw', previousObj, this.pointColl, this.zoomFactor);\n }\n else if (this.textArea.style.display === 'none') {\n this.objColl.push(this.activeObj);\n var previousObj = extend([], this.objColl, [], true);\n this.objColl.pop();\n previousShapeSettings = this.updatePreviousShapeSettings();\n shapeChangingArgs = { action: 'delete', previousShapeSettings: previousShapeSettings, currentShapeSettings: null };\n this.keyHistory = '';\n this.clearSelection();\n this.trigger('shapeChanging', shapeChangingArgs);\n this.refreshToolbar('main');\n this.updateUndoRedoColl('delete', 'shape', previousObj, this.objColl, this.zoomFactor);\n }\n break;\n case 'Escape':\n if (this.togglePan) {\n this.refreshToolbar(this.currentToolbar);\n this.pan(false);\n }\n else if (this.textArea.style.display === 'block') {\n this.redrawActObj();\n }\n else {\n this.performCancel();\n }\n break;\n case 'Enter':\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.activeObj.horTopLine !== undefined && (this.activeObj.shape !== undefined && splitWords[0] === 'crop')) {\n this.crop();\n }\n break;\n default:\n if (Browser.isDevice && this.textArea.style.display === 'block') {\n setTimeout(this.textKeyDown.bind(this), 1, e);\n }\n break;\n }\n };\n ImageEditor.prototype.keyUpEventHandler = function (e) {\n // eslint-disable-next-line\n if (this.textArea.style.display === 'block' && e.target.id === this.element.id + '_textArea') {\n setTimeout(this.textKeyDown.bind(this), 1, e);\n }\n };\n ImageEditor.prototype.canvasMouseDownHandler = function (e) {\n e.preventDefault();\n var x;\n var y;\n if (e.type === 'mousedown') {\n x = e.offsetX || (e.pageX - this.lowerCanvas.offsetLeft);\n y = e.offsetY || (e.pageY - this.lowerCanvas.offsetTop);\n }\n else {\n x = e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft);\n y = e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop);\n }\n var bbox = this.lowerCanvas.getBoundingClientRect();\n x -= bbox.left;\n y -= bbox.top;\n this.panDown = { x: x, y: y };\n this.lastPan = { x: this.destLeft, y: this.destTop };\n if (isNullOrUndefined(this.tempPanMove)) {\n this.tempPanMove = { x: x, y: y };\n }\n };\n ImageEditor.prototype.canvasMouseMoveHandler = function (e) {\n if (this.dragCanvas) {\n this.lowerCanvas.style.cursor = 'grab';\n }\n else {\n this.dragCanvas = this.togglePan = false;\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'default';\n }\n var x;\n var y;\n if (e.type === 'mousemove') {\n x = e.offsetX || (e.pageX - this.lowerCanvas.offsetLeft);\n y = e.offsetY || (e.pageY - this.lowerCanvas.offsetTop);\n }\n else {\n x = e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft);\n y = e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop);\n }\n var bbox = this.lowerCanvas.getBoundingClientRect();\n x -= bbox.left;\n y -= bbox.top;\n this.panMove = { x: x, y: y };\n if (this.panDown && this.panMove && this.togglePan && this.dragCanvas) {\n this.drawPannedImage();\n }\n };\n ImageEditor.prototype.canvasMouseUpHandler = function (e) {\n e.preventDefault();\n if (this.togglePan) {\n if (this.panDown && this.panMove && this.togglePan && this.dragCanvas) {\n this.panDown = null;\n this.panMove = null;\n this.tempPanMove = null;\n this.updateUndoRedoColl('pan', null, { x: this.lastPan.x, y: this.lastPan.y }, { x: this.destLeft, y: this.destTop });\n }\n }\n this.currObjType.isDragging = false;\n };\n ImageEditor.prototype.handleScroll = function (e) {\n var x;\n var y;\n var isInsideCanvas = false;\n if (e.type === 'mousewheel') {\n // eslint-disable-next-line\n x = e.clientX;\n y = e.clientY;\n }\n var bbox = this.lowerCanvas.getBoundingClientRect();\n x -= bbox.left;\n y -= bbox.top;\n if (x > this.destLeft && x < this.destLeft + this.destWidth && y > this.destTop && y < this.destTop + this.destHeight) {\n isInsideCanvas = true;\n }\n if (e.ctrlKey === true && isInsideCanvas) {\n e.preventDefault();\n }\n };\n ImageEditor.prototype.textKeyDown = function (e) {\n if (String.fromCharCode(e.which) === '\\r') {\n this.textRow += 1;\n }\n this.textArea.setAttribute('rows', this.textRow.toString());\n this.textArea.style.height = 'auto';\n this.textArea.style.height = this.textArea.scrollHeight + 'px';\n this.setTextBoxWidth(e);\n if (Browser.isDevice) {\n this.textArea.style.width = parseFloat(this.textArea.style.width) + this.textArea.style.fontSize + 'px';\n }\n var rows = this.textArea.value.split('\\n');\n this.textRow = rows.length;\n this.textArea.setAttribute('rows', this.textRow.toString());\n };\n ImageEditor.prototype.adjustToScreen = function () {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (!this.element.querySelector('#' + this.element.id + '_contextualToolbar').parentElement.classList.contains('e-hide') ||\n (!isNullOrUndefined(this.element.querySelector('#' + this.element.id + '_headWrapper'))\n && !this.element.querySelector('#' + this.element.id + '_headWrapper').parentElement.classList.contains('e-hide'))) {\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n this.okBtn();\n this.refreshToolbar('main');\n }\n var splitWords;\n var isSelectionCrop = false;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords !== undefined && splitWords[0] === 'crop') {\n isSelectionCrop = true;\n this.updateImageRatioForActObj();\n this.objColl.push(this.activeObj);\n this.refreshActiveObj();\n }\n if (this.textArea.style.display === 'block') {\n this.redrawActObj();\n }\n var tempFilter = this.lowerContext.filter;\n this.update();\n this.applyActObj();\n this.refreshActiveObj();\n this.lowerContext.filter = this.initialAdjustmentValue = tempFilter;\n if (this.isImageLoaded) {\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n }\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n var canvasWrapper = document.querySelector('#' + this.element.id + '_canvasWrapper');\n if (!isNullOrUndefined(canvasWrapper)) {\n canvasWrapper.style.width = this.element.offsetWidth + 'px';\n canvasWrapper.style.height = this.element.offsetHeight + 'px';\n if (Browser.isDevice) {\n canvasWrapper.style.height = (parseFloat(canvasWrapper.style.height) - (2 * this.toolbarHeight)) - 3 + 'px';\n }\n else {\n canvasWrapper.style.height = (parseFloat(canvasWrapper.style.height) - this.toolbarHeight) - 3 + 'px';\n }\n }\n var maxDimension = this.calcMaxDimension(this.srcWidth, this.srcHeight);\n if (this.defaultZoomFactor > 0) {\n maxDimension.width += (maxDimension.width * this.defaultZoomFactor);\n maxDimension.height += (maxDimension.height * this.defaultZoomFactor);\n }\n this.destLeft = (this.lowerCanvas.clientWidth - maxDimension.width) / 2;\n this.destTop = (this.lowerCanvas.clientHeight - maxDimension.height) / 2;\n if (this.degree === 0 && this.currFlipState === '') {\n if (this.defaultZoomFactor > 0) {\n this.destLeft += this.totalPannedPoint.x;\n this.destTop += this.totalPannedPoint.y;\n }\n this.drawImgToCanvas(maxDimension);\n }\n else {\n this.drawImgToCanvas(maxDimension);\n this.updateCurrentTransformedState('initial');\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.baseImg, this.srcLeft, this.srcTop, this.srcWidth, this.srcHeight, this.destLeft, this.destTop, this.destWidth, this.destHeight);\n this.lowerContext.filter = temp;\n this.updateCurrentTransformedState('reverse');\n }\n this.zoomObjColl();\n this.zoomFreehandDrawColl();\n if (this.isCircleCrop) {\n this.cropCircle(this.lowerContext);\n }\n hideSpinner(this.element);\n this.element.style.opacity = '1';\n if (this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_10 = getComponent(proxy.element.id + '_toolbar', 'toolbar');\n toolbar_10.refreshOverflow();\n if (!isNullOrUndefined(this.element.querySelector('.e-contextual-toolbar-wrapper'))) {\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n }\n }\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n if (isSelectionCrop) {\n this.activeObj = extend({}, this.objColl[this.objColl.length - 1], null, true);\n this.objColl.pop();\n this.drawObject('duplicate', this.activeObj);\n }\n if ((this.degree !== 0 || this.currFlipState !== '') && this.defaultZoomFactor > 0) {\n var totalPannedPoint = extend({}, this.totalPannedPoint, null, true);\n var totalPannedInternalPoint = extend({}, this.totalPannedInternalPoint, null, true);\n var totalPannedClientPoint = extend({}, this.totalPannedClientPoint, null, true);\n this.zoom(.1);\n this.zoom(-.1);\n if (this.degree === 0) {\n this.destLeft += totalPannedPoint.x;\n this.destTop += totalPannedPoint.y;\n this.totalPannedPoint = totalPannedPoint;\n this.updateFlipPan();\n }\n else {\n this.totalPannedInternalPoint = totalPannedInternalPoint;\n this.totalPannedClientPoint = totalPannedClientPoint;\n this.currentPannedPoint = { x: 0, y: 0 };\n this.isCropTab = true;\n this.rotatePan();\n this.isCropTab = false;\n }\n }\n else if (this.degree !== 0 && this.cropZoomFactor > 0) {\n this.zoomFactor = this.cropZoomFactor = 0;\n this.enableDisableToolbarBtn();\n }\n };\n ImageEditor.prototype.screenOrientation = function () {\n if (Browser.isDevice) {\n setTimeout(this.adjustToScreen.bind(this), 100);\n }\n };\n ImageEditor.prototype.windowResizeHandler = function () {\n if (!Browser.isDevice) {\n this.adjustToScreen();\n }\n };\n ImageEditor.prototype.updatePreviousShapeSettings = function () {\n var fontStyle = [];\n if (this.activeObj.shape === 'text' && !isNullOrUndefined(this.activeObj.textSettings)) {\n if (this.activeObj.textSettings.bold) {\n fontStyle.push('bold');\n }\n if (this.activeObj.textSettings.italic) {\n fontStyle.push('italic');\n }\n if (this.activeObj.textSettings.underline) {\n fontStyle.push('underline');\n }\n }\n return { id: !isNullOrUndefined(this.activeObj.currIndex) ? this.activeObj.currIndex : null,\n type: this.toPascalCase(this.activeObj.shape),\n startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n width: this.activeObj.activePoint.width, height: this.activeObj.activePoint.height,\n strokeColor: !isNullOrUndefined(this.activeObj.strokeSettings) ? this.activeObj.strokeSettings.strokeColor : null,\n strokeWidth: !isNullOrUndefined(this.activeObj.strokeSettings) ? this.activeObj.strokeSettings.strokeWidth : null,\n fillColor: !isNullOrUndefined(this.activeObj.strokeSettings) ? this.activeObj.strokeSettings.fillColor : null,\n radius: this.activeObj.shape === 'ellipse' ? this.activeObj.activePoint.width / 2 : null,\n length: this.activeObj.shape === 'line' ? this.activeObj.activePoint.width : null,\n text: this.activeObj.shape === 'text' ? (!isNullOrUndefined(this.activeObj.keyHistory) ? this.activeObj.keyHistory : null) : null,\n fontSize: this.activeObj.shape === 'text' ? (!isNullOrUndefined(this.activeObj.textSettings) ? this.activeObj.textSettings.fontSize : null) : null,\n fontStyle: this.activeObj.shape === 'text' ? fontStyle : null,\n color: this.activeObj.shape === 'text' ? (!isNullOrUndefined(this.activeObj.strokeSettings) ? this.activeObj.strokeSettings.strokeColor : null) : null\n };\n };\n ImageEditor.prototype.disableZoomOutBtn = function () {\n var isDisabled = false;\n var zoomOut = document.querySelector('#' + this.element.id + '_zoomOut');\n var destLeft = this.destLeft;\n var destTop = this.destTop;\n var destWidth = this.destWidth;\n var destHeight = this.destHeight;\n if (this.degree === 0 || this.degree === 180) {\n if (!isNullOrUndefined(this.activeObj.shape)) {\n this.setZoomDimension(-0.1, this.activeObj);\n if (this.destLeft > this.activeObj.activePoint.startX || this.destTop > this.activeObj.activePoint.startY ||\n this.destLeft + this.destWidth < this.activeObj.activePoint.endX || this.destTop + this.destHeight <\n this.activeObj.activePoint.endY) {\n zoomOut.classList.add('e-disabled');\n zoomOut.parentElement.classList.add('e-overlay');\n isDisabled = true;\n }\n else {\n zoomOut.classList.remove('e-disabled');\n zoomOut.parentElement.classList.remove('e-overlay');\n isDisabled = false;\n }\n }\n else {\n this.setZoomDimension(-0.1, null);\n }\n }\n this.destLeft = destLeft;\n this.destTop = destTop;\n this.destWidth = destWidth;\n this.destHeight = destHeight;\n return isDisabled;\n };\n ImageEditor.prototype.setZoomDimension = function (value, selectionObj) {\n var maxDimension = { width: 0, height: 0 };\n if (this.degree % 90 === 0 && this.degree % 180 !== 0) {\n maxDimension = this.calcMaxDimension(this.srcHeight, this.srcWidth);\n }\n else {\n maxDimension = this.calcMaxDimension(this.srcWidth, this.srcHeight);\n }\n maxDimension.width += (maxDimension.width * this.zoomFactor);\n maxDimension.height += (maxDimension.height * this.zoomFactor);\n this.destLeft += ((this.destWidth - maxDimension.width) / 2);\n this.destTop += ((this.destHeight - maxDimension.height) / 2);\n // While zoom out limit image to draw inside the selection range\n if (value < 0 && !isNullOrUndefined(selectionObj)) {\n if (this.destLeft > selectionObj.activePoint.startX) {\n this.destLeft = selectionObj.activePoint.startX;\n }\n if (this.destTop > selectionObj.activePoint.startY) {\n this.destTop = selectionObj.activePoint.startY;\n }\n if (this.destLeft + maxDimension.width < selectionObj.activePoint.startX + selectionObj.activePoint.width) {\n this.destLeft = this.destLeft + (selectionObj.activePoint.startX + selectionObj.activePoint.width) -\n (this.destLeft + maxDimension.width);\n }\n if (this.destTop + maxDimension.height < selectionObj.activePoint.startY + selectionObj.activePoint.height) {\n this.destTop = this.destTop + (selectionObj.activePoint.startY + selectionObj.activePoint.height) -\n (this.destTop + maxDimension.height);\n }\n }\n else if (value < 0 && isNullOrUndefined(selectionObj)) {\n if (this.destLeft > 0) {\n this.destLeft = 0;\n }\n if (this.destTop > 0) {\n this.destTop = 0;\n }\n if (this.destLeft + maxDimension.width < this.lowerCanvas.width) {\n this.destLeft = this.lowerCanvas.width - this.destWidth;\n }\n if (this.destTop + maxDimension.height < this.lowerCanvas.height) {\n this.destTop = this.lowerCanvas.height - this.destHeight;\n }\n }\n return maxDimension;\n };\n ImageEditor.prototype.applyCurrActObj = function (x, y) {\n var isInside = false;\n var actObj = extend({}, this.activeObj, {}, true);\n if (isNullOrUndefined(actObj.activePoint)) {\n return;\n }\n if ((x >= Math.floor(actObj.activePoint.startX) && x <= Math.ceil(actObj.activePoint.endX) &&\n y >= Math.floor(actObj.activePoint.startY) && y <= Math.ceil(actObj.activePoint.endY))) {\n isInside = true;\n }\n if (!isInside) {\n this.updateImageRatioForActObj();\n if (this.activeObj.horTopLine !== undefined && this.activeObj.horTopLine.startX !== 0 && this.activeObj.horTopLine.endX !== 0\n && !this.currObjType.isCustomCrop && this.currObjType.shape !== '') {\n this.objColl.push(extend({}, this.activeObj, {}, true));\n }\n if (this.activeObj.shape === 'text' || (this.currObjType.shape === 'ellipse' || this.currObjType.shape === 'rectangle' ||\n this.currObjType.shape === 'line')) {\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = this.getDefaultFilter();\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.isObjInsideCropRegion(this.objColl[i])) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n }\n this.zoomFreehandDrawColl();\n this.lowerContext.filter = tempFilter;\n this.apply('shape');\n this.clearOuterCanvas(this.lowerContext);\n this.clearOuterCanvas(this.upperContext);\n if (this.isCircleCrop) {\n this.cropCircle(this.lowerContext);\n }\n }\n this.refreshToolbar('main');\n }\n };\n ImageEditor.prototype.updateTextFromTextArea = function () {\n if (this.activeObj.keyHistory !== this.textArea.value) {\n this.updateUndoRedoColl('text', this.objColl, this.activeObj.keyHistory, this.textArea.value, this.zoomFactor, this.adjustmentLevel.sharpen, this.adjustmentLevel.bw);\n }\n this.activeObj.keyHistory = this.textArea.value;\n this.textArea.style.display = 'none';\n this.textArea.value = '';\n this.updateFontStyles();\n var width = this.upperContext.measureText(this.activeObj.keyHistory).width +\n this.activeObj.textSettings.fontSize * 0.5;\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n var rows = this.activeObj.keyHistory.split('\\n');\n if (rows.length > 1) {\n height *= rows.length;\n var widthColl = [];\n for (var i = 0; i < rows.length; i++) {\n widthColl.push(this.upperContext.measureText(rows[i]).width +\n this.activeObj.textSettings.fontSize * 0.5);\n }\n width = Math.max.apply(Math, widthColl);\n }\n this.setTextSelection(width, height);\n this.updateActiveObject(this.activeObj.activePoint, this.activeObj);\n this.updateImageRatioForActObj();\n };\n ImageEditor.prototype.setTextBoxStylesToActObj = function () {\n this.activeObj.textSettings.fontFamily = this.textArea.style.fontFamily;\n this.activeObj.strokeSettings.strokeColor = this.textArea.style.color;\n if (this.textArea.style.fontWeight === 'bold') {\n this.activeObj.textSettings.bold = true;\n }\n else {\n this.activeObj.textSettings.bold = false;\n }\n if (this.textArea.style.fontStyle === 'italic') {\n this.activeObj.textSettings.italic = true;\n }\n else {\n this.activeObj.textSettings.italic = false;\n }\n this.activeObj.textSettings.fontSize = (parseFloat(this.textArea.style.fontSize));\n };\n ImageEditor.prototype.redrawActObj = function (x, y) {\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.activeObj.horTopLine !== undefined && (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n if (this.textArea.style.display === 'block') {\n this.setTextBoxStylesToActObj();\n this.updateFontRatio(this.activeObj, true);\n if (x && y) {\n if ((x !== this.activeObj.activePoint.startX) && (y !== this.activeObj.activePoint.startY)) {\n this.updateTextFromTextArea();\n this.applyActObj();\n }\n }\n else {\n this.updateTextFromTextArea();\n this.apply(this.activeObj.shape, this.activeObj);\n this.objColl.push(this.activeObj);\n this.refreshActiveObj();\n this.textArea.style.transform = '';\n this.refreshToolbar('main');\n }\n }\n else {\n this.applyActObj();\n }\n }\n };\n ImageEditor.prototype.setTextBoxPos = function (actObj, degree, flip, x, y) {\n var point = { x: x, y: y };\n if (degree === 0) {\n if (flip.toLowerCase() === 'horizontal') {\n point.x = actObj.activePoint.endX;\n point.y = actObj.activePoint.startY;\n }\n else if (flip.toLowerCase() === 'vertical') {\n point.x = actObj.activePoint.startX;\n point.y = actObj.activePoint.endY;\n }\n else {\n point.x = actObj.activePoint.startX;\n point.y = actObj.activePoint.startY;\n }\n }\n else if (degree === 90) {\n if (flip.toLowerCase() === 'horizontal') {\n point.x = actObj.activePoint.startX;\n point.y = actObj.activePoint.startY;\n }\n else if (flip.toLowerCase() === 'vertical') {\n point.x = actObj.activePoint.endX;\n point.y = actObj.activePoint.endY;\n }\n else {\n point.x = actObj.activePoint.endX;\n point.y = actObj.activePoint.startY;\n }\n }\n else if (degree === 180) {\n if (flip.toLowerCase() === 'horizontal') {\n point.x = actObj.activePoint.startX;\n point.y = actObj.activePoint.endY;\n }\n else if (flip.toLowerCase() === 'vertical') {\n point.x = actObj.activePoint.endX;\n point.y = actObj.activePoint.startY;\n }\n else {\n point.x = actObj.activePoint.endX;\n point.y = actObj.activePoint.endY;\n }\n }\n else if (degree === 270) {\n if (flip.toLowerCase() === 'horizontal') {\n point.x = actObj.activePoint.endX;\n point.y = actObj.activePoint.endY;\n }\n else if (flip.toLowerCase() === 'vertical') {\n point.x = actObj.activePoint.startX;\n point.y = actObj.activePoint.startY;\n }\n else {\n point.x = actObj.activePoint.startX;\n point.y = actObj.activePoint.endY;\n }\n }\n return point;\n };\n ImageEditor.prototype.setTextBoxPoints = function (actObj, degree, flip, x, y) {\n var point = { x: x, y: y };\n if (degree === 0) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n point.x = (actObj.activePoint.startX);\n point.y = (actObj.activePoint.startY);\n }\n else if (flip.toLowerCase() === 'vertical') {\n point.x = (actObj.activePoint.endX);\n point.y = (actObj.activePoint.endY);\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n point.x = (actObj.activePoint.endX);\n point.y = (actObj.activePoint.endY);\n }\n else if (flip.toLowerCase() === 'vertical') {\n point.x = (actObj.activePoint.endX);\n point.y = (actObj.activePoint.startY);\n }\n }\n }\n else if (degree === 90) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n point.x = (actObj.activePoint.endX);\n point.y = (actObj.activePoint.endY);\n }\n else if (flip.toLowerCase() === 'vertical') {\n point.x = (actObj.activePoint.startX);\n point.y = (actObj.activePoint.endY);\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n point.x = (actObj.activePoint.startX);\n point.y = (actObj.activePoint.endY);\n }\n else if (flip.toLowerCase() === 'vertical') {\n point.x = (actObj.activePoint.startX);\n point.y = (actObj.activePoint.startY);\n }\n }\n }\n else if (degree === 180) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n point.x = (actObj.activePoint.startX);\n point.y = (actObj.activePoint.startY);\n }\n else if (flip.toLowerCase() === 'vertical') {\n point.x = (actObj.activePoint.startX);\n point.y = (actObj.activePoint.startY);\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n point.x = (actObj.activePoint.startX);\n point.y = (actObj.activePoint.startY);\n }\n else if (flip.toLowerCase() === 'vertical') {\n point.x = (actObj.activePoint.startX);\n point.y = (actObj.activePoint.endY);\n }\n }\n }\n else if (degree === 270) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n point.x = (actObj.activePoint.startX);\n point.y = (actObj.activePoint.startY);\n }\n else if (flip.toLowerCase() === 'vertical') {\n point.x = (actObj.activePoint.endX);\n point.y = (actObj.activePoint.startY);\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n point.x = (actObj.activePoint.endX);\n point.y = (actObj.activePoint.startY);\n }\n else if (flip.toLowerCase() === 'vertical') {\n point.x = (actObj.activePoint.endX);\n point.y = (actObj.activePoint.endY);\n }\n }\n }\n return point;\n };\n ImageEditor.prototype.findTextTarget = function (e) {\n var x;\n var y;\n if (e.type === 'dblclick') {\n x = e.clientX;\n y = e.clientY;\n }\n else if (e.type === 'touchstart') {\n this.touchEndPoint.x = x = e.touches[0].clientX;\n this.touchEndPoint.y = y = e.touches[0].clientY;\n }\n this.preventZoomBtn = true;\n this.refreshToolbar('text');\n this.preventZoomBtn = false;\n this.updateToolbarItems();\n if (!isNullOrUndefined(x) && !isNullOrUndefined(y)) {\n var bbox = this.lowerCanvas.getBoundingClientRect();\n x -= bbox.left;\n y -= bbox.top;\n var degree = void 0;\n var flip = '';\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (this.activeObj.textFlip === '') {\n if (this.activeObj.textFlip === this.currFlipState) {\n flip = '';\n }\n else {\n flip = this.currFlipState;\n }\n }\n else {\n if (this.activeObj.textFlip === this.currFlipState) {\n flip = '';\n }\n else if (this.currFlipState === '') {\n flip = this.activeObj.textFlip;\n }\n else {\n flip = this.currFlipState;\n }\n }\n var temp = void 0;\n if (this.textArea.style.display === 'none') {\n temp = extend({}, this.activeObj, {}, true);\n for (var i = 0; i < this.objColl.length; i++) {\n if (JSON.stringify(this.activeObj) === JSON.stringify(this.objColl[i])) {\n this.objColl.splice(i, 1);\n }\n }\n this.refreshActiveObj();\n this.lowerContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.redrawImgWithObj();\n //this.zoomFreehandDrawColl();\n if ((!isNullOrUndefined(this.currSelectionPoint) && this.currSelectionPoint.shape === 'crop-circle') || this.isCircleCrop) {\n this.cropCircle(this.lowerContext);\n }\n this.activeObj = temp;\n this.updateFontStyles();\n var actObj = extend({}, this.activeObj, {}, true);\n if (x >= (actObj.activePoint.startX - (actObj.topLeftCircle.radius * 2)) &&\n x <= (actObj.activePoint.endX + (actObj.topLeftCircle.radius * 2)) &&\n y >= (actObj.activePoint.startY - (actObj.topLeftCircle.radius * 2)) &&\n y <= (actObj.activePoint.endY + (actObj.topLeftCircle.radius * 2))) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n if (actObj.flipObjColl.length === 4) {\n actObj.flipObjColl = [];\n flip = '';\n }\n if (flip === '' && actObj.flipObjColl.length > 1) {\n flip = actObj.flipObjColl[actObj.flipObjColl.length - 1];\n }\n if (actObj.flipObjColl.length <= 1) {\n var points = this.setTextBoxPos(actObj, degree, flip, x, y);\n x = points.x;\n y = points.y;\n }\n else {\n var points = this.setTextBoxPoints(actObj, degree, flip, x, y);\n x = points.x;\n y = points.y;\n }\n this.textArea.style.display = 'block';\n this.textArea.style.left = x + 'px';\n this.textArea.style.top = y + 'px';\n this.textArea.style.fontFamily = actObj.textSettings.fontFamily;\n this.textArea.style.fontSize = actObj.textSettings.fontSize + 'px';\n this.textArea.style.color = actObj.strokeSettings.strokeColor;\n this.textArea.style.fontWeight = actObj.textSettings.bold ? 'bold' : 'normal';\n this.textArea.style.fontStyle = actObj.textSettings.italic ? 'italic' : 'normal';\n this.textArea.style.border = '2px solid ' + this.themeColl[this.theme]['primaryColor'];\n this.textArea.value = actObj.keyHistory;\n this.textArea.style.overflow = 'hidden';\n this.textArea.style.height = 'auto';\n this.textArea.focus();\n if (degree % 90 === 0 && degree % 180 !== 0 && degree !== 0) {\n if (this.zoomFactor === 0) {\n this.textArea.style.width = (actObj.activePoint.height) + 'px';\n this.textArea.style.height = (actObj.activePoint.width) + 'px';\n }\n else {\n this.textArea.style.width = actObj.activePoint.height + 'px';\n this.textArea.style.height = actObj.activePoint.width + 'px';\n }\n }\n else {\n if (this.zoomFactor === 0) {\n this.textArea.style.width = (actObj.activePoint.width) + 'px';\n this.textArea.style.height = (actObj.activePoint.height) + 'px';\n }\n else {\n this.textArea.style.width = actObj.activePoint.width + 'px';\n this.textArea.style.height = actObj.activePoint.height + 'px';\n }\n }\n this.setTextBoxWidth();\n if (this.flipColl.length <= 1) {\n this.setTextBoxHeight();\n }\n }\n else {\n this.applyActObj();\n }\n }\n }\n else if (this.textArea.style.display === 'block' && this.selectedText() !== '' && e.type === 'mousedown') {\n var temp = this.textArea.value;\n this.textArea.value += 'a';\n this.textArea.value = temp;\n }\n };\n ImageEditor.prototype.selectedText = function () {\n var start = this.textArea.selectionStart;\n var finish = this.textArea.selectionEnd;\n return this.textArea.value.substring(start, finish);\n };\n ImageEditor.prototype.setTextBoxHeight = function () {\n var textAreaTop;\n var degree;\n var flip = '';\n var actObj = extend({}, this.activeObj, {}, true);\n if (actObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - actObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (actObj.textFlip === '') {\n if (actObj.textFlip === this.currFlipState) {\n flip = '';\n }\n else {\n flip = this.currFlipState;\n }\n }\n else {\n if (actObj.textFlip === this.currFlipState) {\n flip = '';\n }\n else if (this.currFlipState === '') {\n flip = actObj.textFlip;\n }\n else {\n flip = this.currFlipState;\n }\n }\n if (degree === 0) {\n if (flip.toLowerCase() === 'vertical') {\n this.textArea.style.maxHeight = (this.destHeight - (this.destHeight\n - parseFloat(this.textArea.style.top))) + 'px';\n }\n else {\n textAreaTop = parseFloat(this.textArea.style.top) - this.destTop;\n this.textArea.style.maxHeight = (this.destHeight - textAreaTop) + 'px';\n }\n }\n else if (degree === 90) {\n if (flip.toLowerCase() === 'horizontal') {\n this.textArea.style.maxHeight = (this.destWidth - (parseFloat(this.textArea.style.left)\n - this.destLeft)) + 'px';\n }\n else {\n this.textArea.style.maxHeight = (parseFloat(this.textArea.style.left)\n - this.destLeft) + 'px';\n }\n }\n else if (degree === 180) {\n if (flip.toLowerCase() === 'vertical') {\n textAreaTop = parseFloat(this.textArea.style.top) - this.destTop;\n this.textArea.style.maxHeight = (this.destHeight - textAreaTop) + 'px';\n }\n else {\n this.textArea.style.maxHeight = (parseFloat(this.textArea.style.top)\n - this.destTop) + 'px';\n }\n }\n else if (degree === 270) {\n if (flip.toLowerCase() === 'horizontal') {\n this.textArea.style.maxHeight = (parseFloat(this.textArea.style.left)\n - this.destLeft) + 'px';\n }\n else {\n this.textArea.style.maxHeight = this.destWidth - (parseFloat(this.textArea.style.left)\n - this.destLeft) + 'px';\n }\n }\n //this.textArea.style.maxHeight = ((parseFloat(this.textArea.style.maxHeight) - parseFloat(this.textArea.style.fontSize) * 0.5)) + 'px';\n };\n ImageEditor.prototype.setTextBoxWidth = function (e) {\n var text = this.getMaxText(true);\n if (this.textArea.style.display === 'block') {\n this.updateFontStyles(true);\n }\n else {\n this.updateFontStyles();\n }\n var textAreaWidth = (this.upperContext.measureText(text).width + (parseFloat(this.textArea.style.fontSize) / 2));\n var letterWidth = e ? this.upperContext.measureText(String.fromCharCode(e.which)).width : 0;\n var actObj = extend({}, this.activeObj, {}, true);\n var degree;\n var flip = '';\n if (actObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - actObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (actObj.shapeFlip !== this.currFlipState) {\n flip = '';\n }\n else {\n flip = this.currFlipState;\n }\n if ((!isNullOrUndefined(e) && parseFloat(this.textArea.style.width) < (textAreaWidth + letterWidth)) || isNullOrUndefined(e)) {\n if (degree === 0) {\n if (flip.toLowerCase() === 'horizontal') {\n if ((parseFloat(this.textArea.style.left) - this.destLeft) - textAreaWidth - letterWidth > 0) {\n this.textArea.style.width = (textAreaWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((this.destWidth - (parseFloat(this.textArea.style.left)\n - this.destLeft)) > (textAreaWidth + letterWidth)) {\n this.textArea.style.width = (textAreaWidth + letterWidth) + 'px';\n }\n }\n }\n else if (degree === 90) {\n if (flip.toLowerCase() === 'vertical') {\n if ((parseFloat(this.textArea.style.top) - this.destTop) - textAreaWidth - letterWidth > 0) {\n this.textArea.style.width = (textAreaWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((this.destWidth - (parseFloat(this.textArea.style.top)\n - this.destTop)) > (textAreaWidth + letterWidth)) {\n this.textArea.style.width = (textAreaWidth + letterWidth) + 'px';\n }\n }\n }\n else if (degree === 180) {\n if (flip.toLowerCase() === 'horizontal') {\n if ((this.destWidth - (parseFloat(this.textArea.style.left)\n - this.destLeft)) > (textAreaWidth + letterWidth)) {\n this.textArea.style.width = (textAreaWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((parseFloat(this.textArea.style.left) - this.destLeft) - textAreaWidth - letterWidth > 0) {\n this.textArea.style.width = (textAreaWidth + letterWidth) + 'px';\n }\n }\n }\n else if (degree === 270) {\n if (flip.toLowerCase() === 'vertical') {\n if ((this.destHeight - (parseFloat(this.textArea.style.top)\n - this.destTop)) > (textAreaWidth + letterWidth)) {\n this.textArea.style.width = (textAreaWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((parseFloat(this.textArea.style.top) - this.destTop) - textAreaWidth - letterWidth > 0) {\n this.textArea.style.width = (textAreaWidth + letterWidth) + 'px';\n }\n }\n }\n }\n };\n ImageEditor.prototype.setActivePoint = function (startX, startY) {\n if (isNullOrUndefined(this.activeObj.activePoint)) {\n return;\n }\n if (this.currObjType.isText) {\n var textWidth = startX ? startX : 0;\n var textHeight = startY ? startY : this.activeObj.textSettings.fontSize;\n if (this.activeObj.textSettings.fontSize === undefined) {\n this.activeObj.textSettings.fontSize = (Math.abs(this.baseImg.width - this.baseImg.height)) * 0.1;\n }\n this.setTextSelection(textWidth, textHeight);\n this.mouseDownPoint.x = this.activeObj.activePoint.endX;\n this.mouseDownPoint.y = this.activeObj.activePoint.endY;\n if (this.activeObj.horTopLine !== undefined) {\n this.activeObj.activePoint = extend({}, this.activeObj.activePoint, {}, true);\n }\n this.drawObject('duplicate');\n }\n else if (startX && startY) {\n this.activeObj.activePoint.startX = this.mouseDownPoint.x = startX;\n this.activeObj.activePoint.startY = this.mouseDownPoint.y = startY;\n this.currObjType.isDragging = true;\n }\n else {\n var selectInfo = this.activeObj;\n this.activeObj.activePoint = { startX: selectInfo.horTopLine.startX, startY: selectInfo.horTopLine.startY,\n endX: selectInfo.horTopLine.endX, endY: selectInfo.horTopLine.endY };\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.setDragWidth = function (width) {\n var tempWidth = width;\n if (tempWidth >= 0) {\n for (var i = 0; i < tempWidth; i++) {\n width = tempWidth - i;\n this.activeObj.activePoint.startX += width;\n this.activeObj.activePoint.endX += width;\n if (this.activeObj.activePoint.startX >= this.destLeft &&\n this.activeObj.activePoint.endX <= this.destLeft + this.destWidth) {\n break;\n }\n else {\n this.activeObj.activePoint.startX -= width;\n this.activeObj.activePoint.endX -= width;\n }\n }\n }\n else {\n for (var i = 1; i < Math.abs(tempWidth); i++) {\n width = tempWidth + i;\n this.activeObj.activePoint.startX += width;\n this.activeObj.activePoint.endX += width;\n if (this.activeObj.activePoint.startX >= this.destLeft &&\n this.activeObj.activePoint.endX <= this.destLeft + this.destWidth) {\n break;\n }\n else {\n this.activeObj.activePoint.startX -= width;\n this.activeObj.activePoint.endX -= width;\n }\n }\n }\n };\n ImageEditor.prototype.setDragHeight = function (height) {\n var tempHeight = height;\n if (tempHeight >= 0) {\n for (var i = 1; i < tempHeight; i++) {\n height = tempHeight - i;\n this.activeObj.activePoint.startY += height;\n this.activeObj.activePoint.endY += height;\n if (this.activeObj.activePoint.startY >= this.destTop &&\n this.activeObj.activePoint.endY <= this.destTop + this.destHeight) {\n break;\n }\n else {\n this.activeObj.activePoint.startY -= height;\n this.activeObj.activePoint.endY -= height;\n }\n }\n }\n else {\n for (var i = 0; i < Math.abs(tempHeight); i++) {\n height = tempHeight + i;\n this.activeObj.activePoint.startY += height;\n this.activeObj.activePoint.endY += height;\n if (this.activeObj.activePoint.startY >= this.destTop &&\n this.activeObj.activePoint.endY <= this.destTop + this.destHeight) {\n break;\n }\n else {\n this.activeObj.activePoint.startY -= height;\n this.activeObj.activePoint.endY -= height;\n }\n }\n }\n };\n ImageEditor.prototype.triggerShapeChange = function (shapeResizingArgs, shapeMovingArgs, type) {\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n var currentShapeSettings = this.updatePreviousShapeSettings();\n shapeResizingArgs.currentShapeSettings = currentShapeSettings;\n shapeMovingArgs.currentShapeSettings = currentShapeSettings;\n if (type === 'resize') {\n this.trigger('shapeChanging', shapeResizingArgs);\n this.updateShapeChangeEventArgs(shapeResizingArgs.currentShapeSettings);\n }\n else {\n this.trigger('shapeChanging', shapeMovingArgs);\n this.updateShapeChangeEventArgs(shapeMovingArgs.currentShapeSettings);\n }\n };\n ImageEditor.prototype.updateActivePoint = function (x, y, isCropSelection) {\n var maxDimension = this.calcMaxDimension(this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n var previousShapeSettings = this.updatePreviousShapeSettings();\n var shapeResizingArgs = { action: 'resize', previousShapeSettings: previousShapeSettings };\n var shapeMovingArgs = { action: 'move', previousShapeSettings: previousShapeSettings };\n if (this.activeObj.shape === 'text' && this.dragElement !== '') {\n this.updateFontRatio(this.activeObj);\n }\n switch (this.dragElement.toLowerCase()) {\n case 'nw-resize':\n this.updateNWPoints(x, y, maxDimension);\n this.triggerShapeChange(shapeResizingArgs, shapeMovingArgs, 'resize');\n break;\n case 'n-resize':\n this.updateNPoints(x, y);\n this.triggerShapeChange(shapeResizingArgs, shapeMovingArgs, 'resize');\n break;\n case 'ne-resize':\n this.updateNEPoints(x, y, maxDimension);\n this.triggerShapeChange(shapeResizingArgs, shapeMovingArgs, 'resize');\n break;\n case 'w-resize':\n this.updateWPoints(x, y);\n this.triggerShapeChange(shapeResizingArgs, shapeMovingArgs, 'resize');\n break;\n case 'e-resize':\n this.updateEPoints(x, y);\n this.triggerShapeChange(shapeResizingArgs, shapeMovingArgs, 'resize');\n break;\n case 'sw-resize':\n this.updateSWPoints(x, y, maxDimension);\n this.triggerShapeChange(shapeResizingArgs, shapeMovingArgs, 'resize');\n break;\n case 's-resize':\n this.updateSPoints(x, y);\n this.triggerShapeChange(shapeResizingArgs, shapeMovingArgs, 'resize');\n break;\n case 'se-resize':\n this.updateSEPoints(x, y, maxDimension);\n this.triggerShapeChange(shapeResizingArgs, shapeMovingArgs, 'resize');\n break;\n default:\n if (!isCropSelection && !this.currObjType.isCustomCrop) {\n if (this.dragPoint.startX) {\n var width = (this.dragPoint.endX - this.previousPoint.x);\n var height = (this.dragPoint.endY - this.previousPoint.y);\n this.activeObj.activePoint.startX += width;\n this.activeObj.activePoint.endX += width;\n this.activeObj.activePoint.startY += height;\n this.activeObj.activePoint.endY += height;\n if (!this.isPreventDragging && (this.activeObj.activePoint.startX < this.destLeft ||\n this.activeObj.activePoint.startY < this.destTop || this.activeObj.activePoint.endX >\n this.destLeft + this.destWidth || this.activeObj.activePoint.endY > this.destTop + this.destHeight)) {\n this.activeObj.activePoint.startX -= width;\n this.activeObj.activePoint.endX -= width;\n this.activeObj.activePoint.startY -= height;\n this.activeObj.activePoint.endY -= height;\n this.setDragWidth(width);\n this.setDragHeight(height);\n }\n }\n else {\n this.activeObj.activePoint.startX = x < this.mouseDownPoint.x ? x : this.mouseDownPoint.x;\n this.activeObj.activePoint.startY = y < this.mouseDownPoint.y ? y : this.mouseDownPoint.y;\n x = x < this.mouseDownPoint.x ? this.mouseDownPoint.x : x;\n y = y < this.mouseDownPoint.y ? this.mouseDownPoint.y : y;\n this.activeObj.activePoint.endX = x;\n this.activeObj.activePoint.endY = y;\n }\n this.triggerShapeChange(shapeResizingArgs, shapeMovingArgs, 'move');\n }\n break;\n }\n };\n ImageEditor.prototype.preventDraggingInvertly = function () {\n if (!this.isPreventDragging) {\n if (this.activeObj.activePoint.startX < this.destLeft) {\n this.activeObj.activePoint.startX = this.destLeft;\n }\n if (this.activeObj.activePoint.startY < this.destTop) {\n this.activeObj.activePoint.startY = this.destTop;\n }\n if (this.activeObj.activePoint.endX > this.destLeft + this.destWidth) {\n this.activeObj.activePoint.endX = this.destLeft + this.destWidth;\n }\n if (this.activeObj.activePoint.endY > this.destTop + this.destHeight) {\n this.activeObj.activePoint.endY = this.destTop + this.destHeight;\n }\n }\n };\n ImageEditor.prototype.updateNWPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n var tempActiveObj = extend({}, this.activeObj, null, true);\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = this.activeObj.activePoint.startX - x;\n this.diffPoint.y = this.activeObj.activePoint.startY - y;\n }\n else {\n this.diffPoint.x = this.oldPoint.x - x;\n this.diffPoint.y = this.oldPoint.y - y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x <= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = (diff / 10);\n this.activeObj.activePoint.startX -= (maxDimension.width / 100) * percentage;\n this.activeObj.activePoint.startY -= (maxDimension.height / 100) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.updateFontSize(this.activeObj);\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.activeObj.shape === 'crop-custom' || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.startY = y;\n if (this.activeObj.activePoint.startX > this.activeObj.activePoint.endX) {\n var temp = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = temp;\n this.dragElement = 'ne-resize';\n }\n if (this.activeObj.activePoint.startY > this.activeObj.activePoint.endY) {\n var temp = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = temp;\n this.dragElement = 'sw-resize';\n }\n this.preventDraggingInvertly();\n }\n else {\n if (this.activeObj.activePoint.startX < x && this.activeObj.activePoint.startY < y) {\n width = x - this.activeObj.activePoint.startX;\n height = y - this.activeObj.activePoint.startY;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n var left = this.destLeft > 0 ? this.destLeft : 0;\n var top_2 = this.destTop > 0 ? this.destTop : 0;\n if (this.activeObj.activePoint.startX < left || this.activeObj.activePoint.startY < top_2) {\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n }\n }\n else {\n width = this.activeObj.activePoint.startX - x;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n var left = this.destLeft > 0 ? this.destLeft : 0;\n var top_3 = this.destTop > 0 ? this.destTop : 0;\n if (this.activeObj.activePoint.startX < left || this.activeObj.activePoint.startY < top_3) {\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.preventInverseResize(tempActiveObj);\n }\n };\n ImageEditor.prototype.updateNPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.activeObj.shape === 'crop-custom' || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startY = y;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n if (this.activeObj.activePoint.startY > this.activeObj.activePoint.endY) {\n var temp = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = temp;\n this.dragElement = 's-resize';\n }\n this.preventDraggingInvertly();\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.startY < y) {\n width = this.activeObj.activePoint.endX - x;\n height = y - this.activeObj.activePoint.startY;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n if (this.activeObj.activePoint.endX > (this.destLeft + this.destWidth) ||\n this.activeObj.activePoint.startY < this.destTop) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = this.activeObj.activePoint.startY - y;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n if (this.activeObj.activePoint.endX > (this.destLeft + this.destWidth) ||\n this.activeObj.activePoint.startY < this.destTop) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateNEPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n var tempActiveObj = extend({}, this.activeObj, null, true);\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = x - this.activeObj.activePoint.endX;\n this.diffPoint.y = this.activeObj.activePoint.startY - y;\n }\n else {\n this.diffPoint.x = x - this.oldPoint.x;\n this.diffPoint.y = this.oldPoint.y - y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x <= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = (diff / 10);\n this.activeObj.activePoint.endX += (maxDimension.width / 100) * percentage;\n this.activeObj.activePoint.startY -= (maxDimension.height / 100) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.updateFontSize(this.activeObj);\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endX = x;\n this.activeObj.activePoint.startY = y;\n if (this.activeObj.activePoint.endX < this.activeObj.activePoint.startX) {\n var temp = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = temp;\n this.dragElement = 'nw-resize';\n }\n if (this.activeObj.activePoint.startY > this.activeObj.activePoint.endY) {\n var temp = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = temp;\n this.dragElement = 'se-resize';\n }\n this.preventDraggingInvertly();\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.startY < y) {\n width = this.activeObj.activePoint.endX - x;\n height = y - this.activeObj.activePoint.startY;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n var endX = this.destLeft + this.destWidth < this.lowerCanvas.width ?\n this.destLeft + this.destWidth : this.lowerCanvas.width;\n var endY = this.destTop > 0 ? this.destTop : 0;\n if (this.activeObj.activePoint.endX > endX || this.activeObj.activePoint.startY < endY) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = this.activeObj.activePoint.startY - y;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n var endX = this.destLeft + this.destWidth < this.lowerCanvas.width ?\n this.destLeft + this.destWidth : this.lowerCanvas.width;\n var endY = this.destTop > 0 ? this.destTop : 0;\n if (this.activeObj.activePoint.endX > endX || this.activeObj.activePoint.startY < endY) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.preventInverseResize(tempActiveObj);\n }\n };\n ImageEditor.prototype.updateWPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.activeObj.shape === 'crop-custom' || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n if (this.activeObj.activePoint.startX > this.activeObj.activePoint.endX) {\n var temp = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = temp;\n this.dragElement = 'e-resize';\n }\n this.preventDraggingInvertly();\n }\n else {\n if (this.activeObj.activePoint.startX < x && this.activeObj.activePoint.endY > y) {\n width = x - this.activeObj.activePoint.startX;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.startX < this.destLeft || this.activeObj.activePoint.endY >\n (this.destTop + this.destHeight)) {\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = this.activeObj.activePoint.startX - x;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n if (this.activeObj.activePoint.startX < this.destLeft || this.activeObj.activePoint.endY >\n (this.destTop + this.destHeight)) {\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateEPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.activeObj.shape === 'crop-custom' || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endX = x;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n if (this.activeObj.activePoint.endX < this.activeObj.activePoint.startX) {\n var temp = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = temp;\n this.dragElement = 'w-resize';\n }\n this.preventDraggingInvertly();\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.endY > y) {\n width = this.activeObj.activePoint.endX - x;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.endX > (this.destLeft + this.destWidth) ||\n this.activeObj.activePoint.endY > (this.destTop + this.destHeight)) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n if (this.activeObj.activePoint.endX > (this.destLeft + this.destWidth) || this.activeObj.activePoint.endY >\n (this.destTop + this.destHeight)) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateSWPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n var tempActiveObj = extend({}, this.activeObj, null, true);\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = this.activeObj.activePoint.startX - x;\n this.diffPoint.y = y - this.activeObj.activePoint.endY;\n }\n else {\n this.diffPoint.x = this.oldPoint.x - x;\n this.diffPoint.y = y - this.oldPoint.y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x <= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = (diff / 10);\n this.activeObj.activePoint.startX -= (maxDimension.width / 100) * percentage;\n this.activeObj.activePoint.endY += (maxDimension.height / 100) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.updateFontSize(this.activeObj);\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.activeObj.shape === 'crop-custom' || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.endY = y;\n if (this.activeObj.activePoint.startX > this.activeObj.activePoint.endX) {\n var temp = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = temp;\n this.dragElement = 'se-resize';\n }\n if (this.activeObj.activePoint.endY < this.activeObj.activePoint.startY) {\n var temp = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = temp;\n this.dragElement = 'nw-resize';\n }\n this.preventDraggingInvertly();\n }\n else {\n if (this.activeObj.activePoint.startX < x && this.activeObj.activePoint.endY > y) {\n width = x - this.activeObj.activePoint.startX;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n var endX = this.destLeft > 0 ? this.destLeft : 0;\n var endY = this.destTop + this.destHeight < this.lowerCanvas.height ? this.destTop +\n this.destHeight : this.lowerCanvas.height;\n if (this.activeObj.activePoint.startX < endX || this.activeObj.activePoint.endY > endY) {\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = this.activeObj.activePoint.startX - x;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n var endX = this.destLeft > 0 ? this.destLeft : 0;\n var endY = this.destTop + this.destHeight < this.lowerCanvas.height ? this.destTop +\n this.destHeight : this.lowerCanvas.height;\n if (this.activeObj.activePoint.startX < endX || this.activeObj.activePoint.endY > endY) {\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.preventInverseResize(tempActiveObj);\n }\n };\n ImageEditor.prototype.updateSPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.activeObj.shape === 'crop-custom' || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endY = y;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n if (this.activeObj.activePoint.endY < this.activeObj.activePoint.startY) {\n var temp = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = temp;\n this.dragElement = 'n-resize';\n }\n this.preventDraggingInvertly();\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.endY > y) {\n width = this.activeObj.activePoint.endX - x;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.endX > (this.destLeft + this.destWidth) ||\n this.activeObj.activePoint.endY > (this.destTop + this.destHeight)) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.x;\n if (this.activeObj.activePoint.endX > (this.destLeft + this.destWidth) ||\n this.activeObj.activePoint.endY > (this.destTop + this.destHeight)) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateSEPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n var tempActiveObj = extend({}, this.activeObj, null, true);\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = x - this.activeObj.activePoint.endX;\n this.diffPoint.y = y - this.activeObj.activePoint.endY;\n }\n else {\n this.diffPoint.x = x - this.oldPoint.x;\n this.diffPoint.y = y - this.oldPoint.y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x >= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = (diff / 10);\n this.activeObj.activePoint.endX += (maxDimension.width / 50) * percentage;\n this.activeObj.activePoint.endY += (maxDimension.height / 50) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.updateFontSize(this.activeObj);\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.activeObj.shape === 'crop-custom' || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endX = x;\n this.activeObj.activePoint.endY = y;\n if (this.activeObj.activePoint.endX < this.activeObj.activePoint.startX) {\n var temp = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = temp;\n this.dragElement = 'sw-resize';\n }\n if (this.activeObj.activePoint.endY < this.activeObj.activePoint.startY) {\n var temp = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = temp;\n this.dragElement = 'ne-resize';\n }\n this.preventDraggingInvertly();\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.endY > y) {\n width = this.activeObj.activePoint.endX - x;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n var endX = this.destLeft + this.destWidth < this.lowerCanvas.width ?\n this.destLeft + this.destWidth : this.lowerCanvas.width;\n var endY = this.destTop + this.destHeight < this.lowerCanvas.height ?\n this.destTop + this.destHeight : this.lowerCanvas.height;\n if (this.activeObj.activePoint.endX > endX || this.activeObj.activePoint.endY > endY) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n var endX = this.destLeft + this.destWidth < this.lowerCanvas.width ? this.destLeft +\n this.destWidth : this.lowerCanvas.width;\n var endY = this.destTop + this.destHeight < this.lowerCanvas.height ? this.destTop +\n this.destHeight : this.lowerCanvas.height;\n if (this.activeObj.activePoint.endX > endX || this.activeObj.activePoint.endY > endY) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.preventInverseResize(tempActiveObj);\n }\n };\n ImageEditor.prototype.updateFontRatio = function (obj, isTextArea) {\n var degree;\n if (obj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - obj.shapeDegree;\n }\n if (isNullOrUndefined(isTextArea)) {\n if (degree === 0 || degree === 180) {\n obj.textSettings.fontRatio = obj.activePoint.width / obj.textSettings.fontSize;\n }\n else {\n obj.textSettings.fontRatio = obj.activePoint.height / obj.textSettings.fontSize;\n }\n }\n else if (isTextArea) {\n if (degree === 0 || degree === 180) {\n obj.textSettings.fontRatio = this.textArea.clientWidth / parseFloat(this.textArea.style.fontSize);\n }\n else {\n obj.textSettings.fontRatio = this.textArea.clientHeight / parseFloat(this.textArea.style.fontSize);\n }\n }\n };\n ImageEditor.prototype.updateFontSize = function (obj) {\n var degree;\n if (obj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - obj.shapeDegree;\n }\n if (degree === 0 || degree === 180) {\n obj.textSettings.fontSize = (obj.activePoint.width / obj.textSettings.fontRatio);\n }\n else {\n obj.textSettings.fontSize = (obj.activePoint.height / obj.textSettings.fontRatio);\n }\n };\n ImageEditor.prototype.preventInverseResize = function (tempActiveObj) {\n if (this.activeObj.activePoint.width < 0) {\n this.activeObj.activePoint.width = 0;\n this.activeObj.activePoint.startX = tempActiveObj.activePoint.startX;\n this.activeObj.activePoint.endX = tempActiveObj.activePoint.endX;\n }\n if (this.activeObj.activePoint.height < 0) {\n this.activeObj.activePoint.height = 0;\n this.activeObj.activePoint.startY = tempActiveObj.activePoint.startY;\n this.activeObj.activePoint.endY = tempActiveObj.activePoint.endY;\n }\n };\n ImageEditor.prototype.getScaleRatio = function (scale) {\n var point = { x: scale, y: scale };\n if (this.activeObj.shape !== 'crop-custom' && this.activeObj.shape !== 'crop-circle' && this.activeObj.shape !== 'crop-square') {\n var ratio = this.activeObj.shape.split('-');\n ratio = ratio[1].split(':');\n var newScale = scale / (parseInt(ratio[1], 10));\n point.x = newScale * (parseInt(ratio[0], 10));\n point.y = newScale * (parseInt(ratio[1], 10));\n }\n return point;\n };\n ImageEditor.prototype.getMaxText = function (isTextBox, text) {\n if (isNullOrUndefined(text)) {\n text = isTextBox ? this.textArea.value : this.activeObj.keyHistory;\n }\n var maxi;\n var rows = text.split('\\n');\n var maxStr = rows[0].length;\n var maxText = rows[0];\n for (var i = 1; i < rows.length; i++) {\n maxi = rows[i].length;\n if (maxi > maxStr) {\n maxText = rows[i];\n maxStr = maxi;\n }\n }\n return maxText;\n };\n ImageEditor.prototype.setDragLimit = function () {\n if (this.activeObj.activePoint) {\n if (this.activeObj.activePoint.startX < this.destLeft) {\n this.activeObj.activePoint.startX = this.destLeft;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n }\n else if (this.activeObj.activePoint.endX > this.destLeft + this.destWidth) {\n this.activeObj.activePoint.endX = this.destLeft + this.destWidth;\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - this.activeObj.activePoint.width;\n }\n if (this.activeObj.activePoint.startY < this.destTop) {\n this.activeObj.activePoint.startY = this.destTop;\n }\n else if (this.activeObj.activePoint.endY > this.destTop + this.destHeight) {\n this.activeObj.activePoint.endY = this.destTop + this.destHeight;\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY - this.activeObj.activePoint.height;\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.lineDraw = function () {\n if (this.activeObj.activePoint.height < 10) {\n this.activeObj.activePoint.startY -= 10;\n this.activeObj.activePoint.endY += 10;\n this.activeObj.lineDraw = 'horizontal';\n }\n else if (this.activeObj.activePoint.width < 10) {\n this.activeObj.activePoint.startX -= 10;\n this.activeObj.activePoint.endX += 10;\n this.activeObj.lineDraw = 'vertical';\n }\n else if (this.currObjType.isInitialLine) {\n this.activeObj.lineDraw = 'normal';\n this.currObjType.isInitialLine = false;\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n };\n ImageEditor.prototype.shapeCircle = function (canvasDraw, selectionWidth, selectionHeight) {\n canvasDraw.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n canvasDraw.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n canvasDraw.fillStyle = 'rgb(0, 0, 0, 0.5)';\n canvasDraw.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var tempWidth = canvasDraw.lineWidth;\n canvasDraw.lineWidth = (2);\n canvasDraw.beginPath();\n canvasDraw.ellipse(this.activeObj.horTopLine.startX + (selectionWidth / 2), this.activeObj.horTopLine.startY\n + (selectionHeight / 2), selectionWidth / 2, selectionHeight / 2, 0, 0, 2 * Math.PI, false);\n canvasDraw.stroke();\n canvasDraw.closePath();\n canvasDraw.save();\n canvasDraw.beginPath();\n canvasDraw.arc(((this.activeObj.activePoint.endX - this.activeObj.activePoint.startX) / 2) + this.activeObj.activePoint.startX, ((this.activeObj.activePoint.endY - this.activeObj.activePoint.startY) / 2) + this.activeObj.activePoint.startY, (this.activeObj.activePoint.width / 2), 0, Math.PI * 2);\n canvasDraw.closePath();\n canvasDraw.clip();\n canvasDraw.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n canvasDraw.restore();\n canvasDraw.lineWidth = tempWidth;\n this.drawOuterSelection(canvasDraw, true);\n this.currObjType.shape = '';\n };\n ImageEditor.prototype.drawOuterSelection = function (canvasDraw, isCropCircle) {\n var splitWords;\n canvasDraw.lineWidth = (0.5);\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n var tempObj = extend({}, this.activeObj, {}, true);\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (((splitWords !== undefined && splitWords[0] === 'crop') || this.activeObj.shape === undefined) && !isCropCircle) {\n this.upperContext.fillStyle = 'rgb(0, 0, 0, 0.5)';\n this.upperContext.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(this.activeObj.activePoint.startX, this.activeObj.activePoint.startY, this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n }\n canvasDraw.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n canvasDraw.fillStyle = this.themeColl[this.theme]['secondaryColor'];\n if (this.activeObj.shape !== 'rectangle') {\n canvasDraw.beginPath();\n canvasDraw.rect(tempObj.activePoint.startX, tempObj.activePoint.startY, tempObj.activePoint.width, tempObj.activePoint.height);\n canvasDraw.stroke();\n canvasDraw.closePath();\n }\n canvasDraw.lineWidth *= 2;\n canvasDraw.beginPath();\n canvasDraw.moveTo(tempObj.topLeftCircle.startX, tempObj.topLeftCircle.startY);\n canvasDraw.arc(tempObj.topLeftCircle.startX, tempObj.topLeftCircle.startY, tempObj.topLeftCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(tempObj.topRightCircle.startX, tempObj.topRightCircle.startY);\n canvasDraw.arc(tempObj.topRightCircle.startX, tempObj.topRightCircle.startY, tempObj.topRightCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(tempObj.bottomLeftCircle.startX, tempObj.bottomLeftCircle.startY);\n canvasDraw.arc(tempObj.bottomLeftCircle.startX, tempObj.bottomLeftCircle.startY, tempObj.bottomLeftCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(tempObj.bottomRightCircle.startX, tempObj.bottomRightCircle.startY);\n canvasDraw.arc(tempObj.bottomRightCircle.startX, tempObj.bottomRightCircle.startY, tempObj.bottomRightCircle.radius, 0, 2 * Math.PI);\n canvasDraw.stroke();\n canvasDraw.fill();\n canvasDraw.closePath();\n canvasDraw.lineWidth /= 2;\n if ((splitWords === undefined || splitWords[0] !== 'crop') && this.activeObj.shape !== 'text') {\n this.drawCenterCircles(canvasDraw);\n }\n this.activeObj = extend({}, tempObj, {}, true);\n };\n ImageEditor.prototype.drawObject = function (canvas, obj, isCropRatio, points, isPreventDrag, saveContext) {\n var canvasDraw;\n if (canvas.toLowerCase() === 'original') {\n canvasDraw = this.lowerContext;\n }\n else if (canvas.toLowerCase() === 'duplicate') {\n canvasDraw = this.upperContext;\n }\n else if (!isNullOrUndefined(saveContext)) {\n canvasDraw = saveContext;\n }\n if (!isPreventDrag && !isNullOrUndefined(this.activeObj.shape)) {\n this.setDragLimit();\n }\n if (this.currObjType.isLine && canvas !== 'original' && !obj) {\n this.lineDraw();\n }\n var splitWords = this.currObjType.shape.split('-');\n if (splitWords[0].toLowerCase() === 'crop' && isCropRatio) {\n this.drawCropRatio();\n }\n if (points) {\n this.activeObj.activePoint.startX = points.startX;\n this.activeObj.activePoint.startY = points.startY;\n this.activeObj.activePoint.endX = points.endX;\n this.activeObj.activePoint.endY = points.endY;\n this.activeObj.activePoint.width = points.width;\n this.activeObj.activePoint.height = points.height;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings.strokeWidth)) {\n this.activeObj.strokeSettings.strokeWidth = 4;\n }\n if (obj) {\n this.activeObj = extend({}, obj, {}, true);\n }\n this.updateActiveObject();\n if (this.currObjType.isText) {\n this.activeObj.keyHistory = this.keyHistory;\n }\n if (canvas.toLowerCase() !== 'original') {\n var splitWords_2;\n var isCrop = false;\n if (this.activeObj.shape) {\n splitWords_2 = this.activeObj.shape.split('-');\n if (splitWords_2[0] === 'crop') {\n isCrop = true;\n }\n }\n if (isCrop) {\n this.upperContext.fillStyle = 'rgb(0, 0, 0, 0.5)';\n this.upperContext.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(this.activeObj.activePoint.startX, this.activeObj.activePoint.startY, this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n }\n if (canvasDraw === this.lowerContext || canvasDraw === this.upperContext) {\n this.drawOuterSelection(canvasDraw);\n }\n }\n this.currObjType.isActiveObj = true;\n if (obj) {\n this.drawShapeObj(canvas, obj.shape, saveContext);\n }\n else if (this.keyHistory !== '' && this.currObjType.isText) {\n this.drawShapeObj(canvas, 'text', saveContext);\n }\n else if (this.activeObj.shape) {\n this.drawShapeObj(canvas, this.activeObj.shape, saveContext);\n }\n else {\n this.drawShapeObj(canvas, undefined, saveContext);\n }\n if (this.isAllowCropPan) {\n this.isAllowCropPan = false;\n this.tempPanMove = extend({}, this.panMove, {}, true);\n this.currentPannedPoint = this.updatePanPoints(this.getCurrentPanRegion());\n this.rotatePan();\n }\n };\n ImageEditor.prototype.rotateShape = function (canvasDraw) {\n canvasDraw.beginPath();\n canvasDraw.moveTo(this.activeObj.horTopLine.startX, this.activeObj.horTopLine.startY);\n canvasDraw.lineTo(this.activeObj.horTopLine.endX, this.activeObj.horTopLine.endY);\n canvasDraw.moveTo(this.activeObj.horBottomLine.startX, this.activeObj.horBottomLine.startY);\n canvasDraw.lineTo(this.activeObj.horBottomLine.endX, this.activeObj.horBottomLine.endY);\n canvasDraw.moveTo(this.activeObj.verLeftLine.startX, this.activeObj.verLeftLine.startY);\n canvasDraw.lineTo(this.activeObj.verLeftLine.endX, this.activeObj.verLeftLine.endY);\n canvasDraw.moveTo(this.activeObj.verRightLine.startX, this.activeObj.verRightLine.startY);\n canvasDraw.lineTo(this.activeObj.verRightLine.endX, this.activeObj.verRightLine.endY);\n canvasDraw.stroke();\n };\n ImageEditor.prototype.updateActiveObject = function (actPoint, obj, isMouseMove, x, y) {\n actPoint = actPoint ? actPoint : extend({}, this.activeObj.activePoint, {}, true);\n obj = obj ? obj : extend({}, this.activeObj, {}, true);\n actPoint.width = actPoint.endX - actPoint.startX;\n actPoint.height = actPoint.endY - actPoint.startY;\n x = x ? x : 0;\n y = y ? y : 0;\n var horCircleWidth = actPoint.width / 2;\n var verCircleHeight = actPoint.height / 2;\n var radius = 7.5;\n obj.horTopLine = { startX: actPoint.startX + x, startY: actPoint.startY - y,\n endX: actPoint.endX + x, endY: actPoint.endY + y };\n obj.horBottomLine = { startX: actPoint.startX - x, startY: actPoint.endY - y,\n endX: actPoint.endX - x, endY: actPoint.endY + y };\n obj.verLeftLine = { startX: actPoint.startX + x, startY: actPoint.startY - y,\n endX: actPoint.startX - y, endY: actPoint.endY - y };\n obj.verRightLine = { startX: actPoint.endX + x, startY: actPoint.startY + y,\n endX: actPoint.endX - x, endY: actPoint.endY + y };\n obj.topLeftCircle = { startX: actPoint.startX, startY: actPoint.startY,\n radius: obj.horTopLine.endX ? (radius) : 0 };\n obj.topCenterCircle = { startX: actPoint.startX + horCircleWidth, startY: actPoint.startY,\n radius: obj.horTopLine.endX ? (radius) : 0 };\n obj.topRightCircle = { startX: actPoint.endX, startY: actPoint.startY,\n radius: obj.horTopLine.endX ? (radius) : 0 };\n obj.centerLeftCircle = { startX: actPoint.startX, startY: actPoint.startY + verCircleHeight,\n radius: obj.horTopLine.endX ? (radius) : 0 };\n obj.centerRightCircle = { startX: actPoint.endX, startY: actPoint.startY + verCircleHeight,\n radius: obj.horTopLine.endX ? (radius) : 0 };\n obj.bottomLeftCircle = { startX: actPoint.startX, startY: actPoint.endY,\n radius: obj.horTopLine.endX ? (radius) : 0 };\n obj.bottomCenterCircle = { startX: actPoint.startX + horCircleWidth, startY: actPoint.endY,\n radius: obj.horTopLine.endX ? (radius) : 0 };\n obj.bottomRightCircle = { startX: actPoint.endX, startY: actPoint.endY,\n radius: obj.horTopLine.endX ? (radius) : 0 };\n obj.activePoint = actPoint;\n if (isNullOrUndefined(isMouseMove)) {\n this.activeObj = extend({}, obj, {}, true);\n }\n };\n ImageEditor.prototype.drawShapeObj = function (canvas, shape, saveContext) {\n var currentShape = shape !== undefined ? shape : this.currObjType.shape;\n this.currObjType.shape = currentShape;\n var canvasDraw;\n if (canvas.toLowerCase() === 'original') {\n canvasDraw = this.lowerContext;\n }\n else if (canvas.toLowerCase() === 'duplicate') {\n canvasDraw = this.upperContext;\n }\n else if (!isNullOrUndefined(saveContext)) {\n canvasDraw = saveContext;\n }\n if (this.currObjType.shape.toLowerCase() === 'rectangle' || this.currObjType.shape.toLowerCase() === 'ellipse'\n || this.currObjType.shape.toLowerCase() === 'line') {\n this.activeObj.shape = this.currObjType.shape;\n }\n canvasDraw.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n if (shape === 'text' || shape === 'freehanddraw') {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n }\n else {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.fillColor;\n }\n var horLineWidth = this.activeObj.activePoint.width / 3;\n var verLineHeight = this.activeObj.activePoint.height / 3;\n var selectionWidth = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n var selectionHeight = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n switch (this.currObjType.shape.toLowerCase()) {\n case 'rectangle':\n this.drawSquareLines(canvasDraw);\n if (canvasDraw === this.upperContext) {\n this.drawOuterSelection(canvasDraw);\n }\n break;\n case 'ellipse':\n selectionWidth = Math.abs(selectionWidth);\n selectionHeight = Math.abs(selectionHeight);\n canvasDraw.beginPath();\n canvasDraw.ellipse(this.activeObj.activePoint.startX + (selectionWidth / 2), this.activeObj.activePoint.startY + (selectionHeight / 2), selectionWidth / 2, selectionHeight / 2, 0, 0, 2 * Math.PI, false);\n if (this.activeObj.strokeSettings.fillColor !== '') {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.fillColor;\n canvasDraw.fill();\n }\n canvasDraw.ellipse(this.activeObj.activePoint.startX + (selectionWidth / 2), this.activeObj.activePoint.startY + (selectionHeight / 2), Math.abs((selectionWidth / 2) - (this.activeObj.strokeSettings.strokeWidth)), Math.abs((selectionHeight / 2) - (this.activeObj.strokeSettings.strokeWidth)), 0, 0, 2 * Math.PI, false);\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n canvasDraw.fill('evenodd');\n canvasDraw.closePath();\n if (canvasDraw === this.upperContext) {\n this.drawOuterSelection(canvasDraw);\n }\n break;\n case 'crop-circle':\n if (canvasDraw === this.lowerContext) {\n canvasDraw = this.upperContext;\n }\n this.shapeCircle(canvasDraw, selectionWidth, selectionHeight);\n break;\n case 'line':\n this.shapeLine(canvasDraw, selectionWidth, selectionHeight);\n if (canvasDraw === this.upperContext) {\n this.drawOuterSelection(canvasDraw);\n }\n break;\n case 'text':\n this.shapeText(canvasDraw);\n break;\n case 'crop-square':\n case 'crop-3:4':\n case 'crop-4:3':\n case 'crop-6:9':\n case 'crop-9:6':\n case 'crop-9:16':\n case 'crop-16:9':\n if (canvasDraw === this.lowerContext) {\n canvasDraw = this.upperContext;\n }\n this.drawSelection(horLineWidth, verLineHeight);\n this.currObjType.shape = '';\n break;\n default:\n this.drawSelection(horLineWidth, verLineHeight);\n break;\n }\n };\n ImageEditor.prototype.shapeLine = function (canvasDraw, selectionWidth, selectionHeight) {\n var startX;\n var startY;\n var endX;\n var endY;\n var degree;\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree % 180 === 0) {\n startX = this.activeObj.activePoint.startX;\n startY = this.activeObj.activePoint.startY + (selectionHeight / 2);\n endX = this.activeObj.activePoint.endX;\n endY = this.activeObj.activePoint.startY + (selectionHeight / 2);\n }\n else {\n startX = this.activeObj.activePoint.startX + (selectionWidth / 2);\n startY = this.activeObj.activePoint.startY;\n endX = this.activeObj.activePoint.startX + (selectionWidth / 2);\n endY = this.activeObj.activePoint.endY;\n }\n var tempLineWidth = canvasDraw.lineWidth;\n canvasDraw.lineWidth = (this.activeObj.strokeSettings.strokeWidth);\n canvasDraw.beginPath();\n switch (this.activeObj.lineDraw.toLowerCase()) {\n case 'horizontal':\n case 'vertical':\n canvasDraw.moveTo(startX, startY);\n canvasDraw.lineTo(endX, endY);\n break;\n case 'normal':\n canvasDraw.moveTo(this.activeObj.horTopLine.startX, this.activeObj.horTopLine.startY);\n canvasDraw.lineTo(this.activeObj.horBottomLine.endX, this.activeObj.horBottomLine.endY);\n break;\n }\n canvasDraw.stroke();\n canvasDraw.lineWidth = tempLineWidth;\n };\n ImageEditor.prototype.shapeText = function (canvasDraw) {\n var rows = this.activeObj.keyHistory.split('\\n');\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n var lineHeight = ((height * rows.length) - (this.activeObj.textSettings.fontSize * rows.length)) / rows.length;\n for (var i = 0; i < rows.length; i++) {\n var text = rows[i];\n var yPoint = ((i + 1) * this.activeObj.textSettings.fontSize * 0.85) + (i * lineHeight);\n if (this.degree === -360) {\n this.degree = 0;\n }\n if (this.degree === 0 || this.degree === 180) {\n if (this.activeObj.textSettings.fontSize > this.activeObj.activePoint.height) {\n this.activeObj.textSettings.fontSize = this.activeObj.activePoint.height -\n (this.activeObj.activePoint.height * 0.1);\n }\n }\n else {\n if (this.activeObj.textSettings.fontSize > this.activeObj.activePoint.width) {\n this.activeObj.textSettings.fontSize = this.activeObj.activePoint.width -\n (this.activeObj.activePoint.width * 0.1);\n }\n }\n canvasDraw.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n var textStyle = '';\n if (this.activeObj.textSettings.bold) {\n textStyle = 'bold ';\n }\n if (this.activeObj.textSettings.italic) {\n textStyle = 'italic ';\n }\n if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n textStyle = 'italic bold ';\n }\n canvasDraw.font = textStyle + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n if (this.activeObj.flipObjColl.length === 4) {\n this.activeObj.flipObjColl = [];\n }\n for (var j = 0; j < this.activeObj.flipObjColl.length; j++) {\n if (this.activeObj.flipObjColl[j].toLowerCase() === 'horizontal') {\n canvasDraw.translate(canvasDraw.canvas.width, 0);\n canvasDraw.scale(-1, 1);\n this.updateActPoint('horizontal', canvasDraw);\n }\n else if (this.activeObj.flipObjColl[j].toLowerCase() === 'vertical') {\n canvasDraw.translate(0, canvasDraw.canvas.height);\n canvasDraw.scale(1, -1);\n this.updateActPoint('vertical', canvasDraw);\n }\n }\n if (this.activeObj.shapeDegree !== this.degree) {\n this.rotateText(canvasDraw);\n }\n else {\n canvasDraw.fillText(text, this.activeObj.activePoint.startX + this.activeObj.textSettings.fontSize * 0.1, this.activeObj.activePoint.startY + yPoint);\n }\n for (var k = 0; k < this.activeObj.flipObjColl.length; k++) {\n if (this.activeObj.flipObjColl[k].toLowerCase() === 'horizontal') {\n canvasDraw.translate(canvasDraw.canvas.width, 0);\n canvasDraw.scale(-1, 1);\n this.updateActPoint('horizontal', canvasDraw);\n }\n else if (this.activeObj.flipObjColl[k].toLowerCase() === 'vertical') {\n canvasDraw.translate(0, canvasDraw.canvas.height);\n canvasDraw.scale(1, -1);\n this.updateActPoint('vertical', canvasDraw);\n }\n }\n }\n this.currObjType.isText = false;\n };\n ImageEditor.prototype.updateActPoint = function (degree, canvasDraw) {\n if (degree.toLowerCase() === 'horizontal') {\n if (this.activeObj.activePoint.startX <= canvasDraw.canvas.width / 2) {\n this.activeObj.activePoint.startX = canvasDraw.canvas.width / 2 + ((canvasDraw.canvas.width / 2) -\n this.activeObj.activePoint.endX);\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n this.updateActiveObject(this.activeObj.activePoint, this.activeObj);\n }\n else if (this.activeObj.activePoint.startX >= canvasDraw.canvas.width / 2) {\n this.activeObj.activePoint.startX = canvasDraw.canvas.width - this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n this.updateActiveObject(this.activeObj.activePoint, this.activeObj);\n }\n }\n else if (degree.toLowerCase() === 'vertical') {\n if (this.activeObj.activePoint.startY <= canvasDraw.canvas.height / 2) {\n this.activeObj.activePoint.startY = canvasDraw.canvas.height / 2 + ((canvasDraw.canvas.height / 2) -\n this.activeObj.activePoint.endY);\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n this.updateActiveObject(this.activeObj.activePoint, this.activeObj);\n }\n else if (this.activeObj.activePoint.startY >= canvasDraw.canvas.height / 2) {\n this.activeObj.activePoint.startY = canvasDraw.canvas.height - this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n this.updateActiveObject(this.activeObj.activePoint, this.activeObj);\n }\n }\n };\n ImageEditor.prototype.drawSquareLines = function (canvasDraw) {\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords[0] === 'crop') {\n canvasDraw.strokeStyle = '#fff';\n }\n else {\n canvasDraw.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n }\n canvasDraw.beginPath();\n canvasDraw.rect(this.activeObj.activePoint.startX, this.activeObj.activePoint.startY, this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n if (this.activeObj.strokeSettings.fillColor !== '') {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.fillColor;\n canvasDraw.fill();\n }\n canvasDraw.rect(this.activeObj.activePoint.startX + this.activeObj.strokeSettings.strokeWidth, this.activeObj.activePoint.startY + this.activeObj.strokeSettings.strokeWidth, this.activeObj.activePoint.width - (2 * this.activeObj.strokeSettings.strokeWidth), this.activeObj.activePoint.height - (2 * this.activeObj.strokeSettings.strokeWidth));\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n canvasDraw.fill('evenodd');\n canvasDraw.closePath();\n };\n ImageEditor.prototype.drawSelection = function (horLineWidth, verLineHeight) {\n this.upperContext.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n this.upperContext.beginPath();\n this.activeObj.horTopInnerLine = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY +\n verLineHeight, endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY + verLineHeight };\n this.activeObj.horBottomInnerLine = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY +\n (2 * verLineHeight), endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY + (2 * verLineHeight) };\n this.activeObj.verLeftInnerLine = { startX: this.activeObj.activePoint.startX + horLineWidth,\n startY: this.activeObj.activePoint.startY, endX: this.activeObj.activePoint.startX + horLineWidth,\n endY: this.activeObj.activePoint.endY };\n this.activeObj.verRightInnerLine = { startX: this.activeObj.activePoint.startX + (2 * horLineWidth),\n startY: this.activeObj.activePoint.startY, endX: this.activeObj.activePoint.startX + (2 * horLineWidth),\n endY: this.activeObj.activePoint.endY };\n this.upperContext.moveTo(this.activeObj.horTopInnerLine.startX, this.activeObj.horTopInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.horTopInnerLine.endX, this.activeObj.horTopInnerLine.startY);\n this.upperContext.moveTo(this.activeObj.horBottomInnerLine.startX, this.activeObj.horBottomInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.horBottomInnerLine.endX, this.activeObj.horBottomInnerLine.startY);\n this.upperContext.moveTo(this.activeObj.verLeftInnerLine.startX, this.activeObj.verLeftInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.verLeftInnerLine.endX, this.activeObj.verLeftInnerLine.endY);\n this.upperContext.moveTo(this.activeObj.verRightInnerLine.startX, this.activeObj.verRightInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.verRightInnerLine.endX, this.activeObj.verRightInnerLine.endY);\n this.upperContext.stroke();\n this.upperContext.closePath();\n };\n ImageEditor.prototype.drawCenterCircles = function (canvasDraw) {\n canvasDraw.lineWidth *= 2;\n canvasDraw.beginPath();\n canvasDraw.moveTo(this.activeObj.topCenterCircle.startX, this.activeObj.topCenterCircle.startY);\n canvasDraw.arc(this.activeObj.topCenterCircle.startX, this.activeObj.topCenterCircle.startY, this.activeObj.topCenterCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(this.activeObj.centerLeftCircle.startX, this.activeObj.centerLeftCircle.startY);\n canvasDraw.arc(this.activeObj.centerLeftCircle.startX, this.activeObj.centerLeftCircle.startY, this.activeObj.centerLeftCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(this.activeObj.centerRightCircle.startX, this.activeObj.centerRightCircle.startY);\n canvasDraw.arc(this.activeObj.centerRightCircle.startX, this.activeObj.centerRightCircle.startY, this.activeObj.centerRightCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(this.activeObj.bottomCenterCircle.startX, this.activeObj.bottomCenterCircle.startY);\n canvasDraw.arc(this.activeObj.bottomCenterCircle.startX, this.activeObj.bottomCenterCircle.startY, this.activeObj.bottomCenterCircle.radius, 0, 2 * Math.PI);\n canvasDraw.stroke();\n canvasDraw.fill();\n canvasDraw.closePath();\n canvasDraw.lineWidth /= 2;\n };\n ImageEditor.prototype.findTarget = function (x, y, type) {\n if (type.toLowerCase() === 'mousedown' || type.toLowerCase() === 'touchstart') {\n var splitWords = void 0;\n var isCrop = false;\n if (this.activeObj.shape) {\n splitWords = this.activeObj.shape.split('-');\n if (splitWords[0] === 'crop') {\n isCrop = true;\n }\n }\n this.findTargetObj(x, y, isCrop);\n this.updateCursorStyles(x, y, type);\n }\n else {\n switch (this.dragElement.toLowerCase()) {\n case 'nw-resize':\n this.activeObj.topLeftCircle.startX = x;\n this.activeObj.topLeftCircle.startY = y;\n break;\n case 'n-resize':\n this.activeObj.topCenterCircle.startX = x;\n this.activeObj.topCenterCircle.startY = y;\n break;\n case 'ne-resize':\n this.activeObj.topRightCircle.startX = x;\n this.activeObj.topRightCircle.startY = y;\n break;\n case 'w-resize':\n this.activeObj.centerLeftCircle.startX = x;\n this.activeObj.centerLeftCircle.startY = y;\n break;\n case 'e-resize':\n this.activeObj.centerRightCircle.startX = x;\n this.activeObj.centerRightCircle.startY = y;\n break;\n case 'sw-resize':\n this.activeObj.bottomLeftCircle.startX = x;\n this.activeObj.bottomLeftCircle.startY = y;\n break;\n case 's-resize':\n this.activeObj.bottomCenterCircle.startX = x;\n this.activeObj.bottomCenterCircle.startY = y;\n break;\n case 'se-resize':\n this.activeObj.bottomRightCircle.startX = x;\n this.activeObj.bottomRightCircle.startY = y;\n break;\n default:\n if (this.dragPoint.startX && this.dragPoint.startY) {\n this.previousPoint.x = this.dragPoint.endX;\n this.previousPoint.y = this.dragPoint.endY;\n this.dragPoint.endX = x;\n this.dragPoint.endY = y;\n }\n break;\n }\n }\n };\n ImageEditor.prototype.findTargetObj = function (x, y, isCrop) {\n var isShape;\n if (this.objColl.length !== 0 && !this.currObjType.isCustomCrop && !isCrop) {\n var diffX = 0;\n var i = void 0;\n for (var index = 0; index < this.objColl.length; index++) {\n var actObj = extend({}, this.objColl[index], {}, true);\n if (x >= (actObj.activePoint.startX - (actObj.topLeftCircle.radius * 2)) &&\n x <= (actObj.activePoint.endX + (actObj.topLeftCircle.radius * 2)) &&\n y >= (actObj.activePoint.startY - (actObj.topLeftCircle.radius * 2)) &&\n y <= (actObj.activePoint.endY + (actObj.topLeftCircle.radius * 2))) {\n if (this.isTouch || this.upperCanvas.style.cursor === 'move' || this.upperCanvas.style.cursor === 'grab' || this.isShapeInserted) {\n if (diffX === 0 || diffX > x - actObj.activePoint.startX) {\n diffX = x - this.objColl[index].activePoint.startX;\n i = index;\n }\n }\n else if (this.objColl[index].currIndex === this.tempActiveObj.currIndex) {\n i = index;\n }\n }\n }\n if (isNullOrUndefined(i)) {\n this.refreshActiveObj();\n isShape = false;\n }\n else {\n this.tempObjColl = extend([], this.objColl, [], true);\n this.currObjType.isCustomCrop = false;\n this.activeObj = extend({}, this.objColl[i], {}, true);\n var temp = extend({}, this.objColl[i], {}, true);\n this.objColl.splice(i, 1);\n if (this.degree === 0) {\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.baseImg, this.srcLeft, this.srcTop, this.srcWidth, this.srcHeight, this.destLeft, this.destTop, this.destWidth, this.destHeight);\n var temp_2 = this.lowerContext.filter;\n this.lowerContext.filter = 'none';\n this.iterateObjColl();\n this.activeObj = extend({}, temp_2, {}, true);\n this.freehandRedraw(this.lowerContext);\n this.lowerContext.filter = temp_2;\n this.getCurrentFlipState();\n }\n else {\n this.callUpdateCurrentTransformedState();\n this.freehandRedraw(this.lowerContext);\n }\n this.clearOuterCanvas(this.lowerContext);\n if ((!isNullOrUndefined(this.currSelectionPoint) && this.currSelectionPoint.shape === 'crop-circle') || this.isCircleCrop) {\n this.cropCircle(this.lowerContext);\n }\n this.setActivePoint();\n this.activeObj = extend({}, temp, {}, true);\n this.tempStrokeSettings = extend({}, this.activeObj.strokeSettings, {}, true);\n this.tempTextSettings = extend({}, this.activeObj.textSettings, {}, true);\n var shapeSettings = this.updatePreviousShapeSettings();\n var shapeChangingArgs = { action: 'select', previousShapeSettings: shapeSettings,\n currentShapeSettings: shapeSettings };\n this.trigger('shapeChanging', shapeChangingArgs);\n this.updateShapeChangeEventArgs(shapeChangingArgs.currentShapeSettings);\n if (this.activeObj.activePoint) {\n this.drawObject('duplicate', this.activeObj, null, null, true);\n if (this.activeObj.activePoint.startX < this.destLeft) {\n this.isPreventDragging = true;\n }\n else if (this.activeObj.activePoint.endX > this.destLeft + this.destWidth) {\n this.isPreventDragging = true;\n }\n else if (this.activeObj.activePoint.startY < this.destTop) {\n this.isPreventDragging = true;\n }\n else if (this.activeObj.activePoint.endY > this.destTop + this.destHeight) {\n this.isPreventDragging = true;\n }\n }\n isShape = true;\n }\n }\n return isShape;\n };\n ImageEditor.prototype.getCurrentFlipState = function () {\n if (this.rotateFlipColl.length !== 0) {\n var totalPannedInternalPoint = extend({}, this.totalPannedInternalPoint, {}, true);\n this.callUpdateCurrentTransformedState();\n this.totalPannedInternalPoint = totalPannedInternalPoint;\n }\n else {\n this.callUpdateCurrentTransformedState();\n }\n };\n ImageEditor.prototype.rotateDegree = function (degree) {\n this.lowerContext.save();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n this.lowerContext.rotate(Math.PI / 180 * degree);\n this.lowerContext.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.baseImg, this.srcLeft, this.srcTop, this.srcWidth, this.srcHeight, this.destLeft, this.destTop, this.destWidth, this.destHeight);\n this.lowerContext.filter = temp;\n this.lowerContext.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n this.lowerContext.rotate(Math.PI / 180 * -degree);\n this.lowerContext.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n this.lowerContext.restore();\n };\n ImageEditor.prototype.updateCursorStyles = function (x, y, type) {\n var isResize = false;\n if (this.activeObj.keyHistory !== '' && this.activeObj.shape === undefined && !this.currObjType.isCustomCrop &&\n !this.currObjType.isLine && this.currObjType.isText) {\n this.activeObj.shape = 'text';\n }\n var actObj = extend({}, this.activeObj, {}, true);\n if (isNullOrUndefined(actObj.topLeftCircle)) {\n return;\n }\n if (x >= (actObj.topLeftCircle.startX - (actObj.topLeftCircle.radius * 2)) &&\n x <= (actObj.topLeftCircle.startX + (actObj.topLeftCircle.radius * 2)) &&\n y >= (actObj.topLeftCircle.startY - (actObj.topLeftCircle.radius * 2)) &&\n y <= (actObj.topLeftCircle.startY + (actObj.topLeftCircle.radius * 2)) && this.dragElement !== 'nw-resize') {\n actObj.topLeftCircle.startX = actObj.topLeftCircle.startY = 0;\n this.upperCanvas.style.cursor = 'nw-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.topCenterCircle.startX - (actObj.topLeftCircle.radius * 2)) &&\n x <= (actObj.topCenterCircle.startX + (actObj.topLeftCircle.radius * 2)) &&\n y >= (actObj.topCenterCircle.startY - (actObj.topLeftCircle.radius * 2)) &&\n y <= (actObj.topCenterCircle.startY + (actObj.topLeftCircle.radius * 2)) && this.dragElement !== 'n-resize') {\n actObj.topCenterCircle.startX = actObj.topCenterCircle.startY = 0;\n this.upperCanvas.style.cursor = 'n-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.topRightCircle.startX - (actObj.topLeftCircle.radius * 2)) &&\n x <= (actObj.topRightCircle.startX + (actObj.topLeftCircle.radius * 2)) &&\n y >= (actObj.topRightCircle.startY - (actObj.topLeftCircle.radius * 2)) &&\n y <= (actObj.topRightCircle.startY + (actObj.topLeftCircle.radius * 2)) && this.dragElement !== 'ne-resize') {\n actObj.topRightCircle.startX = actObj.topRightCircle.startY = 0;\n this.upperCanvas.style.cursor = 'ne-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.centerLeftCircle.startX - (actObj.topLeftCircle.radius * 2)) &&\n x <= (actObj.centerLeftCircle.startX + (actObj.topLeftCircle.radius * 2)) &&\n y >= (actObj.centerLeftCircle.startY - (actObj.topLeftCircle.radius * 2)) &&\n y <= (actObj.centerLeftCircle.startY + (actObj.topLeftCircle.radius * 2)) && this.dragElement !== 'w-resize') {\n actObj.centerLeftCircle.startX = actObj.centerLeftCircle.startY = 0;\n this.upperCanvas.style.cursor = 'w-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.centerRightCircle.startX - (actObj.topLeftCircle.radius * 2)) &&\n x <= (actObj.centerRightCircle.startX + (actObj.topLeftCircle.radius * 2)) &&\n y >= (actObj.centerRightCircle.startY - (actObj.topLeftCircle.radius * 2)) &&\n y <= (actObj.centerRightCircle.startY + (actObj.topLeftCircle.radius * 2)) && this.dragElement !== 'e-resize') {\n actObj.centerRightCircle.startX = actObj.centerRightCircle.startY = 0;\n this.upperCanvas.style.cursor = 'e-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.bottomLeftCircle.startX - (actObj.topLeftCircle.radius * 2)) &&\n x <= (actObj.bottomLeftCircle.startX + (actObj.topLeftCircle.radius * 2)) &&\n y >= (actObj.bottomLeftCircle.startY - (actObj.topLeftCircle.radius * 2)) &&\n y <= (actObj.bottomLeftCircle.startY + (actObj.topLeftCircle.radius * 2)) && this.dragElement !== 'sw-resize') {\n actObj.bottomLeftCircle.startX = actObj.bottomLeftCircle.startY = 0;\n this.upperCanvas.style.cursor = 'sw-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.bottomCenterCircle.startX - (actObj.topLeftCircle.radius * 2)) &&\n x <= (actObj.bottomCenterCircle.startX + (actObj.topLeftCircle.radius * 2)) &&\n y >= (actObj.bottomCenterCircle.startY - (actObj.topLeftCircle.radius * 2)) &&\n y <= (actObj.bottomCenterCircle.startY + (actObj.topLeftCircle.radius * 2)) && this.dragElement !== 's-resize') {\n actObj.bottomCenterCircle.startX = actObj.bottomCenterCircle.startY = 0;\n this.upperCanvas.style.cursor = 's-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.bottomRightCircle.startX - (actObj.topLeftCircle.radius * 2)) &&\n x <= (actObj.bottomRightCircle.startX + (actObj.topLeftCircle.radius * 2)) &&\n y >= (actObj.bottomRightCircle.startY - (actObj.topLeftCircle.radius * 2)) &&\n y <= (actObj.bottomRightCircle.startY + (actObj.topLeftCircle.radius * 2)) && this.dragElement !== 'se-resize') {\n actObj.bottomRightCircle.startX = actObj.bottomRightCircle.startY = 0;\n this.upperCanvas.style.cursor = 'se-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else {\n this.dragPoint.startX = this.previousPoint.x = this.dragPoint.endX = x;\n this.dragPoint.startY = this.previousPoint.y = this.dragPoint.endY = y;\n }\n this.previousPoint.x = this.previousPoint.y = this.diffPoint.x = this.diffPoint.y = 0;\n if (type === 'touchstart') {\n if (isResize || (x >= actObj.activePoint.startX && x <= actObj.activePoint.endX\n && y >= actObj.activePoint.startY && y <= actObj.activePoint.endY)) {\n this.currObjType.isDragging = true;\n }\n }\n else {\n this.currObjType.isDragging = true;\n }\n };\n ImageEditor.prototype.drawCropRatio = function () {\n var x;\n var y;\n var width;\n var height;\n if (this.zoomFactor > 0 && !isNullOrUndefined(this.currentSelectionPoint)) {\n //width = this.currentSelectionPoint.activePoint.width; height = this.currentSelectionPoint.activePoint.height;\n if (this.destLeft + this.destLeft + this.destWidth <= this.lowerCanvas.clientWidth) {\n width = this.destWidth;\n if (this.destLeft < 0) {\n width += (2 * this.destLeft);\n }\n }\n else {\n width = this.lowerCanvas.clientWidth;\n }\n if (this.destTop + this.destTop + this.destHeight <= this.lowerCanvas.clientHeight) {\n height = this.destHeight;\n if (this.destTop < 0) {\n height += (2 * this.destTop);\n }\n }\n else {\n height = this.lowerCanvas.clientHeight;\n }\n if (this.degree !== 0) {\n this.isAllowCropPan = true;\n }\n }\n else {\n width = this.destWidth;\n height = this.destHeight;\n if (this.destLeft < 0) {\n width += this.destLeft;\n }\n if (this.destTop < 0) {\n height += this.destTop;\n }\n if (this.currObjType.shape.toLowerCase() !== 'crop-square' && this.currObjType.shape.toLowerCase() !== 'crop-circle') {\n if (this.destLeft + this.destWidth > this.lowerCanvas.width) {\n width -= (this.destLeft + this.destWidth - this.lowerCanvas.width);\n }\n if (this.destTop + this.destHeight > this.lowerCanvas.height) {\n height -= (this.destTop + this.destHeight - this.lowerCanvas.height);\n }\n }\n }\n switch (this.currObjType.shape.toLowerCase()) {\n case 'crop-square':\n case 'crop-circle':\n this.setDragDirection(width, height);\n if (width === this.destWidth && height === this.destHeight) {\n this.activeObj.activePoint.startX += this.destLeft;\n this.activeObj.activePoint.startY += this.destTop;\n this.activeObj.activePoint.endX += this.destLeft;\n this.activeObj.activePoint.endY += this.destTop;\n }\n if (this.lowerCanvas.width > this.lowerCanvas.height) {\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.activeObj.activePoint.width = this.activeObj.activePoint.height;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n }\n else {\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.width;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n }\n break;\n case 'crop-3:2':\n x = 3;\n y = 2;\n break;\n case 'crop-4:3':\n x = 4;\n y = 3;\n break;\n case 'crop-5:4':\n x = 5;\n y = 4;\n break;\n case 'crop-7:5':\n x = 7;\n y = 5;\n break;\n case 'crop-16:9':\n x = 16;\n y = 9;\n break;\n }\n if (x !== undefined && y !== undefined) {\n this.calcShapeRatio(x, y, width, height);\n if (width === this.destWidth && height === this.destHeight) {\n this.updatePoints();\n }\n }\n // Set Selection inside image\n if (!isNullOrUndefined(this.currentSelectionPoint)) {\n if (this.activeObj.activePoint.startX < this.currentSelectionPoint.activePoint.startX) {\n var diff = this.currentSelectionPoint.activePoint.startX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX += diff;\n this.activeObj.activePoint.endX += diff;\n }\n if (this.activeObj.activePoint.startY < this.currentSelectionPoint.activePoint.startY) {\n var diff = this.currentSelectionPoint.activePoint.startY - this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY += diff;\n this.activeObj.activePoint.endY += diff;\n }\n if (this.activeObj.activePoint.endX > this.currentSelectionPoint.activePoint.endX) {\n var diff = this.activeObj.activePoint.endX - this.currentSelectionPoint.activePoint.endX;\n this.activeObj.activePoint.startX -= diff;\n this.activeObj.activePoint.endX -= diff;\n }\n if (this.activeObj.activePoint.endY > this.currentSelectionPoint.activePoint.endY) {\n var diff = this.activeObj.activePoint.endY - this.currentSelectionPoint.activePoint.endY;\n this.activeObj.activePoint.startY -= diff;\n this.activeObj.activePoint.endY -= diff;\n }\n this.activeObj.activePoint.startX = (this.lowerCanvas.clientWidth - this.activeObj.activePoint.width) / 2;\n this.activeObj.activePoint.startY = (this.lowerCanvas.clientHeight - this.activeObj.activePoint.height) / 2;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n }\n if (this.zoomFactor === 0) {\n if (this.activeObj.activePoint.startX < this.destLeft) {\n var diff = (this.destLeft - this.activeObj.activePoint.startX) + 7.5;\n this.activeObj.activePoint.startX += diff;\n this.activeObj.activePoint.endX += diff;\n }\n if (this.activeObj.activePoint.startY < this.destTop) {\n var diff = (this.destTop - this.activeObj.activePoint.startY) + 7.5;\n this.activeObj.activePoint.startY += diff;\n this.activeObj.activePoint.endY += diff;\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.setDragDirection = function (width, height) {\n var arcRadius = (7.5);\n if (this.destWidth > this.destHeight) {\n this.activeObj.activePoint.startX = this.dragPoint.startX = ((width / 2) - (height / 2))\n + arcRadius;\n this.activeObj.activePoint.startY = this.dragPoint.startY = ((height / 2) - (height / 2))\n + arcRadius;\n this.activeObj.activePoint.endX = ((width / 2) + (height / 2)) - arcRadius;\n this.activeObj.activePoint.endY = ((height / 2) + (height / 2)) - arcRadius;\n }\n else {\n this.activeObj.activePoint.startY = this.dragPoint.startX = ((height / 2) - (width) / 2)\n + arcRadius;\n this.activeObj.activePoint.endY = ((height / 2) + (width) / 2) - arcRadius;\n this.activeObj.activePoint.startX = this.dragPoint.startX = arcRadius;\n this.activeObj.activePoint.endX = width - arcRadius;\n }\n };\n ImageEditor.prototype.updatePoints = function () {\n this.activeObj.activePoint.startX += this.destLeft;\n this.activeObj.activePoint.startY += this.destTop;\n this.activeObj.activePoint.endX += this.destLeft;\n this.activeObj.activePoint.endY += this.destTop;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n };\n ImageEditor.prototype.calcShapeRatio = function (x, y, imgWidth, imgHeight) {\n var arcRadius = (7.5);\n var originalWidth = imgWidth;\n var originalHeight = imgHeight;\n var presetRatio = x / y;\n var standardSize = originalWidth >= originalHeight ? originalWidth : originalHeight;\n var width = standardSize * presetRatio;\n var height = standardSize;\n var scaleWidth = this.getScale(width, originalWidth);\n var snippetArray = [];\n for (var i = 0; i < 2; i++) {\n if (i === 0) {\n snippetArray.push(width * scaleWidth);\n }\n else {\n snippetArray.push(height * scaleWidth);\n }\n }\n width = snippetArray[0];\n height = snippetArray[1];\n var scaleHeight = this.getScale(height, originalHeight);\n var snippetArray1 = [];\n for (var i = 0; i < 2; i++) {\n if (i === 0) {\n snippetArray1.push(width * scaleHeight);\n }\n else {\n snippetArray1.push(height * scaleHeight);\n }\n }\n width = snippetArray1[0];\n height = snippetArray1[1];\n this.activeObj.activePoint.width = width;\n this.activeObj.activePoint.height = height;\n this.activeObj.activePoint.startX = (this.dragPoint.startX = (originalWidth - width) / 2) + arcRadius;\n this.activeObj.activePoint.startY = (this.dragPoint.startY = (originalHeight - height) / 2) + arcRadius;\n this.activeObj.activePoint.endX = ((originalWidth - width) / 2 + width) - arcRadius;\n this.activeObj.activePoint.endY = ((originalHeight - height) / 2 + height) - arcRadius;\n if (this.activeObj.activePoint.startX < this.destLeft && this.destLeft + this.destWidth > this.lowerCanvas.clientWidth) {\n this.activeObj.activePoint.startX = this.destLeft;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + width;\n }\n if (this.activeObj.activePoint.startY < this.destTop && this.destTop + this.destHeight > this.lowerCanvas.clientHeight) {\n this.activeObj.activePoint.startY = this.destTop;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + height;\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n };\n ImageEditor.prototype.getScale = function (value, originalValue) {\n return value > originalValue ? originalValue / value : 1;\n };\n ImageEditor.prototype.calcMaxDimension = function (width, height) {\n var canvasMaxWidth = this.element.clientWidth;\n var canvasMaxHeight = this.element.clientHeight - this.toolbarHeight;\n canvasMaxHeight = Browser.isDevice ? canvasMaxHeight - this.toolbarHeight : canvasMaxHeight;\n canvasMaxWidth -= 30;\n canvasMaxHeight -= 30;\n var widthScale = canvasMaxWidth / width;\n var heightScale = canvasMaxHeight / height;\n var cssMaxWidth = Math.min(width, canvasMaxWidth);\n var cssMaxHeight = Math.min(height, canvasMaxHeight);\n if (widthScale < 1 && widthScale < heightScale) {\n cssMaxWidth = width * widthScale;\n cssMaxHeight = height * widthScale;\n }\n else if (heightScale < 1 && heightScale < widthScale) {\n cssMaxWidth = width * heightScale;\n cssMaxHeight = height * heightScale;\n }\n return { width: cssMaxWidth, height: cssMaxHeight };\n };\n ImageEditor.prototype.setMaximumDimension = function (degree, tempCanvas) {\n var newWidth;\n var newHeight;\n if (degree % 90 === 0 && degree % 180 !== 0) {\n newWidth = this.baseImg.height;\n newHeight = this.baseImg.width;\n }\n else if (degree % 180 === 0 || degree === 0) {\n newWidth = this.baseImg.width;\n newHeight = this.baseImg.height;\n }\n tempCanvas.width = newWidth;\n tempCanvas.height = newHeight;\n var maxDimension = this.calcMaxDimension(newWidth, newHeight);\n tempCanvas.style.maxWidth = maxDimension.width + 'px';\n tempCanvas.style.maxHeight = maxDimension.height + 'px';\n };\n ImageEditor.prototype.setCursor = function (x, y) {\n var isCropSelection = false;\n var splitWords;\n if (this.activeObj.horTopLine !== undefined) {\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if (!isCropSelection && this.togglePan) {\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'grab';\n }\n var cursor = this.upperCanvas.style.cursor;\n var actObj = extend({}, this.activeObj, {}, true);\n if (x >= (actObj.topLeftCircle.startX - ((actObj.topLeftCircle.radius * 2))) &&\n x <= (actObj.topLeftCircle.startX + ((actObj.topLeftCircle.radius * 2))) &&\n y >= (actObj.topLeftCircle.startY - ((actObj.topLeftCircle.radius * 2))) &&\n y <= (actObj.topLeftCircle.startY + ((actObj.topLeftCircle.radius * 2)))) {\n this.upperCanvas.style.cursor = 'nw-resize';\n }\n else if (x >= (actObj.topCenterCircle.startX - ((actObj.topLeftCircle.radius * 2))) &&\n x <= (actObj.topCenterCircle.startX + ((actObj.topLeftCircle.radius * 2))) &&\n y >= (actObj.topCenterCircle.startY - ((actObj.topLeftCircle.radius * 2))) &&\n y <= (actObj.topCenterCircle.startY + ((actObj.topLeftCircle.radius * 2)))) {\n this.upperCanvas.style.cursor = 'n-resize';\n }\n else if (x >= (actObj.topRightCircle.startX - ((actObj.topLeftCircle.radius * 2))) &&\n x <= (actObj.topRightCircle.startX + ((actObj.topLeftCircle.radius * 2))) &&\n y >= (actObj.topRightCircle.startY - ((actObj.topLeftCircle.radius * 2))) &&\n y <= (actObj.topRightCircle.startY + ((actObj.topLeftCircle.radius * 2)))) {\n this.upperCanvas.style.cursor = 'ne-resize';\n }\n else if (x >= (actObj.centerLeftCircle.startX - ((actObj.topLeftCircle.radius * 2))) &&\n x <= (actObj.centerLeftCircle.startX + ((actObj.topLeftCircle.radius * 2))) &&\n y >= (actObj.centerLeftCircle.startY - ((actObj.topLeftCircle.radius * 2))) &&\n y <= (actObj.centerLeftCircle.startY + ((actObj.topLeftCircle.radius * 2)))) {\n this.upperCanvas.style.cursor = 'w-resize';\n }\n else if (x >= (actObj.centerRightCircle.startX - ((actObj.topLeftCircle.radius * 2))) &&\n x <= (actObj.centerRightCircle.startX + ((actObj.topLeftCircle.radius * 2))) &&\n y >= (actObj.centerRightCircle.startY - ((actObj.topLeftCircle.radius * 2))) &&\n y <= (actObj.centerRightCircle.startY + ((actObj.topLeftCircle.radius * 2)))) {\n this.upperCanvas.style.cursor = 'e-resize';\n }\n else if (x >= (actObj.bottomLeftCircle.startX - ((actObj.topLeftCircle.radius * 2))) &&\n x <= (actObj.bottomLeftCircle.startX + ((actObj.topLeftCircle.radius * 2))) &&\n y >= (actObj.bottomLeftCircle.startY - ((actObj.topLeftCircle.radius * 2))) &&\n y <= (actObj.bottomLeftCircle.startY + ((actObj.topLeftCircle.radius * 2)))) {\n this.upperCanvas.style.cursor = 'sw-resize';\n }\n else if (x >= (actObj.bottomCenterCircle.startX - ((actObj.topLeftCircle.radius * 2))) &&\n x <= (actObj.bottomCenterCircle.startX + ((actObj.topLeftCircle.radius * 2))) &&\n y >= (actObj.bottomCenterCircle.startY - ((actObj.topLeftCircle.radius * 2))) &&\n y <= (actObj.bottomCenterCircle.startY + ((actObj.topLeftCircle.radius * 2)))) {\n this.upperCanvas.style.cursor = 's-resize';\n }\n else if (x >= (actObj.bottomRightCircle.startX - ((actObj.topLeftCircle.radius * 2))) &&\n x <= (actObj.bottomRightCircle.startX + ((actObj.topLeftCircle.radius * 2))) &&\n y >= (actObj.bottomRightCircle.startY - ((actObj.topLeftCircle.radius * 2))) &&\n y <= (actObj.bottomRightCircle.startY + ((actObj.topLeftCircle.radius * 2)))) {\n this.upperCanvas.style.cursor = 'se-resize';\n }\n else if ((x >= actObj.activePoint.startX &&\n x <= actObj.activePoint.endX) && (y >= actObj.activePoint.startY &&\n y <= actObj.activePoint.endY)) {\n if (isCropSelection) {\n this.upperCanvas.style.cursor = 'grab';\n }\n else {\n this.upperCanvas.style.cursor = 'move';\n }\n }\n else {\n if (this.currObjType.isCustomCrop) {\n this.upperCanvas.style.cursor = 'crosshair';\n }\n this.upperCanvas.style.cursor = 'default';\n }\n if (cursor === 'default' && this.upperCanvas.style.cursor === 'default' && isCropSelection) {\n this.upperCanvas.style.cursor = 'grab';\n }\n if (cursor === 'grab' && this.upperCanvas.style.cursor === 'default') {\n this.upperCanvas.style.cursor = 'grab';\n }\n }\n else if (this.togglePan && !this.togglePen) {\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'grab';\n }\n else {\n if (this.currObjType.isCustomCrop || this.togglePen) {\n this.upperCanvas.style.cursor = 'crosshair';\n }\n else {\n this.upperCanvas.style.cursor = 'default';\n }\n }\n if (this.upperCanvas.style.cursor === 'default' || this.upperCanvas.style.cursor === 'grab') {\n var cursor = this.upperCanvas.style.cursor;\n if (this.objColl.length > 0 && (this.upperCanvas.style.cursor !== 'grab' || !isCropSelection)) {\n this.setCursorFromObj(x, y, this.objColl);\n }\n if (cursor === 'grab' && this.upperCanvas.style.cursor === 'default') {\n this.upperCanvas.style.cursor = 'grab';\n }\n }\n if ((this.upperCanvas.style.cursor === 'default' || this.upperCanvas.style.cursor === 'grab')\n && !isNullOrUndefined(this.pointColl[0]) && (this.upperCanvas.style.cursor !== 'grab' || !isCropSelection)) {\n this.setCursorForFreehandDrawing(x, y);\n }\n };\n ImageEditor.prototype.setCursorForFreehandDrawing = function (x, y) {\n var isEntered = false;\n this.freehandDrawHoveredIndex = -1;\n for (var n = 0; n < this.freehandCounter; n++) {\n this.points = extend([], this.pointColl[n].points, []);\n this.pointCounter = 0;\n var len = this.points.length;\n for (var l = 0; l < len; l++) {\n if (l !== 0) {\n var isInside = false;\n if (!isNullOrUndefined(this.points[l - 1]) && !isNullOrUndefined(this.points[l])) {\n isInside = this.isInside(x, y, this.points[l - 1].x, this.points[l - 1].y, this.points[l].x, this.points[l].y);\n }\n if (isInside) {\n this.isFreehandDrawingPoint = true;\n this.freehandDrawHoveredIndex = n;\n this.hoverFreehandraw();\n this.upperCanvas.style.cursor = 'pointer';\n isEntered = true;\n break;\n }\n else if (!this.isFreehandDrawEditing || this.pointColl[n].isSelected) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n if (!isNullOrUndefined(this.activeObj.shape) && this.textArea.style.display === 'none') {\n this.drawObject('duplicate', this.activeObj);\n }\n if (this.isFreehandDrawEditing) {\n var strokeColor = this.pointColl[n].strokeColor = this.selectedFreehandColor;\n this.hoverFreehandraw(strokeColor, this.pointColl[n].strokeWidth);\n }\n else {\n this.freehandDrawHoveredIndex = null;\n }\n this.isFreehandDrawingPoint = false;\n }\n }\n else {\n if (x > this.points[l].x - this.pointColl[n].strokeWidth &&\n x < this.points[l].x + this.pointColl[n].strokeWidth &&\n y > this.points[l].y - this.pointColl[n].strokeWidth &&\n y < this.points[l].y + this.pointColl[n].strokeWidth) {\n this.isFreehandDrawingPoint = true;\n this.freehandDrawHoveredIndex = n;\n this.hoverFreehandraw();\n this.upperCanvas.style.cursor = 'pointer';\n isEntered = true;\n break;\n }\n else if (!this.isFreehandDrawEditing || this.pointColl[n].isSelected) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n if (!isNullOrUndefined(this.activeObj.shape) && this.textArea.style.display === 'none') {\n this.drawObject('duplicate', this.activeObj);\n }\n if (this.isFreehandDrawEditing) {\n var strokeColor = this.pointColl[n].strokeColor === '#fff' ? '#42a5f5' : this.pointColl[n].strokeColor;\n this.hoverFreehandraw(strokeColor, this.pointColl[n].strokeWidth);\n }\n this.isFreehandDrawingPoint = false;\n }\n }\n }\n if (isEntered) {\n break;\n }\n }\n };\n ImageEditor.prototype.setCursorFromObj = function (x, y, obj) {\n for (var i = 0; i < obj.length; i++) {\n var actObj = extend({}, obj[i], {}, true);\n if (x >= (actObj.topLeftCircle.startX - ((actObj.topLeftCircle.radius * 2))) &&\n x <= (actObj.topLeftCircle.startX + ((actObj.topLeftCircle.radius * 2))) &&\n y >= (actObj.topLeftCircle.startY - ((actObj.topLeftCircle.radius * 2))) &&\n y <= (actObj.topLeftCircle.startY + ((actObj.topLeftCircle.radius * 2)))) {\n this.upperCanvas.style.cursor = 'nw-resize';\n break;\n }\n else if (x >= (actObj.topCenterCircle.startX - ((actObj.topLeftCircle.radius * 2))) &&\n x <= (actObj.topCenterCircle.startX + ((actObj.topLeftCircle.radius * 2))) &&\n y >= (actObj.topCenterCircle.startY - ((actObj.topLeftCircle.radius * 2))) &&\n y <= (actObj.topCenterCircle.startY + ((actObj.topLeftCircle.radius * 2)))) {\n this.upperCanvas.style.cursor = 'n-resize';\n break;\n }\n else if (x >= (actObj.topRightCircle.startX - ((actObj.topLeftCircle.radius * 2))) &&\n x <= (actObj.topRightCircle.startX + ((actObj.topLeftCircle.radius * 2))) &&\n y >= (actObj.topRightCircle.startY - ((actObj.topLeftCircle.radius * 2))) &&\n y <= (actObj.topRightCircle.startY + ((actObj.topLeftCircle.radius * 2)))) {\n this.upperCanvas.style.cursor = 'ne-resize';\n break;\n }\n else if (x >= (actObj.centerLeftCircle.startX - ((actObj.topLeftCircle.radius * 2))) &&\n x <= (actObj.centerLeftCircle.startX + ((actObj.topLeftCircle.radius * 2))) &&\n y >= (actObj.centerLeftCircle.startY - ((actObj.topLeftCircle.radius * 2))) &&\n y <= (actObj.centerLeftCircle.startY + ((actObj.topLeftCircle.radius * 2)))) {\n this.upperCanvas.style.cursor = 'w-resize';\n break;\n }\n else if (x >= (actObj.centerRightCircle.startX - ((actObj.topLeftCircle.radius * 2))) &&\n x <= (actObj.centerRightCircle.startX + ((actObj.topLeftCircle.radius * 2))) &&\n y >= (actObj.centerRightCircle.startY - ((actObj.topLeftCircle.radius * 2))) &&\n y <= (actObj.centerRightCircle.startY + ((actObj.topLeftCircle.radius * 2)))) {\n this.upperCanvas.style.cursor = 'e-resize';\n break;\n }\n else if (x >= (actObj.bottomLeftCircle.startX - ((actObj.topLeftCircle.radius * 2))) &&\n x <= (actObj.bottomLeftCircle.startX + ((actObj.topLeftCircle.radius * 2))) &&\n y >= (actObj.bottomLeftCircle.startY - ((actObj.topLeftCircle.radius * 2))) &&\n y <= (actObj.bottomLeftCircle.startY + ((actObj.topLeftCircle.radius * 2)))) {\n this.upperCanvas.style.cursor = 'sw-resize';\n break;\n }\n else if (x >= (actObj.bottomCenterCircle.startX - ((actObj.topLeftCircle.radius * 2))) &&\n x <= (actObj.bottomCenterCircle.startX + ((actObj.topLeftCircle.radius * 2))) &&\n y >= (actObj.bottomCenterCircle.startY - ((actObj.topLeftCircle.radius * 2))) &&\n y <= (actObj.bottomCenterCircle.startY + ((actObj.topLeftCircle.radius * 2)))) {\n this.upperCanvas.style.cursor = 's-resize';\n break;\n }\n else if (x >= (actObj.bottomRightCircle.startX - ((actObj.topLeftCircle.radius * 2))) &&\n x <= (actObj.bottomRightCircle.startX + ((actObj.topLeftCircle.radius * 2))) &&\n y >= (actObj.bottomRightCircle.startY - ((actObj.topLeftCircle.radius * 2))) &&\n y <= (actObj.bottomRightCircle.startY + ((actObj.topLeftCircle.radius * 2)))) {\n this.upperCanvas.style.cursor = 'se-resize';\n break;\n }\n else if ((x >= actObj.activePoint.startX &&\n x <= actObj.activePoint.endX) && (y >= actObj.activePoint.startY &&\n y <= actObj.activePoint.endY)) {\n this.upperCanvas.style.cursor = 'move';\n break;\n }\n else {\n if (this.currObjType.isCustomCrop) {\n this.upperCanvas.style.cursor = 'crosshair';\n }\n this.upperCanvas.style.cursor = 'default';\n }\n }\n };\n ImageEditor.prototype.isInside = function (x, y, z1, z2, z3, z4) {\n var x1 = Math.min(z1, z3);\n var x2 = Math.max(z1, z3);\n var y1 = Math.min(z2, z4);\n var y2 = Math.max(z2, z4);\n if ((x1 <= x && x <= x2) && (y1 <= y && y <= y2)) {\n return true;\n }\n else {\n return false;\n }\n };\n ImageEditor.prototype.refreshDropDownBtn = function (isDisabled) {\n if (isNullOrUndefined(isDisabled)) {\n return;\n }\n var annotation = document.querySelector('#' + this.element.id + '_annotationBtn');\n if (!isNullOrUndefined(annotation)) {\n if (isDisabled) {\n annotation.classList.add('e-disabled');\n annotation.parentElement.classList.add('e-overlay');\n }\n else {\n annotation.classList.remove('e-disabled');\n annotation.parentElement.classList.remove('e-overlay');\n }\n getComponent(annotation, 'dropdown-btn').disabled = isDisabled;\n }\n var transform = document.querySelector('#' + this.element.id + '_transformBtn');\n if (!isNullOrUndefined(transform)) {\n if (isDisabled) {\n transform.classList.add('e-disabled');\n transform.parentElement.classList.add('e-overlay');\n }\n else {\n transform.classList.remove('e-disabled');\n transform.parentElement.classList.remove('e-overlay');\n }\n getComponent(transform, 'dropdown-btn').disabled = isDisabled;\n }\n var adjustment = document.querySelector('#' + this.element.id + '_adjustment');\n if (!isNullOrUndefined(adjustment)) {\n if (isDisabled) {\n adjustment.classList.add('e-disabled');\n adjustment.parentElement.classList.add('e-overlay');\n }\n else {\n adjustment.classList.remove('e-disabled');\n adjustment.parentElement.classList.remove('e-overlay');\n }\n getComponent(adjustment, 'btn').disabled = isDisabled;\n }\n var filter = document.querySelector('#' + this.element.id + '_filter');\n if (!isNullOrUndefined(filter)) {\n if (isDisabled) {\n filter.classList.add('e-disabled');\n filter.parentElement.classList.add('e-overlay');\n }\n else {\n filter.classList.remove('e-disabled');\n filter.parentElement.classList.remove('e-overlay');\n }\n getComponent(filter, 'btn').disabled = isDisabled;\n }\n };\n ImageEditor.prototype.downloadImg = function (blob, fileName) {\n var a = document.createElement('a');\n a.href = blob;\n a.target = '_parent';\n a.download = fileName;\n (document.body || document.documentElement).appendChild(a);\n a.click();\n a.parentNode.removeChild(a);\n };\n ImageEditor.prototype.toSVGImg = function (fileName) {\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n var tempCanvas = this.exportChangesToCanvas();\n var dataUrl = tempCanvas.toDataURL();\n hideSpinner(this.element);\n this.element.style.opacity = '1';\n var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('width', tempCanvas.style.maxWidth);\n svg.setAttribute('height', tempCanvas.style.maxHeight);\n var XLinkNS = 'http://www.w3.org/1999/xlink';\n var img = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n img.setAttributeNS(null, 'height', tempCanvas.height.toString());\n img.setAttributeNS(null, 'width', tempCanvas.width.toString());\n img.setAttributeNS(XLinkNS, 'xlink:href', dataUrl);\n svg.appendChild(img);\n var prefix = 'data:image/svg+xml;base64,';\n var header = '<svg' + ' xmlns=\"http://www.w3.org/2000/svg\"' + ' xmlns:xlink=\"http://www.w3.org/1999/xlink\"'\n + (\" width=\\\"\" + tempCanvas.width + \"\\\"\") + (\" height=\\\"\" + tempCanvas.height + \"\\\"\") + '>';\n var footer = '</svg>';\n var body = svg.innerHTML;\n var data = header + body + footer;\n var svgDataUrl = prefix + btoa(data);\n if (fileName === null) {\n return svgDataUrl;\n }\n else {\n this.downloadImg(svgDataUrl, fileName + '.' + 'svg');\n return null;\n }\n };\n ImageEditor.prototype.toBlobFn = function (fileName, type) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n var tempCanvas = this.exportChangesToCanvas();\n // eslint-disable-next-line @typescript-eslint/tslint/config\n tempCanvas.toBlob(function (blob) {\n var blobUrl = URL.createObjectURL(blob);\n proxy.downloadImg(blobUrl, fileName + '.' + type);\n hideSpinner(proxy.element);\n proxy.element.style.opacity = '1';\n }, 'image/png');\n };\n ImageEditor.prototype.exportChangesToCanvas = function () {\n var ratio = this.calcRatio();\n var tempContextFilter = this.lowerContext.filter;\n // Manipulating blur value\n if (this.lowerContext.filter !== 'none') {\n var splitWords = this.lowerContext.filter.split(' ');\n var value = parseFloat(splitWords[5].split('(')[1]);\n value *= ((ratio.width + ratio.height) / 2);\n splitWords[5] = 'blur(' + value + 'px)';\n this.lowerContext.filter = splitWords.join(' ');\n }\n var maxDimension;\n var tempCanvas = this.createElement('canvas', {\n id: this.element.id + '_tempCanvas', attrs: { name: 'canvasImage' }\n });\n var tempContext = tempCanvas.getContext('2d');\n tempContext.filter = this.lowerContext.filter;\n if (isNullOrUndefined(this.currSelectionPoint)) {\n tempCanvas.width = this.baseImg.width;\n tempCanvas.height = this.baseImg.height;\n maxDimension = this.calcMaxDimension(this.baseImg.width, this.baseImg.height);\n tempCanvas.style.maxWidth = maxDimension.width + 'px';\n tempCanvas.style.maxHeight = maxDimension.height + 'px';\n tempContext.filter = this.lowerContext.filter;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n tempContext.drawImage(this.baseImg, this.srcLeft, this.srcTop, this.srcWidth, this.srcHeight, 0, 0, this.baseImg.width, this.baseImg.height);\n this.lowerContext.filter = temp;\n }\n else {\n tempCanvas.width = this.destWidth;\n tempCanvas.height = this.destHeight;\n tempContext.filter = this.lowerContext.filter;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n tempContext.drawImage(this.baseImg, this.srcLeft, this.srcTop, this.srcWidth, this.srcHeight, 0, 0, this.destWidth, this.destHeight);\n this.lowerContext.filter = temp;\n }\n if (this.degree !== 0 || this.currFlipState !== '') {\n this.updateSaveContext(tempContext);\n this.exportTransformedImage(tempContext);\n }\n if (this.objColl.length > 0) {\n var temp = tempContext.filter;\n tempContext.filter = 'none';\n var tempObjColl = extend([], this.objColl, [], true);\n for (var i = 0; i < this.objColl.length; i++) {\n // Subtracting destination left and top points\n this.objColl[i].activePoint.startX -= this.destLeft;\n this.objColl[i].activePoint.startY -= this.destTop;\n this.objColl[i].activePoint.endX -= this.destLeft;\n this.objColl[i].activePoint.endY -= this.destTop;\n this.objColl[i].activePoint.width = this.objColl[i].activePoint.endX -\n this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.height = this.objColl[i].activePoint.endY -\n this.objColl[i].activePoint.startY;\n // Manipulating points\n if (isNullOrUndefined(this.currSelectionPoint)) {\n this.objColl[i].activePoint.startX *= ratio.width;\n this.objColl[i].activePoint.startY *= ratio.height;\n this.objColl[i].activePoint.endX *= ratio.width;\n this.objColl[i].activePoint.endY *= ratio.height;\n this.objColl[i].activePoint.width = this.objColl[i].activePoint.endX -\n this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.height = this.objColl[i].activePoint.endY -\n this.objColl[i].activePoint.startY;\n this.objColl[i].strokeSettings.strokeWidth *= ((ratio.width + ratio.height) / 2);\n if (this.objColl[i].shape === 'text') {\n this.objColl[i].textSettings.fontSize *= ((ratio.width + ratio.height) / 2);\n }\n }\n this.drawObject('saveContext', this.objColl[i], null, null, true, tempContext);\n }\n tempContext.filter = temp;\n this.refreshActiveObj();\n this.objColl = tempObjColl;\n }\n if (this.freehandCounter > 0) {\n // eslint-disable-next-line\n var tempPointColl = extend({}, this.pointColl, {}, true);\n for (var n = 0; n < this.freehandCounter; n++) {\n this.points = extend([], this.pointColl[n].points, []);\n this.pointCounter = 0;\n var len = this.points.length;\n if (isNullOrUndefined(this.currSelectionPoint)) {\n this.pointColl[n].strokeWidth *= ((ratio.width + ratio.height) / 2);\n for (var l = 0; l < len; l++) {\n this.points[l].x = (this.points[l].x - this.destLeft) * ratio.width;\n this.points[l].y = (this.points[l].y - this.destTop) * ratio.height;\n }\n }\n else {\n for (var l = 0; l < len; l++) {\n this.points[l].x -= this.destLeft;\n this.points[l].y -= this.destTop;\n }\n }\n }\n this.freehandRedraw(tempContext);\n this.pointColl = tempPointColl;\n }\n if (this.isCircleCrop) {\n this.cropCircle(tempContext, true);\n }\n this.lowerContext.filter = tempContextFilter;\n return tempCanvas;\n };\n ImageEditor.prototype.exportTransformedImage = function (tempContext) {\n var degree = this.degree;\n for (var i = 0; i < this.rotateFlipColl.length; i++) {\n if (typeof (this.rotateFlipColl[i]) === 'number') {\n this.exportRotate(tempContext, this.rotateFlipColl[i]);\n }\n else if (this.rotateFlipColl[i] === 'horizontal') {\n this.exportHorizontalFlip(tempContext);\n }\n else if (this.rotateFlipColl[i] === 'vertical') {\n this.exportVerticalFlip(tempContext);\n }\n }\n this.degree = degree;\n };\n ImageEditor.prototype.exportRotate = function (tempContext, degree) {\n if (isNullOrUndefined(this.currSelectionPoint)) {\n this.setMaximumDimension(this.degree, tempContext.canvas);\n tempContext.translate(tempContext.canvas.width / 2, tempContext.canvas.height / 2);\n tempContext.rotate(Math.PI / 180 * degree);\n tempContext.drawImage(this.inMemoryCanvas, this.srcLeft, this.srcTop, this.srcWidth, this.srcHeight, -tempContext.canvas.height / 2, -tempContext.canvas.width / 2, tempContext.canvas.height, tempContext.canvas.width);\n }\n else {\n tempContext.translate(tempContext.canvas.width / 2, tempContext.canvas.height / 2);\n tempContext.rotate(Math.PI / 180 * degree);\n tempContext.drawImage(this.inMemoryCanvas, -tempContext.canvas.height / 2, -tempContext.canvas.width / 2, tempContext.canvas.height, tempContext.canvas.width);\n }\n this.updateSaveContext(tempContext);\n };\n ImageEditor.prototype.exportHorizontalFlip = function (tempContext) {\n tempContext.translate(tempContext.canvas.width, 0);\n tempContext.scale(-1, 1);\n tempContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.updateSaveContext(tempContext);\n };\n ImageEditor.prototype.exportVerticalFlip = function (tempContext) {\n tempContext.translate(0, tempContext.canvas.height);\n tempContext.scale(1, -1);\n tempContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.updateSaveContext(tempContext);\n };\n ImageEditor.prototype.updateSaveContext = function (tempContext) {\n tempContext.setTransform(1, 0, 0, 1, 0, 0);\n var imageData = tempContext.getImageData(0, 0, tempContext.canvas.width, tempContext.canvas.height);\n this.inMemoryCanvas.width = imageData.width;\n this.inMemoryCanvas.height = imageData.height;\n this.inMemoryContext.putImageData(imageData, 0, 0);\n };\n ImageEditor.prototype.addLetter = function (letter) {\n if (this.textArea.style.display === 'none' && (this.currObjType.isText || this.activeObj.shape === 'text')) {\n if (letter === 'Backspace') {\n this.keyHistory = this.keyHistory.slice(0, -1);\n }\n else {\n this.keyHistory += letter;\n }\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.updateFontStyles();\n var width = this.upperContext.measureText(this.keyHistory + this.tempKeyHistory).width\n + this.activeObj.textSettings.fontSize * 0.5;\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n this.upperContext.fillText(this.keyHistory + this.tempKeyHistory, this.activeObj.activePoint.startX, this.activeObj.activePoint.startY +\n this.activeObj.textSettings.fontSize);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.currObjType.isText = true;\n this.setActivePoint(width, height);\n }\n };\n ImageEditor.prototype.updateFontStyles = function (isTextBox) {\n this.upperContext.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n this.upperContext.fillStyle = this.activeObj.strokeSettings.strokeColor;\n var textStyle = '';\n if (this.activeObj.textSettings.bold) {\n textStyle = 'bold ';\n }\n if (this.activeObj.textSettings.italic) {\n textStyle = 'italic ';\n }\n if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n textStyle = 'italic bold ';\n }\n var fontSize = isTextBox ? parseFloat(this.textArea.style.fontSize) : this.activeObj.textSettings.fontSize;\n var fontFamily = this.textArea.style.display === 'block' ? this.textArea.style.fontFamily : this.activeObj.textSettings.fontFamily;\n this.upperContext.font = textStyle + fontSize + 'px' + ' ' + fontFamily;\n };\n ImageEditor.prototype.textFlipDegree = function (canvasDraw, startX, startY) {\n var rows = this.activeObj.keyHistory.split('\\n');\n var height = this.activeObj.textSettings.fontSize;\n var lineHeight = ((height * rows.length) - (this.activeObj.textSettings.fontSize * rows.length)) / rows.length;\n var yPoint = (this.activeObj.textSettings.fontSize * 0.85) + lineHeight;\n for (var i = 0; i < rows.length; i++) {\n var text = rows[i];\n if (i > 0) {\n if (i === 1) {\n yPoint -= (this.activeObj.textSettings.fontSize * 0.85);\n }\n yPoint += this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.15;\n }\n canvasDraw.fillText(text, startX + this.activeObj.textSettings.fontSize * 0.15, startY +\n yPoint + (i > 0 ? this.activeObj.textSettings.fontSize * 0.25 : -this.activeObj.textSettings.fontSize * 0.35));\n }\n };\n ImageEditor.prototype.rotateText = function (canvasDraw) {\n var startX = this.activeObj.activePoint.startX;\n var startY = this.activeObj.activePoint.startY;\n var degree;\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (degree % 360 === 0 && (this.degree !== -360 || this.currFlipState === '')) {\n startX = this.activeObj.activePoint.startX + this.activeObj.textSettings.fontSize * 0.15;\n startY = this.activeObj.activePoint.startY + (this.activeObj.activePoint.endY - this.activeObj.activePoint.startY);\n var rows = this.activeObj.keyHistory.split('\\n');\n for (var i = 0; i < rows.length; i++) {\n startY = this.activeObj.activePoint.startY + (i * this.activeObj.textSettings.fontSize +\n this.activeObj.textSettings.fontSize * 0.25);\n canvasDraw.fillText(rows[i], startX, startY);\n }\n }\n else if (degree % 90 === 0 && degree % 180 !== 0) {\n canvasDraw.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n canvasDraw.rotate(Math.PI / 180 * degree);\n canvasDraw.translate(-this.lowerCanvas.height / 2, -this.lowerCanvas.width / 2);\n if (degree % 90 === 0 && degree % 270 !== 0) {\n startY = (this.lowerCanvas.width - this.activeObj.activePoint.endX) + this.activeObj.textSettings.fontSize * 0.4;\n startX = this.activeObj.activePoint.startY;\n }\n else if (degree % 270 === 0) {\n startX = this.lowerCanvas.height - this.activeObj.activePoint.endY;\n startY = this.activeObj.activePoint.startX + this.activeObj.textSettings.fontSize * 0.4;\n }\n this.textFlipDegree(canvasDraw, startX, startY);\n canvasDraw.translate(this.lowerCanvas.height / 2, this.lowerCanvas.width / 2);\n canvasDraw.rotate(Math.PI / 180 * -degree);\n canvasDraw.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n }\n else {\n canvasDraw.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n canvasDraw.rotate(Math.PI / 180 * degree);\n startX = this.lowerCanvas.width - this.activeObj.activePoint.endX;\n startY = (this.lowerCanvas.height - this.activeObj.activePoint.endY) + this.activeObj.textSettings.fontSize * 0.4;\n canvasDraw.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n this.textFlipDegree(canvasDraw, startX, startY);\n canvasDraw.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n canvasDraw.rotate(Math.PI / 180 * -degree);\n canvasDraw.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n }\n if (this.degree === 360 || this.degree === -360) {\n this.degree = 0;\n }\n };\n ImageEditor.prototype.redrawObj = function (degree) {\n if (this.objColl.length > 0) {\n if (degree === 'horizontal' || degree === 'vertical' || degree === 'Horizontal' || degree === 'Vertical' ||\n degree === 'horizontalVertical' || degree === 'verticalHorizontal') {\n this.updateCurrentActiveObjPoint(degree.toLowerCase());\n }\n else if (typeof (degree) === 'number') {\n this.updateCurrentActiveObjPoint(degree);\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = this.getDefaultFilter();\n for (var i = 0; i < this.objColl.length; i++) {\n var splitWords = this.objColl[i].shape.split('-');\n if (splitWords[0] !== 'crop') {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n }\n this.lowerContext.filter = tempFilter;\n }\n }\n };\n ImageEditor.prototype.updateCurrentActiveObjPoint = function (degree) {\n var currActObjIndex;\n for (var index = 0; index < this.objColl.length; index++) {\n if (this.activeObj.shape === this.objColl[index].shape &&\n this.activeObj.activePoint.startX === this.objColl[index].activePoint.startX &&\n this.activeObj.activePoint.startY === this.objColl[index].activePoint.startY &&\n this.activeObj.activePoint.endX === this.objColl[index].activePoint.endX &&\n this.activeObj.activePoint.endY === this.objColl[index].activePoint.endY &&\n this.activeObj.currIndex === this.objColl[index].currIndex) {\n currActObjIndex = index;\n break;\n }\n }\n if (degree === 'horizontal' || degree === 'vertical' || degree === 'Horizontal' || degree === 'Vertical' ||\n degree === 'horizontalvertical' || degree === 'verticalhorizontal') {\n if (degree === 'horizontal' || degree === 'Horizontal') {\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].shapeFlip !== this.currFlipState) {\n if (this.objColl[i].activePoint.startX <= this.destLeft + (this.destWidth / 2)) {\n this.objColl[i].activePoint.endX = (this.destLeft + this.destWidth) -\n (this.objColl[i].activePoint.startX - this.destLeft);\n this.objColl[i].activePoint.startX = this.objColl[i].activePoint.endX -\n this.objColl[i].activePoint.width;\n this.updateActiveObject(this.objColl[i].activePoint, this.objColl[i]);\n }\n else if (this.objColl[i].activePoint.startX >= this.destLeft + (this.destWidth / 2)) {\n this.objColl[i].activePoint.startX = this.destLeft + (this.destLeft + this.destWidth -\n this.objColl[i].activePoint.endX);\n this.objColl[i].activePoint.endX = this.objColl[i].activePoint.startX +\n this.objColl[i].activePoint.width;\n this.updateActiveObject(this.objColl[i].activePoint, this.objColl[i]);\n }\n this.objColl[i].imageRatio = { startX: ((this.objColl[i].activePoint.startX -\n this.destLeft) / this.destWidth),\n startY: ((this.objColl[i].activePoint.startY - this.destTop) / this.destHeight),\n endX: ((this.objColl[i].activePoint.endX - this.destLeft) / this.destWidth),\n endY: ((this.objColl[i].activePoint.endY - this.destTop) / this.destHeight),\n width: this.destWidth / this.objColl[i].activePoint.width,\n height: this.destHeight / this.objColl[i].activePoint.height };\n this.objColl[i].shapeFlip = this.currFlipState;\n }\n }\n }\n else if (degree === 'vertical' || degree === 'Vertical') {\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].shapeFlip !== this.currFlipState) {\n if (this.objColl[i].activePoint.startY <= this.destTop + (this.destHeight / 2)) {\n this.objColl[i].activePoint.endY = (this.destTop + this.destHeight) -\n (this.objColl[i].activePoint.startY - this.destTop);\n this.objColl[i].activePoint.startY = this.objColl[i].activePoint.endY -\n this.objColl[i].activePoint.height;\n this.updateActiveObject(this.objColl[i].activePoint, this.objColl[i]);\n }\n else if (this.objColl[i].activePoint.startY >= this.lowerCanvas.height / 2) {\n this.objColl[i].activePoint.startY = this.destTop + (this.destTop + this.destHeight -\n this.objColl[i].activePoint.endY);\n this.objColl[i].activePoint.endY = this.objColl[i].activePoint.startY +\n this.objColl[i].activePoint.height;\n this.updateActiveObject(this.objColl[i].activePoint, this.objColl[i]);\n }\n this.objColl[i].imageRatio = { startX: ((this.objColl[i].activePoint.startX -\n this.destLeft) / this.destWidth),\n startY: ((this.objColl[i].activePoint.startY - this.destTop) / this.destHeight),\n endX: ((this.objColl[i].activePoint.endX - this.destLeft) / this.destWidth),\n endY: ((this.objColl[i].activePoint.endY - this.destTop) / this.destHeight),\n width: this.destWidth / this.objColl[i].activePoint.width,\n height: this.destHeight / this.objColl[i].activePoint.height };\n this.objColl[i].shapeFlip = this.currFlipState;\n }\n }\n }\n else if (degree === 'verticalhorizontal' || degree === 'horizontalvertical') {\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].shapeFlip !== this.currFlipState) {\n if (this.objColl[i].activePoint.startX <= this.destLeft + (this.destWidth / 2)) {\n this.objColl[i].activePoint.endX = (this.destLeft + this.destWidth) -\n (this.objColl[i].activePoint.startX - this.destLeft);\n this.objColl[i].activePoint.startX = this.objColl[i].activePoint.endX -\n this.objColl[i].activePoint.width;\n this.updateActiveObject(this.objColl[i].activePoint, this.objColl[i]);\n }\n else if (this.objColl[i].activePoint.startX >= this.destLeft + (this.destWidth / 2)) {\n this.objColl[i].activePoint.startX = this.destLeft + (this.destLeft + this.destWidth -\n this.objColl[i].activePoint.endX);\n this.objColl[i].activePoint.endX = this.objColl[i].activePoint.startX +\n this.objColl[i].activePoint.width;\n this.updateActiveObject(this.objColl[i].activePoint, this.objColl[i]);\n }\n if (this.objColl[i].activePoint.startY <= this.destTop + (this.destHeight / 2)) {\n this.objColl[i].activePoint.endY = (this.destTop + this.destHeight) -\n (this.objColl[i].activePoint.startY - this.destTop);\n this.objColl[i].activePoint.startY = this.objColl[i].activePoint.endY -\n this.objColl[i].activePoint.height;\n this.updateActiveObject(this.objColl[i].activePoint, this.objColl[i]);\n }\n else if (this.objColl[i].activePoint.startY >= this.lowerCanvas.height / 2) {\n this.objColl[i].activePoint.startY = this.destTop + (this.destTop + this.destHeight -\n this.objColl[i].activePoint.endY);\n this.objColl[i].activePoint.endY = this.objColl[i].activePoint.startY +\n this.objColl[i].activePoint.height;\n this.updateActiveObject(this.objColl[i].activePoint, this.objColl[i]);\n }\n this.objColl[i].imageRatio = { startX: ((this.objColl[i].activePoint.startX -\n this.destLeft) / this.destWidth),\n startY: ((this.objColl[i].activePoint.startY - this.destTop) / this.destHeight),\n endX: ((this.objColl[i].activePoint.endX - this.destLeft) / this.destWidth),\n endY: ((this.objColl[i].activePoint.endY - this.destTop) / this.destHeight),\n width: this.destWidth / this.objColl[i].activePoint.width,\n height: this.destHeight / this.objColl[i].activePoint.height };\n this.objColl[i].shapeFlip = this.currFlipState;\n }\n }\n }\n if (currActObjIndex !== undefined) {\n this.activeObj = extend({}, this.objColl[currActObjIndex], {}, true);\n }\n }\n else if (degree === 90) {\n this.rotateObjColl();\n }\n else if (degree === -90) {\n for (var i = 0; i < 3; i++) {\n this.rotateObjColl();\n }\n }\n else if (typeof (degree) === 'number') {\n if (degree > 0) {\n this.rotateObjColl();\n }\n else {\n for (var i = 0; i < 3; i++) {\n this.rotateObjColl();\n }\n }\n }\n };\n ImageEditor.prototype.rotateObjColl = function () {\n for (var i = 0; i < this.objColl.length; i++) {\n this.objColl[i].activePoint.startY = this.destTop + (this.destHeight * this.objColl[i].imageRatio.startX);\n this.objColl[i].activePoint.endY = this.destTop + (this.destHeight * this.objColl[i].imageRatio.endX);\n this.objColl[i].activePoint.startX = (this.destLeft + this.destWidth) -\n (this.destWidth * this.objColl[i].imageRatio.endY);\n this.objColl[i].activePoint.endX = (this.destLeft + this.destWidth) -\n (this.destWidth * this.objColl[i].imageRatio.startY);\n this.objColl[i].activePoint.width = this.objColl[i].activePoint.endX -\n this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.height = this.objColl[i].activePoint.endY -\n this.objColl[i].activePoint.startY;\n this.updateFontSize(this.objColl[i]);\n }\n for (var i = 0; i < this.objColl.length; i++) {\n this.updateActiveObject(this.objColl[i].activePoint, this.objColl[i]);\n }\n // Update current image ratio for all objects\n for (var i = 0; i < this.objColl.length; i++) {\n this.objColl[i].imageRatio = { startX: ((this.objColl[i].activePoint.startX -\n this.destLeft) / this.destWidth),\n startY: ((this.objColl[i].activePoint.startY - this.destTop) / this.destHeight),\n endX: ((this.objColl[i].activePoint.endX - this.destLeft) / this.destWidth),\n endY: ((this.objColl[i].activePoint.endY - this.destTop) / this.destHeight),\n width: this.destWidth / this.objColl[i].activePoint.width,\n height: this.destHeight / this.objColl[i].activePoint.height };\n }\n };\n ImageEditor.prototype.setTextFontSize = function (obj) {\n if (obj.shape === 'text') {\n var maxText = this.getMaxText(null, obj.keyHistory);\n var degree = void 0;\n if (obj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - obj.shapeDegree;\n }\n var multiplier = 2;\n if (maxText.length === 1) {\n multiplier = 1;\n }\n if (degree === 0 || degree === 180 || degree === -180) {\n obj.textSettings.fontSize = (obj.activePoint.width / maxText.length) * multiplier;\n }\n else {\n obj.textSettings.fontSize = (obj.activePoint.height / maxText.length) * multiplier;\n }\n }\n };\n ImageEditor.prototype.redrawShape = function (obj) {\n for (var i = 0; i < this.objColl.length; i++) {\n if (JSON.stringify(obj) === JSON.stringify(this.objColl[i])) {\n this.objColl.splice(i, 1);\n break;\n }\n }\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n if (this.isPreventDragging) {\n if (this.activeObj.activePoint.startX > this.destLeft) {\n this.isPreventDragging = false;\n }\n this.drawObject('duplicate', null, null, null, true);\n }\n else {\n this.drawObject('duplicate', null, null, null, true);\n }\n };\n ImageEditor.prototype.applyActObj = function () {\n var isActObj = false;\n if (this.activeObj.shape !== undefined && this.activeObj.shape === 'text' && this.activeObj.keyHistory === '') {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n else {\n var splitWords = void 0;\n var isCropSelection = false;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if (!isNullOrUndefined(this.activeObj.shape) && !isCropSelection) {\n for (var i = 0; i < this.objColl.length; i++) {\n if (JSON.stringify(this.activeObj) === JSON.stringify(this.objColl[i])) {\n isActObj = true;\n break;\n }\n }\n if (!isActObj) {\n if (isNullOrUndefined(this.activeObj.currIndex)) {\n this.activeObj.currIndex = 'shape_' + (this.objColl.length + 1);\n }\n this.updateImageRatioForActObj();\n var splitWords_3 = this.activeObj.currIndex.split('_');\n var tempObjColl = this.objColl.splice(0, parseInt(splitWords_3[1], 10) - 1);\n tempObjColl.push(extend({}, this.activeObj, {}, true));\n for (var i = 0; i < this.objColl.length; i++) {\n tempObjColl.push(this.objColl[i]);\n }\n this.objColl = tempObjColl;\n tempObjColl = [];\n this.refreshActiveObj();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n //this.zoomFreehandDrawColl();\n this.clearOuterCanvas(this.lowerContext);\n this.clearOuterCanvas(this.upperContext);\n this.currObjType.shape = '';\n this.refreshActiveObj();\n if (this.isCircleCrop) {\n this.cropCircle(this.lowerContext);\n }\n }\n }\n }\n };\n ImageEditor.prototype.apply = function (shape, obj, canvas) {\n if (!this.disabled) {\n if ((this.togglePen) && !this.currObjType.isCustomCrop) {\n var destLeft = this.destLeft;\n var destTop = this.destTop;\n var destWidth = this.destWidth;\n var destHeight = this.destHeight;\n this.callUpdateCurrentTransformedState();\n var temp = this.lowerContext.filter;\n this.lowerContext.filter = 'none';\n this.togglePen = false;\n this.iterateObjColl();\n this.freehandRedraw(this.lowerContext);\n this.togglePen = false;\n if (this.isCircleCrop || (!isNullOrUndefined(this.currSelectionPoint) && this.currSelectionPoint.shape === 'crop-circle')) {\n this.cropCircle(this.lowerContext);\n }\n this.destLeft = destLeft;\n this.destTop = destTop;\n this.destWidth = destWidth;\n this.destHeight = destHeight;\n this.lowerContext.filter = temp;\n }\n else {\n canvas = canvas ? canvas : 'original';\n this.currObjType.shape = shape !== undefined ? shape : this.currObjType.shape;\n if (this.currObjType.shape !== '') {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.drawObject(canvas, obj);\n this.activeObj.shape = this.currObjType.shape.toLowerCase();\n if (!shape && this.currObjType.shape !== '' && !this.currObjType.isCustomCrop) {\n this.objColl.push(extend({}, this.activeObj, {}, true));\n }\n this.keyHistory = '';\n }\n }\n }\n };\n ImageEditor.prototype.setCenterPoints = function (text, width, height) {\n var renderWidth;\n var renderHeight;\n if (text && width && height) {\n renderWidth = width;\n renderHeight = height;\n }\n else {\n renderWidth = this.activeObj.activePoint.width;\n renderHeight = this.activeObj.activePoint.height;\n }\n this.activeObj.activePoint.startX = (this.lowerCanvas.width / 2) - renderWidth / 2;\n this.activeObj.activePoint.startY = (this.lowerCanvas.height / 2) - renderHeight / 2;\n this.activeObj.activePoint.endX = (this.lowerCanvas.width / 2) + renderWidth / 2;\n this.activeObj.activePoint.endY = (this.lowerCanvas.height / 2) + renderHeight / 2;\n if (text && width && height) {\n this.textStartPoints.x = this.activeObj.activePoint.startX;\n this.textStartPoints.y = this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.drawShape = function (type, strokeWidth, strokeColor, fillColor, start, width, height) {\n if (!this.disabled && this.isImageLoaded) {\n this.redrawActObj();\n var objColl = extend([], this.objColl, [], true);\n this.togglePen = false;\n this.keyHistory = '';\n this.upperCanvas.style.display = 'block';\n this.refreshActiveObj();\n this.currObjType.shape = type;\n if (this.currObjType.shape.toLowerCase() !== 'freehanddraw' && this.currObjType.shape.toLowerCase() !== '') {\n this.activeObj.shape = this.currObjType.shape.toLowerCase();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n this.activeObj.strokeSettings.strokeWidth = strokeWidth ? strokeWidth : this.activeObj.strokeSettings.strokeWidth;\n this.activeObj.strokeSettings.strokeColor = strokeColor ? strokeColor : this.activeObj.strokeSettings.strokeColor;\n this.activeObj.strokeSettings.fillColor = fillColor ? fillColor : this.activeObj.strokeSettings.fillColor;\n var tempWidth = this.destWidth > 100 ? 100 : this.destWidth / 2;\n var tempHeight = this.destHeight > 100 ? 100 : this.destHeight / 2;\n this.activeObj.activePoint.width = tempWidth;\n this.activeObj.activePoint.height = tempHeight;\n if (this.currObjType.shape.toLowerCase() === 'line') {\n this.activeObj.lineDraw = 'horizontal';\n this.activeObj.activePoint.height /= 2;\n }\n else if (this.currObjType.shape.toLowerCase() === 'rectangle') {\n this.activeObj.activePoint.width += this.activeObj.activePoint.width / 2;\n }\n if (this.currObjType.shape.toLowerCase() === 'ellipse' && width) {\n this.activeObj.activePoint.width = 2 * width;\n this.activeObj.activePoint.height = 2 * height;\n }\n if (width && height) {\n this.activeObj.activePoint.width = width;\n this.activeObj.activePoint.height = height;\n }\n if (!isNullOrUndefined(start)) {\n this.activeObj.activePoint.startX = start.x;\n this.activeObj.activePoint.startY = start.y;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n }\n else {\n this.setCenterPoints();\n }\n this.currObjType.isDragging = this.currObjType.isCustomCrop = false;\n this.activeObj.shapeDegree = this.degree;\n this.activeObj.shapeFlip = this.currFlipState;\n this.activeObj.flipObjColl = [];\n var shapeSettings = this.updatePreviousShapeSettings();\n var shapeChangingArgs = { action: 'insert', previousShapeSettings: shapeSettings,\n currentShapeSettings: shapeSettings };\n this.trigger('shapeChanging', shapeChangingArgs);\n this.updateShapeChangeEventArgs(shapeChangingArgs.currentShapeSettings);\n this.drawObject('duplicate');\n this.isShapeInserted = true;\n this.updateUndoRedoObj(objColl);\n this.refreshToolbar('shapes');\n }\n }\n };\n ImageEditor.prototype.drawShapeText = function (text, fontFamily, fontSize, bold, italic, strokeColor, x, y) {\n if (!this.disabled && this.isImageLoaded) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.togglePen = false;\n this.redrawActObj();\n var objColl = extend([], this.objColl, [], true);\n this.keyHistory = '';\n this.refreshActiveObj();\n this.activeObj.shape = 'text';\n this.currObjType.isCustomCrop = false;\n this.currObjType.isText = this.currObjType.isInitialText = true;\n this.upperCanvas.style.display = 'block';\n this.currObjType.shape = this.activeObj.shape = 'text';\n if (isNullOrUndefined(this.activeObj.textSettings)) {\n this.activeObj.textSettings = this.textSettings;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n this.activeObj.strokeSettings.strokeColor = strokeColor ? strokeColor : this.activeObj.strokeSettings.strokeColor;\n this.activeObj.textSettings.text = text ? text : this.activeObj.textSettings.text;\n this.activeObj.textSettings.fontFamily = fontFamily ? fontFamily : this.activeObj.textSettings.fontFamily;\n this.activeObj.textSettings.text = text ? text : this.activeObj.textSettings.text;\n this.activeObj.textSettings.fontFamily = fontFamily ? fontFamily : this.activeObj.textSettings.fontFamily;\n this.activeObj.textSettings.fontSize = fontSize ? fontSize : this.activeObj.textSettings.fontSize;\n this.activeObj.textSettings.bold = bold ? bold : this.activeObj.textSettings.bold;\n this.activeObj.textSettings.italic = italic ? italic : this.activeObj.textSettings.italic;\n if (isNullOrUndefined(this.activeObj.textSettings.fontSize)) {\n if (this.lowerCanvas.width > this.lowerCanvas.height) {\n this.activeObj.textSettings.fontSize = Math.floor((this.lowerCanvas.width / 20));\n }\n else {\n this.activeObj.textSettings.fontSize = Math.floor((this.lowerCanvas.height / 20));\n }\n if (this.activeObj.textSettings.fontSize < 20) {\n this.activeObj.textSettings.fontSize = 20;\n }\n }\n if (this.destWidth < 100) {\n this.activeObj.textSettings.fontSize = Math.floor((this.destWidth / 20));\n }\n else if (this.destHeight < 100) {\n this.activeObj.textSettings.fontSize = Math.floor((this.destHeight / 20));\n }\n this.activeObj.shapeDegree = this.degree;\n this.activeObj.shapeFlip = this.currFlipState;\n this.activeObj.flipObjColl = [];\n this.updateFontStyles();\n var width = this.upperContext.measureText(this.activeObj.textSettings.text).width +\n this.activeObj.textSettings.fontSize * 0.5;\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n if (!isNullOrUndefined(x) && !isNullOrUndefined(y)) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.startY = y;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + width;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + height;\n }\n else {\n this.setCenterPoints(true, width, height);\n }\n var shapeSettings = this.updatePreviousShapeSettings();\n var shapeChangingArgs = { action: 'insert', previousShapeSettings: shapeSettings,\n currentShapeSettings: shapeSettings };\n this.trigger('shapeChanging', shapeChangingArgs);\n this.updateShapeChangeEventArgs(shapeChangingArgs.currentShapeSettings);\n this.addLetter(this.activeObj.textSettings.text);\n this.activeObj.textFlip = this.currFlipState;\n this.updateFontRatio(this.activeObj);\n this.objColl.push(this.activeObj);\n this.undoRedoColl.push({ operation: 'shapeTransform', value: null,\n currentObj: extend([], this.objColl, [], true), previousObj: objColl, zoomFactor: this.zoomFactor,\n sharpen: this.adjustmentLevel.sharpen, bw: this.adjustmentLevel.bw });\n this.undoRedoStep++;\n this.redrawShape(this.objColl[this.objColl.length - 1]);\n this.isShapeInserted = true;\n this.refreshToolbar('text');\n }\n };\n ImageEditor.prototype.updateShapeChangeEventArgs = function (shapeSettings) {\n this.activeObj.currIndex = shapeSettings.id;\n this.activeObj.activePoint.startX = shapeSettings.startX;\n this.activeObj.activePoint.startY = shapeSettings.startY;\n this.activeObj.activePoint.width = shapeSettings.width;\n this.activeObj.activePoint.height = shapeSettings.height;\n this.activeObj.strokeSettings.strokeColor = shapeSettings.strokeColor;\n this.activeObj.strokeSettings.fillColor = shapeSettings.fillColor;\n this.activeObj.shape === 'ellipse' ? this.activeObj.activePoint.width = shapeSettings.radius / 2 : null;\n this.activeObj.shape === 'line' ? this.activeObj.activePoint.width = shapeSettings.length : null;\n this.activeObj.shape === 'text' ? this.activeObj.keyHistory = shapeSettings.text : null;\n this.activeObj.shape === 'text' ? this.activeObj.textSettings.fontSize = shapeSettings.fontSize : null;\n this.activeObj.shape === 'text' ? this.activeObj.strokeSettings.strokeColor = shapeSettings.color : null;\n if (this.activeObj.shape === 'text' && !isNullOrUndefined(this.activeObj.textSettings)) {\n for (var i = 0; i < shapeSettings.fontStyle.length; i++) {\n if (shapeSettings.fontStyle[i] === 'bold') {\n this.activeObj.textSettings.bold = true;\n }\n else if (shapeSettings.fontStyle[i] === 'italic') {\n this.activeObj.textSettings.italic = true;\n }\n else if (shapeSettings.fontStyle[i] === 'underline') {\n this.activeObj.textSettings.underline = true;\n }\n }\n }\n };\n ImageEditor.prototype.getObjDetails = function (obj) {\n var shapeDetails = {};\n shapeDetails.id = obj.currIndex;\n shapeDetails.type = this.toPascalCase(obj.shape);\n shapeDetails.startX = obj.activePoint.startX;\n shapeDetails.startY = obj.activePoint.startY;\n if (obj.shape === 'rectangle') {\n shapeDetails.width = obj.activePoint.width;\n shapeDetails.height = obj.activePoint.height;\n shapeDetails.strokeColor = obj.strokeSettings.strokeColor;\n shapeDetails.fillColor = obj.strokeSettings.fillColor;\n shapeDetails.strokeWidth = obj.strokeSettings.strokeWidth;\n }\n else if (obj.shape === 'ellipse') {\n shapeDetails.radius = obj.activePoint.width / 2;\n shapeDetails.strokeColor = obj.strokeSettings.strokeColor;\n shapeDetails.fillColor = obj.strokeSettings.fillColor;\n shapeDetails.strokeWidth = obj.strokeSettings.strokeWidth;\n }\n else if (obj.shape === 'line') {\n shapeDetails.length = obj.activePoint.width;\n shapeDetails.strokeColor = obj.strokeSettings.strokeColor;\n shapeDetails.strokeWidth = obj.strokeSettings.strokeWidth;\n }\n else if (obj.shape === 'text') {\n shapeDetails.text = obj.keyHistory;\n shapeDetails.fontSize = obj.textSettings.fontSize;\n shapeDetails.color = obj.strokeSettings.strokeColor;\n shapeDetails.fontStyle = [];\n if (obj.textSettings.bold) {\n shapeDetails.fontStyle.push('bold');\n }\n if (obj.textSettings.italic) {\n shapeDetails.fontStyle.push('italic');\n }\n }\n return shapeDetails;\n };\n ImageEditor.prototype.getFreehandDrawDetails = function (index) {\n var shapeDetails = {};\n shapeDetails.id = this.pointColl[index].id;\n shapeDetails.type = 'FreehandDraw';\n shapeDetails.points = extend([], this.pointColl[index].points);\n shapeDetails.strokeColor = this.pointColl[index].strokeColor;\n shapeDetails.strokeWidth = this.pointColl[index].strokeWidth;\n return shapeDetails;\n };\n ImageEditor.prototype.isPointsInRange = function (x, y) {\n var inRange = false;\n if (x >= 0 && y >= 0 && x <= this.lowerCanvas.width && y <= this.lowerCanvas.width) {\n inRange = true;\n }\n return inRange;\n };\n ImageEditor.prototype.clearActObj = function () {\n if (this.textArea.style.display === 'none') {\n this.refreshActiveObj();\n this.applyActObj();\n this.refreshActiveObj();\n this.currObjType.isCustomCrop = false;\n }\n };\n ImageEditor.prototype.applyPenDraw = function () {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n };\n ImageEditor.prototype.drawRotatedImage = function (degree) {\n if (degree === 0) {\n this.degree = 0;\n }\n else {\n this.degree += degree;\n }\n if (this.degree === 360 || this.degree === -360) {\n this.degree = 0;\n }\n this.setDestinationPoints();\n var tempObjColl = extend([], this.objColl, [], true);\n var tempActiveObj = extend({}, this.activeObj, {}, true);\n this.objColl = [];\n this.refreshActiveObj();\n if (!this.isReverseRotate) {\n this.updateCurrentTransformedState('initial');\n }\n this.rotateDegree(degree);\n if (!this.isReverseRotate) {\n this.updateCurrentTransformedState('reverse');\n this.rotateFlipColl.push(degree);\n }\n if (this.rotateFlipColl.length === 1) {\n this.setClientTransformedDimension();\n }\n this.objColl = extend([], tempObjColl, [], true);\n this.activeObj = extend({}, tempActiveObj, {}, true);\n if (this.isCircleCrop) {\n this.cropCircle(this.lowerContext);\n }\n this.redrawObj(degree);\n this.refreshActiveObj();\n if (degree > 0) {\n this.rotateFreehandDrawColl();\n }\n else {\n for (var i = 0; i < 3; i++) {\n this.rotateFreehandDrawColl();\n }\n }\n this.freehandRedraw(this.lowerContext);\n };\n ImageEditor.prototype.setClientTransformedDimension = function (isPreventDimension) {\n if (this.degree % 90 === 0 && this.degree % 180 !== 0) {\n this.destLeft = (this.lowerCanvas.width - this.destHeight) / 2;\n this.destTop = (this.lowerCanvas.height - this.destWidth) / 2;\n var temp = this.destWidth;\n this.destWidth = this.destHeight;\n this.destHeight = temp;\n }\n else {\n if (isNullOrUndefined(isPreventDimension)) {\n this.destLeft = (this.lowerCanvas.width - this.destWidth) / 2;\n this.destTop = (this.lowerCanvas.height - this.destHeight) / 2;\n }\n }\n };\n ImageEditor.prototype.popForDefaultTransformedState = function () {\n var rotateRight = 0;\n var rotateleft = 0;\n var horizontal = 0;\n var vertical = 0;\n for (var i = 0; i < this.rotateFlipColl.length; i++) {\n if (this.rotateFlipColl[i] === 90) {\n rotateRight++;\n rotateleft = 0;\n horizontal = 0;\n vertical = 0;\n if (rotateRight === 4) {\n this.rotateFlipColl.pop();\n this.rotateFlipColl.pop();\n this.rotateFlipColl.pop();\n this.rotateFlipColl.pop();\n }\n }\n else if (this.rotateFlipColl[i] === -90) {\n rotateleft++;\n rotateRight = 0;\n horizontal = 0;\n vertical = 0;\n if (rotateleft === 4) {\n this.rotateFlipColl.pop();\n this.rotateFlipColl.pop();\n this.rotateFlipColl.pop();\n this.rotateFlipColl.pop();\n }\n }\n else if (this.rotateFlipColl[i] === 'horizontal') {\n horizontal++;\n rotateleft = 0;\n rotateRight = 0;\n vertical = 0;\n if (horizontal === 2) {\n this.rotateFlipColl.pop();\n this.rotateFlipColl.pop();\n }\n }\n else if (this.rotateFlipColl[i] === 'vertical') {\n vertical++;\n horizontal = 0;\n rotateleft = 0;\n rotateRight = 0;\n if (vertical === 2) {\n this.rotateFlipColl.pop();\n this.rotateFlipColl.pop();\n }\n }\n }\n };\n ImageEditor.prototype.popForDefaultFlipState = function () {\n for (var i = 0; i < this.rotateFlipColl.length; i++) {\n if (!isNullOrUndefined(this.rotateFlipColl[i + 3])) {\n if (this.rotateFlipColl[i] === 'horizontal' && this.rotateFlipColl[i + 1] === 'vertical' &&\n this.rotateFlipColl[i + 2] === 'horizontal' && this.rotateFlipColl[i + 3] === 'vertical') {\n this.rotateFlipColl.pop();\n this.rotateFlipColl.pop();\n this.rotateFlipColl.pop();\n this.rotateFlipColl.pop();\n }\n else if (this.rotateFlipColl[i] === 'vertical' && this.rotateFlipColl[i + 1] === 'horizontal' &&\n this.rotateFlipColl[i + 2] === 'vertical' && this.rotateFlipColl[i + 3] === 'horizontal') {\n this.rotateFlipColl.pop();\n this.rotateFlipColl.pop();\n this.rotateFlipColl.pop();\n this.rotateFlipColl.pop();\n }\n }\n }\n };\n ImageEditor.prototype.popForDefaultRotateState = function () {\n for (var i = 0; i < this.rotateFlipColl.length; i++) {\n if (!isNullOrUndefined(this.rotateFlipColl[i + 1])) {\n if (this.rotateFlipColl[i] === 90 && this.rotateFlipColl[i + 1] === -90) {\n this.rotateFlipColl.pop();\n this.rotateFlipColl.pop();\n }\n else if (this.rotateFlipColl[i] === -90 && this.rotateFlipColl[i + 1] === 90) {\n this.rotateFlipColl.pop();\n this.rotateFlipColl.pop();\n }\n }\n }\n };\n ImageEditor.prototype.alignRotateFlipColl = function () {\n this.popForDefaultTransformedState();\n this.popForDefaultFlipState();\n this.popForDefaultRotateState();\n if (this.rotateFlipColl.length === 0) {\n this.degree = 0;\n this.currFlipState = '';\n }\n };\n ImageEditor.prototype.updateFlipColl = function (direction) {\n if (this.flipColl.length === 0) {\n this.flipColl.push(direction);\n }\n else {\n if (this.flipColl[this.flipColl.length - 1] === 'direction') {\n this.flipColl.pop();\n }\n else {\n this.flipColl.push(direction);\n }\n }\n if (this.flipColl.length >= 4) {\n if (this.flipColl[this.flipColl.length - 1] === 'horizontal' && this.flipColl[this.flipColl.length - 2] === 'vertical' &&\n this.flipColl[this.flipColl.length - 3] === 'horizontal' && this.flipColl[this.flipColl.length - 4] === 'vertical') {\n for (var i = 0; i < 4; i++) {\n this.flipColl.pop();\n }\n }\n else if (this.flipColl[this.flipColl.length - 1] === 'vertical' && this.flipColl[this.flipColl.length - 2] === 'horizontal' &&\n this.flipColl[this.flipColl.length - 3] === 'vertical' && this.flipColl[this.flipColl.length - 4] === 'horizontal') {\n for (var i = 0; i < 4; i++) {\n this.flipColl.pop();\n }\n }\n }\n };\n ImageEditor.prototype.horizontalFlip = function () {\n this.lowerContext.translate(this.lowerContext.canvas.width, 0);\n this.lowerContext.scale(-1, 1);\n this.upperContext.translate(this.upperContext.canvas.width, 0);\n this.upperContext.scale(-1, 1);\n };\n ImageEditor.prototype.verticalFlip = function () {\n this.lowerContext.translate(0, this.lowerContext.canvas.height);\n this.lowerContext.scale(1, -1);\n this.upperContext.translate(0, this.upperContext.canvas.height);\n this.upperContext.scale(1, -1);\n };\n ImageEditor.prototype.updateFlipState = function (direction) {\n if (direction === 'horizontal' && this.degree % 90 === 0 && this.degree % 180 !== 0) {\n this.verticalFlip();\n }\n else if (direction === 'vertical' && this.degree % 90 === 0 && this.degree % 180 !== 0) {\n this.horizontalFlip();\n }\n else if (direction === 'horizontal') {\n this.horizontalFlip();\n }\n else if (direction === 'vertical') {\n this.verticalFlip();\n }\n };\n ImageEditor.prototype.setDestinationPoints = function () {\n var maxDimension;\n if (this.degree % 90 === 0 && this.degree % 180 !== 0) {\n maxDimension = this.calcMaxDimension(this.srcHeight, this.srcWidth);\n if (this.isRotateZoom) {\n maxDimension.width += (maxDimension.width * this.zoomFactor);\n maxDimension.height += (maxDimension.height * this.zoomFactor);\n this.destWidth = maxDimension.height;\n this.destHeight = maxDimension.width;\n }\n this.destLeft = (this.lowerCanvas.clientWidth - maxDimension.height) / 2;\n this.destTop = (this.lowerCanvas.clientHeight - maxDimension.width) / 2;\n this.destWidth = maxDimension.height;\n this.destHeight = maxDimension.width;\n }\n else {\n maxDimension = this.calcMaxDimension(this.srcWidth, this.srcHeight);\n if (this.isRotateZoom) {\n maxDimension.width += (maxDimension.width * this.zoomFactor);\n maxDimension.height += (maxDimension.height * this.zoomFactor);\n this.destWidth = maxDimension.width;\n this.destHeight = maxDimension.height;\n }\n this.destLeft = (this.lowerCanvas.clientWidth - maxDimension.width) / 2;\n this.destTop = (this.lowerCanvas.clientHeight - maxDimension.height) / 2;\n this.destWidth = maxDimension.width;\n this.destHeight = maxDimension.height;\n }\n };\n ImageEditor.prototype.rotatedFlip = function () {\n this.isReverseFlip = true;\n var tempCurrFlipState = this.currFlipState;\n var tempFlipColl = this.flipColl;\n var tempObjColl = extend([], this.objColl, [], true);\n var tempActiveObj = extend({}, this.activeObj, {}, true);\n this.flipColl = [];\n this.objColl = [];\n this.refreshActiveObj();\n this.currentTransformedState('initial');\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.baseImg, this.srcLeft, this.srcTop, this.srcWidth, this.srcHeight, this.destLeft, this.destTop, this.destWidth, this.destHeight);\n this.lowerContext.filter = temp;\n this.currentTransformedState('reverse', true);\n if (tempCurrFlipState === '' && this.currFlipState !== '') {\n tempCurrFlipState = this.currFlipState;\n }\n this.currFlipState = tempCurrFlipState;\n this.flipColl = tempFlipColl;\n this.objColl = extend([], tempObjColl, [], true);\n this.lowerContext.filter = 'none';\n this.iterateObjColl();\n this.lowerContext.filter = temp;\n if (tempActiveObj.activePoint.width !== 0) {\n this.activeObj = extend({}, tempActiveObj, {}, true);\n }\n this.isReverseFlip = false;\n };\n ImageEditor.prototype.getFilterValue = function (value) {\n var filterValue;\n if (value === 0) {\n filterValue = 1;\n }\n else {\n filterValue = 1 + ((value * 0.5) / 100);\n }\n return filterValue;\n };\n ImageEditor.prototype.setFilterValue = function (value) {\n var filterValue;\n if (value === 1) {\n filterValue = 0;\n }\n else {\n filterValue = ((value - 1) * 100) / 0.5;\n }\n return Math.round(filterValue);\n };\n ImageEditor.prototype.getSaturationFilterValue = function (value) {\n var filterValue;\n if (value === 0) {\n filterValue = 1;\n }\n else {\n filterValue = 1 + (value / 100);\n }\n return filterValue;\n };\n ImageEditor.prototype.setSaturationFilterValue = function (value) {\n var filterValue;\n if (value === 1) {\n filterValue = 0;\n }\n else {\n filterValue = (value - 1) * 100;\n }\n return Math.round(filterValue);\n };\n ImageEditor.prototype.getBlackAndWhiteData = function (imageData) {\n for (var i = 0; i < imageData.data.length; i += 4) {\n var count = imageData.data[i] + imageData.data[i + 1] + imageData.data[i + 2];\n var colour = 0;\n if (count > 383) {\n colour = 255;\n }\n imageData.data[i] = colour;\n imageData.data[i + 1] = colour;\n imageData.data[i + 2] = colour;\n imageData.data[i + 3] = 255;\n }\n return imageData;\n };\n ImageEditor.prototype.setBrightness = function (value) {\n this.applyPenDraw();\n this.adjustmentLevel.brightness = value;\n value = this.getFilterValue(value);\n var temp = this.lowerContext.filter;\n this.updateAdjustment('brightness', value);\n this.updateUndoRedoColl('brightness', value, temp, this.lowerContext.filter, this.zoomFactor, this.adjustmentLevel.sharpen, this.adjustmentLevel.bw);\n };\n ImageEditor.prototype.setContrast = function (value) {\n this.applyPenDraw();\n this.adjustmentLevel.contrast = value;\n var temp = this.lowerContext.filter;\n value = this.getFilterValue(value);\n value *= 100;\n this.updateAdjustment('contrast', value);\n this.updateUndoRedoColl('contrast', value, temp, this.lowerContext.filter, this.zoomFactor, this.adjustmentLevel.sharpen, this.adjustmentLevel.bw);\n };\n ImageEditor.prototype.setHue = function (value) {\n this.applyPenDraw();\n this.adjustmentLevel.hue = value;\n value *= 3;\n var temp = this.lowerContext.filter;\n this.updateAdjustment('hue', value);\n this.updateUndoRedoColl('hue', value, temp, this.lowerContext.filter, this.zoomFactor, this.adjustmentLevel.sharpen, this.adjustmentLevel.bw);\n };\n ImageEditor.prototype.setSaturation = function (value) {\n this.applyPenDraw();\n this.adjustmentLevel.saturation = value;\n value = this.getSaturationFilterValue(value);\n value *= 100;\n var temp = this.lowerContext.filter;\n this.updateAdjustment('saturation', value);\n this.updateUndoRedoColl('saturation', value, temp, this.lowerContext.filter, this.zoomFactor, this.adjustmentLevel.sharpen, this.adjustmentLevel.bw);\n };\n ImageEditor.prototype.setOpacity = function (value) {\n this.applyPenDraw();\n this.adjustmentLevel.opacity = value;\n if (value >= 50) {\n value /= 100;\n }\n else if (value === 40) {\n value = 0.45;\n }\n else if (value === 30) {\n value = 0.40;\n }\n else if (value === 20) {\n value = 0.35;\n }\n else if (value === 10) {\n value = 0.30;\n }\n else if (value === 0) {\n value = 0.25;\n }\n var temp = this.lowerContext.filter;\n this.updateAdjustment('opacity', value);\n this.updateUndoRedoColl('opacity', value, temp, this.lowerContext.filter, this.zoomFactor, this.adjustmentLevel.sharpen, this.adjustmentLevel.bw);\n };\n ImageEditor.prototype.setBlur = function (value) {\n this.applyPenDraw();\n this.adjustmentLevel.blur = value;\n value /= 20;\n // Since 0.5 is not working in blur we consider from 1\n value += 0.5;\n var temp = this.lowerContext.filter;\n this.updateAdjustment('blur', value);\n this.updateUndoRedoColl('blur', value, temp, this.lowerContext.filter, this.zoomFactor, this.adjustmentLevel.sharpen, this.adjustmentLevel.bw);\n };\n ImageEditor.prototype.setExposure = function (value) {\n this.applyPenDraw();\n this.adjustmentLevel.exposure = value;\n value = this.getFilterValue(value);\n var temp = this.lowerContext.filter;\n this.updateAdjustment('exposure', value);\n this.updateUndoRedoColl('exposure', value, temp, this.lowerContext.filter, this.zoomFactor, this.adjustmentLevel.sharpen, this.adjustmentLevel.bw);\n };\n ImageEditor.prototype.setFilter = function (type) {\n type = type.toLowerCase();\n this.applyPenDraw();\n var tempFilter = this.lowerContext.filter;\n var prevFilter = this.currentFilter;\n this.updateAdjustment(type, null);\n this.updateUndoRedoColl(type, prevFilter, tempFilter, this.lowerContext.filter, this.zoomFactor, this.adjustmentLevel.sharpen, this.adjustmentLevel.bw);\n };\n ImageEditor.prototype.renderImage = function () {\n var temp = this.lowerContext.filter;\n this.applyActObj();\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.updateCurrentTransformedState('initial');\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.baseImg, this.srcLeft, this.srcTop, this.srcWidth, this.srcHeight, this.destLeft, this.destTop, this.destWidth, this.destHeight);\n this.updateCurrentTransformedState('reverse');\n this.lowerContext.filter = 'none';\n this.iterateObjColl();\n this.freehandRedraw(this.lowerContext);\n this.lowerContext.filter = temp;\n if (this.isCircleCrop || (!isNullOrUndefined(this.currSelectionPoint) && this.currSelectionPoint.shape === 'crop-circle')) {\n this.cropCircle(this.lowerContext);\n }\n };\n ImageEditor.prototype.updateTextBox = function (obj) {\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n this.textArea.style.display = 'block';\n this.textArea.style.fontFamily = obj.textSettings.fontFamily;\n this.textArea.style.fontSize = obj.textSettings.fontSize + 'px';\n this.textArea.style.color = obj.strokeSettings.strokeColor;\n this.textArea.style.fontWeight = obj.textSettings.bold ? 'bold' : 'normal';\n this.textArea.style.fontStyle = obj.textSettings.italic ? 'italic' : 'normal';\n this.textArea.style.border = '2px solid ' + this.themeColl[this.theme]['primaryColor'];\n this.textArea.value = obj.keyHistory;\n this.activeObj = extend({}, obj, {}, true);\n this.updateFontStyles();\n this.textArea.style.width = this.activeObj.activePoint.width + 'px';\n };\n ImageEditor.prototype.setAdjustment = function (type) {\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var splitWords = this.lowerContext.filter.split(' ');\n var value;\n var valueArr;\n switch (type) {\n case 'brightness':\n valueArr = splitWords[0].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n this.adjustmentLevel.brightness = this.setFilterValue(value);\n break;\n case 'contrast':\n valueArr = splitWords[1].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n value /= 100;\n this.adjustmentLevel.contrast = this.setFilterValue(value);\n break;\n case 'hue':\n valueArr = splitWords[2].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n value /= 3;\n this.adjustmentLevel.hue = value;\n break;\n case 'saturation':\n valueArr = splitWords[3].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n value /= 100;\n this.adjustmentLevel.saturation = this.setSaturationFilterValue(value);\n break;\n case 'opacity':\n valueArr = splitWords[4].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n if (value === 0.45) {\n value = 40;\n }\n else if (value === 0.40) {\n value = 30;\n }\n else if (value === 0.35) {\n value = 20;\n }\n else if (value === 0.30) {\n value = 10;\n }\n else if (value === 0.25) {\n value = 0;\n }\n else {\n value *= 100;\n }\n this.adjustmentLevel.opacity = value;\n break;\n case 'blur':\n valueArr = splitWords[5].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n value *= 20;\n this.adjustmentLevel.blur = value;\n break;\n case 'exposure':\n valueArr = splitWords[0].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n this.adjustmentLevel.exposure = this.setFilterValue(value);\n break;\n }\n this.callUpdateCurrentTransformedState();\n };\n ImageEditor.prototype.updateFilter = function (obj) {\n var selEle = this.element.querySelector('.e-contextual-toolbar-wrapper .e-toolbar-item.e-selected');\n if (selEle) {\n selEle.classList.remove('e-selected');\n }\n var filterCanvas = document.getElementById(obj.value + 'Canvas');\n if (filterCanvas) {\n filterCanvas.parentElement.classList.add('e-selected');\n }\n this.currentFilter = obj.value;\n this.lowerContext.filter = this.canvasFilter = obj.previousObj;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.isUndoRedo = true;\n this.redrawImgWithObj();\n };\n ImageEditor.prototype.drawNewSelection = function (type, startX, startY, width, height) {\n var points;\n var cropShape = 'crop-' + type;\n if (cropShape.toLowerCase() === 'crop-custom') {\n if (this.currObjType.shape === '') {\n this.drawCustomSelection('crop-custom');\n }\n if (startX && startY) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.currObjType.shape = this.activeObj.shape = cropShape.toLowerCase();\n this.activeObj.activePoint.startX = startX;\n this.activeObj.activePoint.startY = startY;\n this.activeObj.activePoint.endX = this.lowerCanvas.width;\n this.activeObj.activePoint.endY = this.lowerCanvas.height;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.drawObject('duplicate');\n }\n }\n else if (cropShape.toLowerCase() === 'crop-canvas') {\n this.upperCanvas.style.display = 'none';\n this.dragCanvas = true;\n }\n else {\n this.currObjType.isCustomCrop = false;\n this.currObjType.shape = cropShape.toLowerCase();\n if (width && height) {\n points = { startX: startX, startY: startY, endX: startX + width, endY: startY + height,\n width: width, height: height };\n }\n else if (width && cropShape === 'crop-circle') {\n points = { startX: startX, startY: startY, endX: startX + width, endY: startY + width,\n width: width, height: width };\n }\n this.activeObj.shape = cropShape.toLowerCase();\n this.drawObject('duplicate', null, true, points);\n }\n };\n /**\n * Clear a current selection.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.clearSelection = function () {\n if (!this.disabled && this.isImageLoaded) {\n this.togglePen = false;\n this.refreshActiveObj();\n this.dragElement = '';\n this.dragPoint.startX = this.dragPoint.startY = this.dragPoint.endX = this.dragPoint.endY = 0;\n this.currObjType.shape = '';\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.currObjType.isActiveObj = true;\n this.currObjType.isCustomCrop = false;\n this.upperCanvas.style.cursor = 'default';\n }\n };\n /**\n * Crops an image based on the selection.\n * The selection can be done through programmatically using the select method or through UI interactions.\n *\n * @returns {boolean}.\n */\n ImageEditor.prototype.crop = function () {\n var isCrop = false;\n if (!this.disabled && this.isImageLoaded) {\n if (this.currObjType.isUndoAction) {\n this.refreshUndoRedoColl();\n }\n var splitWords = void 0;\n var transitionArgs = { startPoint: { x: this.activeObj.activePoint.startX, y: this.activeObj.activePoint.startY }, endPoint: { x: this.activeObj.activePoint.endX, y: this.activeObj.activePoint.endY } };\n this.trigger('cropping', transitionArgs);\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (!this.disabled && this.activeObj.horTopLine !== undefined && (this.currObjType.isCustomCrop || splitWords[0] === 'crop')) {\n isCrop = true;\n var shape = this.activeObj.shape;\n this.cropImg();\n this.zoomFactor = 0;\n this.enableDisableToolbarBtn();\n this.updateUndoRedoColl('crop', shape);\n }\n }\n return isCrop;\n };\n /**\n * Flips an image by horizontally or vertically.\n *\n * @param {Direction } direction - Specifies the direction to flip the image.\n * @returns {void}.\n */\n ImageEditor.prototype.flip = function (direction) {\n if (!this.disabled && this.isImageLoaded) {\n var zoomFactor = this.zoomFactor;\n var transitionArgs = { direction: direction };\n this.trigger('flipping', transitionArgs);\n var splitWords = [];\n var activeObjShape = void 0;\n if (!isNullOrUndefined(this.activeObj.activePoint)) {\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || splitWords[0] === 'crop') {\n activeObjShape = this.currObjType.isCustomCrop ? 'custom' : splitWords[1];\n this.updateImageRatioForActObj();\n this.objColl.push(this.activeObj);\n this.refreshActiveObj();\n }\n }\n this.redrawActObj();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var tempObjColl = extend([], this.objColl, [], true);\n var tempActiveObj = extend({}, this.activeObj, {}, true);\n this.objColl = [];\n this.refreshActiveObj();\n if (!this.isReverseFlip) {\n this.updateCurrentTransformedState('initial');\n }\n if (direction.toLowerCase() === 'horizontal') {\n this.updateFlipState(direction.toLowerCase());\n if (this.currFlipState.toLowerCase() === 'horizontal') {\n this.currFlipState = '';\n }\n else {\n this.currFlipState = 'horizontal';\n }\n }\n else {\n this.updateFlipState(direction.toLowerCase());\n if (this.currFlipState.toLowerCase() === 'vertical') {\n this.currFlipState = '';\n }\n else {\n this.currFlipState = 'vertical';\n }\n }\n if (this.rotatedFlipCropSelection) {\n this.destLeft += this.totalPannedInternalPoint.x;\n this.destTop += this.totalPannedInternalPoint.y;\n }\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.baseImg, this.srcLeft, this.srcTop, this.srcWidth, this.srcHeight, this.destLeft, this.destTop, this.destWidth, this.destHeight);\n this.lowerContext.filter = temp;\n this.updateFlipState(direction.toLowerCase());\n if (!this.isReverseFlip) {\n this.updateCurrentTransformedState('reverse');\n this.updateFlipColl(direction.toLocaleLowerCase());\n this.rotateFlipColl.push(direction.toLowerCase());\n }\n if (this.rotateFlipColl.length === 1) {\n this.setClientTransformedDimension();\n }\n if (this.isCircleCrop) {\n this.cropCircle(this.lowerContext);\n }\n this.objColl = extend([], tempObjColl, [], true);\n this.activeObj = extend({}, tempActiveObj, {}, true);\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n if (this.objColl[i].flipObjColl.length === 0) {\n this.objColl[i].flipObjColl.push(direction);\n }\n else if (this.objColl[i].flipObjColl[this.objColl[i].flipObjColl.length - 1] === direction) {\n this.objColl[i].flipObjColl.pop();\n }\n else {\n this.objColl[i].flipObjColl.push(direction);\n }\n }\n this.redrawObj(direction.toLowerCase());\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = this.getDefaultFilter();\n this.iterateObjColl();\n if (!isNullOrUndefined(this.currSelectionPoint)) {\n tempObjColl = extend([], this.objColl, [], true);\n this.objColl = [];\n this.objColl.push(this.currSelectionPoint);\n this.redrawObj(direction.toLowerCase());\n this.currSelectionPoint = extend({}, this.objColl[0], {}, true);\n this.objColl = tempObjColl;\n }\n if (direction.toLowerCase() === 'horizontal' || direction.toLowerCase() === 'vertical') {\n this.flipFreehandrawColl(direction.toLowerCase());\n this.freehandRedraw(this.lowerContext);\n }\n else {\n this.freehandRedraw(this.lowerContext);\n }\n this.lowerContext.filter = tempFilter;\n this.refreshActiveObj();\n if (!this.isUndoRedo) {\n this.updateUndoRedoColl('flip', direction, this.objColl, null, zoomFactor, this.adjustmentLevel.sharpen, this.adjustmentLevel.bw);\n }\n this.isUndoRedo = false;\n this.clearOuterCanvas(this.lowerContext);\n this.clearOuterCanvas(this.upperContext);\n if (!isNullOrUndefined(activeObjShape)) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.activeObj = extend({}, this.objColl[this.objColl.length - 1], {}, true);\n this.objColl.pop();\n this.drawObject('duplicate', this.activeObj);\n if (!this.isReverseFlip) {\n this.refreshToolbar('main', true, true);\n }\n }\n if (isNullOrUndefined(this.activeObj.shape) && !this.isReverseFlip) {\n this.refreshToolbar('main');\n }\n else if (!this.isReverseFlip) {\n this.refreshToolbar('main', true, true);\n }\n this.alignRotateFlipColl();\n }\n };\n /**\n * Return an image as ImageData.\n *\n * @returns {ImageData}.\n */\n ImageEditor.prototype.getImageData = function () {\n var data = this.lowerContext.getImageData(this.destLeft, this.destTop, this.destWidth, this.destHeight);\n return data;\n };\n /**\n * Load/opens an image for editing within an image editor.\n *\n * @param {string | ImageData } data - Specifies url of the Image or image data.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.open = function (data) {\n if (!this.disabled) {\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n var toolbar_11 = document.querySelector('#' + this.element.id + '_currPos');\n if (toolbar_11) {\n toolbar_11.style.display = 'none';\n }\n if (this.defToolbarItems.length === 0 &&\n (isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n this.toolbarHeight = 0;\n }\n if (isNullOrUndefined(this.toolbarTemplate)) {\n this.reset();\n this.update();\n }\n this.degree = 0;\n this.zoomFactor = 0;\n this.isImageLoaded = false;\n this.currSelectionPoint = null;\n var type = typeof (data);\n if (type === 'string') {\n var fileName = data.split('.');\n if (fileName.length > 1) {\n fileName = fileName[fileName.length - 2].split('/');\n this.fileName = fileName[fileName.length - 1];\n }\n else {\n this.fileName = 'ImageEditor';\n }\n this.imageOnLoad(data);\n }\n else {\n this.fileName = 'ImageEditor';\n this.lowerCanvas = document.querySelector('#' + this.element.id + '_lowerCanvas');\n this.upperCanvas = document.querySelector('#' + this.element.id + '_upperCanvas');\n this.lowerContext = this.lowerCanvas.getContext('2d');\n this.upperContext = this.upperCanvas.getContext('2d');\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = this.baseImg.width = data.width;\n this.inMemoryCanvas.height = this.baseImg.height = data.height;\n this.inMemoryContext.putImageData(data, 0, 0);\n this.baseImg.src = this.inMemoryCanvas.toDataURL();\n }\n }\n };\n /**\n * Reset all the changes and revert to original image.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.reset = function () {\n if (!this.disabled) {\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.lowerContext.filter = this.getDefaultFilter();\n this.refreshActiveObj();\n this.refreshToolbar('main');\n if (Browser.isDevice && document.getElementById(this.element.id + '_bottomToolbar')) {\n getComponent(document.getElementById(this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n this.createBottomToolbar();\n }\n this.objColl = [];\n this.isImageLoaded = false;\n this.degree = this.undoRedoStep = 0;\n this.keyHistory = this.currFlipState = '';\n this.upperCanvas.style.display = 'none';\n this.togglePan = this.togglePen = false;\n this.upperCanvas.style.cursor = this.lowerCanvas.style.cursor = 'default';\n this.undoRedoColl = [];\n this.dragCanvas = this.isUndoRedo = false;\n this.tempKeyHistory = '';\n this.lowerContext.lineWidth = this.upperContext.lineWidth = undefined;\n this.touchEndPoint = {};\n this.currentToolbar = 'main';\n this.textStartPoints = { x: 0, y: 0 };\n this.fontSizeColl = [];\n this.textArea.value = this.textArea.textContent = '';\n this.textArea.style.display = 'none';\n this.strokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n this.textSettings =\n { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, fontRatio: null, bold: false, italic: false, underline: false };\n this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n this.tempTextSettings =\n { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, fontRatio: null, bold: false, italic: false, underline: false };\n this.timer = undefined;\n this.penStrokeWidth = undefined;\n this.currObjType.isUndoAction = false;\n this.undoRedoStep = 0;\n this.tempObjColl = undefined;\n this.adjustmentLevel = { brightness: 0, contrast: 0, hue: 0, opacity: 100, saturation: 0,\n blur: 0, exposure: 0, sharpen: false, bw: false };\n this.tempAdjustmentLevel = { brightness: 0, contrast: 0, hue: 0, opacity: 100, saturation: 0,\n blur: 0, exposure: 0, sharpen: false, bw: false };\n this.canvasFilter = this.currentFilter = this.tempAdjustmentValue = '';\n this.lowerContext.filter = this.initialAdjustmentValue = this.adjustmentValue = this.getDefaultFilter();\n this.destLeft = this.destTop = this.srcLeft = this.srcTop = 0;\n this.destWidth = this.destHeight = this.srcWidth = this.srcHeight = null;\n this.currSelectionPoint = null;\n this.cropDestPoints = { startX: 0, startY: 0, width: 0, height: 0 };\n this.panDown = null;\n this.panMove = null;\n this.tempPanMove = null;\n this.flipColl = [];\n this.freehandDrawObj.time = this.freehandDrawObj.lastVelocity = 0;\n this.freehandDrawObj.pointX = this.freehandDrawObj.pointY = 0;\n this.points = [];\n this.pointColl = {};\n this.pointCounter = this.freehandCounter = this.tempFreehandCounter = this.tempCurrentFreehandDrawIndex = 0;\n this.isFreehandDrawing = false;\n this.isReverseRotate = this.isReverseFlip = this.isPreventDragging = this.isRotateZoom = false;\n this.currentPannedPoint = null;\n this.fileType = undefined;\n this.rotateFlipColl = [];\n this.isCircleCrop = false;\n this.isCropTab = false;\n this.rotatedDestPoints = { startX: 0, startY: 0, width: 0, height: 0 };\n this.croppedDegree = 0;\n this.freehandDrawHoveredIndex = this.freehandDrawSelectedIndex = null;\n this.isFreehandDrawingPoint = this.isFreehandDrawEditing = false;\n this.tempFreeHandDrawEditingStyles = { strokeColor: null, fillColor: null, strokeWidth: null };\n this.totalPannedInternalPoint = { x: 0, y: 0 };\n this.totalPannedClientPoint = { x: 0, y: 0 };\n this.lowerCanvas.style.left = this.upperCanvas.style.left = '';\n this.lowerCanvas.style.top = this.upperCanvas.style.top = '';\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = '';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = '';\n this.currentSelectionPoint = null;\n this.totalPannedPoint = { x: 0, y: 0 };\n this.fileName = '';\n this.isBrightnessAdjusted = this.isInitialLoading = false;\n this.defaultZoomFactor = this.cropZoomFactor = this.zoomFactor = 0;\n this.tempActObj = null;\n this.lastPan = { x: 0, y: 0 };\n this.selectedFreehandColor = '#42a5f5';\n this.isFreehandDrawCustomized = false;\n this.isShapeInserted = false;\n this.tempActObj = undefined;\n this.lastPan = { x: 0, y: 0 };\n this.currObjType = { shape: '', isDragging: false, isActiveObj: false, isText: false, isInitialText: false, isLine: false,\n isInitialLine: false, isCustomCrop: false, isZoomed: false, isUndoZoom: false,\n isUndoAction: false, isFiltered: false, isSave: false };\n this.isAllowCropPan = false;\n this.tempPannedPoint = { x: 0, y: 0 };\n this.cropObj = { cropZoom: 0, defaultZoom: 0, totalPannedPoint: { x: 0, y: 0 }, totalPannedClientPoint: { x: 0, y: 0 },\n totalPannedInternalPoint: { x: 0, y: 0 }, activeObj: {}, rotateFlipColl: [], degree: 0,\n currFlipState: '', destPoints: { startX: 0, startY: 0, width: 0, height: 0 },\n srcPoints: { startX: 0, startY: 0, width: 0, height: 0 } };\n this.afterCropActions = [];\n this.isCancelAction = this.preventZoomBtn = this.isFreehandPointMoved = false;\n this.isTouch = false;\n this.freehandDownPoint = { x: 0, y: 0 };\n this.tempFlipPanPoint = { x: 0, y: 0 };\n this.currentFreehandDrawIndex = 0;\n this.tempCurrentFreehandDrawIndex = 0;\n this.cancelObjColl = [];\n this.cancelPointColl = [];\n this.updateCanvas();\n this.refreshDropDownBtn(false);\n this.enableDisableToolbarBtn();\n }\n };\n /**\n * Rotate an image to clockwise and anti-clockwise.\n *\n * @param {number} degree - Specifies a degree to rotate an image.\n * positive integer value for clockwise and negative integer value for anti-clockwise rotation.\n *\n * @returns {boolean}.\n */\n ImageEditor.prototype.rotate = function (degree) {\n var isRotate = false;\n if (!this.disabled && this.isImageLoaded && (degree % 90 === 0)) {\n isRotate = true;\n var transitionArgs = { degree: degree };\n this.trigger('rotating', transitionArgs);\n var splitWords = [];\n var activeObjShape = void 0;\n if (!isNullOrUndefined(this.activeObj.activePoint) && !isNullOrUndefined(this.activeObj.shape)) {\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || splitWords[0] === 'crop') {\n activeObjShape = this.currObjType.isCustomCrop ? 'custom' : splitWords[1];\n this.updateImageRatioForActObj();\n this.objColl.push(this.activeObj);\n this.refreshActiveObj();\n }\n }\n this.redrawActObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n var zoomFactor = this.zoomFactor;\n this.drawRotatedImage(degree);\n this.clearOuterCanvas(this.lowerContext);\n this.clearOuterCanvas(this.upperContext);\n if (!isNullOrUndefined(activeObjShape)) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.activeObj = extend({}, this.objColl[this.objColl.length - 1], {}, true);\n this.objColl.pop();\n this.drawObject('duplicate', this.activeObj);\n if (!this.isReverseRotate) {\n this.refreshToolbar('main', true, true);\n }\n }\n if (!this.isUndoRedo) {\n this.updateUndoRedoColl('rotate', degree, this.objColl, null, zoomFactor, this.adjustmentLevel.sharpen, this.adjustmentLevel.bw);\n }\n this.isUndoRedo = false;\n if (isNullOrUndefined(this.activeObj.shape) && !this.isReverseRotate) {\n this.refreshToolbar('main');\n }\n else if (!this.isReverseRotate) {\n this.refreshToolbar('main', true, true);\n }\n this.alignRotateFlipColl();\n }\n return isRotate;\n };\n /**\n * Export an image using the specified file name and the extension.\n *\n * @param {string} type - Specifies a format of image to be saved.\n * @param {string} fileName – Specifies a file name to be saved\n *\n * @returns {void}.\n */\n ImageEditor.prototype.export = function (type, fileName) {\n var _this = this;\n if (!this.disabled && this.isImageLoaded) {\n if (this.isFreehandDrawEditing) {\n this.applyFreehandDraw();\n }\n if (this.togglePen) {\n this.currObjType.isZoomed = true;\n this.apply();\n }\n if (this.textArea.style.display === 'block') {\n this.redrawActObj();\n }\n this.applyActObj();\n this.lowerContext.filter = this.canvasFilter;\n type = type ? type : 'Png';\n this.redrawActObj();\n var beforeSave = { cancel: false, fileName: fileName ? fileName : this.fileName,\n fileType: type };\n var saved_1 = { fileName: fileName ? fileName : this.fileName, fileType: type };\n this.trigger('beforeSave', beforeSave, function (observableSaveArgs) {\n if (!observableSaveArgs.cancel) {\n _this.currObjType.isSave = true;\n fileName = observableSaveArgs.fileName ? observableSaveArgs.fileName : fileName;\n if (type.toLowerCase() === 'svg') {\n fileName = fileName || _this.fileName;\n _this.toSVGImg(fileName);\n }\n else if (type.toLowerCase() === 'jpeg') {\n fileName = fileName || _this.fileName;\n _this.toBlobFn(fileName, type.toLowerCase());\n }\n else {\n fileName = fileName || _this.fileName;\n _this.toBlobFn(fileName, type.toLowerCase());\n }\n _this.trigger('saved', saved_1);\n _this.refreshToolbar('main');\n _this.lowerCanvas.style.left = _this.upperCanvas.style.left = '';\n _this.lowerCanvas.style.top = _this.upperCanvas.style.top = '';\n _this.lowerCanvas.style.maxWidth = _this.upperCanvas.style.maxWidth = '';\n _this.lowerCanvas.style.maxHeight = _this.upperCanvas.style.maxHeight = '';\n }\n });\n }\n };\n /**\n * Perform selection in an image editor. The selection helps to crop an image.\n *\n * @param {string} type - Specifies the shape - circle / square / custom selection / pre-defined ratios.\n * @param {number} startX – Specifies the start x-coordinate point of the selection.\n * @param {number} startY – Specifies the start y-coordinate point of the selection.\n * @param {number} width - Specifies the width of the selection area.\n * @param {number} height - Specifies the height of the selection area.\n * @returns {void}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created : () => {\n * imageObj.select('16:9', 10, 10);\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.select = function (type, startX, startY, width, height) {\n if (!this.disabled && this.isImageLoaded) {\n if (this.zoomFactor > 0 && !isNullOrUndefined(this.activeObj.shape) && this.activeObj.shape.split('-')[0] === 'crop' && isNullOrUndefined(this.currentSelectionPoint)) {\n this.currentSelectionPoint = extend({}, this.activeObj, {}, true);\n }\n var isPrevent = false;\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isPrevent = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isPrevent = true;\n }\n this.redrawActObj();\n this.refreshActiveObj();\n this.keyHistory = '';\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.upperCanvas.style.display = 'block';\n if (!isNullOrUndefined(this.currSelectionPoint) || this.defaultZoomFactor > 0 ||\n (this.degree !== 0 && this.totalPannedInternalPoint.x !== 0 && this.totalPannedInternalPoint.y !== 0 && !isPrevent)) {\n this.isCircleCrop = false;\n if (this.defaultZoomFactor > 0) {\n var zoomFactor = this.zoomFactor = this.defaultZoomFactor;\n this.isCropTab = false;\n for (var i = 0; i < (zoomFactor * 10); i++) {\n this.zoom(-0.1);\n }\n this.resetPanPoints();\n }\n this.cancelObjColl = extend([], this.objColl, [], true);\n this.cancelPointColl = extend([], this.pointColl, [], true);\n this.isCropTab = true;\n this.setCurrSelectionPoints(true);\n this.zoomFactor = this.cropZoomFactor;\n if (isNullOrUndefined(this.cropObj.activeObj.shape)) {\n this.drawNewSelection(type, startX, startY, width, height);\n }\n }\n else {\n if (type === 'custom') {\n this.currObjType.shape = '';\n }\n this.drawNewSelection(type, startX, startY, width, height);\n }\n }\n };\n /**\n * Enable or disable a freehand drawing in an Image Editor.\n *\n * @param {boolean} value - Specifies a value whether enable or disable freehand drawing.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.freeHandDraw = function (value) {\n if (value) {\n this.points = [];\n this.refreshActiveObj();\n this.togglePen = true;\n this.upperCanvas.style.cursor = 'crosshair';\n this.upperCanvas.style.display = 'block';\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings.strokeWidth)) {\n this.activeObj.strokeSettings.strokeWidth = 4;\n }\n this.refreshToolbar('pen');\n }\n else {\n this.upperCanvas.style.cursor = 'default';\n this.apply();\n this.refreshToolbar('main');\n this.currentToolbar = 'main';\n this.isFreehandDrawCustomized = false;\n }\n };\n /**\n * Enable or disable a freehand drawing in an Image Editor.\n *\n * @param {boolean} value - Specifies a value whether enable or disable freehand drawing.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.freehandDraw = function (value) {\n if (!this.disabled && this.isImageLoaded) {\n this.freeHandDraw(value);\n }\n };\n /**\n * Enable or disable a panning on the Image Editor.\n *\n * @param {boolean} value - Specifies a value whether enable or disable panning.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.pan = function (value) {\n if (!this.disabled && this.isImageLoaded) {\n if (value) {\n this.togglePan = true;\n this.redrawActObj();\n this.dragCanvas = true;\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'grab';\n this.panDown = null;\n }\n else {\n this.dragCanvas = this.togglePan = this.currObjType.isCustomCrop = false;\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'default';\n }\n }\n };\n ImageEditor.prototype.setDestPointsForFlipState = function (isUpdate) {\n if (this.getCurrentPanRegion() !== '') {\n if (this.getCurrentPanRegion() === 'horizontal') {\n this.destLeft = this.lowerCanvas.clientWidth - (this.destWidth + this.destLeft);\n }\n else if (this.getCurrentPanRegion() === 'vertical') {\n this.destTop = this.lowerCanvas.clientHeight - (this.destHeight + this.destTop);\n }\n else {\n this.destLeft = this.lowerCanvas.clientWidth - (this.destWidth + this.destLeft);\n this.destTop = this.lowerCanvas.clientHeight - (this.destHeight + this.destTop);\n }\n if (!isNullOrUndefined(isUpdate)) {\n this.updateObjAndFreeHandDrawColl();\n }\n }\n };\n /**\n * Increase / Decrease the magnification of an image.\n *\n * @param {boolean} value - Specifies a value to be zoomed on the image.\n * @returns {void}.\n */\n ImageEditor.prototype.zoom = function (value) {\n if (!this.disabled && this.isImageLoaded) {\n if ((this.zoomFactor === 0 && value < 0) || (this.zoomFactor > 5 && value > 0 ||\n (this.zoomFactor > 0 && value < 0 && this.disableZoomOutBtn()))) {\n return;\n }\n var splitWords = void 0;\n var tempActiveObj = void 0;\n var isShape = false;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords !== undefined && splitWords[0] === 'crop') {\n tempActiveObj = extend({}, this.activeObj, {}, true);\n this.isCropTab = true;\n }\n else if (!isNullOrUndefined(this.activeObj.shape) && splitWords[0] !== 'crop') {\n isShape = true;\n }\n this.redrawActObj();\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = this.canvasFilter;\n this.upperCanvas.style.cursor = 'default';\n var zoomState = void 0;\n var objColl = extend([], this.objColl, [], true);\n if (value === 3.75 || value === 1) {\n zoomState = 0.1;\n }\n else if (value === -3.75) {\n zoomState = -0.1;\n }\n else {\n zoomState = value;\n }\n if (!this.isCropTab) {\n if (this.degree !== 0) {\n this.redrawActObj();\n this.currentPannedPoint = { x: 0, y: 0 };\n this.rotatePan();\n }\n this.setDestPointsForFlipState(true);\n }\n if (this.degree === 0) {\n this.drawZoomImgToCanvas(value, tempActiveObj);\n if (this.getCurrentPanRegion() !== '') {\n this.tempFlipPanPoint.x += this.totalPannedPoint.x;\n this.tempFlipPanPoint.y += this.totalPannedPoint.y;\n objColl = extend([], this.objColl, [], true);\n this.objColl = [];\n this.rotatedFlip();\n if (this.totalPannedPoint.x !== 0 || this.totalPannedPoint.y !== 0) {\n this.totalPannedPoint = { x: 0, y: 0 };\n }\n if (this.tempPannedPoint.x !== 0 || this.tempPannedPoint.y !== 0) {\n this.tempPannedPoint = { x: 0, y: 0 };\n }\n }\n }\n else {\n this.updateObjAndFreeHandDrawColl();\n this.totalPannedClientPoint = { x: 0, y: 0 };\n this.totalPannedInternalPoint = { x: 0, y: 0 };\n this.rotateZoom(value);\n if (this.getCurrentPanRegion() !== '') {\n var temp = this.lowerContext.filter;\n this.lowerContext.filter = 'none';\n this.zoomObjColl();\n this.zoomFreehandDrawColl();\n this.lowerContext.filter = temp;\n }\n }\n if (this.getCurrentPanRegion() === '') {\n var temp = this.lowerContext.filter;\n this.lowerContext.filter = 'none';\n this.zoomObjColl();\n this.zoomFreehandDrawColl();\n this.lowerContext.filter = temp;\n }\n else if (this.degree === 0) {\n var temp = this.lowerContext.filter;\n this.lowerContext.filter = 'none';\n var destLeft = this.destLeft;\n var destTop = this.destTop;\n this.setDestPointsForFlipState();\n this.objColl = objColl;\n this.zoomObjColl();\n this.zoomFreehandDrawColl();\n this.destLeft = destLeft;\n this.destTop = destTop;\n this.lowerContext.filter = temp;\n }\n if ((!isNullOrUndefined(this.currSelectionPoint) && this.currSelectionPoint.shape === 'crop-circle') || this.isCircleCrop) {\n this.cropCircle(this.lowerContext);\n }\n this.clearOuterCanvas(this.lowerContext);\n this.refreshActiveObj();\n if (!isNullOrUndefined(tempActiveObj)) {\n this.activeObj = extend({}, tempActiveObj, {}, true);\n this.drawObject('duplicate', this.activeObj);\n if (this.currentToolbar === 'crop') {\n this.refreshToolbar('main', true, true);\n }\n else {\n this.refreshToolbar(this.currentToolbar, true, true);\n }\n if (this.zoomFactor === 0) {\n this.currSelectionPoint = null;\n }\n }\n if (!this.isUndoRedo) {\n this.updateUndoRedoColl('zoom', zoomState, this.objColl, null, this.zoomFactor, this.adjustmentLevel.sharpen, this.adjustmentLevel.bw);\n }\n this.isUndoRedo = false;\n var zoomOut = document.querySelector('#' + this.element.id + '_zoomOut');\n if (!isNullOrUndefined(zoomOut) && this.zoomFactor === 0) {\n zoomOut.classList.add('e-disabled');\n zoomOut.parentElement.classList.add('e-overlay');\n }\n else if (!isNullOrUndefined(zoomOut)) {\n zoomOut.classList.remove('e-disabled');\n zoomOut.parentElement.classList.remove('e-overlay');\n }\n if (!this.togglePan) {\n this.callMainToolbar(false, true);\n }\n this.autoEnablePan();\n if (!isNullOrUndefined(tempActiveObj)) {\n this.activeObj = extend({}, tempActiveObj, {}, true);\n }\n if (this.activeObj.shape === 'crop-custom') {\n this.currObjType.isCustomCrop = true;\n }\n if (isNullOrUndefined(this.activeObj.activePoint) || this.activeObj.activePoint.width === 0) {\n if (this.currentToolbar === 'crop' || !isNullOrUndefined(tempActiveObj)) {\n this.refreshToolbar('main', true, true);\n }\n else {\n this.refreshToolbar('main');\n this.currentToolbar = 'main';\n }\n }\n else {\n if (this.currentToolbar === 'crop' || !isNullOrUndefined(tempActiveObj)) {\n this.refreshToolbar('main', true, true);\n }\n else {\n this.refreshToolbar('main');\n this.currentToolbar = 'main';\n }\n }\n var panBtn = this.element.querySelector('.e-img-pan .e-btn');\n if (!isNullOrUndefined(panBtn) && this.togglePan) {\n panBtn.classList.add('e-selected-btn');\n }\n else if (!isNullOrUndefined(panBtn)) {\n panBtn.classList.remove('e-selected-btn');\n }\n if (isShape) {\n this.activeObj = extend({}, this.objColl[this.objColl.length - 1], {}, true);\n this.objColl.pop();\n this.drawObject('duplicate', this.activeObj);\n if (this.activeObj.shape === 'text') {\n this.refreshToolbar('text');\n }\n else {\n this.refreshToolbar('shapes');\n }\n this.updateToolbarItems();\n }\n }\n };\n /**\n * Draw ellipse on an image.\n *\n * @param {number} x - Specifies x-coordinate of ellipse.\n * @param {number} y - Specifies y-coordinate of ellipse.\n * @param {number} radiusX - the radius x point for the ellipse.\n * @param {number} radiusY - the radius y point for the ellipse.\n * @param {number} strokeWidth - the stroke width of ellipse.\n * @param {string} strokeColor - the stroke color of ellipse.\n * @param {string} fillColor - the fill color of the ellipse.\n * @returns {boolean}.\n *\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.drawEllipse(10, 10, 40, 60);\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.drawEllipse = function (x, y, radiusX, radiusY, strokeWidth, strokeColor, fillColor) {\n var isEllipse = false;\n var inRange = this.isPointsInRange(x, y);\n if (!this.disabled && this.isImageLoaded && inRange) {\n isEllipse = true;\n this.redrawActObj();\n this.activeObj.shape = 'ellipse';\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.currObjType.isCustomCrop = false;\n var start = { x: x, y: y };\n this.drawShape('ellipse', strokeWidth, strokeColor, fillColor, start, radiusX, radiusY);\n }\n return isEllipse;\n };\n /**\n * Draw line on an image.\n *\n * @param {number} startX – Specifies start point x-coordinate of line.\n * @param {number} startY – Specifies start point y-coordinate of line.\n * @param {number} endX - Specifies end point x-coordinates of line.\n * @param {number} endY - Specifies end point y-coordinates of the line.\n * @param {number} strokeWidth - Specifies the stroke width of line.\n * @param {string} strokeColor - Specifies the stroke color of line.\n * @returns {boolean}.\n */\n ImageEditor.prototype.drawLine = function (startX, startY, endX, endY, strokeWidth, strokeColor) {\n var isLine = false;\n var inRange = this.isPointsInRange(startX, startY);\n if (!this.disabled && this.isImageLoaded && inRange) {\n isLine = true;\n this.redrawActObj();\n this.activeObj.shape = 'line';\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.currObjType.isCustomCrop = false;\n var start = { x: startX, y: startY };\n var width = endX - startX;\n var height = endY - startY;\n this.drawShape('line', strokeWidth, strokeColor, null, start, width, height);\n }\n return isLine;\n };\n /**\n * Draw a rectangle on an image.\n *\n * @param {number} x - Specifies x-coordinate of rectangle.\n * @param {number} y - Specifies y-coordinate of rectangle.\n * @param {number} width - Specifies the width of the rectangle.\n * @param {number} height - Specifies the height of the rectangle.\n * @param {number} strokeWidth - Specifies the stroke width of rectangle.\n * @param {string} strokeColor - Specifies the stroke color of rectangle.\n * @param {string} fillColor - the fill color of the rectangle.\n * @returns {boolean}.\n */\n ImageEditor.prototype.drawRectangle = function (x, y, width, height, strokeWidth, strokeColor, fillColor) {\n var isRectangle = false;\n var inRange = this.isPointsInRange(x, y);\n if (!this.disabled && this.isImageLoaded && inRange) {\n isRectangle = true;\n this.redrawActObj();\n this.activeObj.shape = 'rectangle';\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.currObjType.isCustomCrop = false;\n var start = { x: x, y: y };\n this.drawShape('rectangle', strokeWidth, strokeColor, fillColor, start, width, height);\n }\n return isRectangle;\n };\n /**\n * Draw a text on an image.\n *\n * @param {number} x - Specifies x-coordinate of text.\n * @param {number} y - Specifies y-coordinate of text.\n * @param {string} text - Specifies the text to add on an image.\n * @param {string} fontFamily - Specifies the font family of the text.\n * @param {number} fontSize - Specifies the font size of the text.\n * @param {boolean} bold - Specifies whether the text is bold or not.\n * @param {boolean} italic - Specifies whether the text is italic or not.\n * @param {string} color - Specifies font color of the text.\n * @returns {boolean}.\n *\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.drawText(10, 10, 'Syncfusion', 'Arial', 12, true, true, '#000');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n *\n * </script>\n * ```\n */\n ImageEditor.prototype.drawText = function (x, y, text, fontFamily, fontSize, bold, italic, color) {\n var isText = false;\n var inRange = this.isPointsInRange(x, y);\n if (!this.disabled && this.isImageLoaded && inRange) {\n isText = true;\n this.drawShapeText(text, fontFamily, fontSize, bold, italic, color, x, y);\n }\n return isText;\n };\n /**\n * Selects a shape based on the given shape id. The id can be got from the public method ‘getShapeSettings’.\n *\n * @param {string} id - Specifies the shape id to select a shape on an image.\n * @returns {boolean}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.selectShape('shape_1');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.selectShape = function (id) {\n var isSelected = false;\n if (!this.disabled && this.isImageLoaded) {\n this.applyActObj();\n if (id.split('_')[0] === 'shape') {\n var obj = void 0;\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].currIndex === id) {\n obj = extend({}, this.objColl[i], {}, true);\n break;\n }\n }\n if (isNullOrUndefined(obj)) {\n isSelected = false;\n }\n else {\n isSelected = true;\n this.activeObj = obj;\n this.lowerContext.filter = this.canvasFilter;\n this.redrawShape(this.activeObj);\n if (this.activeObj.shape === 'text') {\n this.refreshToolbar('text');\n }\n else if (this.activeObj.shape === 'pen') {\n this.refreshToolbar('pen');\n }\n else {\n this.refreshToolbar('shapes');\n }\n this.updateToolbarItems();\n }\n }\n else if (id.split('_')[0] === 'pen') {\n if (this.isFreehandDrawEditing) {\n this.okBtn();\n }\n if (this.isFreehandDrawIndex(parseInt(id.split('_')[1], 10) - 1)) {\n isSelected = true;\n this.selectFreehandDraw(parseInt(id.split('_')[1], 10) - 1);\n this.updateToolbarItems();\n }\n else {\n isSelected = false;\n }\n }\n }\n return isSelected;\n };\n /**\n * Deletes a shape based on the given shape id. The id can be got from the public method getShapeSettings.\n *\n * @param {string} id - Specifies the shape id to delete the shape on an image.\n * @returns {void}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.deleteShape('shape_1');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.deleteShape = function (id) {\n if (!this.disabled && this.isImageLoaded) {\n this.applyActObj();\n if (id.split('_')[0] === 'shape') {\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].currIndex === id) {\n this.objColl.splice(i, 1);\n break;\n }\n }\n }\n else if (id.split('_')[0] === 'pen') {\n if (this.isFreehandDrawIndex(parseInt(id.split('_')[1], 10) - 1)) {\n this.deleteFreehandDraw(parseInt(id.split('_')[1], 10) - 1, true);\n }\n }\n this.lowerContext.filter = this.canvasFilter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n this.refreshToolbar('main');\n }\n };\n /**\n * Get particular shapes details based on id of the shape which is drawn on an image editor.\n *\n * @param {string} id - Specifies the shape id on an image.\n * @returns {ShapeSettings}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.getShapeSetting('shape_1');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.getShapeSetting = function (id) {\n var shapeDetails;\n if (!this.disabled && this.isImageLoaded) {\n this.applyActObj();\n if (id.split('_')[0] === 'shape') {\n var obj = void 0;\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].currIndex === id) {\n obj = extend({}, this.objColl[i], {}, true);\n break;\n }\n }\n shapeDetails = this.getObjDetails(obj);\n }\n else if (id.split('_')[0] === 'pen') {\n shapeDetails = this.getFreehandDrawDetails(parseInt(id.split('_')[1], 10) - 1);\n }\n }\n return shapeDetails;\n };\n /**\n * Get all the shapes details which is drawn on an image editor.\n *\n * @returns {ShapeSettings[]}.\n */\n ImageEditor.prototype.getShapeSettings = function () {\n var shapeDetailsColl = [];\n if (!this.disabled && this.isImageLoaded) {\n this.applyActObj();\n for (var i = 0; i < this.objColl.length; i++) {\n var shapeDetails = this.getObjDetails(this.objColl[i]);\n shapeDetailsColl.push(shapeDetails);\n }\n for (var i = 0; i < this.freehandCounter; i++) {\n var shapeDetails = this.getFreehandDrawDetails(i);\n shapeDetailsColl.push(shapeDetails);\n }\n }\n return shapeDetailsColl;\n };\n /**\n * To refresh the Canvas Wrapper.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.update = function () {\n var canvasWrapper = document.querySelector('#' + this.element.id + '_canvasWrapper');\n if (!isNullOrUndefined(canvasWrapper)) {\n canvasWrapper.style.width = this.element.offsetWidth - 2 + 'px';\n }\n this.lowerCanvas.width = this.upperCanvas.width = this.element.offsetWidth - 2;\n if (Browser.isDevice) {\n if (!isNullOrUndefined(canvasWrapper)) {\n canvasWrapper.style.height = this.element.offsetHeight - (2 * this.toolbarHeight) - 5 + 'px';\n }\n this.lowerCanvas.height = this.upperCanvas.height = this.element.offsetHeight - (2 * this.toolbarHeight) - 5;\n }\n else {\n if (!isNullOrUndefined(canvasWrapper)) {\n canvasWrapper.style.height = this.element.offsetHeight - this.toolbarHeight - 3 + 'px';\n }\n this.lowerCanvas.height = this.upperCanvas.height = this.element.offsetHeight - this.toolbarHeight - 3;\n }\n this.lowerContext.filter = this.canvasFilter = this.initialAdjustmentValue = this.adjustmentValue = this.getDefaultFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n };\n /**\n * To apply the filters to an image\n *\n * @param {ImageFinetuneOptions } finetuneOption - Specifies the finetune options to the image.\n * @param {number } value - Specifies the value for finetuning the image.\n * @returns {void}.\n *\n */\n ImageEditor.prototype.finetuneImage = function (finetuneOption, value) {\n if (!this.disabled && this.isImageLoaded) {\n switch (finetuneOption.toLowerCase()) {\n case 'brightness':\n this.setBrightness(value);\n break;\n case 'contrast':\n this.setContrast(value);\n break;\n case 'hue':\n this.setHue(value);\n break;\n case 'saturation':\n this.setSaturation(value);\n break;\n case 'opacity':\n this.setOpacity(value);\n break;\n case 'blur':\n this.setBlur(value);\n break;\n case 'exposure':\n this.setExposure(value);\n break;\n }\n this.canvasFilter = this.lowerContext.filter;\n }\n };\n /**\n * To apply the filters to an image\n *\n * @param {ImageFilterOptions } filterOption - Specifies the filter options to the image.\n * @returns {void}.\n */\n ImageEditor.prototype.applyImageFilter = function (filterOption) {\n if (!this.disabled && this.isImageLoaded) {\n this.setFilter(filterOption.toString());\n this.canvasFilter = this.lowerContext.filter;\n }\n };\n /**\n * Undo the last user action.\n *\n * @private\n * @returns {void}.\n */\n ImageEditor.prototype.undo = function () {\n if (!this.disabled && this.isImageLoaded) {\n if (this.undoRedoStep > 0) {\n if (!isNullOrUndefined(this.activeObj.shape)) {\n this.refreshToolbar('shapes');\n }\n else {\n this.refreshToolbar('main');\n }\n if (this.activeObj.activePoint.width !== 0) {\n this.tempActObj = this.activeObj;\n }\n //this.refreshActiveObj();\n this.undoRedoStep--;\n this.enableDisableToolbarBtn();\n this.isUndoRedo = true;\n this.lowerContext.filter = this.canvasFilter;\n var obj = this.undoRedoColl[this.undoRedoStep];\n if (this.undoRedoColl.length === this.undoRedoStep) {\n this.currObjType.isUndoAction = false;\n }\n else {\n this.currObjType.isUndoAction = true;\n }\n if (obj.operation !== 'textTransform' && this.textArea.style.display === 'block') {\n this.textArea.style.display = 'none';\n }\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n var xDiff = void 0;\n var yDiff = void 0;\n var tempUndoRedoColl = [];\n var prevObj = void 0;\n var value = '';\n switch (obj.operation) {\n case 'rotate':\n if (obj.value === 90) {\n value = 'rotateleft';\n }\n else if (obj.value === -90) {\n value = 'rotateright';\n }\n this.performTransformation(value);\n break;\n case 'flip':\n if (obj.value.toLowerCase() === 'horizontal') {\n value = 'horizontalflip';\n }\n else if (obj.value.toLowerCase() === 'vertical') {\n value = 'verticalflip';\n }\n this.performTransformation(value);\n break;\n case 'zoom':\n if (this.zoomFactor === 0 && obj.zoomFactor !== 0) {\n this.zoomFactor = obj.zoomFactor;\n }\n this.zoom(-obj.value);\n this.isUndoRedo = true;\n break;\n case 'pan':\n xDiff = this.destLeft;\n yDiff = this.destTop;\n this.destLeft = obj.previousObj.x;\n this.destTop = obj.previousObj.y;\n xDiff += this.destLeft;\n yDiff += this.destTop;\n this.drawPannedImage(xDiff, yDiff);\n break;\n case 'crop':\n if (!isNullOrUndefined(this.currSelectionPoint)) {\n tempUndoRedoColl = extend([], this.undoRedoColl, [], true);\n this.select('Custom');\n this.refreshToolbar('main', true, true);\n getComponent(this.element.querySelector('#' + this.element.id + '_cropBtn'), 'dropdown-btn').toggle();\n this.undoRedoColl = tempUndoRedoColl;\n this.enableDisableToolbarBtn();\n }\n break;\n case 'freehanddraw':\n this.pointColl = obj.previousObj;\n this.freehandCounter--;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.isUndoRedo = true;\n this.redrawImgWithObj();\n break;\n case 'freehanddrawCustomized':\n this.pointColl = obj.previousObj;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.isUndoRedo = true;\n this.redrawImgWithObj();\n break;\n case 'delete':\n if (obj.value === 'freehanddraw') {\n this.pointColl = obj.previousObj;\n this.freehandCounter++;\n }\n else if (obj.value === 'shape') {\n this.objColl = obj.previousObj;\n }\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.isUndoRedo = true;\n this.redrawImgWithObj();\n break;\n case 'selectionTransform':\n this.activeObj = extend({}, obj.previousSelectionObj, {}, true);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n if (this.activeObj.activePoint.width !== 0 && this.activeObj.activePoint.height !== 0) {\n this.drawObject('duplicate', this.activeObj);\n this.refreshToolbar('main', true, true);\n }\n else {\n this.refreshToolbar('main');\n }\n this.currObjType.isCustomCrop = false;\n break;\n case 'shapeTransform':\n this.objColl = extend([], obj.previousObj, [], true);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.isUndoRedo = true;\n this.redrawImgWithObj();\n this.refreshActiveObj();\n break;\n case 'textTransform':\n this.objColl = extend([], obj.previousObj, [], true);\n for (var i = 0; i < obj.previousObj.length; i++) {\n if (this.tempActObj.currIndex === obj.previousObj[i].currIndex) {\n prevObj = extend({}, obj.previousObj[i], {}, true);\n this.objColl.splice(i, 1);\n break;\n }\n }\n if (!isNullOrUndefined(prevObj)) {\n this.updateTextBox(prevObj);\n }\n break;\n case 'text':\n if (!isNullOrUndefined(this.tempActObj)) {\n this.activeObj = extend({}, this.tempActObj, {}, true);\n }\n if (obj.value.length === 0 && this.objColl.length === 1) {\n this.tempActObj = extend({}, this.objColl[0], {}, true);\n }\n else {\n for (var i = 0; i < this.objColl.length; i++) {\n if (!isNullOrUndefined(this.objColl[i]) &&\n isNullOrUndefined(obj.value[i])) {\n this.tempActObj = extend({}, obj.value[i], {}, true);\n break;\n }\n if (obj.value[i].currIndex !== this.objColl[i].currIndex) {\n this.tempActObj = extend({}, this.objColl[i], {}, true);\n break;\n }\n }\n }\n this.activeObj = extend({}, this.tempActObj, {}, true);\n this.objColl = extend([], obj.value, [], true);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.isUndoRedo = true;\n this.redrawImgWithObj();\n this.textArea.style.display = 'block';\n this.textArea.value = obj.previousObj;\n break;\n case 'brightness':\n case 'contrast':\n case 'hue':\n case 'saturation':\n case 'opacity':\n case 'blur':\n case 'exposure':\n this.lowerContext.filter = this.canvasFilter = obj.previousObj;\n if (this.lowerContext.filter.split(' ').length > 1 &&\n this.lowerContext.filter.split(' ')[0].split('(')[1].split(')')[0] === '1') {\n this.isBrightnessAdjusted = false;\n }\n this.setAdjustment(obj.operation);\n this.isUndoRedo = true;\n break;\n case 'default':\n case 'chrome':\n case 'cold':\n case 'warm':\n case 'grayscale':\n case 'sepia':\n case 'invert':\n this.updateFilter(obj);\n break;\n }\n }\n }\n };\n /**\n * Redo the last user action.\n *\n * @private\n * @returns {void}.\n */\n ImageEditor.prototype.redo = function () {\n if (!this.disabled && this.isImageLoaded) {\n if (this.undoRedoStep < this.undoRedoColl.length) {\n if (!isNullOrUndefined(this.activeObj.shape)) {\n this.refreshToolbar('shapes');\n }\n else {\n this.refreshToolbar('main');\n }\n this.undoRedoStep++;\n this.enableDisableToolbarBtn();\n this.isUndoRedo = true;\n this.lowerContext.filter = this.canvasFilter;\n var obj = this.undoRedoColl[this.undoRedoStep - 1];\n if (this.undoRedoColl.length === this.undoRedoStep) {\n this.currObjType.isUndoAction = false;\n }\n else {\n this.currObjType.isUndoAction = true;\n }\n if (obj.operation !== 'textTransform' && this.textArea.style.display === 'block') {\n this.textArea.style.display = 'none';\n }\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n var selEle = this.element.querySelector('.e-contextual-toolbar-wrapper .e-toolbar-item.e-selected');\n var xDiff = void 0;\n var yDiff = void 0;\n var tempUndoRedoColl = void 0;\n var tempUndoRedoStep = void 0;\n var value = '';\n var currObj = void 0;\n switch (obj.operation) {\n case 'rotate':\n if (obj.value === 90) {\n value = 'rotateright';\n }\n else if (obj.value === -90) {\n value = 'rotateleft';\n }\n this.performTransformation(value);\n break;\n case 'flip':\n if (obj.value.toLowerCase() === 'horizontal') {\n value = 'horizontalflip';\n }\n else if (obj.value.toLowerCase() === 'vertical') {\n value = 'verticalflip';\n }\n this.performTransformation(value);\n break;\n case 'zoom':\n this.zoom(obj.value);\n break;\n case 'pan':\n xDiff = this.destLeft;\n yDiff = this.destTop;\n this.destLeft = obj.currentObj.x;\n this.destTop = obj.currentObj.y;\n xDiff += this.destLeft;\n yDiff += this.destTop;\n this.drawPannedImage(xDiff, yDiff);\n break;\n case 'crop':\n this.cropImg();\n this.refreshToolbar('main');\n break;\n case 'freehanddraw':\n this.pointColl = obj.currentObj;\n this.freehandCounter++;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.isUndoRedo = true;\n this.redrawImgWithObj();\n break;\n case 'freehanddrawCustomized':\n this.pointColl = obj.currentObj;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.isUndoRedo = true;\n this.redrawImgWithObj();\n break;\n case 'delete':\n if (obj.value === 'freehanddraw') {\n this.pointColl = obj.currentObj;\n this.freehandCounter--;\n }\n else if (obj.value === 'shape') {\n this.objColl = obj.currentObj;\n }\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.isUndoRedo = true;\n this.redrawImgWithObj();\n break;\n case 'selectionTransform':\n if (this.zoomFactor !== obj.zoomFactor) {\n if (this.zoomFactor > 0) {\n this.zoom(-this.zoomFactor);\n }\n else {\n this.zoom(Math.abs(this.zoomFactor));\n }\n }\n this.activeObj = extend({}, obj.currentSelectionObj, {}, true);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n if (this.activeObj.activePoint.width !== 0 && this.activeObj.activePoint.height !== 0) {\n this.drawObject('duplicate', this.activeObj);\n this.refreshToolbar('main', true, true);\n }\n else {\n this.refreshToolbar('main');\n }\n break;\n case 'shapeTransform':\n this.objColl = extend([], obj.currentObj, [], true);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.isUndoRedo = true;\n this.redrawImgWithObj();\n this.refreshActiveObj();\n break;\n case 'textTransform':\n this.objColl = extend([], obj.currentObj, [], true);\n for (var i = 0; i < obj.previousObj.length; i++) {\n if (this.tempActObj.currIndex === obj.currentObj[i].currIndex) {\n currObj = extend({}, obj.currentObj[i], {}, true);\n this.objColl.splice(i, 1);\n break;\n }\n }\n if (!isNullOrUndefined(currObj)) {\n this.updateTextBox(currObj);\n }\n break;\n case 'text':\n if (!isNullOrUndefined(this.tempActObj)) {\n this.activeObj = extend({}, this.tempActObj, {}, true);\n }\n this.objColl = extend([], obj.value, [], true);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.isUndoRedo = true;\n this.redrawImgWithObj();\n this.textArea.style.display = 'block';\n this.textArea.value = obj.currentObj;\n tempUndoRedoColl = extend([], this.undoRedoColl, [], true);\n tempUndoRedoStep = this.undoRedoStep;\n this.redrawActObj();\n this.undoRedoColl = tempUndoRedoColl;\n this.undoRedoStep = tempUndoRedoStep;\n this.textArea.style.display = 'none';\n this.textArea.value = '';\n break;\n case 'brightness':\n case 'contrast':\n case 'hue':\n case 'saturation':\n case 'opacity':\n case 'blur':\n case 'exposure':\n this.lowerContext.filter = this.canvasFilter = obj.currentObj;\n this.setAdjustment(obj.operation);\n break;\n case 'default':\n case 'chrome':\n case 'cold':\n case 'warm':\n case 'grayscale':\n case 'sepia':\n case 'invert':\n if (selEle) {\n selEle.classList.remove('e-selected');\n }\n if (document.getElementById(this.element.id + '_' + obj.operation + 'Canvas')) {\n document.getElementById(this.element.id + '_' + obj.operation + 'Canvas').parentElement.classList.add('e-selected');\n }\n this.currentFilter = this.element.id + '_' + obj.operation;\n this.lowerContext.filter = this.canvasFilter = obj.currentObj;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n break;\n }\n if (this.undoRedoStep === this.undoRedoColl.length) {\n this.isUndoRedo = false;\n }\n }\n }\n };\n var ImageEditor_1;\n __decorate([\n Property('')\n ], ImageEditor.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"disabled\", void 0);\n __decorate([\n Property('100%')\n ], ImageEditor.prototype, \"height\", void 0);\n __decorate([\n Property('Bootstrap5')\n ], ImageEditor.prototype, \"theme\", void 0);\n __decorate([\n Property()\n ], ImageEditor.prototype, \"toolbar\", void 0);\n __decorate([\n Property()\n ], ImageEditor.prototype, \"toolbarTemplate\", void 0);\n __decorate([\n Property('100%')\n ], ImageEditor.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"allowUndoRedo\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"isReadOnly\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"enablePersistence\", void 0);\n __decorate([\n Complex({}, FinetuneSettings)\n ], ImageEditor.prototype, \"finetuneSettings\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"beforeSave\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"zooming\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"panning\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"cropping\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"rotating\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"flipping\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"shapeChanging\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"fileOpened\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"saved\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"toolbarCreated\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"toolbarUpdating\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"toolbarItemClicked\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"imageFiltering\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"finetuneValueChanging\", void 0);\n ImageEditor = ImageEditor_1 = __decorate([\n NotifyPropertyChanges\n ], ImageEditor);\n return ImageEditor;\n}(Component));\nexport { ImageEditor };\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","FinetuneSettings","_super","apply","Property","ChildProperty","ImageEditor","options","element","_this","call","degree","isUndoRedo","dragCanvas","dragElement","keyHistory","tempKeyHistory","mouseDownPoint","x","y","previousPoint","dragPoint","startX","startY","endX","endY","diffPoint","oldPoint","objColl","undoRedoColl","isImageLoaded","strokeSettings","strokeColor","fillColor","strokeWidth","tempStrokeSettings","textSettings","text","fontFamily","fontSize","fontRatio","bold","italic","underline","tempTextSettings","toolbarHeight","togglePan","disablePan","currFlipState","touchEndPoint","undoRedoStep","togglePen","currentToolbar","textStartPoints","fontSizeColl","textRow","activeObj","activePoint","width","height","flipObjColl","tempActiveObj","currObjType","shape","isDragging","isActiveObj","isText","isInitialText","isLine","isInitialLine","isCustomCrop","isZoomed","isUndoZoom","isUndoAction","isFiltered","isSave","defToolbarItems","isTimer","isFirstMove","startTouches","tempTouches","adjustmentLevel","brightness","contrast","hue","opacity","saturation","blur","exposure","sharpen","bw","tempAdjustmentLevel","adjustmentValue","initialAdjustmentValue","tempAdjustmentValue","currentFilter","tempFilter","canvasFilter","tempUndoRedoColl","tempUndoRedoStep","zoomFactor","tempZoomFactor","destLeft","destTop","srcLeft","srcTop","cropDestPoints","flipColl","isReverseRotate","isReverseFlip","isPreventDragging","isRotateZoom","rotateFlipColl","isCircleCrop","rotatedDestPoints","croppedDegree","isFreehandDrawingPoint","isFreehandDrawEditing","tempFreeHandDrawEditingStyles","totalPannedInternalPoint","totalPannedClientPoint","totalPannedPoint","isCropTab","cropZoomFactor","defaultZoomFactor","fileName","isBrightnessAdjusted","isInitialLoading","freehandDrawObj","lastWidth","lastVelocity","time","pointX","pointY","points","pointColl","pointCounter","freehandCounter","isFreehandDrawing","tempFreehandCounter","lastPan","selectedFreehandColor","isFreehandDrawCustomized","isShapeInserted","isAllowCropPan","tempPannedPoint","cropObj","cropZoom","defaultZoom","destPoints","srcPoints","afterCropActions","isCancelAction","isFreehandPointMoved","isTouch","freehandDownPoint","tempFlipPanPoint","currentFreehandDrawIndex","tempCurrentFreehandDrawIndex","preventZoomBtn","cancelObjColl","cancelPointColl","rotatedFlipCropSelection","ImageEditor_1","preRender","id","getUniqueID","Browser","isDevice","classList","add","themeColl","Bootstrap5","primaryColor","secondaryColor","Bootstrap5Dark","Tailwind","TailwindDark","Fluent","FluentDark","Bootstrap4","Bootstrap","BootstrapDark","Material","MaterialDark","Fabric","FabricDark","Highcontrast","defaultLocale","Crop","ZoomIn","ZoomOut","Undo","Redo","Transform","Annotation","Finetune","Brightness","Contrast","Hue","Saturation","Opacity","Blur","Sharpen","Exposure","Filter","Default","Chrome","Cold","Warm","Grayscale","BlackAndWhite","Sepia","Invert","Text","Pen","Reset","Save","Select","RotateLeft","RotateRight","HorizontalFlip","VerticalFlip","OK","Cancel","FillColor","StrokeColor","StrokeWidth","FontFamily","FontStyle","FontSize","FontColor","Pan","Move","Load","Custom","Square","Circle","Ellipse","Rectangle","Line","Bold","Italic","BoldItalic","XSmall","Small","Medium","Large","XLarge","ABC","Browse","l10n","L10n","locale","render","initialize","getModuleName","getPersistData","addOnPersist","onPropertyChanged","newProperties","oldProperties","_i","_a","keys","cssClass","removeClass","replace","trim","split","addClass","disabled","unwireEvent","remove","wireEvent","style","theme","updateTheme","upperContext","strokeStyle","fillStyle","finetuneSettings","updateFinetunes","setLocale","refreshToolbar","allowUndoRedo","destroy","removeAttribute","concat","getAttribute","destroySubComponents","innerHTML","trigger","createToolbar","createContextualToolbar","createCanvas","lowerContext","filter","getDefaultFilter","createSpinner","defaultValue","initializeFilter","setBrightness","setContrast","setHue","setSaturation","setExposure","setOpacity","setBlur","EventHandler","document","keyDownEventHandler","keyUpEventHandler","upperCanvas","mouseDownEventHandler","mouseMoveEventHandler","mouseUpEventHandler","lowerCanvas","canvasMouseDownHandler","canvasMouseMoveHandler","canvasMouseUpHandler","touchStartHandler","findTextPoint","textArea","handleScroll","window","addEventListener","windowResizeHandler","bind","isIos","info","name","screen","orientation","screenOrientation","inputElement","querySelectorAll","btnElement","len","contains","getComponent","detach","select","toPascalCase","str","strArr","isNullOrUndefined","toLowerCase","charAt","toUpperCase","slice","join","boxSizing","canvasWrapper","appendChild","createElement","className","attrs","offsetHeight","offsetWidth","inMemoryCanvas","setAttribute","position","backgroundColor","display","resize","getContext","baseImg","crossorigin","cursor","inMemoryContext","toolbar","toolbarTemplate","toolbarTemplateFn","toolbarItems","align","type","tooltipText","getConstant","template","Uploader","allowedExtensions","push","toolbarArea","getElementById","toolbar_1","uploadItems","selected","initToolbarItem","createBottomToolbar","Toolbar","items","created","toolbarType","clicked","defToolbarClicked","createLeftToolbarControls","clientHeight","toolbar_2","updateContextualToolbar","cType","querySelector","contextualToolbarArea","left","offsetLeft","refreshSlider","initFilterToolbarItem","renderSlider","cHt","ht","top","toolbarElem","initBottomToolbar","getMainToolbarItem","renderAnnotationBtn","renderCropBtn","renderTransformBtn","refreshOverflow","templateID","toolbarFn","templateParser","isReact","isAngular","templateColl","nodeType","renderReactTemplates","templateCompiler","compile","error","getLeftToolbarItem","isOkBtn","visible","indexOf","prefixIcon","tempToolbarItems","processToolbar","getRightToolbarItem","isApplyOption","getZoomToolbarItem","processSubToolbar","isToolbar","leftItem","rightItem","mainItem","zoomItem","renderSaveBtn","enableDisableToolbarBtn","undo","parentElement","redo","zoomIn","zoomOut","pan","undefined","uploadDiv","uploadElem","getElementsByTagName","uploadBtnElem","onchange","fileSelect","cropSelectedState","okBtn","proxy","iconCss","drpDownBtn","DropDownButton","open","args","refreshUndoRedoColl","getBoundingClientRect","splitWords","isCropSelection","refreshActiveObj","clearRect","item","freeHandDraw","drawShapeText","drawShape","updateToolbarItems","appendTo","cancelPan","cropSelect","transformSelect","imageEditorObj","getInstance","saveItems","export","currSelectionPoint","refreshDropDownBtn","operation","value","currentObj","extend","previousObj","previousSelectionObj","currentSelectionObj","currentSelectionPoint","performTransformation","zoom","Math","abs","updateTransform","rotate","flip","getShapesToolbarItem","initShapesToolbarItem","createShapeColor","createShapeBtn","ColorPicker","modeSwitcher","noColor","showButtons","mode","change","pushActItemIntoObj","pop","currentValue","hex","redrawShape","rgba","fillDDB_1","children","toggle","inline","strokeDDB_1","background","strokeWidthItems","strokeWidthBtn","spanElem_1","drpDownBtn_1","activeBtn","textContent","parseInt","getTextToolbarItem","getFontFamilyItems","getFontSizeItems","initTextToolbarItem","createTextColor","createTextBtn","fontColor","color","temp","strokeDDB_2","setTextBoxStylesToActObj","fontNameBtn","spanElem_2","fontFamilyBtn_1","createPopupOnClick","beforeItemRender","updateFontRatio","redrawText","updateFontStyles","fontStyleBtnElem","span1Elem_1","fontStyleBtn_1","fontStyle","fontWeight","applyFontStyle","fontSizeBtnElem","fontSizeSpanElem_1","fontSizes","getFontSizes","fontSizeBtn_1","textStyle","font","rows","getMaxText","measureText","parseFloat","setTextSelection","updateActiveObject","destWidth","destHeight","round","toString","getTextAreaWidth","tempBold","tempItalic","updateUndoRedoObj","updateObjColl","initZoomToolbarItem","applyPreviewFilter","contextualToolbarClicked","selEle","imageFiltering","setFilter","isContextualToolbar","panBtn","isDisabledZoomOut","isDisabledFilter","isDisabledAdjustment","adjustment","applyFreehandDraw","performCancel","reset","callUndo","callRedo","setTempFilterProperties","openSlider","cancelFreehandDraw","transform","redrawImgWithObj","callMainToolbar","cancelItems","applyShape","redrawActObj","freehandDrawSelectedIndex","renderImage","isSelected","freehandDrawHoveredIndex","n","unselectBtn","selElem","crop","applyActObj","updateBrightnessFilter","opacityValue","isFreehandDrawIndex","index","isIndex","deleteFreehandDraw","isId","tempPointColl","count","sliderWrapper","slider","hdrWrapper","ej2_instances","iterateObjColl","updateAdjustment","isPreview","brightnessValue","values","getFilterValue","temp_1","freehandRedraw","saturate","bright","saturatePercent","saturatePercentage","getSaturationFilterValue","getDefaultCurrentFilter","setTempFilterValue","updateCurrentTransformedState","drawImage","srcWidth","srcHeight","tempFilter_1","cropCircle","autoEnablePan","tempSplitWords","labelWrapper","styles","min","max","getCurrAdjustmentValue","createSlider","Slider","tooltip","isVisible","placement","showOn","step","setCurrAdjustmentValue","finetuneValueChanging","finetune","isApplyBtn","isZooming","setCurrSelectionPoints","isSetDimension","setDestinationPoints","currentTransformedState","setCropObj","updateObjAndFreeHandDrawColl","imageRatio","l","ratioX","ratioY","tempPointsColl","currIndex","topLeftCircle","clearSelection","length_1","drawPannImage","getCurrentPanRegion","updateFlipPan","rotatePan","currentPannedPoint","cropImg","clearOuterCanvas","freehandDownHandler","e","canvas","Date","getTime","clientX","clientY","touches","freehandMoveHandler","freehandUpHandler","context","rect","processPoint","closePath","penStrokeWidth","flipState","updateUndoRedoColl","mouseDown","controlPoint1","controlPoint2","startPoint","endPoint","lastPoint","point","isLastPointTooClose","distanceTo","calcCurveControlPoints","minStrokeWidth","maxStrokeWidth","startDraw","p1","p2","p3","dx1","dy1","dx2","dy2","m1","m2","l1","sqrt","l2","dxm","dym","k","cm","tx","ty","tempVelocity","pointVelocity","newWidth","drawCurve","start","pow","startWidth","endWidth","t1","t2","t3","u1","u2","u3","widthValue","bezierLength","drawSteps","ceil","beginPath","drawArc","fill","t","pointx1","pointy1","pointx2","pointy2","pointx3","pointy3","bezierPoint","startpoint","cp1","cp2","endpoint","size","moveTo","arc","PI","getCurrentFlipState","isCropping","initPenToolbarItem","initAdjustmentToolbarItem","getAdjustmentToolbarItem","getFilterToolbarItem","getPenToolbarItem","createPenColor","createPenBtn","penColor","updateFreehandDrawColorChange","hoverFreehandraw","strokeDDB_3","spanElem_3","getPenStroke","drpDownBtn_2","setPenStroke","createCanvasFilter","getCurrentCanvasData","data","getImageData","imageData","putImageData","noFilter","ctx","chrome","cold","warm","grayscale","sepia","invert","callUpdateCurrentTransformedState","tempObjColl","tempTogglePen","isPreventDestination","isRotatePan","reverseTransformedState","setTransform","isPreventDimension","isPreventCircleCrop","iterateRotateFlipColl","setClientTransformedDimension","isReverse","translate","scale","isObjInsideCropRegion","obj","isInside","panFreehandDrawColl","xDiff","yDiff","panRegion","panObjColl","cropObjColl","cropFreehandDrawColl","idx","flipFreehandrawColl","shapeFlip","rotateFreehandDrawColl","zoomFreehandDrawColl","zoomX","zoomY","zoomObjColl","preventApply","updateFontSize","calcRatio","widthRatio","heightRatio","drawCustomSelection","cropShape","clientWidth","drawObject","top_1","isFlip","globalCompositeOperation","restore","updateCropObj","drawCropSelectionImage","isAfterCropAction","currSelectionPoint_1","setDestPointsForFlipState","isRotateCrop","rotateCrop","flipCrop","ratio","resetPanPoints","updateImageRatioForActObj","maxDimension","calcMaxDimension","drawImgToCanvas","limitPan","updatePanPoints","tempDestLeft","tempDestTop","panMove","tempPanMove","tempActObj","updateFlipActiveObj","setCurrentPanRegion","region","drawPannedImage","isObjCreated","tempSelectionObj","tempFlipState","rotatedFlip","tempCurrFlipState","tempFlipColl","isPrevent","redrawObj","tempDegree","rotateObjColl","updateRotatePanPoints","rotatePanActiveObj","initialDestLeft","initialDestTop","rotateZoom","powerOften","drawZoomImgToCanvas","selectionObj","setZoomDimension","updateCanvas","fileOpened","fileType","imageOnLoad","src","onload","hideSpinner","shapeDegree","splice","showSpinner","filesData","files","update","url","URL","createObjectURL","transformOrigin","findTextTarget","getStrokeWidth","selFillElem","selStrokeElem","selTextStrokeElem","selPenStrokeElem","strokeWidthElem","fontFamilyElem","fontSizeElem","fontStyleElem","setTimer","timer","targetTouches","pageX","pageY","calculateScale","endTouches","startDistance","getDistance","a","setXYPoints","preventDefault","bbox","setTimeout","isShapeTouch","isShape","findTargetObj","isFreehandDrawTouch","isFreehandDraw","setCursor","selectFreehandDraw","closeContextualToolbar","currentTarget","isPan","tempHoveredIndex","findTarget","setActivePoint","splitWords_1","isCropSelection_1","offsetTop","firstFingerX","firstFingerY","secondFingerX","secondFingerY","disableZoomOutBtn","updateActivePoint","JSON","stringify","applyCurrActObj","shapeChangingArgs","beforeSave","cancel","ctrlKey","observableSaveArgs","stopImmediatePropagation","action","previousShapeSettings","updatePreviousShapeSettings","currentShapeSettings","horTopLine","textKeyDown","offsetX","offsetY","panDown","isInsideCanvas","String","fromCharCode","which","scrollHeight","setTextBoxWidth","adjustToScreen","isSelectionCrop","radius","isDisabled","actObj","floor","updateTextFromTextArea","widthColl","setTextBoxPos","setTextBoxPoints","selectedText","textFlip","border","overflow","focus","setTextBoxHeight","selectionStart","finish","selectionEnd","substring","textAreaTop","maxHeight","textAreaWidth","letterWidth","textWidth","textHeight","selectInfo","setDragWidth","tempWidth","setDragHeight","tempHeight","triggerShapeChange","shapeResizingArgs","shapeMovingArgs","updateShapeChangeEventArgs","updateNWPoints","updateNPoints","updateNEPoints","updateWPoints","updateEPoints","updateSWPoints","updateSPoints","updateSEPoints","preventDraggingInvertly","percentage","prevDiffX","prevDiffY","newScale","getScaleRatio","top_2","top_3","preventInverseResize","isTextArea","isTextBox","maxi","maxStr","maxText","setDragLimit","lineDraw","shapeCircle","canvasDraw","selectionWidth","selectionHeight","fillRect","lineWidth","ellipse","stroke","save","clip","drawOuterSelection","isCropCircle","tempObj","topRightCircle","bottomLeftCircle","bottomRightCircle","drawCenterCircles","isCropRatio","isPreventDrag","saveContext","drawCropRatio","isCrop","drawShapeObj","rotateShape","lineTo","horBottomLine","verLeftLine","verRightLine","actPoint","isMouseMove","horCircleWidth","verCircleHeight","topCenterCircle","centerLeftCircle","centerRightCircle","bottomCenterCircle","currentShape","horLineWidth","verLineHeight","drawSquareLines","shapeLine","shapeText","drawSelection","tempLineWidth","lineHeight","yPoint","j","updateActPoint","rotateText","fillText","horTopInnerLine","horBottomInnerLine","verLeftInnerLine","verRightInnerLine","updateCursorStyles","diffX","temp_2","shapeSettings","rotateDegree","isResize","setDragDirection","calcShapeRatio","updatePoints","diff","imgWidth","imgHeight","originalWidth","originalHeight","presetRatio","standardSize","scaleWidth","getScale","snippetArray","scaleHeight","snippetArray1","originalValue","canvasMaxWidth","canvasMaxHeight","widthScale","heightScale","cssMaxWidth","cssMaxHeight","setMaximumDimension","tempCanvas","newHeight","maxWidth","setCursorFromObj","setCursorForFreehandDrawing","isEntered","z1","z2","z3","z4","x1","x2","y1","y2","annotation","downloadImg","blob","href","download","body","documentElement","click","parentNode","removeChild","toSVGImg","exportChangesToCanvas","dataUrl","toDataURL","svg","createElementNS","img","setAttributeNS","svgDataUrl","btoa","toBlobFn","toBlob","blobUrl","tempContextFilter","tempContext","updateSaveContext","exportTransformedImage","exportRotate","exportHorizontalFlip","exportVerticalFlip","addLetter","letter","textFlipDegree","updateCurrentActiveObjPoint","currActObjIndex","setTextFontSize","multiplier","isActObj","splitWords_3","setCenterPoints","renderWidth","renderHeight","getObjDetails","shapeDetails","getFreehandDrawDetails","isPointsInRange","inRange","clearActObj","applyPenDraw","drawRotatedImage","popForDefaultTransformedState","rotateRight","rotateleft","horizontal","vertical","popForDefaultFlipState","popForDefaultRotateState","alignRotateFlipColl","updateFlipColl","direction","horizontalFlip","verticalFlip","updateFlipState","setFilterValue","filterValue","setSaturationFilterValue","getBlackAndWhiteData","colour","prevFilter","updateTextBox","setAdjustment","valueArr","updateFilter","filterCanvas","drawNewSelection","transitionArgs","activeObjShape","toLocaleLowerCase","toolbar_11","isRotate","saved_1","freehandDraw","isUpdate","zoomState","drawEllipse","radiusX","radiusY","isEllipse","drawLine","drawRectangle","isRectangle","drawText","selectShape","deleteShape","getShapeSetting","getShapeSettings","shapeDetailsColl","finetuneImage","finetuneOption","applyImageFilter","filterOption","prevObj","currObj","Complex","Event","NotifyPropertyChanges","Component"],"mappings":"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"}
|