@syncfusion/ej2-image-editor 20.3.47 → 20.3.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- 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 +234 -56
- package/dist/es6/ej2-image-editor.es2015.js.map +1 -1
- package/dist/es6/ej2-image-editor.es5.js +234 -56
- 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 +10 -10
- package/src/image-editor/image-editor-model.d.ts +93 -0
- package/src/image-editor/image-editor.d.ts +184 -1
- package/src/image-editor/image-editor.js +234 -56
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-image-editor.umd.min.js","sources":["../src/image-editor/image-editor.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { NotifyPropertyChanges, Property, addClass, removeClass, extend } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, getComponent, getInstance, isNullOrUndefined, L10n, getUniqueID } from '@syncfusion/ej2-base';\nimport { SignatureBase } from '@syncfusion/ej2-inputs';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { ColorPicker, Uploader } 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.zoomedImg = { startX: 0, startY: 0, endX: 0, endY: 0, width: 0, height: 0 }; // calculates zoomed image's points\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.zoomedImg.width = this.baseImg.width;\n this.zoomedImg.height = this.baseImg.height;\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 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 (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 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 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 this.adjustToScreen();\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 this.setTextBoxWidth();\n this.setTextBoxHeight();\n if (degree % 90 === 0 && degree % 180 !== 0 && degree !== 0) {\n if (this.factor === 1) {\n this.textBox.style.height = (actObj.activePoint.width / ratio.width) + 'px';\n }\n else {\n this.textBox.style.height = actObj.activePoint.width + 'px';\n }\n }\n else {\n if (this.factor === 1) {\n this.textBox.style.height = (actObj.activePoint.height / ratio.height) + 'px';\n }\n else {\n this.textBox.style.height = actObj.activePoint.height + 'px';\n }\n }\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 = ((this.lowerCanvas.height - (this.lowerCanvas.height - actObj.activePoint.endY)) / ratio.height) + 'px';\n }\n else {\n textBoxTop = parseFloat(this.textBox.style.top) - parseFloat(this.lowerCanvas.style.top);\n this.textBox.style.maxHeight = ((this.lowerCanvas.height / ratio.height) - textBoxTop) + 'px';\n }\n }\n else if (degree === 90) {\n if (flip.toLowerCase() === 'horizontal') {\n this.textBox.style.maxHeight = ((this.lowerCanvas.width - actObj.activePoint.startX) / ratio.width) + 'px';\n }\n else {\n this.textBox.style.maxHeight = ((this.lowerCanvas.width - (this.lowerCanvas.width - actObj.activePoint.endX)) / ratio.width) + 'px';\n }\n }\n else if (degree === 180) {\n if (flip.toLowerCase() === 'vertical') {\n this.textBox.style.maxHeight = ((this.lowerCanvas.height - actObj.activePoint.startY) / ratio.height) + 'px';\n }\n else {\n this.textBox.style.maxHeight = ((this.lowerCanvas.height - (this.lowerCanvas.height - actObj.activePoint.endY)) / ratio.height) + 'px';\n }\n }\n else if (degree === 270) {\n if (flip.toLowerCase() === 'horizontal') {\n this.textBox.style.maxHeight = ((this.lowerCanvas.width - (this.lowerCanvas.width - actObj.activePoint.endX)) / ratio.width) + 'px';\n }\n else {\n this.textBox.style.maxHeight = ((this.lowerCanvas.width - actObj.activePoint.startX) / ratio.width) + 'px';\n }\n }\n this.textBox.style.maxHeight = ((parseFloat(this.textBox.style.maxHeight) - parseFloat(this.textBox.style.fontSize) * 0.5)) * this.factor + 'px';\n };\n ImageEditor.prototype.setTextBoxWidth = function (e) {\n var ratio = this.calcRatio();\n var text = this.getMaxText(true);\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 (actObj.activePoint.endX - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = ((textBoxWidth + letterWidth) / ratio.width) + 'px';\n }\n }\n else {\n if (textBoxWidth + letterWidth + actObj.activePoint.startX < this.lowerCanvas.width) {\n this.textBox.style.width = ((textBoxWidth + letterWidth) / ratio.width) + 'px';\n }\n }\n }\n else if (degree === 90) {\n if (flip.toLowerCase() === 'vertical') {\n if (actObj.activePoint.endY - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = ((textBoxWidth + letterWidth) / ratio.height) + 'px';\n }\n }\n else {\n if (textBoxWidth + letterWidth + actObj.activePoint.startY < this.lowerCanvas.height) {\n this.textBox.style.width = ((textBoxWidth + letterWidth) / ratio.height) + 'px';\n }\n }\n }\n else if (degree === 180) {\n if (flip.toLowerCase() === 'horizontal') {\n if (textBoxWidth + letterWidth + actObj.activePoint.startX < this.lowerCanvas.width) {\n this.textBox.style.width = ((textBoxWidth + letterWidth) / ratio.width) + 'px';\n }\n }\n else {\n if (actObj.activePoint.endX - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = ((textBoxWidth + letterWidth) / ratio.width) + 'px';\n }\n }\n }\n else if (degree === 270) {\n if (flip.toLowerCase() === 'vertical') {\n if (textBoxWidth + letterWidth + actObj.activePoint.startY < this.lowerCanvas.height) {\n this.textBox.style.width = ((textBoxWidth + letterWidth) / ratio.height) + 'px';\n }\n }\n else {\n if (actObj.activePoint.endY - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = ((textBoxWidth + letterWidth) / ratio.height) + 'px';\n }\n }\n }\n this.textBox.style.width = parseFloat(this.textBox.style.width) * this.factor + 'px';\n if (isNullOrUndefined(e)) {\n this.textBox.style.width = parseFloat(this.textBox.style.width) + parseFloat(this.textBox.style.fontSize) + 'px';\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 () {\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 = 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 (isZoomed) {\n var ratio = this.calcRatio();\n if (isZoomed) {\n this.activeObj.activePoint.startX = (this.lowerCanvas.width - this.zoomedImg.width) / 2;\n this.activeObj.activePoint.startY = (this.lowerCanvas.height - this.zoomedImg.height) / 2;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.zoomedImg.width;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.zoomedImg.height;\n this.activeObj.activePoint.width = this.zoomedImg.width;\n this.activeObj.activePoint.height = this.zoomedImg.height;\n }\n else {\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 }\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 this.update();\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('circle', 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 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 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","zoomedImg","width","height","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","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","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","clientX","clientY","touches","canvasRatio","minStrokeWidth","maxStrokeWidth","velocity","mouseDownHandler","findTarget","setActivePoint","setCursor","initialDraw","updateActivePoint","drawObject","bbox","currentTarget","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","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","Property","Event","NotifyPropertyChanges","SignatureBase"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ej2-image-editor.umd.min.js","sources":["../src/image-editor/image-editor.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { 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","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","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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"}
|