@syncfusion/ej2-image-editor 20.3.50 → 20.4.38
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/.eslintrc.json +16 -1
- package/CHANGELOG.md +6 -0
- package/README.md +65 -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 +2639 -623
- package/dist/es6/ej2-image-editor.es2015.js.map +1 -1
- package/dist/es6/ej2-image-editor.es5.js +2676 -652
- 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 +22 -24
- package/src/image-editor/image-editor-model.d.ts +102 -19
- package/src/image-editor/image-editor.d.ts +232 -31
- package/src/image-editor/image-editor.js +2676 -651
- package/styles/bootstrap-dark.css +36 -0
- package/styles/bootstrap.css +36 -0
- package/styles/bootstrap4.css +36 -0
- package/styles/bootstrap5-dark.css +36 -0
- package/styles/bootstrap5.css +36 -0
- package/styles/fabric-dark.css +36 -0
- package/styles/fabric.css +36 -0
- package/styles/fluent-dark.css +36 -0
- package/styles/fluent.css +36 -0
- package/styles/highcontrast-light.css +36 -0
- package/styles/highcontrast.css +36 -0
- package/styles/image-editor/_bootstrap-dark-definition.scss +1 -0
- package/styles/image-editor/_bootstrap-definition.scss +1 -0
- package/styles/image-editor/_bootstrap4-definition.scss +1 -0
- package/styles/image-editor/_bootstrap5-definition.scss +1 -0
- package/styles/image-editor/_fabric-dark-definition.scss +1 -0
- package/styles/image-editor/_fabric-definition.scss +1 -0
- package/styles/image-editor/_fluent-definition.scss +1 -0
- package/styles/image-editor/_fusionnew-definition.scss +1 -0
- package/styles/image-editor/_highcontrast-definition.scss +1 -0
- package/styles/image-editor/_highcontrast-light-definition.scss +1 -0
- package/styles/image-editor/_layout.scss +38 -0
- package/styles/image-editor/_material-dark-definition.scss +1 -0
- package/styles/image-editor/_material-definition.scss +1 -0
- package/styles/image-editor/_material3-definition.scss +1 -0
- package/styles/image-editor/_tailwind-definition.scss +1 -0
- package/styles/image-editor/_theme.scss +11 -0
- package/styles/image-editor/bootstrap-dark.css +36 -0
- package/styles/image-editor/bootstrap-dark.scss +1 -0
- package/styles/image-editor/bootstrap.css +36 -0
- package/styles/image-editor/bootstrap.scss +1 -0
- package/styles/image-editor/bootstrap4.css +36 -0
- package/styles/image-editor/bootstrap4.scss +1 -0
- package/styles/image-editor/bootstrap5-dark.css +36 -0
- package/styles/image-editor/bootstrap5-dark.scss +1 -0
- package/styles/image-editor/bootstrap5.css +36 -0
- package/styles/image-editor/bootstrap5.scss +1 -0
- package/styles/image-editor/fabric-dark.css +36 -0
- package/styles/image-editor/fabric-dark.scss +1 -0
- package/styles/image-editor/fabric.css +36 -0
- package/styles/image-editor/fabric.scss +1 -0
- package/styles/image-editor/fluent-dark.css +36 -0
- package/styles/image-editor/fluent-dark.scss +1 -0
- package/styles/image-editor/fluent.css +36 -0
- package/styles/image-editor/fluent.scss +1 -0
- package/styles/image-editor/highcontrast-light.css +36 -0
- package/styles/image-editor/highcontrast-light.scss +1 -0
- package/styles/image-editor/highcontrast.css +36 -0
- package/styles/image-editor/highcontrast.scss +1 -0
- package/styles/image-editor/material-dark.css +36 -0
- package/styles/image-editor/material-dark.scss +1 -0
- package/styles/image-editor/material.css +36 -0
- package/styles/image-editor/material.scss +1 -0
- package/styles/image-editor/tailwind-dark.css +36 -0
- package/styles/image-editor/tailwind-dark.scss +1 -0
- package/styles/image-editor/tailwind.css +36 -0
- package/styles/image-editor/tailwind.scss +1 -0
- package/styles/material-dark.css +36 -0
- package/styles/material.css +36 -0
- package/styles/tailwind-dark.css +36 -0
- package/styles/tailwind.css +36 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-image-editor.min.js","sources":["../../src/image-editor/image-editor.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { NotifyPropertyChanges, Property, addClass, removeClass, extend } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, getComponent, getInstance, isNullOrUndefined, L10n, getUniqueID } from '@syncfusion/ej2-base';\nimport { SignatureBase } from '@syncfusion/ej2-inputs';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { ColorPicker, Uploader } from '@syncfusion/ej2-inputs';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { compile, compile as templateCompiler, Browser } from '@syncfusion/ej2-base';\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.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.lastX = 0;\n _this.lastY = 0;\n _this.dragStart = { x: 0, y: 0 };\n _this.dragged = false;\n _this.factor = 1; // current zoomed state\n _this.currFlipState = '';\n _this.touchEndPoint = {};\n _this.flipMethod = false;\n _this.flipDirection = '';\n _this.prevX = 0;\n _this.currX = 0;\n _this.prevY = 0;\n _this.currY = 0;\n _this.togglePen = false;\n _this.rotateMethod = false;\n _this.isBoldbtn = false;\n _this.isItalicbtn = false;\n _this.lastAction = '';\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 };\n _this.defToolbarItems = [];\n _this.baseImgSrc = '';\n _this.isTimer = false;\n _this.isScreenOriented = 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 Transform: 'Transform',\n Annotation: 'Annotation',\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 Default: 'Default',\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 };\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 }\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.unwireEvent();\n _super.prototype.destroy.call(this);\n this.element.innerHTML = '';\n this.trigger('destroyed');\n };\n ImageEditor.prototype.initialize = function () {\n this.createToolbar();\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 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 /**\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')) {\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.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.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_2 = getComponent(this.element.id + '_bottomToolbar', 'toolbar');\n toolbar_2.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 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_3 = getComponent(this.element.id + '_toolbar', 'toolbar');\n toolbar_3.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: 'ellipse', 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.text;\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 proxy.activeObj.strokeSettings.fillColor = args.currentValue.hex;\n proxy.strokeSettings.fillColor = proxy.activeObj.strokeSettings.fillColor;\n proxy.redrawShape(_this.activeObj);\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 proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n proxy.strokeSettings.strokeColor = proxy.activeObj.strokeSettings.strokeColor;\n if (!proxy.togglePen) {\n proxy.redrawShape(_this.activeObj);\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 args.element.querySelector('[aria-label = ' + '\"' + activeBtn + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\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.redrawShape(_this.activeObj);\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_4 = getComponent(_this.element.id + '_bottomToolbar', 'toolbar');\n toolbar_4.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_5 = getComponent(_this.element.id + '_toolbar', 'toolbar');\n toolbar_5.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 if (proxy.textBox.style.display === 'none') {\n proxy.strokeSettings.strokeColor = proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n if (!proxy.togglePen) {\n proxy.redrawShape(_this.activeObj);\n }\n }\n else if (proxy.textBox.style.display === 'block') {\n proxy.textBox.style.color = args.currentValue.hex;\n }\n else if (!proxy.togglePen) {\n proxy.redrawShape(_this.activeObj);\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.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 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.updateFontStyles();\n var width = _this.upperContext.measureText(_this.activeObj.keyHistory).width +\n _this.activeObj.textSettings.fontSize * 0.5;\n _this.textBox.style.width = Browser.isDevice ? width + 'px' : (width * ((ratio.width + ratio.height) / 2)) + '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.redrawShape(_this.activeObj);\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 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 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 + _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 _this.redrawText(ratio);\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.applyFontStyle = function (item, ratio) {\n switch (item) {\n case 'default':\n if (this.textBox.style.display === 'block') {\n var width = this.getTextAreaWidth(item);\n this.textBox.style.width = Browser.isDevice ? width + 'px' : (width * ((ratio.width + ratio.height) / 2)) + 'px';\n this.textBox.style.fontWeight = 'normal';\n this.textBox.style.fontStyle = 'normal';\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);\n this.textBox.style.width = Browser.isDevice ? width + 'px' : (width * ((ratio.width + ratio.height) / 2)) + 'px';\n this.textBox.style.fontWeight = 'bold';\n this.textBox.style.fontStyle = 'normal';\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);\n this.textBox.style.width = Browser.isDevice ? width + 'px' : (width * ((ratio.width + ratio.height) / 2)) + 'px';\n this.textBox.style.fontWeight = 'normal';\n this.textBox.style.fontStyle = 'italic';\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);\n this.textBox.style.width = (width / ratio.width) + 'px';\n this.textBox.style.fontWeight = 'bold';\n this.textBox.style.fontStyle = 'italic';\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_6 = getComponent(this.element.id + '_toolbar', 'toolbar');\n toolbar_6.refreshOverflow();\n }\n };\n ImageEditor.prototype.defToolbarClicked = function (args) {\n var ratio = this.calcRatio();\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 if (this.togglePen) {\n this.currObjType.isZoomed = true;\n this.freeHandDraw(false);\n }\n imageEditorObj.zoom(.1);\n if (!this.togglePan) {\n this.callMainToolbar(false, true);\n }\n if (this.factor > 0.95 && this.factor < 1.05) {\n this.dragCanvas = this.togglePan = false;\n this.callMainToolbar(false, true);\n }\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 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 break;\n case 'zoomout':\n if (this.togglePen) {\n this.currObjType.isZoomed = true;\n this.freeHandDraw(false);\n }\n imageEditorObj.zoom(-.1);\n if (!this.togglePan) {\n this.callMainToolbar(false, true);\n }\n if (this.factor > 0.95 && this.factor < 1.05) {\n this.dragCanvas = this.togglePan = false;\n this.callMainToolbar(false, true);\n }\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 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 break;\n case 'pan':\n this.currObjType.isCustomCrop = 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 }\n else {\n panBtn = this.element.querySelector('.e-img-pan .e-btn');\n panBtn.classList.add('e-selected-btn');\n imageEditorObj.pan(true);\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 this.cancelItems();\n break;\n case 'ok':\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 {\n this.applyActObj();\n }\n this.callMainToolbar(false);\n break;\n case 'text':\n this.currObjType.isCustomCrop = false;\n imageEditorObj.drawShapeText();\n this.refreshToolbar(type);\n break;\n case 'pen':\n this.currObjType.isCustomCrop = false;\n this.freeHandDraw(true);\n this.refreshToolbar(type);\n break;\n case 'reset':\n imageEditorObj.reset();\n break;\n case 'load':\n break;\n case 'save':\n break;\n case 'select':\n break;\n case 'bold':\n this.currObjType.isCustomCrop = false;\n if (!this.isBoldbtn) {\n this.activeObj.textSettings.bold = true;\n this.isBoldbtn = true;\n this.redrawText(ratio);\n }\n else {\n this.activeObj.textSettings.bold = false;\n this.isBoldbtn = false;\n this.redrawText(ratio);\n }\n break;\n case 'italic':\n this.currObjType.isCustomCrop = false;\n if (!this.isItalicbtn) {\n this.activeObj.textSettings.italic = true;\n if (this.activeObj.textSettings.bold) {\n this.upperContext.font = 'italic bold ' + this.activeObj.textSettings.fontSize + 'px' +\n ' ' + this.activeObj.textSettings.fontFamily;\n }\n else {\n this.upperContext.font = 'italic ' + this.activeObj.textSettings.fontSize + 'px' + ' ' +\n this.activeObj.textSettings.fontFamily;\n }\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 this.setTextSelection(width, height);\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n this.redrawShape(this.activeObj);\n this.isItalicbtn = true;\n }\n else {\n this.activeObj.textSettings.italic = false;\n if (this.activeObj.textSettings.bold) {\n this.upperContext.font = 'bold ' + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n else {\n this.upperContext.font = this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\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 this.setTextSelection(width, height);\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n this.redrawShape(this.activeObj);\n this.isItalicbtn = false;\n }\n break;\n }\n }\n this.trigger('toolbarItemClicked', args);\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 if (this.factor === 1) {\n this.refreshToolbar('main', isApplyBtn, false, isZooming);\n }\n else {\n this.refreshToolbar('main', isApplyBtn, false, isZooming);\n }\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 tempContext.drawImage(this.inMemoryCanvas, 0, 0);\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.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.currObjType.isZoomed = false;\n }\n };\n ImageEditor.prototype.refreshToolbar = function (type, isApplyBtn, isCropping, isZooming) {\n var args = { toolbarType: type };\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 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 }\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 spanElem_3.innerHTML = this.l10n.getConstant('Small');\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_7 = getComponent(_this.element.id + '_bottomToolbar', 'toolbar');\n toolbar_7.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_8 = getComponent(_this.element.id + '_toolbar', 'toolbar');\n toolbar_8.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.updateCanvas = function () {\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 this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerCanvas.width = this.upperCanvas.width = this.inMemoryCanvas.width = this.baseImg.width;\n this.lowerCanvas.height = this.upperCanvas.height = this.inMemoryCanvas.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.drawImage(this.baseImg, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.updateInMemoryCanvas('updateCanvas');\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n if (this.isUndoRedo) {\n if (this.flipState !== '') {\n this.flip(this.flipState);\n }\n }\n if (this.disabled) {\n this.element.setAttribute('class', 'e-disabled');\n }\n this.trigger('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 = 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 _this.isUndoRedo = false;\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.updateUndoRedoColl = function (operation, value, previousObj, currentObj) {\n this.undoRedoColl.push({ operation: operation, value: value, previousObj: previousObj, currentObj: currentObj });\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.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))).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 ImageEditor.prototype.touchStartHandler = function (e) {\n e.preventDefault();\n this.timer = setTimeout(this.setTimer.bind(this), 1000, e);\n this.mouseDownEventHandler(e);\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 (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 (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 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 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 this.applyCurrActObj(x, y);\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 shapeChangingArgs = { action: 'delete', previousShapeSettings: this.activeObj, currentShapeSettings: null };\n this.keyHistory = '';\n this.clearSelection();\n this.trigger('shapeChanging', shapeChangingArgs);\n this.refreshToolbar('main');\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 setTimeout(this.textKeyDown.bind(this), 1, e);\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 this.dragged = false;\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 this.dragged = true;\n if (this.dragStart && this.dragCanvas) {\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 };\n ImageEditor.prototype.canvasMouseUpHandler = function (e) {\n e.preventDefault();\n this.dragStart = null;\n this.currObjType.isDragging = false;\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 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();\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.lowerCanvas.toBlob(function (blob) {\n proxy.baseImg.src = URL.createObjectURL(blob);\n }, 'image/png');\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_9 = getComponent(proxy.element.id + '_toolbar', 'toolbar');\n toolbar_9.refreshOverflow();\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.redrawImg = function () {\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.drawImage(this.inMemoryCanvas, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\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();\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 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.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 }\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.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 };\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 for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n }\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.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.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 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.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\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;\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;\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;\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;\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 ratio = this.activeObj.shape.split('-');\n ratio = ratio[1].split(':');\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.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 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 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.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n for (var j = 0; j < this.objColl.length; j++) {\n if (this.objColl[j].shape === 'text' && this.objColl[j].shapeFlip !== this.currFlipState) {\n this.objColl[j].flippedText = true;\n }\n this.apply(this.objColl[j].shape, this.objColl[j]);\n }\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 = 'cross-hair';\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 = 'cross-hair';\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.drawBaseImg = function () {\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.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.lowerCanvas.width = this.imgDataColl[0].value.width;\n this.inMemoryCanvas.height = this.lowerCanvas.height = this.imgDataColl[0].value.height;\n this.inMemoryContext.putImageData(this.imgDataColl[0].value, 0, 0);\n var maxDimension = this.calcMaxDimension(this.inMemoryCanvas.width, 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 = (this.element.clientWidth - maxDimension.width) / 2 + 1 + 'px';\n this.lowerCanvas.style.top = this.upperCanvas.style.top = (this.element.clientHeight - this.toolbarHeight - maxDimension.height) / 2 + 1 + 'px';\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\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 for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n }\n else {\n this.updateCurrentActiveObjPoint('zoom');\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\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 + 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 + 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 + 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 + 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 - this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.width = this.objColl[i].activePoint.endY - 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 + this.objColl[i].activePoint.width;\n this.objColl[i].activePoint.endY = this.objColl[i].activePoint.startY + this.objColl[i].activePoint.height;\n this.objColl[i].activePoint.width = this.objColl[i].activePoint.endX - this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.height = this.objColl[i].activePoint.endY - 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 - this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.height = this.objColl[i].activePoint.endY - 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 else if (degree === 'zoom') {\n for (var i = 0; i < this.objColl.length; i++) {\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.height = this.objColl[i].activePoint.endX - this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.width = this.objColl[i].activePoint.endY - this.objColl[i].activePoint.startY;\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 - this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.height = this.objColl[i].activePoint.endY - this.objColl[i].activePoint.startY;\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.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\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 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 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.togglePen = true;\n }, 'image/png');\n this.isUndoRedo = false;\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 this.isUndoRedo = false;\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 }\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.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 /**\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 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.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.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.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.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 var data_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.isUndoRedo = false;\n proxy_2.baseImg.src = blobUrl_1;\n data_1 = proxy_2.lowerContext.getImageData(0, 0, proxy_2.lowerCanvas.width, proxy_2.lowerCanvas.height);\n proxy_2.imgDataColl = [];\n if (!proxy_2.isUndoRedo) {\n proxy_2.updateUndoRedoColl('crop', data_1, proxy_2.objColl);\n }\n proxy_2.isUndoRedo = false;\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.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.factor = 1;\n }\n return isCrop;\n };\n ImageEditor.prototype.updateInMemoryContext = function (imgData) {\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n var temp = extend({}, this.activeObj, {}, true);\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n this.activeObj = temp;\n imgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\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 /**\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.lastAction = 'flip';\n this.flipMethod = true;\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 this.flipDirection = 'horizontal';\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 this.flipDirection = 'vertical';\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 this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\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 if (this.flipState.toLowerCase() === 'horizontal') {\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.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.flipDirection = '';\n }\n else if (this.flipState.toLowerCase() === 'vertical') {\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.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.flipDirection = '';\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 for (var i = 0, len = this.objColl.length; i < len; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n }\n this.refreshActiveObj();\n if (!this.isUndoRedo) {\n this.updateUndoRedoColl('flip', direction, this.objColl);\n }\n this.isUndoRedo = this.flipMethod = false;\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 }\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 showSpinner(this.element);\n this.element.style.opacity = '0.5';\n var toolbar_10 = document.querySelector('#' + this.element.id + '_currPos');\n if (toolbar_10) {\n toolbar_10.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 var type = typeof (data);\n if (type === 'string') {\n this.imageOnLoad(data);\n }\n else {\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.drawImage(this.inMemoryCanvas, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.updateCanvas();\n hideSpinner(this.element);\n this.element.style.opacity = '1';\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 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();\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;\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 = this.flipDirection = '';\n this.upperCanvas.style.display = 'none';\n this.upperCanvas.style.cursor = this.lowerCanvas.style.cursor = 'default';\n this.undoRedoColl = [];\n this.dragCanvas = this.dragged = this.isUndoRedo = this.activeObj.flippedText = this.flipMethod = 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.togglePan = this.togglePen = this.rotateMethod = false;\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.lastAction = this.tempKeyHistory = '';\n this.isBoldbtn = this.isItalicbtn = false;\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.penStrokeWidth = undefined;\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.isScreenOriented = false;\n this.currObjType = { shape: '', isDragging: false, isActiveObj: false, isText: false, isInitialText: false, isLine: false,\n isInitialLine: false, isCustomCrop: false, isZoomed: 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 this.rotateMethod = true;\n this.lastAction = 'rotate';\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 this.degree += degree;\n if (this.degree === 360) {\n this.degree = 0;\n }\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.lowerContext.drawImage(this.inMemoryCanvas, -this.lowerCanvas.height / 2, -this.lowerCanvas.width / 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 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.redrawObj(degree);\n if (!isNullOrUndefined(activeObjShape)) {\n if (activeObjShape === 'custom') {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - 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 if (!this.isUndoRedo) {\n this.updateUndoRedoColl('rotate', degree, this.objColl);\n }\n this.isUndoRedo = false;\n }\n this.rotateMethod = false;\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 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.lowerContext.drawImage(this.inMemoryCanvas, 0, 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 }\n type = type ? type : 'Png';\n this.redrawActObj();\n var beforeSave = { cancel: false, fileName: 'ImageEditor', fileType: type };\n var saved_1 = { fileName: 'ImageEditor', fileType: type };\n this.trigger('beforeSave', beforeSave, function (observableSaveArgs) {\n if (!observableSaveArgs.cancel) {\n fileName = observableSaveArgs.fileName ? observableSaveArgs.fileName : fileName;\n if (type.toLowerCase() === 'svg') {\n fileName = fileName || 'ImageEditor';\n _this.toSVGImg(fileName);\n }\n else if (type.toLowerCase() === 'jpeg') {\n fileName = fileName || 'ImageEditor';\n _this.toBlobFn(fileName, type.toLowerCase());\n }\n else {\n fileName = fileName || 'ImageEditor';\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 - 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 */\n ImageEditor.prototype.freeHandDraw = function (value) {\n if (value) {\n this.togglePen = true;\n this.upperCanvas.style.cursor = 'cross-hair';\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 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.upperCanvas.style.cursor = 'default';\n var zoomState = void 0;\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.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 > 0) {\n this.zoomImg(3.75);\n }\n else {\n this.zoomImg(-3.75);\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 - 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 if (!this.isUndoRedo) {\n this.updateUndoRedoColl('zoom', zoomState, this.objColl);\n }\n this.isUndoRedo = false;\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 }\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.redrawShape(this.activeObj);\n this.refreshToolbar('shapes');\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.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 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.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.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 check whether the undo collection is empty or not.\n *\n * @returns {boolean}.\n * @private\n */\n ImageEditor.prototype.canUndo = function () {\n return _super.prototype.canUndo.call(this);\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 _super.prototype.canRedo.call(this);\n };\n /**\n * Erases all the signature strokes signed by user.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.clear = function () {\n _super.prototype.clear.call(this);\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 _super.prototype.draw.call(this, text, fontFamily, fontSize);\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 return _super.prototype.getBlob.call(this, 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 _super.prototype.isEmpty.call(this);\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 _super.prototype.load.call(this, signature, width, height);\n };\n /**\n * Undo the last user action.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.undo = function () {\n _super.prototype.undo.call(this);\n };\n /**\n * Redo the last user action.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.redo = function () {\n _super.prototype.redo.call(this);\n };\n /**\n * To save the signature with the given file type and file name.\n *\n * @param {SignatureFileType} 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 _super.prototype.save.call(this, type, fileName);\n };\n /**\n * To save the signature as Blob.\n *\n * @returns {Blob}.\n * @private\n */\n ImageEditor.prototype.saveAsBlob = function () {\n return _super.prototype.saveAsBlob.call(this);\n };\n /**\n * Returns the persistence data for component.\n *\n * @returns any.\n * @private\n */\n ImageEditor.prototype.getLocalData = function () {\n return _super.prototype.getLocalData.call(this);\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 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 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","ImageEditor","_super","options","element","_this","call","degree","isUndoRedo","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","lastX","lastY","dragStart","dragged","factor","currFlipState","touchEndPoint","flipMethod","flipDirection","prevX","currX","prevY","currY","togglePen","rotateMethod","isBoldbtn","isItalicbtn","lastAction","currentToolbar","textStartPoints","fontSizeColl","tempKeyHistory","penDrawColl","allowDrag","textRow","activeObj","activePoint","width","height","flipObjColl","currObjType","shape","isDragging","isActiveObj","isText","isInitialText","isLine","isInitialLine","isCustomCrop","isZoomed","defToolbarItems","baseImgSrc","isTimer","isScreenOriented","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","Transform","Annotation","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","Default","Bold","Italic","BoldItalic","XSmall","Small","Medium","Large","XLarge","ABC","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","destroy","removeAttribute","concat","getAttribute","innerHTML","trigger","createToolbar","createCanvas","updateContext","lowerContext","createSpinner","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","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","getComponent","initToolbarItem","createBottomToolbar","Toolbar","items","created","toolbarType","clicked","defToolbarClicked","createLeftToolbarControls","clientHeight","toolbarElem","initBottomToolbar","getMainToolbarItem","renderAnnotationBtn","renderCropBtn","renderTransformBtn","refreshOverflow","templateID","querySelector","toolbarFn","templateParser","isReact","isAngular","templateColl","nodeType","renderReactTemplates","querySelectorAll","templateCompiler","trim","compile","error","getLeftToolbarItem","isOkBtn","visible","tooltipText","indexOf","prefixIcon","getConstant","tempToolbarItems","processToolbar","len","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","top","getBoundingClientRect","select","splitWords","isCropSelection","refreshActiveObj","clearRect","refreshToolbar","item","freeHandDraw","drawShapeText","drawShape","updateToolbarItems","calcRatio","appendTo","cropSelect","ht","transformSelect","imageEditorObj","getInstance","saveItems","export","rotate","flip","getShapesToolbarItem","initShapesToolbarItem","createShapeColor","createShapeBtn","ColorPicker","modeSwitcher","noColor","value","showButtons","mode","change","currentValue","hex","redrawShape","rgba","fillDDB_1","children","toggle","left","offsetLeft","inline","strokeDDB_1","background","strokeWidthItems","ratio","strokeWidthBtn","spanElem_1","drpDownBtn_1","activeBtn","textContent","parseInt","getTextToolbarItem","getFontFamilyItems","getFontSizeItems","initTextToolbarItem","createTextColor","createTextBtn","fontColor","color","strokeDDB_2","fontNameBtn","spanElem_2","fontFamilyBtn_1","createPopupOnClick","beforeItemRender","temp","updateFontStyles","measureText","redrawText","fontStyleBtnElem","span1Elem_1","fontStyleBtn_1","fontStyle","fontWeight","replace","applyFontStyle","fontSizeBtnElem","fontSizeSpanElem_1","fontSizes","getFontSizes","fontSizeBtn_1","textStyle","font","rows","getMaxText","parseFloat","setTextSelection","updateActiveObject","Math","round","toString","getTextAreaWidth","tempBold","tempItalic","initZoomToolbarItem","panBtn","zoom","callMainToolbar","transform","cancelItems","crop","redrawActObj","applyActObj","reset","isApplyBtn","isZooming","imageEditorPointsColl","topLeftCircle","clearSelection","gradient","a","applyPenDraw","apply","tempCanvas","tempContext","drawImage","lineWidth","nexP","preP","beginPath","moveTo","points","m","dx1","dx2","dy1","dy2","j","curP","bezierCurveTo","shift","stroke","imgData","getImageData","tempObj","index","operation","splice","putImageData","isCropping","initPenToolbarItem","getPenToolbarItem","createPenColor","createPenBtn","penColor","strokeDDB_3","spanElem_3","drpDownBtn_2","setPenStroke","penStrokeWidth","updateCanvas","wrapperWidth","clientWidth","maxDimension","calcMaxDimension","maxWidth","maxHeight","updateInMemoryCanvas","imageOnLoad","src","onload","toBlob","blob","showSpinner","URL","createObjectURL","hideSpinner","opacity","shapeDegree","updateUndoRedoColl","previousObj","currentObj","inputElement","filesData","files","url","e","transformOrigin","scale","findTextTarget","getStrokeWidth","selFillElem","selStrokeElem","selTextStrokeElem","selPenStrokeElem","strokeWidthElem","fontFamilyElem","fontSizeElem","fontStyleElem","setTimer","timer","preventDefault","setTimeout","currentTarget","clientX","clientY","touches","canvasRatio","minStrokeWidth","maxStrokeWidth","velocity","mouseDownHandler","findTarget","setActivePoint","setCursor","initialDraw","updateActivePoint","drawObject","bbox","applyCurrActObj","shapeChangingArgs","beforeSave","fileName","fileType","cancel","ctrlKey","observableSaveArgs","stopImmediatePropagation","action","previousShapeSettings","currentShapeSettings","textKeyDown","offsetX","pageX","offsetY","pageY","offsetTop","transformedPoint","pt","transitionArgs","startPoint","endPoint","xDiff","yDiff","xxDiff","yyDiff","translate","pt1","pt2","redraw","String","fromCharCode","which","scrollHeight","setTextBoxWidth","adjustToScreen","redrawImg","ctx","xform","DOMMatrix","getTransform","savedTransforms","save","restore","pop","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","extend","setCursorForZoomState","floor","ceil","horTopLine","updateTextFromTextArea","widthColl","max","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","min","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","currImgData","flippedText","isResize","setDragDirection","calcShapeRatio","arcRadius","visibleWidth","visibleHeight","centerX","centerY","originalWidth","originalHeight","presetRatio","standardSize","scaleWidth","getScale","snippetArray","scaleHeight","snippetArray1","originalValue","widthRatio","heightRatio","canvasMaxWidth","canvasMaxHeight","widthScale","heightScale","cssMaxWidth","cssMaxHeight","setMaximumDimension","newWidth","newHeight","setCursorFromObj","downloadImg","href","download","body","documentElement","click","parentNode","removeChild","toSVGImg","dataUrl","toDataURL","svg","createElementNS","img","setAttributeNS","data","svgDataUrl","btoa","toBlobFn","blobUrl","addLetter","letter","drawBaseImg","calcPrevRatio","oldWidthRatio","oldHeightRatio","textFlipDegree","redrawSelection","redrawObj","updateCurrentActiveObjPoint","currActObjIndex","oldRatio","currIndex","calcCurrPoints","isActObj","splitWords_2","tempObjColl","proxy_1","setCenterPoints","renderWidth","renderHeight","start","tempHeight","drawPen","context","getObjDetails","shapeDetails","isPointsInRange","inRange","proxy_2","zoomedRotate","updateInMemoryContext","cssObj","getComputedStyle","imgData_1","globalCompositeOperation","blobUrl_1","data_1","globalAlpha","direction","activeObjShape","toolbar_10","update","isRotate","saved_1","cropShape","zoomState","drawEllipse","radiusX","radiusY","isEllipse","drawLine","drawRectangle","isRectangle","drawText","selectShape","isSelected","deleteShape","getShapeSetting","getShapeSettings","shapeDetailsColl","canUndo","canRedo","clear","draw","getBlob","isEmpty","load","signature","undo","redo","saveAsBlob","getLocalData","Property","Event","NotifyPropertyChanges","SignatureBase"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ej2-image-editor.min.js","sources":["../../src/image-editor/image-editor.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { 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 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 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');\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 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 var factor = this.factor;\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 this.imageOnLoad(data);\n }\n else {\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.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 var beforeSave = { cancel: false, fileName: fileName ? fileName : 'ImageEditor', fileType: type };\n var saved_1 = { fileName: fileName ? fileName : 'ImageEditor', 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 || 'ImageEditor';\n _this.toSVGImg(fileName);\n }\n else if (type.toLowerCase() === 'jpeg') {\n fileName = fileName || 'ImageEditor';\n _this.toBlobFn(fileName, type.toLowerCase());\n }\n else {\n fileName = fileName || 'ImageEditor';\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 this.setFilter(filterOption.toString());\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","ImageEditor_1","preRender","id","getUniqueID","Browser","isDevice","classList","add","themeColl","Bootstrap5","primaryColor","secondaryColor","Bootstrap5Dark","Tailwind","TailwindDark","Fluent","FluentDark","Bootstrap4","Bootstrap","BootstrapDark","Material","MaterialDark","Fabric","FabricDark","Highcontrast","defaultLocale","Crop","ZoomIn","ZoomOut","Undo","Redo","Transform","Annotation","Finetune","Brightness","Contrast","Hue","Saturation","Opacity","Blur","Sharpen","Exposure","Filter","Default","Chrome","Cold","Warm","Grayscale","BlackAndWhite","Sepia","Invert","Text","Pen","Reset","Save","Select","RotateLeft","RotateRight","HorizontalFlip","VerticalFlip","OK","Cancel","FillColor","StrokeColor","StrokeWidth","FontFamily","FontStyle","FontSize","FontColor","Pan","Move","Load","Custom","Square","Circle","Ellipse","Rectangle","Line","Bold","Italic","BoldItalic","XSmall","Small","Medium","Large","XLarge","ABC","Browse","l10n","L10n","locale","render","initialize","getModuleName","getPersistData","addOnPersist","onPropertyChanged","newProperties","oldProperties","_i","_a","keys","cssClass","removeClass","split","addClass","disabled","unwireEvent","remove","wireEvent","style","theme","updateTheme","upperContext","strokeStyle","fillStyle","finetuneSettings","updateFinetunes","destroy","removeAttribute","concat","getAttribute","destroySubComponents","innerHTML","trigger","createToolbar","createContextualToolbar","createCanvas","updateContext","lowerContext","filter","createSpinner","defaultValue","EventHandler","document","keyDownEventHandler","keyUpEventHandler","upperCanvas","mouseDownEventHandler","mouseMoveEventHandler","mouseUpEventHandler","lowerCanvas","canvasMouseDownHandler","canvasMouseMoveHandler","canvasMouseUpHandler","touchStartHandler","findTextPoint","textBox","window","addEventListener","windowResizeHandler","bind","isIos","info","name","screen","orientation","screenOrientation","initializeFilter","setBrightness","setContrast","setHue","setSaturation","setExposure","setOpacity","setBlur","inputElement","querySelectorAll","btnElement","len","contains","getComponent","detach","select","toPascalCase","str","strArr","toLowerCase","charAt","toUpperCase","slice","join","canvasWrapper","appendChild","createElement","className","attrs","offsetHeight","inMemoryCanvas","setAttribute","offsetWidth","position","backgroundColor","display","resize","getContext","baseImg","crossorigin","cursor","inMemoryContext","isNullOrUndefined","toolbar","toolbarTemplate","toolbarTemplateFn","toolbarItems","align","type","template","Uploader","push","toolbarArea","getElementById","toolbar_1","uploadItems","selected","initToolbarItem","createBottomToolbar","Toolbar","items","created","toolbarType","clicked","defToolbarClicked","createLeftToolbarControls","clientHeight","toolbar_2","updateContextualToolbar","cType","querySelector","contextualToolbarArea","left","offsetLeft","refreshSlider","initFilterToolbarItem","renderSlider","cHt","ht","top","toolbarElem","initBottomToolbar","getMainToolbarItem","renderAnnotationBtn","renderCropBtn","renderTransformBtn","refreshOverflow","templateID","toolbarFn","templateParser","isReact","isAngular","templateColl","nodeType","renderReactTemplates","templateCompiler","trim","compile","error","getLeftToolbarItem","isOkBtn","visible","tooltipText","indexOf","prefixIcon","getConstant","tempToolbarItems","processToolbar","getRightToolbarItem","isApplyOption","getZoomToolbarItem","processSubToolbar","isToolbar","leftItem","rightItem","mainItem","zoomItem","renderSaveBtn","zoomIn","zoomOut","pan","undefined","uploadDiv","uploadElem","getElementsByTagName","uploadBtnElem","onchange","fileSelect","proxy","iconCss","drpDownBtn","DropDownButton","open","args","cancelPan","parentElement","getBoundingClientRect","splitWords","isCropSelection","refreshActiveObj","clearRect","refreshToolbar","item","freeHandDraw","drawShapeText","drawShape","updateToolbarItems","calcRatio","appendTo","cropSelect","transformSelect","imageEditorObj","getInstance","saveItems","export","rotate","flip","getShapesToolbarItem","initShapesToolbarItem","createShapeColor","createShapeBtn","ColorPicker","modeSwitcher","noColor","value","showButtons","mode","change","pushActItemIntoObj","extend","pop","currentValue","hex","operation","currentObj","previousObj","redrawShape","rgba","fillDDB_1","children","toggle","inline","strokeDDB_1","background","strokeWidthItems","ratio","strokeWidthBtn","spanElem_1","drpDownBtn_1","activeBtn","textContent","parseInt","getTextToolbarItem","getFontFamilyItems","getFontSizeItems","initTextToolbarItem","createTextColor","createTextBtn","fontColor","color","temp","strokeDDB_2","setTextBoxStylesToActObj","fontNameBtn","spanElem_2","fontFamilyBtn_1","createPopupOnClick","beforeItemRender","redrawText","updateFontStyles","fontStyleBtnElem","span1Elem_1","fontStyleBtn_1","fontStyle","fontWeight","replace","applyFontStyle","fontSizeBtnElem","fontSizeSpanElem_1","fontSizes","getFontSizes","fontSizeBtn_1","textStyle","font","rows","getMaxText","measureText","parseFloat","setTextSelection","updateActiveObject","Math","round","toString","getTextAreaWidth","tempBold","tempItalic","updateObjColl","initZoomToolbarItem","contextualToolbarClicked","selEle","imageFiltering","setFilter","zoom","transform","redrawImgWithObj","setSharpness","setBlackAndWhiteFilter","j","cancelItems","okBtn","reset","unselectBtn","drawImage","selElem","crop","redrawActObj","applyActObj","callMainToolbar","sliderWrapper","slider","hdrWrapper","ej2_instances","updateAdjustment","isPreview","opacityValue","brightnessValue","values","getFilterValue","temp_1","saturate","bright","saturatePercentage","saturatePercent","getSaturationFilterValue","getDefaultFilter","setTempFilterValue","tempFilter_1","updateBrightnessFilter","autoEnablePan","tempSplitWords","setAdjustment","valueArr","setFilterValue","setSaturationFilterValue","labelWrapper","styles","min","max","getCurrAdjustmentValue","Slider","tooltip","isVisible","placement","showOn","step","setCurrAdjustmentValue","fineTuneValueChanging","finetune","isApplyBtn","isZooming","imageEditorPointsColl","topLeftCircle","clearSelection","gradient","a","applyPenDraw","tempCanvas","tempContext","lineWidth","nexP","preP","beginPath","moveTo","points","m","dx1","dx2","dy1","dy2","curP","bezierCurveTo","shift","stroke","imgData","getImageData","tempObj","index","splice","putImageData","isCropping","initPenToolbarItem","initAdjustmentToolbarItem","getAdjustmentToolbarItem","getFilterToolbarItem","getPenToolbarItem","createPenColor","createPenBtn","penColor","strokeDDB_3","spanElem_3","penStrokeWidth","getPenStroke","drpDownBtn_2","setPenStroke","createCanvasFilter","tempImageData","noFilter","ctx","chrome","cold","warm","grayscale","sepia","invert","updateCanvas","wrapperWidth","clientWidth","maxDimension","calcMaxDimension","maxWidth","maxHeight","updateInMemoryCanvas","imageOnLoad","src","onload","toBlob","blob","showSpinner","URL","createObjectURL","hideSpinner","shapeDegree","filesData","files","url","e","transformOrigin","scale","findTextTarget","getStrokeWidth","selFillElem","selStrokeElem","selTextStrokeElem","selPenStrokeElem","strokeWidthElem","fontFamilyElem","fontSizeElem","fontStyleElem","setTimer","timer","targetTouches","touches","pageX","pageY","calculateScale","endTouches","startDistance","getDistance","sqrt","preventDefault","setTimeout","currentTarget","clientX","clientY","canvasRatio","minStrokeWidth","maxStrokeWidth","velocity","mouseDownHandler","findTarget","setActivePoint","offsetTop","firstFingerX","firstFingerY","secondFingerX","secondFingerY","setCursor","initialDraw","updateActivePoint","drawObject","bbox","setPanPoints","tempObjColl","applyCurrActObj","shapeChangingArgs","beforeSave","fileName","fileType","cancel","ctrlKey","observableSaveArgs","stopImmediatePropagation","action","previousShapeSettings","currentShapeSettings","textKeyDown","offsetX","offsetY","transformedPoint","drawPanImg","String","fromCharCode","which","scrollHeight","setTextBoxWidth","adjustToScreen","redrawImg","pt","transitionArgs","startPoint","endPoint","xDiff","yDiff","xxDiff","yyDiff","translate","pt1","pt2","redraw","xform","DOMMatrix","getTransform","savedTransforms","save","restore","sx","sy","scaleNonUniform","radians","PI","dx","dy","f","m2","multiply","setTransform","DOMPoint","matrixTransform","inverse","m11","m12","m13","m14","m21","m22","m23","m24","zoomImg","clicks","zoomPoint","zoomLevel","pow","handleScroll","delta","wheelDelta","detail","p1","p2","isInside","actObj","setCursorForZoomState","floor","ceil","horTopLine","updateTextFromTextArea","widthColl","setTextBoxPos","point","setTextBoxPoints","shapeFlip","JSON","stringify","radius","border","overflow","setTextBoxHeight","textBoxTop","textBoxWidth","letterWidth","textWidth","textHeight","abs","selectInfo","shapeResizingArgs","shapeMovingArgs","updateNWPoints","updateNPoints","updateNEPoints","updateWPoints","updateEPoints","updateSWPoints","updateSPoints","updateSEPoints","percentage","prevDiffX","prevDiffY","maxText","newScale","getScaleRatio","isTextBox","maxi","maxStr","setDragLimit","lineDraw","shapeCircle","canvasDraw","selectionWidth","selectionHeight","fillRect","tempWidth","ellipse","closePath","arc","clip","drawOuterSelection","isInitialDraw","isCropCircle","getZoomShape","rect","topRightCircle","bottomLeftCircle","bottomRightCircle","fill","drawCenterCircles","obj","canvas","isCropRatio","drawCropRatio","isCrop","drawShapeObj","actPoint","isMouseMove","horCircleWidth","verCircleHeight","horBottomLine","verLeftLine","verRightLine","topCenterCircle","centerLeftCircle","centerRightCircle","bottomCenterCircle","currentShape","horLineWidth","verLineHeight","drawSquareLines","shapeLine","shapeText","drawSelection","tempLineWidth","lineTo","lineHeight","yPoint","updateActPoint","rotateText","fillText","k","horTopInnerLine","horBottomInnerLine","verLeftInnerLine","verRightInnerLine","findTargetObj","updateCursorStyles","diffX","data","currImgData","getSharpenData","getBlackAndWhiteData","flippedText","isResize","setDragDirection","calcShapeRatio","arcRadius","visibleWidth","visibleHeight","centerX","centerY","originalWidth","originalHeight","presetRatio","standardSize","scaleWidth","getScale","snippetArray","scaleHeight","snippetArray1","originalValue","widthRatio","heightRatio","canvasMaxWidth","canvasMaxHeight","widthScale","heightScale","cssMaxWidth","cssMaxHeight","setMaximumDimension","newWidth","newHeight","setCursorFromObj","downloadImg","href","download","body","documentElement","click","parentNode","removeChild","toSVGImg","dataUrl","toDataURL","svg","createElementNS","img","setAttributeNS","svgDataUrl","btoa","toBlobFn","blobUrl","addLetter","letter","calcPrevRatio","oldWidthRatio","oldHeightRatio","textFlipDegree","redrawSelection","redrawObj","updateCurrentActiveObjPoint","currActObjIndex","oldRatio","currIndex","calcCurrPoints","isActObj","splitWords_2","proxy_1","setCenterPoints","renderWidth","renderHeight","start","tempHeight","drawPen","context","getObjDetails","shapeDetails","isPointsInRange","inRange","updateInMemoryContext","isUpdate","clearActObj","rotateMultiple","boolean","replaceBWSharpenData","tempDegree","tempFlipState","imageData","updateBWSharpness","g","dstOff","scx","scy","srcOff","wt","cx","cy","weights","side","halfSide","sw","sh","output","createImageData","dst","filterValue","colour","proxy_2","tempActObj","zoomedRotate","cssObj","getComputedStyle","imgData_1","globalCompositeOperation","blobUrl_1","globalAlpha","direction","activeObjShape","proxy_3","toolbar_11","update","isRotate","length_1","saved_1","cropShape","freehandDraw","panBtn","drawEllipse","radiusX","radiusY","isEllipse","drawLine","drawRectangle","isRectangle","drawText","selectShape","isSelected","deleteShape","getShapeSetting","getShapeSettings","shapeDetailsColl","applyImageFilter","filterOption","finetuneImage","finetuneOption","canUndo","canRedo","clear","draw","getBlob","isEmpty","load","signature","undo","redo","saveAsBlob","getLocalData","Complex","Event","NotifyPropertyChanges","SignatureBase"],"mappings":"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"}
|