@syncfusion/ej2-image-editor 20.4.42 → 20.4.49
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 +8 -2
- 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 +6619 -3832
- package/dist/es6/ej2-image-editor.es2015.js.map +1 -1
- package/dist/es6/ej2-image-editor.es5.js +6623 -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 +6621 -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.umd.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","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","setCursor","initialDraw","updateActivePoint","drawObject","offsetTop","firstFingerX","firstFingerY","secondFingerX","secondFingerY","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","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.umd.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 ((!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 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","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","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","disableZoomOutBtn","updateActivePoint","offsetTop","firstFingerX","firstFingerY","secondFingerX","secondFingerY","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","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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"}
|